Internet das Coisas: Programação Física com Arduíno - #challengecommunityweek
- #Programação para Internet
- #IoT
Qual o conteúdo que você tinha maior dificuldade e hoje, pode se considerar um expert? #challengecommunityweek
Dado o desafio da Community Week “Qual o conteúdo que você tinha maior dificuldade e hoje, pode se considerar um expert?” resolvi falar um pouco sobre minha experiência com a Internet das Coisas e a programação física com o Arduíno. Não me considero uma expert, mas é um assunto em que tive bastante dificuldade no começo, mas hoje é uma das minhas paixões. #challengecommunityweek
Iniciei meu interesse pela área de Internet das Coisas na faculdade com um projeto de iniciação científica, do qual se torno meu projeto de conclusão de curso, o famoso TCC. Desde então tem sido uma área da qual sou entusiasta e amo falar sobre. O início, como quase todo início, não foi fácil, dado que é um paradigma bem diferente do que normalmente é apresentado durante a minha graduação (Analise e Desenvolvimento de Sistemas), mas apesar de tudo, é empolgante o processo de aprendizagem.
Nesse artigo farei uma breve introdução a Internet das Coisas, ao Arduíno e a ferramenta Tinkercad, que será usada para a simulação dos circuitos criados aqui. Depois colocaremos a mão na massa para darmos início no mundo da programação física.
Todos os exemplos de código mostrados foram desenvolvidos por mim no processo de aprendizado e o que me ajudou a fixar meu conhecimento. Deixarei por último algumas recomendações de curso e materiais para consumir, caso haja interesse. Então, vamos lá?
Sumário
1. Internet das Coisas
2. O que é o Arduíno
3. Tinkercad, uma plataforma de simulação
4. O “Hello World” da programação física
5. A Protoboard
6. Blink, um pouco mais a fundo
7. Brincando com o buzzer (fazendo músicas)
8. Conclusão
9. Recomendações
Internet das Coisas
Com um mundo cada vez mais globalizado e a tecnologia se renovando e evoluindo constantemente é comum nos depararmos com novos termos surgindo e tomando espaço. A IoT do inglês Internet of Things, que se traduz como Internet das Coisas, é considerada um novo paradigma tecnológico, uma extensão da internet atual, que possibilita que objetos do cotidiano com capacidade computacional e de comunicação conectar-se à Internet.
Mônica Mancini em seu artigo “Internet das Coisas: História, conceitos, aplicações e desafios” explica que por meio dessa conexão é possível controlar remotamente os objetos, tornando-os provedores de serviços, assim fazendo-os objetos inteligentes. Essa comunicação também viabiliza o registro contínuo de dados sobre o estado desses objetos durante o seu uso, mediante o uso de sensores, permitindo uma resposta aos dados recebidos, o que deixa visível a diferença básica de um objeto inteligente para um objeto qualquer conectado à Internet.
A aplicabilidade disso abre um mundo de possibilidades, podemos ver exemplos de IoT na saúde, transporte e agricultura, entre muitas outras áreas. Um exemplo disso são pedágios inteligentes, que fazem a cobrança automática com base na implementação utilizando sensores como RFID. Automações residenciais, que podem ajustar a temperatura de um ar-condicionado, por exemplo, com base nos valores capturados da temperatura do ambiente, ou desligar e ligar luzes com base na luminosidade ou horário.
Esses pequenos exemplos nos mostra o mar de possibilidades e é um incentivo para o despertar do interesse na área.
O que é o Arduíno
O Arduíno trata-se de uma plataforma de desenvolvimento de sistemas embarcados de baixo custo aberta e livre. O módulo mais comum é o Uno, baseado no microcontrolador da Atmel (ATmega328), mas podemos encontrar diversas versões dele disponível no mercado. O Arduíno contém também uma IDE, Integrated Development Environment ou Ambiente de Desenvolvimento Integrado, que é responsável pela compilação e upload da solução para a plataforma física.
O Arduíno Uno possui 14 (quatorze) pinos de entrada/saída digital, dos quais 6 (seis) podem ser usadas como PWM (do inglês, Pulse Width Modulation), um cristal oscilador de 16 (dezesseis) MHz, conexão USB, entrada de alimentação, conexão ICSP (do inglês, In-Circuit Serial Programming) e botão de reset, exemplificados na Figura 1. O Arduíno pode comunicar-se facilmente com um computador, permitindo uma codificação versátil e vasta, baseada nas linguagens de programação C/C++, para os mais diversos usos e necessidades.
O Arduíno simula as saídas analógicas por meio do PWM, que trata-se de técnica de variação de comprimento da onda e podemos identificar essa saída por meio do indicador na placa, que é o caractere “~” na frente do número da placa. Na Figura 2 podemos elucidar a simulação dessa técnica. O entendimento disso é importante, pois todas as saídas do Arduíno são digitais, ou seja, retornam 0 e 1 e a utilização de componentes analógicos com o Arduíno é por meio dessa técnica.
Figura 1. O Arduíno. Fonte: Professora Keila https://www.professorakeila.com.br/
Figura 2. Comprimento de onda PWM. Fonte: https://www.arduino.cc/en/Tutorial/Foundations/PWM
Eduardo de Castro Quintino nos mostra as funcionalidades da IDE Arduíno em seu artigo “O que é IDE Arduíno”, em um breve resumo, explicando a Figura 3, vamos as funcionalidades:
Verificar - Responsável por validar a sintaxe do seu código, ele compila e verifica erros de escrita. Importante ressaltar que erros de lógica não serão identificados durante esse processo.
Carregar - O seu código também será verificado/compilado. Mas nesse caso, se houver um Arduíno conectado via USB e setado na ferramenta ele fará o upload do código para a plataforma, que ao final estará com a programação desenvolvida.
Novo - Abre um novo sketch em branco para criação de um novo código.
Abrir - Abre um sketch que pode ser dos seus arquivos ou um dos exemplos que já estão na IDE do Arduíno ou nas bibliotecas instaladas.
Salvar - Salva as alterações feitas no sketch.
Monitor Serial - Pode-se imaginar como um console. Quando executamos um código em Java, por exemplo, conseguimos utilizar um console para imprimir valores, que usamos normalmente para depuramos códigos, com o Arduíno não é diferente, por meio do Monitor Serial fazemos um elo entre o computador e o Arduíno e então podemos imprimir valores enviados pelo Arduíno.
Figura 3. Arduíno IDE. Fonte: https://www.filipeflop.com/blog/o-que-e-ide-arduino/
Tinkercad, uma plataforma de simulação
O Tinkercad é um programa de modelagem que roda sobre a plataforma WEB e é online e gratuito. Ele possuí integrado em suas funcionalidades um simulador de circuitos que possibilita que você aprenda programação física sem a necessidade de possuir os componentes, o que facilita a vida, né?
Como mostrado na Figura 4 a plataforma possui uma seção para a codificação, uma lista de componentes e um botão para iniciar uma simulação. Então possui as funcionalidades essenciais que vimos na plataforma de desenvolvimento do Arduíno. Então iremos utilizá-la durante os exemplos, para tornar o aprendizado acessível.
Figura 4. Página de Circuito do Tinkercad. Fonte: Próprio Autor.
O “Hello World” da programação física
Como falado anteriormente, a linguagem suportada pelo Arduíno é o C/C++, então vamos entender um pouco como funciona a programação dentro da plataforma Arduíno.
Todo programa para Arduíno possuem duas funções, a setup() e a loop(). A função setup() é responsável por inicializar variáveis, constantes e/ou componentes. Códigos que precisam ser inicializados uma única vez são atribuídas a essa função. Já a função loop() é responsável pela lógica do seu circuito e, como o próprio nome sugere, é executada em um loop, que gera a rotina do seu sistema.
O “Hello World” da programação física é conhecida como “Blink” e nele usamos o LED embutido do próprio Arduíno para piscas constantemente. Por padrão todo Arduíno vem com o LED embutido na porta 13, então no código abaixo setamos com a função pinMode a porta 13 como uma saída, que é definida pela palavra reservada “OUTPUT” na função setup(). Já na função loop() inserimos a lógica da rotina, onde pela palavra reservada “HIGH” definimos que o LED será ligado e pela palavra reservada “LOW” desligamos o LED, tudo isso por meio da função digitalWrite(), onde informamos por parâmetro a porta que utilizaremos, que foi setada anteriormente como saída, e a ação tomada, que será ligar ou desligar. Entre cada interação damos um delay de 1 milissegundo com a função delay(), que recebe como parâmetro o valor em milissegundo que desejamos esperar.
Todas as funções utilizadas nesse código são nativas da plataforma Arduíno.
void setup() {
pinMode(13, OUTPUT); // Pino do LED
}
void loop(){
digitalWrite(13, HIGH); // Liga o LED
delay(1000); // Espera por 1 segundo
digitalWrite(13, LOW); // Desliga o LED
delay(1000); // Espera por 1 segundo
}
Para visualizar a sumulação, acesse: https://www.tinkercad.com/things/60l2T0i28ff
Figura 5. Passo a passo para a simulação. Fonte: Próprio Autor.
A Protoboard
A protoboard é uma matriz de contato que é utilizada para montagem de circuitos eletrônicos. O intuito dela é facilitar a criação de protótipos e organização de circuitos. Como mostrado na Figura 6 ela possui barramentos verticais, que são utilizados para fazer conexões entre componentes e barramentos horizontais, que são utilizados para a alimentação dos componentes, possuindo o polo positivo e negativo.
Figura 6. A Protoboard. Fonte: https://portal.vidadesilicio.com.br/protoboard/.
Blink, um pouco mais a fundo
Agora vamos avançar um pouco mais e adicionar componentes ao Arduíno. Nesse caso utilizarmos 2 (dois) LEDs. Na Figura 7 vemos um LED vermelho e podemos observar que o mesmo possui duas hastes metálicas de tamanhos diferentes, que são responsáveis por conectá-lo a placa. A diferença de tamanho das hastes servem para facilitar a identificação dos polos, sendo a haste maior o polo positivo e a menor o negativo.
Figura 7. LED vermelho. Fonte: Próprio Autor.
Agora utilizaremos a protoboard para organizar melhor os componentes. E para facilitar a leitura do código utilizaremos variáveis globais, que são definidas fora das funções principais setup() e loop(). Conectarmos os LEDs verde e vermelho nas portas 11 e 13, respectivamente. E faremos o blink intercalando cada interação com os LEDs. Os polos positivos que são controlados pelo Arduíno, porta 11 e 13, são conectados aos polos positivos dos LEDs, e os polos negativos dos LEDs são conectados ao GND do Arduíno, como mostra a Figura 8.
Para visualizar a sumulação, acesse: https://www.tinkercad.com/things/22ggfUiXZwj
Figura 8. Circuito Blink. Fonte: Próprio Autor.
int LED_VERDE = 11; // Variavel global, associando o pino do led verde (11) a variavel
int LED_VERMELHO = 13; // Variavel global, associando o pino do led vermelho (13) a variavel
void setup() {
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
}
void loop() {
digitalWrite(LED_VERMELHO, HIGH);
delay(1000); // Espera por 1 segundo
digitalWrite(LED_VERMELHO, LOW);
delay(1000);
digitalWrite(LED_VERDE, HIGH);
delay(1000);
digitalWrite(LED_VERDE, LOW);
delay(1000);
}
Brincando com o buzzer (fazendo músicas)
Agora vamos brincar um pouco com o buzzer. O buzzer é um componente eletrônico que converte pulsos elétricos em ondas sonoras. Com base na frequência enviada é possível simular sons diferentes. No código abaixo definimos algumas notas as frequências, para facilitar o entendimento do código. Setamos na função setup() o pino 10 como saída e na função loop() brincamos utilizando a função tone() passando como parâmetro o valor do pino, a frequência que será tocada, que é responsável por definir a nota e a duração da sua execução em milissegundos.
Para visualizar a sumulação, acesse: https://www.tinkercad.com/things/kBvUw3MBBrT
Figura 9. Circuito Buzzer. Fonte: Próprio Autor.
#define DOH 262
#define RE 294
#define MI 330
#define FA 349
#define SOL 392
#define LA 440
#define SI 494
#define PINO 10
void setup() {
pinMode(10, OUTPUT); //Pino do buzzer
}
void loop() {
delay(2000);
tone(PINO, DOH, 200); //DO
delay(200);
tone(PINO, RE, 300); //RE
delay(200);
tone(PINO, MI, 300); //MI
delay(200);
tone(PINO, FA, 300); //FA
delay(300);
tone(PINO, FA, 300); //FA
delay(300);
tone(PINO, FA, 300); //FA
delay(300);
tone(PINO, DOH, 100); //DO
delay(200);
tone(PINO, RE, 300); //RE
delay(200);
tone(PINO, DOH, 100); //DO
delay(200);
tone(PINO, RE, 300); //RE
delay(300);
tone(PINO, RE, 300); //RE
delay(300);
tone(PINO, RE, 300); //RE
delay(300);
tone(PINO, DOH, 200); //DO
delay(200);
tone(PINO, SOL, 200); //SOL
delay(200);
tone(PINO, FA, 200); //FA
delay(200);
tone(PINO, MI, 300); //MI
delay(300);
tone(PINO, MI, 300); //MI
delay(300);
tone(PINO, MI, 300); //MI
delay(300);
tone(PINO, DOH, 200); //DO
delay(200);
tone(PINO, RE, 300); //RE
delay(200);
tone(PINO, MI, 300); //MI
delay(200);
tone(PINO, FA, 300); //FA
delay(300);
tone(PINO, FA, 300); //FA
delay(300);
tone(PINO, FA, 300); //FA
delay(300);
}
Conclusão
Com base nos exemplos dados podemos observar como é divertido aprender programação com uso do Arduíno, por esse motivo é comum vermos a plataforma sendo utilizada para o ensino de programação com crianças. A plataforma Tinkercad torna o aprendizado mais acessível, dado que só necessitamos de um computador e acesso à internet para começarmos a aprender, sem a necessidade de possuir os componentes físicos. Então como recomendação deixarei os cursos que me ajudaram na minha evolução e aprendizado e também alguns artigos.
Espero ter desmistificado um pouco o uso da plataforma e que incentive o aprendizado de vocês. ✨🚀
Recomendações
Recomendações de cursos
- Plataforma CodeIoT: http://codeiot.org.br/
- Introdução à Internet das Coisas - https://codeiot.org.br/courses/course-v1:LSI-TEC+IOT101+2021_OC/about
- Eletrônica: conceitos e componentes básicos - https://codeiot.org.br/courses/course-v1:LSI-TEC+IOT103+2021_OC/about
- Programação física com Arduíno - https://codeiot.org.br/courses/course-v1:LSI-TEC+IOT104+2021_OC/about
Recomendação de repositório
- Repositório de códigos para iniciantes: https://github.com/felurye/introducao-a-IoT-com-Arduíno
Recomendação de livros e artigos
- Internet das Coisas com ESP8266, Arduino e Raspberry Pi – Sérgio de Oliveira
- O que é IDE Arduino? - Eduardo de Castro Quintino – filipeflop.com/blog/o-que-e-ide-arduino/
- Usando as saídas PWM do Arduino - Fábio Souza - https://www.embarcados.com.br/pwm-do-arduino/
- O que é o Arduino, e como integrá-lo ao BIM? - https://spbim.com.br/o-que-e-o-arduino-e-como-integra-lo-ao-bim/
Sites
- Professora Keila - https://www.professorakeila.com.br/