Arduino I - Deivison charles
Material teórico
Leiaut Carielo – Escola de informática com eletrônica 1
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Apresentação
Por que aprender a programar?
Hoje em dia quase todo circuito eletrônico inteligente é provido de programação, ou
seja, neste circuito foi introduzido um algoritmo de programação em uma determinada
linguagem, e isso permite a manipulação em vários níveis diferentes do mesmo
circuito.
Aquele micro-ondas com visor digital que você faz pipoca, tem programação. Ou
mesmo o painel do carro (os mais modernos) com várias funções como: inclinação do
carro, configurações de portas abertas e aquela função que para o carro caso o
motorista estiver sem cinto, isso tudo envolve programação. Uma serie de passos e
instruções implementadas em um circuito eletrônico nos permite tudo isso e muito
mais.
Iremos então estudar neste material o funcionamento da programação numa placa
micro controladora chamada Arduino que é de código aberto, ou seja podemos
modificar alterar o código-fonte sem nenhum problema.
Leiaut Carielo – Escola de informática com eletrônica 2
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Sumário
INTRODUÇÃO 4
ARDUINO 5
PROTOBOARD 16
LÓGICA DE PROGRAMAÇÃO 22
ALGORITMO 23
IDE 24
INTERFACE ARDUINO 25
TIPOS DE DADOS 29
VARIÁVEIS 31
MÉTODOS 33
FUNÇÕES
PINMODE() 35
DIGITALWRITE() 35
DIGITALREAD() 36
CONSTANTES 37
OPERADORES 38
ESTRUTURAS 40
ESTRUTURAS IMPERATIVAS 41
ESTRUTURAS CONDICIONAIS 48
ESTRUTURAS DE SELEÇÃO 55
ESTRUTURAS REPETITIVAS 57
CONSIDERAÇÕES FINAIS 68
BIBLIOGRAFIA 69
MATERIAL PRÁTICO 70
Leiaut Carielo – Escola de informática com eletrônica 3
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
INTRODUÇÃO
Olá, neste material iremos estudar os fundamentos da programação, tal como
lógica e algoritmo, veremos também a sintaxe de programação referente ao
Arduino.
Através desse material você compreenderá as estruturas lógicas da
programação e o seu funcionamento voltado para o Arduino, serão abordadas
as estruturas imperativas, de seleção, condicional, e repetitivas onde teremos
em cada uma delas funções específicas para várias situações que iremos ver
ao decorrer do curso de Arduino.
Para que você entenda todo o material é essencial ter concentração e foco no
assunto, pois estaremos trabalhando com “mecanismos virtuais” de
programação onde não estaremos vendo necessariamente o que está
acontecendo, mas precisamos entender que realmente acontece e funciona.
Absorver a lógica e o conceito daquilo que estamos fazendo é o mais
importante.
Leiaut Carielo – Escola de informática com eletrônica 4
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Arduino
• O que é o Arduino?
É uma plataforma eletrônica de código aberto com um micro controlador de
processamento para sistemas embarcados, o Arduino é uma placa controladora que pode ser
programada através de um computador para controlar os mais diversos tipos de componentes
e até equipamentos, permitindo qualquer um fazer desde um simples painel de led até um
robô mais complexo, automação residencial, drones ou qualquer outra coisa que você
imaginar. Com o Arduino é possível fazer qualquer tipo de sistema eletrônico para controlar
qualquer coisa.
A linguagem de programação do Arduino é baseada em C/C++ e usa os frameworks da
Wiring que é um conjunto de bibliotecas contendo códigos para programar exclusivamente,
sistemas embarcados e micro controladores.
Neste curso estaremos aprendendo o Arduino, porém existem muitos outros micros
controladores como o Raspberry Pi, BeagleBone que são um pouco mais potentes, porém de
custo mais elevado.
• Por que sistemas embarcados?
Nas plataformas de sistemas embarcados o algoritmo programado para uma
determinada função, um semáforo por exemplo, é enviado para placa e todo o sistema é
encapsulado o que significa que para alterar o código de um determinado sistema é preciso
reescrever todo o algoritmo. Nas placas de sistemas embarcados o sistema operacional é o
próprio algoritmo que é enviado para a placa, todo esse sistema é dedicado a funcionalidade
da placa/circuito apenas, por esse motivo nos referimos ao sistema como um sistema
embarcado, pois o algoritmo embarcado no circuito da placa serve apenas para um
determinado fim projetado naquele circuito/placa.
Exemplos de sistemas embarcados: Letreiros digitais, Semáforos, luzes de pisca de natal.
Nesses sistemas o código já está carregado em um circuito/placa que controlará os
leds/lâmpadas de acordo com o que foi programado, e esse sistema executa sempre a mesma
rotina uma vez que seu código para ser alterado precisa ser reescrito.
Basicamente nos sistemas embarcados o código escrito para uma determinada funcionalidade
é enviado para a placa, e é executado continuamente até que seja substituído por outro.
Leiaut Carielo – Escola de informática com eletrônica 5
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Modelos
Atualmente existem vários modelos de Arduino e outras placa similares, porém os modelos
que iremos aprender a utilizar neste curso são os modelos Arduino UNO e Arduino Mega 2560.
v Arduino UNO
Portas de
Portas digitais comunicação
Chip/CI
controlador
Suprimento Portas
de energia analógicas
Esta é a placa Arduino modelo UNO, vamos explicá-la por parte.
Leiaut Carielo – Escola de informática com eletrônica 6
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Portas digitais
Nesta sessão temos as portas que serão usadas para manipular componentes digitais,
algumas poderão usar a função PWM ou pulso por modulação que é uma simulação de um
sinal analógico.
PWM - As portas 3,5,6,9,10 e 11 são portas PWM, aquelas que citamos anteriormente que
podem simular um sinal analógico, repare que ao lado dessas portas tem um tio (~) isso indica
que elas são PWM.
GND Aref - Logo após a ultima porta que é a 13 temos ainda as portas GND e Aref, o que seria
GND? GND é a abreviação de Ground que por sua vez significa terra em inglês, logo essas
portas servirão de neutro para fechar a ligação do circuito que estivermos montando no
Arduino.
Aref - Já a porta Aref é uma porta para referência analógica para indicar a tensão de referência
para o conversor Analógico/Digital do Arduino que atua nas portas analógicas traduzindo os
vários estados dos sensores analógicos para números inteiros entre 0 e 1023.
Portas analógicas
As portas analógicas do Arduino trabalham com um conversor A/D (Analógico para
Digital) internamente para converter os valores analógicos dos componentes analógicos para
valores digitais, por esse motivo é possível medir com precisão os estados dos componentes
analógicos conectados no Arduino. O conversor A/D do Arduino trabalha com uma tensão de
referência padrão que é de 5V, logo os sensores conectados as portas analógicas são
referenciados como tendo tensão igual a 5V.
Os componentes analógicos não enviam valores para o Arduino, esses componentes
variam a energia que passa por eles de acordo com os fatores externos EX: O sensor de luz é
um resistor dependente de luz, isso significa que seu valor resistivo depende da quantidade de
luz que é projetada sobre o sensor, permitindo assim passar mais ou menos corrente elétrica
pelo sensor.
Essa corrente que passa pelo sensor pode ser aferida pelo Arduino através do conversor A/D e
nos retornar um valor inteiro entre 0 e 1023 de acordo com a variação lida do sensor, o valor
indo de 0 a 1023 é equiparado com a tensão de 0 a 5V ou seja 0 representa 0V e 1023
representa 5V, logo 512 representa 2,5V. Se estivermos trabalhando com um sensor de
temperatura que opera com 2V devemos referenciar 2V na porta Aref para que o Arduino
possa entender que a tensão máxima de operação do componente é de 2V e fornecer os
valores de saída (0-1023) corretamente.
Leiaut Carielo – Escola de informática com eletrônica 7
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Portas de comunicação
TX RX - As portas 0 e 1 são portas de comunicação para transferência de dados e serão usadas
em componentes específicos apenas, como um sensor Bluetooth por exemplo. Essas portas
permitem enviar e receber dados de um determinado componente que pode estar ligado a
internet ou conectado a um smartphone.
A4 A5 - As portas analógicas 4 e 5 podem ser usadas também para comunicação L2C (veremos
mais adiante) onde a porta A4 é SDA e a porta A5 é SCL, veremos mais adiante o que significa
isso e para que serve esse protocolo de comunicação.
Suprimento de energia
As portas para suprimento de energia fornecem referencias sobre a tensão de entrada e saída
do Arduino e servem também para alimentar componentes que necessitam de uma
alimentação.
IOREF - Esta porta indica a tensão de entrada/saída do Arduino leia-se Input Output Reference
ou referência de entrada e saída, essa porta serve apenas de referência.
Reset - Esta porta serve para resetar/reiniciar o micro controlador e substitui o botão de reset
na placa. Para resetar a placa através dessa porta basta mandar o sinal de LOW para a mesma.
3v3 - Fornece 3,3v de alimentação para componentes.
5v - Fornece 5v de alimentação para componentes.
Portas GND servem de terra.
VIN - Essa porta fornece alimentação a partir de uma fonte externa conectada ao Arduino, por
exemplo, se você estiver usando uma fonte de alimentação de 12V para alimentar o Arduino
na porta VIN você terá os mesmos 12V disponíveis na porta VIN, você poderá usar essa porta
para alimentar componentes que necessitem de uma tensão maior que 5V.
Leiaut Carielo – Escola de informática com eletrônica 8
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Especificações técnicas
Micro controlador ATmega328P
Tensão de operação 5V
Tensão de entrada (recomendada) 7-12V
Tensão de entrada (limite) 6-20V
14 (das quais 6
Portas Digitais I/O
proporcionam saída PWM)
Portas PWM 6
Portas analógicas 6
Corrente DC por porta Digital 20 mA
Corrente DC para a porta 3v3 50 mA
32 KB (ATmega328P)
Memoria flash¹ dos quais 0.5 KB são usados
pelo bootloader
SRAM² 2 KB (ATmega328P)
EEPROM³ 1 KB (ATmega328P)
Velocidade do Processador 16 MHz
Led acoplado 13
Comprimento 68.6 mm
Largura 53.4 mm
Peso 25 g
¹ Armazenamento do Arduino. Onde o Sketch (código) fica gravado/armazenado.
² SRAM (static random access memory) é onde o Sketch (código) cria e manipula as
variáveis quando o mesmo está sendo executado.
³ EEPROM é uma memoria onde os programadores podem usar para guardar
informações de longo termo.
Memoria Flash e EEPROM são memórias não voláteis as informações gravadas nelas uma vez
continuam lá mesmo quando o Arduino é desligado.
SRAM é uma memória volátil e toda informação que passa por ela é perdida quando a placa é
desligada.
• O chip controlador ATmega328 encontrado no Arduino tem as seguintes
especificações de memoria:
Memoria Flash 32k bytes (dos quais 0.5 KB são usados para o bootloader)
SRAM 2k bytes
EEPROM 1k byte
Leiaut Carielo – Escola de informática com eletrônica 9
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Documentação
Toda a documentação da placa Arduino modelo UNO você pode encontrar no endereço abaixo
www.arduino.cc/en/Main/ArduinoBoardUno
Leiaut Carielo – Escola de informática com eletrônica 10
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
v Arduino MEGA 2560
Suprimento Chip/CI
de energia controlador Portas digitais
Portas
analógicas Portas de
comunicação
GND 5V
Portas digitais
No Arduino modelo MEGA 2560 temos uma quantidade maior de portas, permitindo conectar
mais componentes a placa viabilizando a construção de um projeto maior.
Todas as portas no modelo MEGA se comportam de mesmo modo que no modelo UNO com
uma vantagem em relação as portas que fazem a comunicação L2C, onde no UNO essas portas
(SDA e SCL) são interpretadas pelas portas analógicas A4 e A5 respectivamente. Porém no
modelo MEGA 2560 essas portas estão disponíveis separadamente, ou seja, além do modelo
MEGA 2560 vir com uma quantidade maior de portas o mesmo ainda disponibiliza de forma
distinta as portas com suas devidas funções.
Leiaut Carielo – Escola de informática com eletrônica 11
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Especificações técnicas
Micro controlador ATmega2560
Tensão de operação 5V
Tensão de entrada (recomendada) 7-12V
Tensão de entrada (limite) 6-20V
54 (dos quais 15
Portas Digitais I/O
proporcionam saída PWM)
Portas analógicas 16
Corrente DC por porta digital 20 mA
Corrente DC para a porta 3v3 50 mA
256 KB dos quais 8 KB são
Memoria flash¹
usados pelo bootloader
SRAM² 8 KB
EEPROM³ 4 KB
Velocidade do Processador 16 MHz
Led acoplado 13
Comprimento 101.52 mm
Largura 53.3 mm
Peso 37 g
¹ Armazenamento do Arduino. Onde o Sketch (código) fica gravado/armazenado.
² SRAM (static random access memory) é onde o Sketch (código) cria e manipula as
variáveis quando o mesmo está sendo executado.
³ EEPROM é uma memoria onde os programadores podem usar para guardar
informações de longo termo.
Memoria Flash e EEPROM são memórias não voláteis as informações gravadas nelas uma vez
continuam lá mesmo quando o Arduino é desligado.
SRAM é uma memória volátil e toda informação que passa por ela é perdida quando a placa é
desligada.
• O chip controlador ATmega2560 encontrado no Arduino tem as seguintes
especificações de memoria:
Memoria Flash 256k bytes (dos quais 8 KB são usados para o bootloader)
SRAM 8k bytes
EEPROM 4k byte
Leiaut Carielo – Escola de informática com eletrônica 12
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Documentação
Toda a documentação da placa Arduino modelo Mega2560 você pode encontrar no endereço
abaixo:
www.arduino.cc/en/Main/ArduinoBoardMega2560
Leiaut Carielo – Escola de informática com eletrônica 13
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Comunicação i2C
I2c é um protocolo de comunicação, que no Arduino através de uma
conexão de barramento nos permite trabalhar com vários componentes sem
o uso de portas adicionais, permitindo assim amenizar o uso de portas
quando estamos trabalhando com componentes que fazem uso de várias
portas do Arduino, Ex: Tela Lcd, Teclado matricial etc...
Imagine a seguinte situação, você precisa montar um sistema de alarme
onde um arduino monitora uma série de sensores de uma residência, porém
são necessários além dos sensores o teclado matricial e a tela lcd para
controlar o alarme, porém para todos esses componentes, que irão precisar
de no mínimo 22 portas do Arduino, você só tem disponível um Arduino
modelo UNO que dispõe de apenas 16 portas no seu total, qual seria a
solução?
Justamente por esse motivo foi criado o protocolo padrão de comunicação
i2c, a saber Inter-Integrated-Circuit que foi criado pela Philips-
Semicondutor, com esse protocolo de comunicação através de uma conexão
de barramento podemos ter em um único Arduino UNO mais de 50 telas Lcd
funcionando em conjunto, veja abaixo um exemplo de como funciona essa
comunicação:
Um dispositivo atua como mestre e os demais conectados na extensão do
barramento atuam como escravos, dessa forma podemos ter vários
componentes conectados ao barramento sem precisar usar portas adicionais
do Arduino.
Leiaut Carielo – Escola de informática com eletrônica 14
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Para que isso funcione é necessário um módulo que irá fazer a comunicação
entre o componente e o Arduino para isso usaremos o módulo i2c:
• Exemplo de componente com módulo i2c
Porém, como enviar informações para um componente especifico em um
barramento com 50 Telas Lcd?
Para isso o protocolo i2c usa o endereçamento dos dispositivos, ou seja,
cada componente no barramento tem seu endereço com isso podemos
enviar informações para qualquer um dos componentes.
Para gerar os endereços são usados 7 bits e um oitavo bit para definir se é
leitura ou escrita, com isso temos 128 possíveis endereços, porém a faixa
de endereços de 0 a 7 são reservados com isso temos apenas 120 possíveis
endereços.
Você pode conferir toda a documentação do protocolo i2c no Arduino no
endereço abaixo:
www.arduino.cc/en/Reference/Wire
Leiaut Carielo – Escola de informática com eletrônica 15
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Protoboard
Para montar nossos circuitos iremos usar uma placa de prototipagem, a protoboard, que é
uma placa de ensaio com trilhas condutoras formadas por furos para realizar conexões de
circuitos elétricos sem a necessidade de soldar os componentes, veja abaixo um exemplo
da protoboard que usaremos neste curso:
Essa protoboard contém 760 furos, veja abaixo como funciona a protoboard:
Exemplo de conexão
A ligação de qualquer trilha neste quadrante é vertical
Divisão
As trilhas que estão dentro do quadrante têm continuidade vertical apenas, no meio do
quadrante há uma divisão, que elimina a continuidade do que está em cima com o que
está embaixo.
Leiaut Carielo – Escola de informática com eletrônica 16
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Na trilha horizontal, as que ficam nas extremidades, a ligação é horizontal, observe o
exemplo abaixo:
Nestas trilhas a continuidade é horizontal
Divisão 1 Divisão 2
Na trilha horizontal existem duas divisões que separam três conjuntos de trilhas, como está
ilustrado na imagem acima, a trilha de um conjunto não tem ligação com a trilha de outro
conjunto, para interligar todos os conjuntos precisamos “jumpear” a trilha de um conjunto
com a trilha de outro conjunto, dessa forma poderemos alimentar toda a trilha sem a
necessidade de conectar a alimentação em cada furo de uma trilha de cada conjunto,
observe um exemplo dessa ligação abaixo:
Ligação Ligação “Jumpeamento”
Ligação Ligação
Depois de efetuada essa ligação entre as divisões, será possível alimentar toda a trilha
horizontal conectando o pino de alimentação em apenas um furo da protoboard.
Cuidado ao montar circuitos na protoboard, uma ligação errada e seus componentes serão
danificados, o Arduino também pode ser danificado devido a uma ligação errada, antes de
ligar tudo verifique se o componente possui polaridade (+ -).
Leiaut Carielo – Escola de informática com eletrônica 17
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Para montar nossos circuitos iremos usar os jumpers, que são pequenos fios com
conectores apropriados para a protoboard e para o Arduino, existem três tipos de jumper,
Macho x Macho, Fêmea x Fêmea, e Macho Fêmea, veja abaixo um exemplo de cada:
Jumper Macho x Macho
Jumper Macho x Fêmea
Leiaut Carielo – Escola de informática com eletrônica 18
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Jumper Fêmea x Fêmea
Veja abaixo o exemplo de um circuito montado na protoboard:
Ânodo Cátodo
Resistor de 1k Ohm
Na montagem acima temos circuito simples com um led, O jumper verde representa a
alimentação o jumper branco é referente ao aterramento ou (GND), montaremos nossos
circuitos de forma semelhante.
Leiaut Carielo – Escola de informática com eletrônica 19
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
O que dá para fazer com Arduino?
De tudo um pouco, quando eletrônica e programação se juntam para fazer
um sistema integrado as possibilidades são vastas, desde um simples painel
de led até um robô ou drone mais sofisticado. Você precisará apenas de um
pouco de lógica de programação e um pouco de eletrônica, depois basta
deixar sua imaginação fluir e por em práticas as ideias que você teve.
Confira abaixo alguns exemplos feitos com Arduino.
Carro de controle remoto com Arduino Nano.
Leiaut Carielo – Escola de informática com eletrônica 20
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Drone com Arduino UNO.
Controle de alarme com Arduino.
Leiaut Carielo – Escola de informática com eletrônica 21
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Lógica de programação
A lógica de programação consiste em usar o raciocínio lógico para programar
algoritmos racionais com o intuito de atingir um determinado objetivo,
solucionando um problema ou satisfazendo uma determinada função.
Neste tópico entenderemos o que é a lógica aplicada a programação e como
aplica-la na programação do Arduino.
A lógica está ligada ao raciocínio, mas precisamos saber como aplica-la na
resolução de um problema.
Veja a questão a seguir:
Usando a lógica para resolver essa questão:
Se na escola temos 200 alunos, o total de alunos que praticam esportes + o
total dos alunos que não praticam esportes não pode ser superior a 200. No
enunciado temos 120 alunos que jogam futebol e 100 que jogam basquete
se somarmos a quantidade de alunos que jogam basquete com a
quantidade de alunos que jogam futebol teremos 220 alunos, porém a
questão também nos informa que temos 60 alunos que praticam ambos os
esportes, neste caso dos 220 alunos que obtivemos na soma dos que
Leiaut Carielo – Escola de informática com eletrônica 22
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
praticam futebol e basquete 60 deles são os mesmos alunos, ou seja se 60
deles são os mesmos logo podemos subtrair os 60 alunos que praticam
ambos os esportes nos 220 que obtivemos na soma dos alunos que
praticam um ou outro esporte, logo temos o resultado de:
220-60 = 160
160 alunos praticam esporte nessa escola, portanto 40 deles não estão
praticando atividades esportivas na escola.
Lógica é um sentido racional
Algoritmo
Algoritmo é uma sequencia de passos, uma lista de instruções a serem
executadas para atingir um determinado objetivo.
Exemplo:
Algoritmo Trocar Pneu
• 1º Passo: Pegar a chave de roda e o macaco
• 2º Passo: Pegar estepe
• 3º Passo: Suspender o carro com o macaco
• 4º Passo: Retirar os parafusos do pneu furado
• 5º Passo: Retirar o pneu furado
• 6º Passo: Colocar estepe
• 7º Passo: Colocar os parafusos
• 8º Passo: Baixar o carro
• 9º Passo: Guardar ferramentas
Neste exemplo temos como algoritmo uma lista de instruções para trocar o
pneu de um carro, repare que as instruções são sequenciais, bem objetivas
e em ordem, assim qualquer pessoa que seguir essa sequencia de passos e
instruções conseguirá trocar o pneu de um carro.
Leiaut Carielo – Escola de informática com eletrônica 23
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Na programação a intenção é a mesma: criar uma sequencia de passos e
instruções para executar uma determinada tarefa no computador ou em
algum micro controlador (que é o nosso caso), nessa sequencia de passos
teremos comandos específicos que executarão uma determinada função no
computador ou micro controlador, a junção desses comandos combinados
com vários outros, proporcionam o desenvolvimento de uma aplicação que
pode ser implementada em computadores e circuitos eletrônicos.
Integrated Development Environment
(IDE)
Integrated development environment é o significado de IDE, onde temos um
ambiente projetado para programar, nesse ambiente teremos as ferramentas
necessárias para criar um programa em uma determinada linguagem de
programação.
Para cada linguagem de programação teremos uma IDE veja alguns exemplos
abaixo:
Linguagem IDE
Python PyCharm
Php PhpStorm
Java Eclipse
C++ Code Blocks
C# Visual Studio
Swift Xcode
Leiaut Carielo – Escola de informática com eletrônica 24
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Interface do Arduino
Botão Verificar
Botão Carregar
Abrir o Monitor
Serial
Botão Abrir
Botão Abrir
Botão Novo Menu das abas
Console de saída(reporta
erros)
Leiaut Carielo – Escola de informática com eletrônica 25
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Botão verificar à Verifica o código procurando por erros de
sintaxe(parênteses que não estão fechados, falta de vírgulas e chaves no
código etc..), caso haja erros o console de saída alerta.
Botão carregar à Verifica novamente o código e caso a sintaxe esteja
correta ele é carregado para o Arduino.
Botão novo à Cria um novo “Sketch” um novo projeto.
Botão abrir à Abre um projeto salvo.
Botão salvar à Salva o projeto atual.
Abrir o monitor serial à Abre o serial monitor para vermos os dados que
estão sendo comunicados entre o Arduino e o computador.
Menu das abas à Menu referentes as abas que temos no Arduino
(semelhante as abas do navegador), nesse menu você pode criar novas
abas, renomeá-las etc..
Consola de saída à Aqui você verá os erros de sintaxe e outros tipos de
erros que impedem de o código ser carregado para a placa Arduino.
Barra de ferramentas do Arduino
Aqui iremos explicar apenas os itens mais importantes
Preferences ou preferências à Menu de configurações do programa.
Leiaut Carielo – Escola de informática com eletrônica 26
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Preferences:
Onde seus projetos
ficam salvos
Marcar numeração
das linhas
Salvar projeto toda
vez que verificar ou
carregar
A opção de salvar projeto ao verificar ou carregar pode incomodar
um pouco, se deseja programar sem ter que salvar o código toda
vez que fizer um novo carregar ou verificar o mesmo, desmarque
esta opção.
Toda vez que conectarmos uma placa nova no computador, ou desconectar
e conectar novamente uma mesma placa é necessário configurar a porta e
o tipo de placa conectada.
No menu Tools(Ferramentas) temos acesso a essas configurações.
Veja os passos a seguir que devemos executar para configurar a placa que
deve estar conectada no computador.
Leiaut Carielo – Escola de informática com eletrônica 27
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
1º Passo: Antes de tudo devemos conectar a placa do Arduino no
computador.
2º Passo: Em Port devemos escolher a opção referente a placa que será
apresentada quando detectada:
A referência pode variar de computador para computador, de acordo com o
sistema operacional.
3º Passo: Depois de ter configurado a porta devemos configurar a placa,
para isso em “Board” (que significa placa) selecione o modelo referente a
sua placa.
Após isso o computador está pronto para mandar os códigos para o Arduino
através da interface de programação.
Leiaut Carielo – Escola de informática com eletrônica 28
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
É possível haver uma mesma IDE para várias linguagens visto que a mesma
suporte não há problemas.
Tipos de dados
Abordaremos agora alguns tipos de dados que o Arduino interpreta, a
linguagem do Arduino é baseada em Wiring que é uma linguagem de
prototipagem para micro controladores baseada em C , se você já
programou em Java, C# ou C++ será de fácil entendimento a sintaxe do
Arduino.
Os tipos de dados que podemos manipular no Arduino são os seguintes:
• void
• boolean
• char
• unsigned char
• byte
• int
• unsigned int
• word
• long
• unsigned long
• short
• float
• double
• string - char array (Lista)
• String – object (Objeto)
• array
Temos muitos tipos de dados que podemos manipular, mas no nosso curso
precisaremos de apenas alguns deles. Provavelmente na maioria dos
projetos em que você trabalhar, não precisará usar todos os tipos de
variáveis, pois alguns tipos são bem específicos para determinadas funções,
como a tipo byte que interpreta bytes sendo um byte formado por um
conjunto de 8 bits, EX: 01011101 à 1 byte neste byte temos 256
combinações diferentes gerando assim números de 0 a 255 apenas, então
em cada byte temos o valor variante que vai de 0 à 255. Então esse tipo de
dados não usaremos eventualmente.
Leiaut Carielo – Escola de informática com eletrônica 29
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Vamos a uma breve explicação dos tipos de dados que usaremos
ü int
Esse tipo de dado serve para números inteiro, int é uma abreviação de integer
que é um tipo inteiro na linguagem de programação Exemplos de dados
aceitáveis pelo tipo int à 0,1,2,3,4 não aceitará por exemplo: 1.1,1.2,1.3.
O tipo int ocupa 16 bits de memória (2 bytes) e aceita valores na faixa de -
32768 á 32767
ü char
Tipo que recebe caracteres, esse tipo interpreta um caractere único,
usaremos esse tipo de dados para estruturas de escolha onde teremos um
menu em que o usuário poderá escolher em uma lista uma série de funções
que teremos no Arduino. Esse tipo recebe um número EX: 61 e o interpreta
como a letra “a” pois é o número equivalente segunda a tabela ASCII*
O tipo char ocupa 8 bits de memória(1 byte) seu valor varia de 0 a 255
ü float
O tipo float é um tipo que também recebe números, porém diferente do tipo
int o tipo float recebe todo tipo de números EX: 1,2,3,4,5.5,6.6,7.7,
usaremos esse tipo de dado para valores fracionários onde precisaremos
fazer divisões no nosso programa e obter certos resultados a partir dessas
divisões.
O tipo float é do tipo ponto flutuante (dados com várias casa decimais) e
ocupa 32 bits(4 bytes) e seu valor pode variar entre -3.4028235E+38 e
3.4028235E+38
ü String
O tipo String abrange todo tipo de caractere, porém mesmo os números são
interpretados como um caractere, ou seja se você tentar somar dois dados
do tipo String mesmo sendo números, eles irão se concatenar EX: “1”+”1” o
resultado que teremos é “11” os dados deverão estar entre aspas pois todo
texto na programação é interpretado entre aspas.
ü Void
Este tipo indica vazio, ou seja, nenhum retorno, o tipo void referencia um
método para que o mesmo não retorne nenhum tipo de dado.
Leiaut Carielo – Escola de informática com eletrônica 30
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ü Long
O tipo long é o tipo que assim com o float recebe números reais e inteiros,
porém com uma diferença, o tipo long possui menos casas decimais e por
esse motivo não é tão preciso como o float.
o long tem seu valor variando entre -2,147,483,648 e 2,147,483,647 e
ocupa 32 bits (4 bytes) de memória.
ü boolean ou bool
Tipo de dado que tem apenas dois estados true ou false, ou seja,
verdadeiro ou falso. O tipo boolean geralmente é usado para estruturas
condicionais onde teremos duas situações verdadeira ou falsa, na qual o
tipo boolean se adequa.
O tipo boolean ocupa 1 byte de memória (8 bits).
ü double
O tipo double abrange os mesmos dados que o tipo float, porém na placa
Arduino Due o tipo double tem uma precisão maior 64 bits(8 bytes).
Variáveis
Variáveis são espaços alocados em um endereço da memória onde iremos
armazenar dados para posteriormente manipular os mesmos, esses espaços
tem um endereço e pode ter um “rótulo”
Exemplo de um endereço físico:
os “rótulos” por sua vez são as variáveis onde teremos a interação usuário-
maquina pois são através dos programas com o uso de variáveis que é
possível manipular receber e enviar dados em qualquer dispositivo.
Leiaut Carielo – Escola de informática com eletrônica 31
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
É através dessas variáveis que iremos configurar as portas no Arduino,
enviar e receber valores de um componente e até criar aplicativos para
interagir com a placa.
Imaginemos que você irá criar um programa para somar dois números,
primeiramente você precisará saber como fazer essa operação:
Aà2
Bà3
Se somarmos A+B teremos 5, dessa forma podemos fazer a seguinte
atribuição:
C à A+B
Logo C armazenará todo o resultado da soma de A+B, essa seria uma
operação matemática simples.
Na programação não seria muito diferente visto que a matemática é a raiz
da programação. Precisamos apenas especificar alguns detalhes, pois o
computador não entende a sintaxe semântica qual nos entendemos.
Na declaração de variáveis temos primeiramente que informar o tipo de
dados que iremos trabalhar, logo após, o nome da variável que não pode
conter caractere especial como: ^Ç”áóíéú%! Etc...
A linguagem do Arduino é sensível a letras maiúsculas/minúsculas, isso
significa que se você declara uma variável em minúsculo a mesma deverá
ser usada sempre em minúsculo.
Leiaut Carielo – Escola de informática com eletrônica 32
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Métodos
Método Setup:
à Nesta estrutura temos o método que irá executar os
comandos uma única vez, no Setup iremos colocar apenas os comandos
essenciais para que o Arduino identifique os componentes e os modos da
pinagem (INPUT,OUTPUT)
Exemplo de um algoritmo para acender um Led:
Neste código declaramos a variável led e atribuímos 2 ao seu valor (que é a
porta do Arduino na qual o anodo do led está conectado), logo mais no
setup através do comando estamos definindo que o componente
que está na porta 2 será do tipo saída de dados. Por que o componente que
está na porta 2? à Porque declaramos uma variável chamada led e
atribuímos 2 ao seu valor – as variáveis armazenam um valor na memoria
do computador/micro controlador portanto onde quer que usemos a
variável led o computador/micro controlador entenderá como o número 2.
No setup tudo que colocamos é executado uma única vez no micro
controlador sempre que o mesmo for ligado ou reiniciado, portanto todos os
comandos que tiverem a necessidade de serem executados apenas uma vez
declararemos o mesmo no Setup apenas.
Método Loop
à Nesta estrutura escreveremos o nosso algoritmo, onde o
mesmo será executado várias vezes, loop significa laço,repetição, ou seja
todo o código que estiver dentro do loop será executado repetidamente.
Leiaut Carielo – Escola de informática com eletrônica 33
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
No loop estaremos manipulando os componentes e seu comportamento, o
loop é responsável por dar “vida” ao circuito pois o código pode se
comportar de maneira autônoma sem a interferência humana, repetindo
processos e passos e até tomar decisões de forma inteligente mediante uma
circunstância.
Exemplo de um comando que usaremos para imprimir valores na tela:
No exemplo acima temos o comando que irá imprimir na tela o que está
entre os parênteses, neste caso o nome Carielo será impresso na tela
inúmeras vezes.
Dentro do loop teremos os comandos para ler os dados de determinados
sensores, pois seus valores precisam ser sempre atualizados.
Leiaut Carielo – Escola de informática com eletrônica 34
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Funções
pinMode();
A função pinMode serve para definir o modo da porta do Arduino há duas
opções para serem usadas com esse comando: INPUT e OUTPUT
O pinMode define se determinada porta do Arduino onde está um
determinado componente é entrada ou saída EX: Led à saída - OUTPUT
(emite luz), Controle remoto à entrada – INPUT (recebe dados do controle)
O comando pinMode(); recebe dois argumentos à PORTA e MODO
(INPUT/OUTPUT) separados por vírgula, EX:
pinMode (2,OUTPUT);
No exemplo acima estamos definindo que a porta 2 no Arduino será saída
de dados.
digitalWrite();
O comando digitalWrite permite mandar um sinal digital na porta
especificada, EX: digitalWrite(2,HIGH);
Observe que o comando digitalWrite recebe dois argumentos: o primeiro se
refere a porta para onde será enviado o sinal digital, o segundo argumento
é o próprio sinal digital.
Existe dois modos de operação para o comando digitalWrite : HIGH e LOW
sendo HIGH – alto e LOW – baixo onde HIGH enviará o sinal e LOW irá
desligar o sinal em relação a porta declarada.
Esse é o comando que usaremos para acender leds, apitar buzzer,
ligar/desligar relés e etc.. serve componentes do tipo atuadores. Para ligar
um led digital conectado a porta 2 no Arduino por exemplo escreveríamos o
seguinte comando no loop do Arduino:
digitalWrite(2,HIGH);
Leiaut Carielo – Escola de informática com eletrônica 35
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
digitalRead();
O comando digitalRead indica uma leitura digital de um determinado
sensor/chave no Arduino EX: botão, reed switch, o comando digitalRead
recebe apenas um argumento: o componente a ser lido, diferente do
digitalWrite no digitalRead devemos apenas declarar a porta onde está o
componente digital do qual queremos ler um determinado valor/estado.
Para lermos o estado de um botão que está na porta 3 do Arduino usaremos
o comando da seguinte maneira:
digitalRead(3);
Dessa forma estamos lendo o estado de um botão digital que está na porta
3 do Arduino, esse comando retornará um valor 0 ou 1 de acordo com o
estado do componente lido.
Para que possamos usar esse valor no código e implementar funções no
código para que o botão seja funcional, devemos armazenar o estado do
botão em uma variável, EX:
int status_botao = digitalRead(3);
Supondo que o nosso botão está na porta 3 do Arduino o comando
digitalRead irá ler a porta 3 e armazenar o valor que foi lido na variável
status_botao no caso do circuito estar aberto o valor será 0 caso o circuito
esteja fechado(botão pressionado) o valor será 1.
Dessa forma já podemos fazer um código funcional para que o led acenda
caso o botão seja pressionado através do condicional if veja o código abaixo
como exemplo:
Leiaut Carielo – Escola de informática com eletrônica 36
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Constantes
As constantes são variáveis que não mudam de valor, ou seja elas tem seus
valores constantes e servem para facilitar a identificação de valores na
programação, EX:
No exemplo acima estamos atribuindo o valor 33 a variável tempo, esse
valor não poderá ser modificado no código pois é uma constante veja:
Observe que o programa apresentará erro pois a variável não pode ter o
seu valor modificado.
Sendo assim temos algumas constantes pré estabelecidas na própria
linguagem do Arduino vejamos algumas delas:
HIGH à constante com valor 1, usamos através do comando digitalWrite
para mandar o sinal de ligar em uma determinada porta do Arduino
Leiaut Carielo – Escola de informática com eletrônica 37
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
LOW à constante com valor 0, usamos através do comando digitalWrite
para mandar o sinal de desligar em uma determinada porta do Arduino
INPUT | OUTPUT à constante que define as portas do Arduino como
entrada/saída, usado com o comando pinMode()
true | false à constantes que interpretam 0 ou 1 sendo 0 para false e 1
para true, usaremos essas constantes para comparações em determinadas
situações condicionais.
Operadores
Nesta sessão estaremos vendo os dois tipos de operadores:
ü Operadores aritméticos
ü Operadores de comparação
Operadores aritméticos
Os operadores aritméticos são os operadores que usaremos para efetuar operações matemáticas como
soma, subtração, divisão etc..
Os operadores aritméticos no Arduino são:
= à operador de atribuição
+ à operador de soma
- à operador de subtração
* à operador de multiplicação
/ à operador de divisão
% à operador de módulo (resto da divisão)
Os operadores aritméticos podem ser usados com números e variáveis EX:
2+2 ou A+B
Sendo A uma variável do tipo numérica, de mesmo modo B.
Os operadores aritméticos tem ordem de prioridade conforme a sequencia
abaixo:
1º Módulo, 2º Multiplicação, 3º Divisão, 4º Soma e Subtração.
Leiaut Carielo – Escola de informática com eletrônica 38
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Operadores de comparação
Os operadores de comparação serão usados em situações condicionais,
servindo para comparar valores em determinadas situações onde
poderemos atribuir mais de um caminho a ser seguido pelo algoritmo.
No Arduino temos os seguintes operadores de comparação:
== à Igualdade
!= à Diferente(negação)
< à Menor que
> à Maior que
>= à Maior ou igual
<= à Menor ou igual
Usaremos esses operadores para comparar valores e determinar caminhos
diferentes em nosso algoritmo, observe o exemplo:
Se (velocidade > 100) então
Aplicar Multa
Neste exemplo usamos o operador > (maior que), onde estamos
determinando uma condição caso uma velocidade de um determinado
veículo ultrapasse 100 KM/H a multa deverá ser aplicada.
Se usássemos o operador >= (maior ou igual) a condição já sofreria
alteração, o veiculo agora chegando aos 100 KM/H já teria cometido
infração.
Caso quisermos comparar se dois valores são iguais usaremos a seguinte
expressão:
Se (a==b) então
Resposta correta
O operador == verifica se a expressão é verdadeira ou falsa de acordo com
os valores fornecidos, EX:
Se (2==3) então
Somar
A expressão acima é falsa pois 2 é diferente de 3 (2!=3)
Por outro lado se desejarmos obter o contrário da expressão que queremos
devemos usar exclamação na frente da expressão, EX:
Se (!(2==3)) então à indica que queremos o resultado contrário ao original
da expressão, neste caso essa expressão irá retornar verdadeiro, pois a
Leiaut Carielo – Escola de informática com eletrônica 39
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
mesma sendo falsa nos retornará verdadeiro devido a exclamação na frente
da expressão.
Já a expressão != pode ser usada como as demais, observe o exemplo:
Se (nome != “Julia”) então à Nesta expressão estamos especificando que o
nome deve ser diferente de Julia, ou seja nosso algoritmo aceitará qualquer
nome, exceto Julia.
Estruturas
Durante esse curso de Arduino veremos 4 tipos de estruturas:
Estruturas imperativas
Estruturas de seleção
Estruturas condicionais
Estruturas repetitivas
Cada estrutura serve para um propósito e está atrelada a um ou mais
comandos que são essenciais para o correto funcionamento da mesma,
veremos a seguir o propósito de cada uma e alguns exemplos de como usá-
las.
Antes de darmos inicio a nossa primeira estrutura de programação
devemos ver algumas regras de Sintaxe
Sintaxe
A sintaxe (ou regras de sintaxe) é muito importante na linguagem de
programação, é essencial obedecermos as regras e escrever nosso
algoritmo corretamente para que o mesmo possa ser enviado para placa do
Arduino, pois o computador não enviará nenhum código escrito de forma
errônea ( com erros de sintaxe.
Mas o que seria a sintaxe na programação?
A linguagem de programação é uma língua assim como o português o inglês
e etc.. porém estaremos aprendendo essa nova língua para se comunicar
com os computadores e máquinas, isso mesmo, iremos nos comunicar com
as máquinas pedindo a elas que nos façam determinadas tarefas e resolva
alguns problemas cotidianos.
Leiaut Carielo – Escola de informática com eletrônica 40
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Como em todo idioma temos as regras gramaticais, na linguagem de
programação não é diferente, temos a sintaxe para representar a gramatica
na programação.
Vejamos a seguir alguns operadores que “regem” a sintaxe:
; (Ponto e vírgula)
{} (Chaves)
// (Comentário de única linha)
/* */ (Comentário de várias linhas)
#define (Definir constantes)
#include (Importar bibliotecas)
Um dos mais importantes caracteres na sintaxe é o; (ponto e virgula), é
necessário que todas as linhas de programação sejam finalizadas com ponto
e vírgula, caso contrário o algoritmo não será carregado para a placa.
Por que se faz necessário o ponto e vírgula?
Na programação existem comandos que são muito extensos e podem
precisar de mais de uma linha para serem escritos, devido a isso o
compilador permite que um só comando seja escrito em mais de uma linha,
porém deve haver o ponto e vírgula indicando o final do comando.
Estruturas imperativas
As estruturas imperativas são algoritmos de comandos afirmativos, ou seja
todo o código é construído de forma imperativa onde o caminho lógico
percorrido será um só.
A organização dos comandos pode interferir no resultado final do algoritmo.
Exemplo: Se você pedir para uma pessoa trocar uma lâmpada sem antes
ter colocado uma escada para subir até o local será impossível a tarefa ser
executada; Por isso primeiramente deve-se pedir para colocar a escada
depois trocar a lâmpada.
Da mesma forma é na linguagem de programação, devemos colocar os
comandos em ordem respectivos as suas funções, para que não haja mal-
uso do programa por parte do usuário. Todo programa segue uma
sequencia lógica de algoritmo, onde o programador dá as instruções ao
usuário de como usá-lo corretamente, um bom exemplo de um algoritmo
estruturado é uma receita, observe na página seguinte.
Leiaut Carielo – Escola de informática com eletrônica 41
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Receita criada por: Sanduba Insano
Leiaut Carielo – Escola de informática com eletrônica 42
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Veja que temos na receita os ingredientes e o modo de fazer, os
ingredientes seriam como as variáveis na programação onde teríamos o que
é preciso para que um determinado programa seja elaborado, EX:
O que seria preciso(ingredientes) para fazer um algoritmo que calcule a
soma de dois números?
Os comandos nos já temos para processar os dados (que seriam os
números) agora tudo que precisamos fazer é obter os números, esses
números iremos pedir ao usuário logo teremos que criar variáveis para
armazenar os números que o usuário digitar, EX:
A à Armazena primeiro número
B à Armazena segundo número
C à Armazena o resultado da soma de A+B
Onde A, B e C seriam variáveis do tipo inteiro.
No modo de fazer teremos a estrutura do algoritmo, onde estarão os passos
ou comandos de forma sequencial e de modo afirmativo, ou seja os
comandos executam puramente o que lhe são atribuídos sem impor
nenhuma condição EX:
A = Recebe um número
B = Recebe outro número
Se A maior que 10 entao
Soma A+B
O exemplo acima cita uma condição onde o código irá somar A+B somente
se A for maior que 10.
Também devemos obter primeiramente os números antes de soma-los, não
podemos efetuar uma soma sem que haja números para serem somados,
EX:
C à Armazena o resultado de A+B
A à Armazena o primeiro número
B à Armazena o segundo número
A ordem do algoritmo acima está incorreta, pois A e B tem seus valores
definidos depois de ser efetuada a soma dos mesmos, logo o resultado
dessa soma seria 0 ou nulo, para que esse algoritmo esteja na estrutura
Leiaut Carielo – Escola de informática com eletrônica 43
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ordenada corretamente devemos pensar logicamente que para somar A+B
temos que primeiro saber os seus respectivos valores.
Na programação do Arduino iremos escrever o código em sequencia
conforme os passos a seguir:
1. Definir componentes
Antes de começar a codificar seu algoritmo é importante o uso de
variáveis relacionadas as portas do Arduino onde estarão os
componentes desejados.
ü Esta etapa será feita antes do Setup.
2. Definir modo de atuação do componente (INPUT/OUTPUT)
É de extrema importância definir o modo de atuação de cada
componente que temos no Arduino, se você, por exemplo, tentar
acender um led sem defini-lo como componente de saída(OUTPUT) o
mesmo não irá acender.
ü Esta etapa será feita no Setup.
3. Definir iniciações
Definir iniciações de outros possíveis componentes e
atuadores(veremos mais a frente) e se haverá comunicação serial(a
seguir uma explicação mais detalhada sobre comunicação serial).
ü Esta etapa também será feita no Setup.
4. Estrutura do algoritmo
Agora iremos montar a estrutura do algoritmo de forma que
possamos manipular os componentes no Arduino de forma correta,
aqui entrarão os comandos para acender leds e apaga-los, teremos
também os comandos em geral para leitura de dados em sensores
etc...
ü Esta etapa será feita no Loop.
Leiaut Carielo – Escola de informática com eletrônica 44
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Vejamos um exemplo de estrutura imperativa no Arduino, o exemplo a
seguir é de um algoritmo para acender um led:
Explicando o código:
Observe na primeira linha a declaração à
Nesta linha estamos criando uma variável de nome led e valor 3 do tipo
inteiro(int), ou seja, criamos uma variável chamada led do tipo inteiro e
atribuímos 3 ao seu valor, usaremos essa variável para se referir a porta do
Arduino onde provavelmente está o componente.
Na linha onde temos o comando à estamos
definindo o modo de atuação da porta do Arduino, como a variável led vale
3 estamos definindo que na placa do Arduino na porta 3 o modo será de
saída ou atuador, isso significa que ele apenas enviará sinal para a porta
especificada, logo se colocássemos um sensor na porta referida na placa do
Arduino ele não iria conseguir enviar dados para o programa, pois a porta 3
foi definida como saída e não como entrada.
Tradução de OUTPUT à SAÍDA
Logo mais no Loop temos o comando responsável por liberar o sinal na
porta especificada:
Esse comando irá enviar o sinal de ligado para a placa do Arduino na porta
3, pois a variável led vale 3.
Tradução de HIGH à ALTO
Só que todo esse código só será executado no Arduino ao ser enviado para
a placa, caso contrário não valerá de nada.
Leiaut Carielo – Escola de informática com eletrônica 45
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Enviando o código para o Arduino:
Agora na interface do Arduino basta clicar no botão enviar
1º
2º
3º
Está carregado o algoritmo.
[
Neste exemplo vimos um algoritmo de estrutura imperativa, esse tipo de
estrutura é bem limitada porém ainda podemos incrementar mais
comandos.
Comando delay()
o Este comando atrasa em milissegundos o tempo de execução
do próximo comando, ao executar esse comando o arduino
pausa o Loop de acordo com o tempo especificado.
Exemplo:
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
No exemplo acima o led acenderá e depois de 1 segundo apagará e se esse
código estiver no Loop o led ficará piscando.
Podemos usar também o comando delayMicroseconds() que recebe
microssegundos como argumento.
delay() à tempo especificado em milissegundos 1000 milissegundos = 1
segundo delayMicroseconds() à Tempo especificado em microssegundos
1000 microssegundos = 1 milissegundo.
Leiaut Carielo – Escola de informática com eletrônica 46
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Comentários
O comando // pode ser usado para comentar qualquer parte do código para que no
futuro seja de fácil identificação um determinado comando ou função.
Temos no Arduino dois tipos de comentários:
Comentários de uma linha à Esses comentários são iniciados com // colocando
esse comando em uma determinada linha o que estiver escrito nesta linha será
ignorado pelo Arduino visto que mesmo que haja um comando dentro de um
comentário o mesmo não será executado, veja um exemplo abaixo:
Observe que descrevemos de forma simples a função da linha de código que está
logo abaixo, para os comentários não há regras, seja apenas simples e objetivo nos
seus comentários.
Temos também o comentário de várias linhas, com ele você pode, por
exemplo, comentar uma parte do seu código para que você possa usar no futuro
um determinado trecho do qual você tem uma função importante, porém não quer
usar essa função agora mas também não quer apagar a mesma ou tirar do código.
Para comentar várias linhas inicie a linha com /* e terminar com */ observe o
exemplo abaixo:
Sempre que precisar informar uma funcionalidade, descrever uma função
que acha que pode esquecer use os comentários, é uma boa prática na
programação.
Leiaut Carielo – Escola de informática com eletrônica 47
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Estruturas condicionais
As estruturas condicionais nos permitem atribuir mais de um caminho a ser
percorrido pelo micro controlador, com as estruturas condicionais podemos,
por exemplo, determinar uma condição onde um led acenderá ou não
conforme a temperatura lida por um sensor, neste caso o algoritmo ficaria
com a seguinte estrutura:
Se (temperatura menor que 30 C°) então {
Acender led
} senao{
Apagar led
Observe que a sintaxe é apenas para exemplificação do que seria uma
estrutura condicional.
No código o algoritmo ficaria da seguinte maneira:
Aqui já temos todos os componentes configurados devidamente no
setup(método setup), também já estamos com o sensor de temperatura
configurado para nos fornecer a temperatura em Graus célsius.
Nos algoritmos condicionais iremos usar os operadores de comparação
(pág. 21), sempre que nos depararmos com uma condição os operadores
irão fazer a comparação de valores conforme a declaração estabelecida.
EX:
if (31>2) à Operador maior que fazendo comparação do número 31 sobre o
número 2, interpretaremos essa declaração da seguinte maneira:
ü se 31 maior que 2
Leiaut Carielo – Escola de informática com eletrônica 48
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Logo após o argumento da condição devemos especificar para o
computador, o que ele deverá fazer caso a condição determinada seja
verdadeira.
Ex: No nosso argumento, qual o comando que o computador deverá
executar caso 31 seja maior que 2? A condição é verdadeira, isso já
sabemos, o computador também, porém ele precisa saber agora o que
fazer, vamos lá.
Observe que depois da condição declarada temos a abertura de uma chave
que representará o inicio da nossa estrutura condicional, é dentro do campo
dessa chave que iremos colocar os comandos que o computador irá
executar caso a condição declarada seja verdadeira.
if (temperatura < 30) à Aqui determinamos a condição
{ à Aqui iniciamos a estrutura do condicional
digitalWrite (led,LOW); à Aqui estamos programando o comando que o
computador irá executar caso a condição declarada for verdadeira
} à Aqui estamos finalizando/fechando a estrutura condicional
O espaço entre o inicio e o fim da estrutura condicional é chamado de
corpo, no corpo da estrutura condicional iremos adicionar os comandos e
até inserir outras estruturas condicionais a serem executadas caso a
primeira condição seja verdadeira, observe:
if (temperatura < 30){ à Inicio da primeira condição
if (umidade > 70){ à Inicio da segunda condição
digitalWrite(arCondicionado,HIGH); à Comando a ser executado.
} à Fim da segunda condição
} à Fim da primeira condição
Observe que com uma condição dentro da outra o comando só será
executado caso as duas condições sejam verdadeiras.
Não há um limite quanto ao uso de condições, você pode usar quantas
quiser estando dentro de outras condições ou não. Ao usarmos várias
condições usaremos o comando else if a partir da segunda condição em
diante, observe:
Leiaut Carielo – Escola de informática com eletrônica 49
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
No exemplo anterior o computador irá checar a primeira condição, se
verdadeira o comando digitalWrite(led,LOW); será executado, a condição
posterior não será analisada.
Caso a primeira condição seja falsa a segunda é verificada, sendo
verdadeira o comando digitalWrite(led,HIGH); é executado, ainda temos um
comando que servirá de exceção caso todas as condições forem falsas ele
determinará o que será executado por padrão, observe:
O comando else não precisa ter condição declarada, ou seja digite o
comando abra as chaves insira os comandos a serem executados por
padrão, caso as condições anteriores não sejam verdadeiras e sua estrutura
condicional estará completa.
As estruturas condicionais podem ser modificadas e implementadas de
acordo com a necessidade, observe o código a seguir.
Na primeira condição o computador irá verificar se a temperatura está
abaixo de 50 graus caso sim, o primeiro ar condicionado é acionado, caso a
temperatura ultrapasse os 50 graus, o computador entra na segunda
Leiaut Carielo – Escola de informática com eletrônica 50
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
condição verificando se a temperatura está abaixo de 60 graus, caso sim, o
ar condicionado 1 e o ar condicionado 2 serão acionados, veja que temos
um else que servirá de exceção caso as condições anteriores forem falsas,
ou seja, a temperatura não é menor que 50º e também não é menor que
60º, logo o computador executará o código que está dentro do else.
Ao extrairmos o código que está dentro do else temos:
Observe que é outra estrutura condicional, caso as condições anteriores
forem falsas e o código que está no else for executado, o computador irá
verificar outra condição que é referente a umidade se a umidade for menor
que 60 além dos ares condicionados o umidificador também será acionado e
após 30 minutos o umidificador é desligado.
Então as estruturas condicionais deverão ser construídas de acordo com a
situação proposta, observe que a única regra é a regra de sintaxe
(parênteses, chaves, operadores de comparação), para todos os casos a
sintaxe da estrutura condicional deverá ser escrita da seguinte forma:
if (condição)
{
comando1;
}
else if(condição 2)
{
comando2;
}
else{comando3;}
Leiaut Carielo – Escola de informática com eletrônica 51
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Observe que temos ponto e vírgula apenas nos finais de cada comando, a
estrutura de condicional if deverá seguir sempre essa sintaxe, você poderá
construir quantas estruturas quiser dentro de outras ou não, observe
apenas na escrita da sintaxe.
Várias comparações
Podemos fazer várias comparações dentro de uma mesma condição, para
isso usaremos alguns operadores especiais, que servem para determinar
verdadeiro ou falso um conjunto de comparações que teremos em uma
estrutura condicional, usaremos os seguintes operadores:
&& à operador “e”
|| à operador “ou”
Existe uma tabela chamada tabela verdade que serve para classificar as
condições de acordo com os operadores, veja abaixo a tabela:
Operador &&
Condição 1 Condição 2 Resultado
V V V
V F F
F V F
F F F
Repare que o resultado é verdadeiro apenas se todas as condições forem
verdadeiras, neste exemplo vimos apenas duas condições mas o mesmo
seria válido para mais de duas condições, na programação do Arduino o
código ficaria da seguinte maneira:
Repare que no código estamos fazendo duas comparações em um mesmo
condicional if o computador dessa vez irá verificar se a temperatura está
Leiaut Carielo – Escola de informática com eletrônica 52
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
acima de 0 E abaixo de 30 Graus, dessa forma o condicional irá obedecer o
intervalo entre 0 e 30 Graus.
Podemos usar o operador && nas condições onde desejamos estabelecer
um intervalo de valores como o exemplo anterior da temperatura, onde
estabelecemos um intervalo de temperatura para nossa estrutura
condicional.
Não há um limite para quantas comparações podemos fazer, mas observe
bem seu algoritmo para que o mesmo satisfaça de modo eficiente as
condições propostas, o computador apenas executa o que você pede.
Operador || (ou)
Condição 1 Condição 2 Resultado
V V V
V F V
F V V
F F F
Neste operador apenas uma das comparações sendo verdadeiras teremos
toda a expressão como verdadeira, pois satisfazendo apenas uma das
comparações a expressão já é considerada como verdadeira.
Todos esses operadores deverão ser implementados de acordo com a
situação proposta, você poderá combinar esses operadores da forma que
for necessária para satisfazer a condição da qual você precisa, ex:
Em nosso sistema desejamos que o ar condicionado seja ativado caso a
temperatura seja menor que 30 e a umidade esteja abaixo de 65, ou caso a
temperatura ultrapasse os 30 graus apenas o ar condicionado seja ativado,
nosso código ficaria da seguinte maneira:
Observe que isolamos as comparações com parênteses para que o
computador interpretasse corretamente a situação que desejamos onde as
comparações dos parênteses mais internos serão resolvidas primeiro.
Leiaut Carielo – Escola de informática com eletrônica 53
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Dessa forma evitamos que haja alguma má interpretação por parte do
computador, pois o computador não tem raciocínio lógico e não interpreta
situações isso fica sob responsabilidade do programador, que deverá
analisar atentamente o código que está escrevendo.
Algumas dicas uteis ao programar estruturas condicionais
ü Analise a situação do problema proposto e defina de forma clara e
objetiva o que o problema esta requerendo.
ü Antes de programar especifique as condições de forma clara e
simples.
ü Analise se suas especificações realmente satisfazem a situação.
ü Faça testes do que seria seu suposto algoritmo, imagine seu código
pronto com as configurações definidas até agora.
ü Tente prever possíveis falhas que seu futuro código poderá ter e
tente corrigir antes mesmo de acontecer (não se preocupe, não
precisa ser todas as falhas, algumas você descobrirá com o tempo).
ü Comece a escrever seu algoritmo sempre observando a sintaxe e
colocando todos os pontos e vírgulas, chaves e parênteses da forma
correta, não deixe pra arrumar a sintaxe depois de codificado o
algoritmo, poupe tempo fazendo isso antes.
ü Depois que estiver codificando, faça testes e analise os resultados de
cada funcionalidade, em alguns casos não é preciso acabar todo o
algoritmo para ter uma visão mais ampla de todo o código.
ü Se estiver usando muitas condições você poderá comentar as linhas
descrevendo sua funcionalidade para que no futuro você saiba o que
codificou e até outros programadores entendam seu código mais
facilmente.
Leiaut Carielo – Escola de informática com eletrônica 54
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Estruturas de seleção
Nas estruturas de seleção estaremos atribuindo um determinado valor a um
trecho de código, assim teremos uma estrutura onde cada valor chamará
um menu referente a um trecho de código, vejamos um exemplo:
Temos alguns comandos novos aqui, o primeiro comando Serial.read() faz a
leitura de um dado que foi digitado no serial monitor, logo em seguida o
valor lido é armazenado na variável x.
Já o comando switch faz a escolha do trecho do código de acordo com o
valor da variável x, ou seja, x recebe um valor do usuário o switch escolhe
o trecho de algoritmo a ser executado de acordo com o número
digitado/escolhido.
O comando case 1: é referente ao trecho de código que será executado
caso o número digitado/escolhido seja 1, e logo abaixo de case 1: temos o
comando que será executado caso o número digitado seja 1 que neste caso
é digitalWrite(arcondicionado1,HIGH); e logo abaixo desse comando temos
o comando break; que serve para “quebrar” o menu, o primeiro menu
começa no comando case 1: acaba no comando break;
O comando break; serve para quebrar uma estrutura, EX: se tivermos uma
estrutura de código com 100 linhas e inserirmos o comando break; na
metade do código só a metade anterior será executada, por esse motivo o
nome break; que significa quebrar.
Ainda nas estruturas de seleção temos o comando default: que seria tipo
um else nas estruturas condicionais, por padrão o código que está no
default: será executado caso nenhumas das opções do menu sejam
escolhidas, veja o exemplo a seguir:
Leiaut Carielo – Escola de informática com eletrônica 55
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
No exemplo acima o usuário terá duas opções caso ele digite uma opção
inválida (3 por exemplo) o programa irá mostrar no serial monitor a
mensagem “digite uma opção válida”
Dentro de cada caso você pode inserir a estrutura de algoritmo que quiser,
observe o exemplo abaixo:
Observe que no caso 1 temos uma estrutura de condição, além do usuário
precisar escolher a opção 1 para que o ar condicionado 1 seja ativado, a
temperatura deverá estar abaixo de 30º para que o ar condicionado 1 seja
ativado, assim na estrutura de seleção você poderá inserir várias outras
estruturas de tipos diferentes, inclusive as estruturas que ainda veremos a
seguir.
Leiaut Carielo – Escola de informática com eletrônica 56
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Estruturas de repetição
As estruturas de repetição são estruturas que executam várias vezes um
determinado comando, elas podem ter sua quantidade de repetições pré-
estabelecidas, ou podem ser compostas com uma condição onde a estrutura
só irá parar de repetir o algoritmo quando a condição determinada for falsa.
Temos no Arduino três tipos de estruturas de repetição, abordaremos
apenas duas delas aqui pois são as únicas que veremos neste módulo, mas
não necessita se preocupar com a terceira estrutura de repetição visto que
a mesma tem uma semelhança muito grande com as estruturas que
veremos aqui, e é de fácil entendimento.
Vamos lá, as estruturas de repetição que temos no Arduino são as
seguintes:
for
while
do..while (mesmo que while)
Estrutura for
As estruturas do tipo for tem um número de repetições pré-
estabelecidas, e podem ser modificadas de acordo com a necessidade,
funcionarão como contadores que incrementarão ou decrementarão na
estrutura, valores que estão relacionados ao contador responsável pela
quantidade de repetições, observe o exemplo abaixo:
Observe a estrutura desta linha inicialmente
temos o comando for, que é responsável por dar inicio ao laço de repetição,
e dentro dos parênteses temos alguns argumentos separados por ponto e
vírgula, veja abaixo qual a função de cada parâmetro desses:
Leiaut Carielo – Escola de informática com eletrônica 57
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
à Neste primeiro parâmetro estamos definindo o ponto de
partida do laço e sua variável de referência, temos x como variável de
referência e 0 como valor inicial.
Mas, o que seria variável de referência? Observe o exemplo abaixo:
Em uma pista de corrida, o que determina que um corredor fez uma volta
completa? Como sabemos em qual lapidada está um carro de fórmula um?
Toda pista de corrida tem uma
marcação seja ela pintada na pista ou até mesmo uma simples bandeira,
indicando que ao passar por aquele ponto você terá completado uma volta,
ao passar mais uma vez por aquele mesmo ponto você terá completado
duas voltas, e assim por diante.
A marcação na pista está servindo de referência para que você saiba
exatamente quando você fez uma volta completa na pista, não é diferente
na programação o computador também precisa saber quando ele completou
uma volta completa em todo o código, para isso a referência no laço de
programação para saber quantas voltas ele já deu, a referência neste caso
é a variável.
A variável de referência funcionará como um acumulador que irá contar
quantas vezes o laço foi executado, a cada volta do laço o comando
que declaramos no terceiro parâmetro no inicio do laço, incrementa +1 a
variável que está fazendo a referencia para contar o laço que é a variável x.
Observe na página a seguir o que vai acontecer passo a passo
durante a execução desse laço de programação desde a sua primeira até a
ultima volta:
Leiaut Carielo – Escola de informática com eletrônica 58
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
à Primeiramente o computador irá ler os parâmetros dentro dos parênteses
para determinar quantas voltas terá o laço de programação.
à a partir desta linha o computador já
determina que o laço terá 10 voltas, ou seja todo o código que estiver no
corpo do laço irá ser repetido por 10 vezes, indo de 0 a 9.
Observe que a variável de referência responsável pela quantidade de vezes
que o laço é executado começa sua contagem tendo valor igual a 0, ou seja
nosso laço se repete 10 vezes, porém indo de 0 até 9.
à Depois de ter definido de onde iniciar e até onde o laço deve ir o
computador dá inicio a execução dos comandos que estão dentro das
chaves, que representam por sua vez o corpo do laço de programação.
ü A chave é um fator extremamente importante, sem elas o laço se
torna inútil. Pois são elas que determinam os comandos que serão
executados a cada volta do laço de programação.
Tudo o que está agora dentro das chaves será executado desde a primeira
linha de comando até a ultima:
Temos apenas um comando dentro do corpo do laço, esse mesmo comando
será executado 10 vezes seguidas.
Cada vez que o computador percorre todo o código, desde o inicio do laço
onde estamos abrindo a chave, até o fim do laço onde estamos fechando a
chave, a variável x que serve de referência e contador irá acumular o
número de vezes que o laço de programação foi executado, fazendo assim a
contagem das voltas dadas pelo computador em um determinado algoritmo.
Leiaut Carielo – Escola de informática com eletrônica 59
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Depois de executar todos os comandos que estão dentro das chaves o
computador retorna ao inicio do laço de programação, só que dessa vez a
variável x será incrementada em +1:
1. Computador lê os parâmetros
2. Computador
executa todos
X+1 os comandos
que estão
dentro do
corpo do laço
3. Computador retorna ao
inicio do laço acrescentando
+1 a variável X, inicialmente
X era 0, agora X é 1.
E todo esse processo se repete até que x seja igual a 9, pois nos
parâmetros do laço de programação definimos que o laço será
continuamente executado até que x seja igual ao valor anterior a 10, por
causa da expressão x<10.
Observe o exemplo anterior ao ser executado no Arduino:
Leiaut Carielo – Escola de informática com eletrônica 60
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Veja que o nome “Arduino” foi escrito na tela 10 vezes, isso devido ao
comando estar dentro do laço.
Também podemos imprimir uma lista de contagem, a partir da variável que
está sendo usada de contador pelo laço de programação, observe:
Com este código:
Teremos este resultado:
A variável i a cada incremento imprime seu valor no serial monitor.
Leiaut Carielo – Escola de informática com eletrônica 61
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Podemos fazer até uma tabuada usando esse artificio, observe:
Fizemos as seguintes alterações no código:
E temos o seguinte resultado:
Para que o resultado saísse da forma esperada tivemos que usar um
comando Serial.print() para cada argumento, pois o comando
Serial.println() ou mesmo o comando Serial.print() não aceita mais de um
argumento, por esse motivo não temos como concatenar valores dentro do
comando, Exemplo:
Caso fosse possível inserir vários argumentos dentro do comando
Serial.println() o faríamos da seguinte maneira:
Serial.println(“5 x “+i+” = “+5*i)
Leiaut Carielo – Escola de informática com eletrônica 62
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Podemos também fazer um laço que em vez de incrementar o valor da
variável ele irá decrementar, funcionando como uma contagem regressiva,
para isso precisamos fazer algumas modificações no laço, observe:
As seguintes modificações foram feitas:
Observe que agora a variável i, que é a referencia de contagem para o laço,
inicia em 10.
E no segundo argumento logo após o primeiro ponto e vírgula temos i>0
que significa que i deve ir até 1 (i>0 = 1), então no nosso laço temos uma
contagem de 10 até 1, no terceiro argumento estamos decrementando o
valor da variável i usando o operador de decremento --.
Veja o resultado que temos agora:
Leiaut Carielo – Escola de informática com eletrônica 63
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Estrutura while
A estrutura de repetição while (ou laço while se preferir) é uma estrutura que
diferentemente da estrutura for não tem um inicio e um fim pré determinado, para
as estruturas do tipo while iremos usar condições para determinar quando o laço
deve parar.
Observe:
Nos tipos de estrutura for, definimos um valor de inicio e um valor final para a
quantidade de voltas:
Código:
Resultado:
Leiaut Carielo – Escola de informática com eletrônica 64
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Nos tipos while iremos impor uma condição, onde o laço será executando
continuamente enquanto a condição determinada for verdadeira, na tradução literal
temos que while significa enquanto, então nossa estrutura while executará uma
série de comandos e instruções “enquanto” uma determinada condição for
verdadeira:
Código:
Resultado:
Veja que temos o mesmo resultado, porém com uma estrutura diferente,
mas do mesmo tipo que é repetição.
Inicialmente declaramos a variável a sendo igual a 0 à int a =0; neste
ponto apenas definimos o valor inicial de a.
Leiaut Carielo – Escola de informática com eletrônica 65
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Na primeira linha do laço onde temos o comando while estamos iniciando o
laço, as condições deverão ser declaradas dentro dos parênteses ao lado do
comando while, observe que temos a condição (a<10) dentro dos
parênteses do nosso laço while, isso significa que o nosso laço será
continuamente executado enquanto o valor da variável a for menor que 10,
uma linha antes declaramos que a variável a é igual a 0 então nossa
condição é verdadeira logo o nosso laço será executado.
Observe que o laço while também tem um corpo iniciando com uma chave e
fechando com outra:
Essas chaves representam o corpo do
while, tudo o que estiver aqui será
executado continuamente enquanto a
condição do laço for verdadeira.
Logo mais no laço temos o comando a++, já vimos que o comando ++ é
um comando de incremento estamos incrementando aqui nessa variável +1
toda vez que o laço completa uma volta:
a+1
Todo o processo se repete até que a seja maior que 10, ou seja 11, então
nossa condição dentro do while já se torna falsa e o laço por sua vez deixa
de ser executado.
As condições declaradas no laço while funcionam de mesmo modo que uma
condicional if, todos os argumentos usados no if podem ser usados também
no laço while, lembrando que while é um laço e executa determinado
comando várias vezes enquanto a condição for verdadeira, já no condicional
if o comando é executado uma única vez.
Com a estrutura while podemos determinar uma condição, onde um botão
enquanto pressionado irá atuar sobre um led fazendo-o piscar.
Breve descrição do nosso algoritmo, como deve ficar:
1. Ler status do botão
2. Enquanto botão estiver pressionado
Leiaut Carielo – Escola de informática com eletrônica 66
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
3. Led acende
4. Atraso de 1 segundo
5. Led apaga
6. Atraso de 1 segundo
Agora vamos traduzir para os comandos do Arduino:
O comando digitalRead() faz a leitura da porta onde temos o botão
conectado e retorna um valor, como é um componente digital (botão) o
valor que o comando digitalRead() irá retornar é 0 ou 1.
O valor que o comando digitalRead() retorna é armazenado na variável
statusBotao:
0-1
Armazena valor na variável statusBotao
As constantes HIGH e LOW são variáveis do tipo int que representam
respectivamente 1 e 0, ou seja se o comando digitalRead() retornar 1 será
o equivalente a HIGH e caso retorne 0 será o equivalente a LOW, por isso
na comparação fizemos da seguinte maneira
à Enquanto statusBotao estiver HIGH
(mesmo que 1) todos os comandos que estão dentro do corpo do laço while
serão executados continuamente até que o statusBotao esteja LOW (mesmo
que 0).
Leiaut Carielo – Escola de informática com eletrônica 67
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Considerações finais
A programação não é algo já pronto que se implementa apenas,
programação é algo que se cria, a partir dos comandos que temos
disponíveis com suas respectivas funções.
Não siga as regras, mas obedeça a sintaxe, pense com calma no que você
deseja fazer antes de escrever o código. É essencial saber os detalhes do
que você pretende fazer.
Se teve alguma ideia tenha em mente uma coisa:
Definitivamente não haverá um comando que
execute toda a sua ideia, por completo, para que
sua ideia saia da imaginação serão necessários
vários e vários comandos, por mais simples que
seja ela, até mesmo para acender um simples led
é necessário mais de um comando, então pense
com calma e use os códigos mais simples
possíveis, não é um código complexo que irá
deixar seu sistema bom, mas um código bem elaborado e com os comandos
necessários para que ele funcione de forma eficaz e eficiente.
Lembre-se as plataformas do Arduino são microprocessadores sua
capacidade de processamento é baixa, um computador executa milhares e
milhões de linhas de códigos, dos mais complexos possíveis, sem problema
algum, porém o Arduino terá dificuldades de executar um código muito
extenso e relativamente complexo e com muitas funções e variáveis.
Leiaut Carielo – Escola de informática com eletrônica 68
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Bibliografia
www.arduino.cc/en/Reference/HomePage
Tutoriais
LABDEGARAGEM.COM
WWW.INSTRUCTABLES.COM
FACACOMARDUINO.INFO
BLOG.FILIPEFLOP.COM
WWW.ARDUINOBR.COM
Fim do material teórico
Leiaut Carielo – Escola de informática com eletrônica 69
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 1
Material prático
Leiaut Carielo – Escola de informática com eletrônica 70
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ABORDAGEM TEÓRICA
Nesta primeira aula iremos trabalhar com leds e
botões, primeiramente veremos como definir as
portas do Arduino onde está o led, e depois
como mandar o sinal para acionar o mesmo.
Depois teremos um pequeno semáforo simulado
em nossa protoboard, e por fim veremos como
ler o estado de um botão e a partir disso acionar
um led, ou seja, iremos programar um botão
para que: ao ser pressionado o led acender e ao
ser solto o led apagar.
Primeiramente tudo o que precisamos fazer é definir as portas onde o componente está, para
isso criaremos uma variável para armazenar o valor que se refere a porta do Arduino.
Uma variável é definida como um espaço na memória do micro controlador que
armazenará um tipo de dado determinado. Essas variáveis deverão receber nomes para poderem
ser referenciadas e modificadas quando necessário.
Para declarar uma variável precisamos primeiramente definir seu tipo, o tipo que usaremos aqui
é o tipo int que recebe valores numéricos inteiros, o nome da nossa variável será o nome do
componente que estaremos usando na porta referida.
Não é uma regra usar o nome do componente para criar a variável visto que o computador não
entende o que é um led ou qualquer outro componente, lembre o computador é um sistema
apenas para processamento de dados ele não possui inteligência/intelecto, ou seja ele não é
racional, logo todos os nomes de variáveis usados aqui em todas as outras aulas serão fictícios
que tem sentido apenas para nos mesmos, para facilitar a programação ao manusear um
determinado componente no código de programação.
Então nossa primeira linha de código ficará semelhante a isso:
Nesta linha acabamos de definir a variável led cujo valor é 2 que posteriormente será a porta do
Arduino onde o componente está conectado, a partir de agora o computador entenderá a
“palavra” led como valor 2 em qualquer parte do código que você a escreva.
Agora dentro do método setup() iremos definir realmente a porta onde está o componente no
Arduino e se é um componente de entrada/sensor (INPUT) ou um componente de
saída/atuador (OUTPUT).
Leiaut Carielo – Escola de informática com eletrônica 71
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
O comando pinMode() está definindo led como OUTPUT, como led = 2 estamos definindo aqui
que a porta 2 do Arduino será saída, ou seja, nesta porta iremos apenas enviar sinais para
acionar componentes.
Enviaremos agora o sinal para acender o led para isso usaremos o método loop(), no método
setup() definimos apenas alguns parâmetros como portas tipo de comunicação etc.., porém é
no loop que iremos manusear os componentes que tivermos no Arduino.
Comando digitalWrite()
Usaremos o comando digitalWrite() para acender o led, porém podemos usar também o
comando analogWrite() que iremos ver nas aulas mais a frente.
Como ficará o comando no método loop():
No comando temos led e HIGH que significam respectivamente: Na porta 2 enviar sinal de ALTO
ou LIGADO, nosso código está pronto tudo o que precisamos fazer agora é enviá-lo para a placa,
mas isso veremos adiante na prática.
A seguir você verá o esquema elétrico da montagem do led, apenas para fins didáticos.
Leiaut Carielo – Escola de informática com eletrônica 72
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Esquema elétrico do led com o Arduino
Leiaut Carielo – Escola de informática com eletrônica 73
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Acender um Led simples
Siga os passos abaixo, montado o esquema na protoboard para acender um Led no Arduino.
Se desejar saber mais sobre led consulte a apostila teórica de Arduino.
Passo 1: Monte o seguinte esquema na protoboard.
Resistor de 1k ohms
Ânodo do Led na porta digital 2 do Arduino.
Leiaut Carielo – Escola de informática com eletrônica 74
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Agora na interface do Arduino escreva o seguinte algoritmo:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o código e a montagem estiverem corretos você verá o led acender.
Leiaut Carielo – Escola de informática com eletrônica 75
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Montando um semáforo
Passo 1: Monte o seguinte esquema na protoboard.
Led vermelho na porta digital 9 – Resistor de 1k Ohms
Led amarelo na porta digital 8 – Resistor de 1k Ohms
Led verde na porta digital 7 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 76
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte código no Arduino.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o código e a montagem estiverem corretos você verá os leds acenderem
consecutivamente.
Leiaut Carielo – Escola de informática com eletrônica 77
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Botão com Led
Iremos agora montar um led e um botão na protoboard, o botão funcionará como atuador
e acenderá o led ao ser pressionado.
Passo 1: Monte o seguinte esquema na protoboard:
Botão na porta digital 4 – Resistor de 10k Ohms
Led na porta digital 3 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 78
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Agora na interface do Arduino escreva o seguinte código:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o código e a montagem estiverem corretos você verá o led acender ao ser
pressionado o botão, e caso o botão não esteja pressionado o led permanece apagado.
Neste código usamos estruturas condicionais para saber mais sobre estruturas
condicionais consulte a apostila teórica.
Leiaut Carielo – Escola de informática com eletrônica 79
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Botão com led piscando
Agora iremos fazer com que o led pisque em vez de só acender ao ser pressionado o botão.
Passo 1: O esquema desse circuito é o mesmo do anterior.
Botão na porta digital 4 - Resistor de 10k Ohms
Led na porta digital 3 - Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 80
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: No algoritmo escreva o seguinte código, ou altere do algoritmo anterior as linhas
marcadas em amarelo.
Modifique aqui
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o código e a montagem estiverem corretos você verá o led piscar ao ser
pressionado o botão, e caso o botão não esteja pressionado o led permanece apagado.
Leiaut Carielo – Escola de informática com eletrônica 81
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Exercícios
Questionário 1:
Observe o código abaixo e responda as questões propostas.
1. Qual o significado do valor 3 na primeira linha do nosso algoritmo onde temos
?
2. Qual o significado do comando OUTPUT na linha onde temos ?
Leiaut Carielo – Escola de informática com eletrônica 82
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
3.Caso você deseje desligar o LED após 5 segundos de funcionamento, como deverá ficar o
seu código? Descreva o comando necessário:
4.Qual a diferença do void setup para o void loop?
5.Para inserir um breve comentário na sua linha de código, qual será a simbologia
demonstrada na sua linha de código?
Leiaut Carielo – Escola de informática com eletrônica 83
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Questionário 2:
Observe o código abaixo e responda as questões propostas.
1. Em quais portas do Arduino estão ligados o LED e o botão, respectivamente?
2. O que significa dizer que o modo do pino do botão será, INPUT?
Leiaut Carielo – Escola de informática com eletrônica 84
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
3. Qual a finalidade da variável Status_botão?
4. Por que o Status_botão está declarado no void loop? Ele poderia ser declarado no void
setup?
5.Explique a lógica da função condicional if, aplicando ao seu programa.
Leiaut Carielo – Escola de informática com eletrônica 85
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Questionário 3:
Observe o código abaixo e responda as questões propostas.
1.O que será o Serial.begin? O valor 9600, o que representa?
2.Qual a finalidade do comando delay?
Leiaut Carielo – Escola de informática com eletrônica 86
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
3.O tempo fornecido no delay está em qual unidade?
4.Qual a função do comando Serial.Println? Informe o pré-requisito na linha de código
para o seu funcionamento.
5.Supondo que os LED’s sejam acionados sem que o botão seja pressionado e delisgados
ao pressionar. Como ficará o código?
Leiaut Carielo – Escola de informática com eletrônica 87
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
6. Observe o código abaixo, informe se o mesmo irá rodar ou não. Justifique sua resposta.
Leiaut Carielo – Escola de informática com eletrônica 88
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
7. Observe o código abaixo, informe se o mesmo irá rodar ou não. Justifique sua resposta.
Leiaut Carielo – Escola de informática com eletrônica 89
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 2
Material prático
Leiaut Carielo – Escola de informática com eletrônica 90
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ABORDAGEM TEÓRICA
Nessa segunda aula prática do curso de Arduino, começaremos a estudar um sensor bastante
conhecido, o LM35, e um resistor variável bastante utilizado, o potenciômetro.
O LM35 é o sensor de temperatura mais popular, embora se pareça com um transistor, ele é um
C.I (circuito integrado). Ele possui uma incrível faixa de atuação de -55ºC até 150ºC, com uma
precisão média de 0,5ºC.
Para que possamos visualizar a temperatura ambiente que está sendo aferida pelo nosso sensor
no serial monitor do Arduino, precisaremos utilizar alguns comandos, para isso, fique bem
atento!
Para utilizar o lm35, você deverá seguir a mesma lógica da ligação de um LED, primeiramente
criaremos uma variável para facilitar na programação quando formos manusear os componentes.
O lm35 é um componente analógico logo deverá estar ligado a uma porta analógica do Arduino.
Nas placas Duemilanove e nos modelos antigos a declaração ficaria da seguinte maneira:
Para se referir as portas analógicas nas placas mais antigas é necessário a adição da letra A
antes do número da porta.
2ºPasso: Como estamos trabalhando com um sensor, dentro do void setup(), o seu pino deverá
ser definido como INPUT.
3ºPasso: Após definir o pino, ainda dentro do void setup() será necessário definir o comando:
Serial.begin(9600), pois a partir dele será possível verificar no serial monitor do Arduino a
temperatura auferida pelo sensor em tempo real.
4ºPasso: Dentro do void loop, será necessário criar uma variável temp (temperatura) que deverá
verificar a leitura analógica do nosso sensor e através de uma equivalência transformar os dados
analógicos em digitais para compreensão do micro controlador.
5ºPasso: Para finalizar, precisaremos do comando Serial.println, que será responsável por
informar no serial monitor do Arduino a temperatura que está sendo auferida no momento.
2.Componentes Analógicos X Digitais
Dentro dos circuitos eletrônicos, encontraremos dois tipos de componentes, os analógicos e os
digitais.
Leiaut Carielo – Escola de informática com eletrônica 91
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
De maneira simplificada, os componentes digitais são aqueles que trabalham com apenas dois
estados ou valores: ligado ou desligado.
Já os componentes analógicos serão aqueles que trabalham com uma variação mais ampla, como
por exemplo o LM 35 que pode informar ao circuito um valor de temperatura que poderá variar
de -55ºC até 150ºC, com isso temos que os componentes analógicos têm vários estados.
3.Os potenciômetros
Os potenciômetros são resistores variáveis, assim como o LM35 são componentes analógicos que
para serem utilizados precisarão estar definidos no void setup, como INPUT.
O código acima está fazendo uma leitura do potenciômetro que está na porta analógica 1. Para
que um potenciômetro funcione corretamente é preciso alimentá-lo com uma corrente através
dos pinos nas extremidades.
A imagem abaixo mostra como é feita a ligação de um potenciômetro no Arduino.
Leiaut Carielo – Escola de informática com eletrônica 92
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Esquema elétrico do sensor de temperatura LM35 com o Arduino
Leiaut Carielo – Escola de informática com eletrônica 93
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
LM35 – Sensor de temperatura
Iremos agora montar o LM35 que é um sensor de temperatura analógico que suporta até
150 C°.
Passo 1: Monte o seguinte esquema na protoboard:
Coletor na porta analógica A1
Leiaut Carielo – Escola de informática com eletrônica 94
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte algoritmo na interface do Arduino:
Na linha onde temos: estamos
fazendo uma equivalência de 1023 para 500, pois o sensor de temperatura retorna um valor
entre 0 e 1023 e só suporta temperatura de 150 C° então quer dizer que quando o sensor
estiver retornando 1023 ele estará detectando 150 C° e assim por diante. Por esse motivo
essa equivalência foi necessária pois quando o sensor estiver retornando 512 logo a
temperatura será de 75 C°.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para que possamos ver a temperatura que o sensor está captando temos
que abrir o monitor serial clicando no botão:
Clique aqui
Se o circuito e o código estiverem corretos você verá a temperatura ambiente no serial
monitor.
Leiaut Carielo – Escola de informática com eletrônica 95
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Lm35 – com Leds
Iremos agora montar um circuito com um led azul e um led vermelho e um lm35, nesse
circuito o led azul irá acender quando a temperatura estiver baixa(indicando frio) e o led
vermelho irá acender quando a temperatura estiver alta(indicando calor).
Passo 1: Monte o seguinte esquema na protoboard:
Led azul na porta digital 3 – Resistor de 1k Ohms
Led vermelho na porta digital 2 – Resistor de 1k Ohms
LM35 na porta analógica 1
Leiaut Carielo – Escola de informática com eletrônica 96
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Agora digite o seguinte algoritmo na interface do Arduino:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o circuito e o código estiverem corretos você vera o led azul acender caso a
temperatura estiver abaixo de 25 C°, caso contrário o led vermelho acenderá,
lembrando que esse valor de temperatura pode ser alterado.
Leiaut Carielo – Escola de informática com eletrônica 97
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Potenciômetro
Iremos agora ver o funcionamento do potenciômetro no Arduino, assim também como a
leitura dos dados que ele fornece.
Passo 1: Monte o seguinte esquema na protoboard:
Pino coletor (meio) na entrada analógica 1
Os pinos laterais podem ser alternados entre 5V e GND.
Leiaut Carielo – Escola de informática com eletrônica 98
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte algoritmo na interface do Arduino.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para que possamos ver a o valor que o potenciômetro está enviando temos
que abrir o monitor serial clicando no botão:
Clique aqui
Se o código e o circuito estiverem corretos você verá o valor do potenciômetro no
monitor serial variando de acordo com o manuseio
Leiaut Carielo – Escola de informática com eletrônica 99
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Led - analogWrite()
Vamos acender o led usando o comando analogWrite(), que nos permite acender o led com
determinada intensidade, para isso ser possível é necessário que o led esteja em uma das
portas PWM do Arduino, o comando analogWrite recebe dois argumentos onde no primeiro
argumento a ser especificado é a porta onde está o led, no segundo argumento devemos
especificar um valor entre 0 e 255 que é a intensidade do sinal que será enviado para o led
na porta especificada, veja o exemplo a seguir:
Suponhamos que temos um led na porta 8 e queremos acender esse led com metade da
intensidade, o comando analogWrite() ficaria da seguinte maneira:
analogWrite(8, 127);
Onde 8 é a porta onde se encontra o led, lembrando que essa porta deve ser uma porta PWM
para que esse comando funcione, o valor 127 é a intensidade do sinal a ser enviado para a
porta. Iremos ver mais adiante na prática, siga os passos abaixo para isso.
Passo 1: Monte o seguinte esquema na protoboard:
Resistor de
1k Ohms
Led na porta
digital 3
Leiaut Carielo – Escola de informática com eletrônica 100
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte algoritmo na interface do Arduino:
Mude esse valor para alterar
a intensidade com que o led
acende, o valor deve ser
entre 0 e 255
Passo 3: Envie o algoritmo para a placa:
Clique aqui
Você pode usar um laço de programação se desejar fazer com que o led acenda
gradativamente automaticamente, experimento o seguinte código:
Todo o conteúdo teórico sobre laço de programação você pode encontrar no material
teórico.
Leiaut Carielo – Escola de informática com eletrônica 101
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Potenciômetro com Led
Iremos agora fazer com que o led aumente ou diminua a intensidade do brilho conforme
girarmos o potenciômetro.
Passo 1: Monte o seguinte esquema na protoboard:
Potenciômetro na porta analógica A1
Led na porta digital 3 – Resistor de 1k Ohms
Passo 2: Escreva o seguinte algoritmo na interface do Arduino:
Leiaut Carielo – Escola de informática com eletrônica 102
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Observe na linha estamos
fazendo uma equivalência de 1023 para 255 pois a escrita analógica só suporta
valores entre 0 e 255, como o potenciômetro retorna valores entre 0 e 1023
precisamos fazer essa equivalência, o valor (4.01176471) obtivemos pela divisão de
1023 por 255.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para que possamos ver a o valor que o potenciômetro está enviando temos
que abrir o monitor serial clicando no botão:
Clique aqui
Se o código e o circuito estiverem corretos você verá o led aumentar ou diminuir a
intensidade do brilho conforme girarmos o potenciômetro.
Leiaut Carielo – Escola de informática com eletrônica 103
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Exercícios
Questionário 1
Observe o código abaixo e responda as questões propostas.
1.Por que o sensor de temperatura, será denominado como INPUT?
Leiaut Carielo – Escola de informática com eletrônica 104
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
2.Explique, porquê teremos na variável temperatura a operação matemática:
(sensor_temp)*500/1023.
3.Para que o LED Azul desligue e o vermelho ligue com uma temperatura maior que 30º, o
que você deverá fazer?
4.Dentro da função do comando else que está se referindo ao condicional if?
5.Temos uma informação faltando dentro desse código, você identifica qual é?
Leiaut Carielo – Escola de informática com eletrônica 105
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Questionário 2
Observe o código abaixo e responda as questões propostas.
1.Realize através de um desenho, como será ligado o sensor lm35.
2.Qual a temperatura máxima de trabalho desse sensor? Como você pode identificar
através do código acima?
Leiaut Carielo – Escola de informática com eletrônica 106
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Questionário 3
Observe o código abaixo e responda as questões propostas.
1.Qual a função do potenciômetro?
Leiaut Carielo – Escola de informática com eletrônica 107
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
2.Realize através de um desenho como será ligado o seu potenciômetro, detalhando a
ligação de seus pinos.
3.Após declarar a variável x, temos a seguinte operação matemática:
analogRead(r)/4.01176471. Qual o seu significado? Como chegamos a esse valor?
4.Qual o valor máximo que os componentes analógicos retornam para o Arduino?
Leiaut Carielo – Escola de informática com eletrônica 108
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 3
Material prático
Leiaut Carielo – Escola de informática com eletrônica 109
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ABORDAGEM TEÓRICA
Nessa terceira aula prática do curso de Arduino, começaremos a estudar um resistor variável,
conhecido como LDR.
LDR – Light Dependent Resistor
A sigla LDR é a abreviação de Light Dependent Resistor (Resistor Dependente de luz), sua
funcionalidade está diretamente relacionada ao seu nome, ou seja, o LDR é um resistor que tem
sua resistência alterada de acordo com a luz que incide o mesmo.
O LDR é um componente analógico pois tem vários estados
O Arduino irá ler o estado do LDR e através do conversor A/D irá converter esses estados em
valores digitais indo de 0 a 1023 que poderemos ver através do Serial monitor.
Ligação básica de um LDR
Jumper vermelho na porta 5V do Arduino
Jumper preto na porta GND
Jumper azul na porta analógica A1
O jumper verde corresponde ao coletor, ou seja, esse terminal irá enviar o sinal analógico para o
Arduino, que por sua vez irá converter esses sinais analógicos em valores digitais.
Esquema elétrico do LDR com o Arduino
Leiaut Carielo – Escola de informática com eletrônica 110
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 111
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
LDR – Sensor de luz
Agora iremos montar o sensor de luz que é um foto-resistor, seu valor altera conforme a
intensidade da luz que ele recebe.
Passo 1: Monte o seguinte esquema na protoboard:
Coletor do LDR (jumper verde) na porta analógica A1 do Arduino.
Leiaut Carielo – Escola de informática com eletrônica 112
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Digite o seguinte algoritmo.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para que possamos ver a o valor que o LDR está enviando temos que abrir
o monitor serial clicando no botão:
Clique aqui
Se o circuito estiver e a programação estiverem corretos você poderá ver os valores
que o LDR retorna de acordo com a exposição da luz, teste com uma lanterna.
Leiaut Carielo – Escola de informática com eletrônica 113
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
LDR com Led
Agora iremos montar um circuito com um LDR e um Led onde o valor retornado pelo LDR
irá atuar sobre o Led intensificando ou enfraquecendo seu brilho.
Passo 1: Monte o seguinte circuito na protoboard.
Led na porta digital 11
LDR na porta analógica A1
Leiaut Carielo – Escola de informática com eletrônica 114
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte algoritmo.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o circuito estiver montado corretamente e o código também estiver correto, você
verá a intensidade do brilho do led diminuir ou aumentar conforma a exposição do
LDR a luz.
Leiaut Carielo – Escola de informática com eletrônica 115
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Buzzer
Passo 1: Monte o seguinte circuito:
Buzzer na porta digital 4
Leiaut Carielo – Escola de informática com eletrônica 116
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte código
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o código e o circuito estiverem corretos você ouvirá o Buzzer apitar por 2 segundos.
Leiaut Carielo – Escola de informática com eletrônica 117
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Buzzer com Led e PushButton
Agora iremos montar um circuito onde o Buzzer irá atuar junto com os leds, alternando
entre apitar o buzzer e acender o led.
Passo 1: monte o seguinte esquema:
Porta digital 8 Porta digital 7
Observe que um led
juntamente com o
buzzer não estão
ligados ao Arduino,
mas ao Push button.
Push Button na porta digital 8
Led na porta digital 7
Leiaut Carielo – Escola de informática com eletrônica 118
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Digite o seguinte algoritmo:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Teste seu projeto pressionando o push button, o circuito deverá alterar a atuação
entre os led e o buzzer.
Leiaut Carielo – Escola de informática com eletrônica 119
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Exercícios
Questionário 1
Observe o código abaixo e responda as questões propostas.
1.Qual a função do LDR neste código?
2.O LDR é um tipo de resistor?
Leiaut Carielo – Escola de informática com eletrônica 120
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
3.Realize a representação da simbologia do LDR.
4.Qual a finalidade da variável luz, dentro do void loop?
Questionário 2
Observe o código abaixo e responda
1.Qual a finalidade do programa que acabamos de realizar?
Leiaut Carielo – Escola de informática com eletrônica 121
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
2. Observe o código abaixo, informe se o mesmo irá rodar ou não. Justifique sua resposta.
Leiaut Carielo – Escola de informática com eletrônica 122
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 4
Material prático
Leiaut Carielo – Escola de informática com eletrônica 123
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ABORDAGEM TEÓRICA
Nessa quarta aula prática do curso de Arduino, começaremos a estudar o reed switch, conhecido
como reed magnético que é uma chave cujo acionamento é através do magnetismo.
Reed Switch
Como o próprio nome informa, o reed switch (chave) será um tipo de interruptor que é acionada
através do magnetismo (imã), veja abaixo um modelo desse componente:
Observe que temos uma ampola com duas hastes de metal que por padrão estão normalmente
abertas - NA
Quando aproximamos um imã da ampola os contatos se fecham permitindo a passagem de
corrente e fechando o circuito, no momento em que o circuito é fechado um sinal é enviado
para a porta digital do Arduino que faz a conexão com o reed switch.
Quando o circuito está fechado o Arduino recebe o valor 1.
Quanto o circuito está aberto o Arduino recebe o valor 0.
Switch Button
O switch button ou botão chave é um botão que pode ser acionado ou não mantendo o
estando em que foi deixado: Uma vez pressionado o botão mantém esse estado até que você
pressione novamente para alterar o estado do botão deixando-o solto. Veja um exemplo do
botão na imagem abaixo:
Leiaut Carielo – Escola de informática com eletrônica 124
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Esquema elétrico do Reed Switch com o Arduino
Leiaut Carielo – Escola de informática com eletrônica 125
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Reed Switch
Iremos agora ver o funcionamento do Reed Switch no monitor serial.
Passo 1: Monte o seguinte esquema na protoboard:
Reed Switch (jumper azul) na porta digital 3 do Arduino – Resistor de 10k Ohms
Leiaut Carielo – Escola de informática com eletrônica 126
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte código na interface do Arduino:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para ver o estado do Reed Switch abra o monitor serial clicando no botão:
Clique aqui
Se o circuito estiver e a programação estiverem corretos você verá o valor no serial
monitor alternar entre 0 e 1 ao aproximar o imã do Reed Switch.
Leiaut Carielo – Escola de informática com eletrônica 127
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Reed Switch com Led
Agora iremos acionar um led quando o Reed Switch for ativado.
Passo 1: Monte o seguinte circuito na protoboard.
Reed Switch na porta digital 3 – Resistor de 10k Ohms
Led na porta digital 4 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 128
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte algoritmo.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o circuito estiver e a programação estiverem corretos você verá o Led acender
aproximar o imã do Reed Switch.
Leiaut Carielo – Escola de informática com eletrônica 129
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Reed Switch Com Led E Push Button
Agora iremos montar um circuito onde o push Button funcionará em conjunto com o Reed
Switch, onde o led irá acender caso o Reed Switch e o push button estiverem ambos
ativados.
Passo 1: Monte o seguinte circuito:
Push button na porta digital 5 – Resistor de 10k ohms
Led na porta digital 4 – Resistor de 1k ohms
Reed Switch na porta digital 3 – Resistor de 10k ohms
Leiaut Carielo – Escola de informática com eletrônica 130
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Digite o seguinte código:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para que possamos ver o estado do Reed Switch e do Push Button temos
que abrir o monitor serial clicando no botão monitor serial:
Clique aqui
Se o circuito estiver e a programação estiverem corretos você verá o Led acender
aproximar o imã do Reed Switch com o push button ativo.
Leiaut Carielo – Escola de informática com eletrônica 131
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Reed Switch com 4 Leds e Push Button
Iremos agora montar um circuito que irá alternar entres os leds com apenas um push
Button.
Passo 1: Monte o seguinte circuito na protoboard:
Led (jumper verde) na porta digital 8 – Resistor de 1k Ohms
Led (jumper branco) na porta digital 9 – Resistor de 1k Ohms
Led (jumper laranja) na porta digital 10 – Resistor de 1k Ohms
Led (jumper azul claro) na porta digital 11 – Resistor de 1k Ohms
Reed Switch na porta digital 2 – Resistor de 10k Ohms
Leiaut Carielo – Escola de informática com eletrônica 132
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Push button na porta digital 5 – Resistor de 10k Ohms
Passo 2: Escreva o seguinte algoritmo:
Leiaut Carielo – Escola de informática com eletrônica 133
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Observe aqui que usamos a estrutura de seleção Switch, para saber mais da sintaxe
dessa estrutura consulte a apostila teórica.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Leiaut Carielo – Escola de informática com eletrônica 134
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 4: Agora abra o monitor serial para ver o status do botão e do Reed Switch:
Clique aqui
Se o circuito estiver e a programação estiverem corretos você verá cada led acender
individualmente se o Reed switch estiver ativado e o push button for pressionado.
Leiaut Carielo – Escola de informática com eletrônica 135
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 5
Material prático
Leiaut Carielo – Escola de informática com eletrônica 136
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ABORDAGEM TEÓRICA
Nessa quinta aula prática do curso de Arduino, começaremos a estudar o sensor ultrassônico e
realizaremos diversas montagens de circuitos com esse componente.
Sensor Ultrassônico
O sensor ultrassônico ou HCSR-04 é um sensor que pode medir distâncias de 2 a 400 centímetros
sem a necessidade de contato físico do componente com a superfície, a medida é aferida através
de ondas, onde um pulso (em nível alto) enviado a velocidade de 340m/s bate num determinado
objeto e é refletido de volta para o sensor, que capta o tempo que o pulso demorou para
percorrer todo o caminho até retornar para o sensor. Observe a imagem ilustrando o
funcionamento do sensor:
Leiaut Carielo – Escola de informática com eletrônica 137
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
O tempo é obtido em microssegundos, ou seja, 0.000001 segundo seria equivalente a uma
unidade nessa medida.
Para medir a distância a partir do tempo que o sinal levou para percorrer todo o caminho a
velocidade de 340m/s faremos um calculo da seguinte forma: (tempo do sinal * velocidade
(340m/s)) / 2.
O tempo do sinal iremos converter em segundos, ou seja, se o sensor captou 1000
microssegundos representaremos com o valor 0,001 segundo, já a distância queremos em
centímetros, então devemos converter a unidade de medida m/s para cm/s para isso basta
multiplicar seu valor por 100, ou seja nossa medida de velocidade agora fica 34000cm/s.
Feito isso basta fazer as contas: (0,001s*34000cm/s) /2 à 17cm
Isso quer dizer que caso o tempo de retorno do sinal seja de 1000 microssegundos teremos a
distância de 17cm.
Também podemos calcular a distância das seguintes formas: (tempo do sinal / 58.8) ou ainda
(tempo do sinal /29.4 /2), se fizermos os cálculos com o tempo que obtivemos anteriormente,
teremos as seguintes formas de calcular:
i. 1000 microssegundos / 58.8 = 17cm
ii. 1000 microssegundos / 29.4 / 2 = 17cm
Observe que ambos os cálculos obtiveram o mesmo resultado, porém de forma mais simplificada.
A divisão por 2 é devido a distância percorrida pelo sinal ser o dobro da distância do objeto para
o sensor, pois o sinal sai do sensor percorre uma distância, bate no objeto e percorre uma mesma
distância voltando para o sensor, ou seja, a distância do objeto equivale a metade da distância
percorrida.
Veja a seguir o embasamento teórico da fórmula para se obter a distância do sensor
ultrassônico
Leiaut Carielo – Escola de informática com eletrônica 138
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
EMBASAMENTO TEÓRICO – SENSOR ULTRASSÔNICO
O princípio de funcionamento dos sensores ultrassônicos está baseado na emissão de uma onda
sonora de alta frequência, e na medição do tempo levado para a recepção do eco produzido
quando esta onda se choca com um objeto capaz de refletir o som. Veremos agora que podemos
tanto usar a equação da física de movimento uniforme, relacionando a velocidade média com o
tempo e distância percorrida para sabermos a distância em que o sensor ultrassônico está do
objeto, quanto usar a equação fornecida pela folha de dados do sensor de distância, uma vez que
uma é proveniente da outra.
Faremos um exemplo com as duas situações para que o aluno perceba que a resposta é
similar e, portanto, as duas podem ser usadas. Na apostila, foram explicados os dois métodos,
mas nos códigos foi utilizado o método da folha de dados do sensor, já que é mais simples.
Relembrando os dois métodos:
1º Método:
∆𝑠
𝑣=
∆𝑡
Isolando ∆s, temos:
∆s=v x ∆t
Agora substituindo ∆s por Sf – So (espaço final menos espaço inicial):
Sf – So= v x ∆t
Passando So para o outro lado da equação e invertendo o sinal:
Sf = So+ v x ∆t
Como o espaço inicial e o tempo inicial são 0 e o espaço final é 2S, pois o som emitido pelo sensor
incide sobre o objeto e volta, temos:
2S = v x t
Isolando S:
𝑣𝑥𝑡
𝑆 =
2
*
Passando v para o denominador como :
+
𝑡
𝑆 =
1
2𝑥 𝑣
Leiaut Carielo – Escola de informática com eletrônica 139
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Sabendo que Vsom = 340 m/s = 34000 cm/s e substituindo na equação encontrada:
4 4
𝑆 = : ≅ 5.5555@AA
89
;<===
Atenção: Perceba que você precisa fornecer o tempo em segundos, pois a velocidade está
em cm/s e, portanto, o inverso da velocidade (1/v) está em s/cm. Assim, a resposta será dada em
cm (centímetros).
2º método:
48
𝑆 ≅ @A.A
Onde t2 é dado em microssegundos.
Note que a equação do 2º método é muito semelhante à do 1º método. A diferença está
exatamente no fato de que uma é levando em consideração ao tempo em segundos e a outra em
microssegundos.
Provaremos agora a equação do 2º método:
Para provar a equação do 2º método, temos que utilizar a equação do 1º método.
4
𝑆 ≅ 5.5555@AA
Em que t é dado em segundos.
O segundo método trata de uma equação em que o tempo é dado em microssegundos.
Então, é preciso fazer algumas adaptações na equação.
Como 2x(1/v) é de 0.0000588 s/cm e precisamos transformá-la para μs/cm, devemos
multiplicar por 10.
Como o tempo no primeiro método é em segundos e pretende-se em 𝜇𝑠 , já que o
denominador da equação está em 𝜇𝑠/𝑐𝑚 , a fim de se obter uma distância percorrida em
centímetros (cm), deve-se fazer o seguinte cálculo:
t à 103. 𝜇𝑠
t2 à 1 𝜇𝑠
4
t2 = *567= 10. 𝑡, onde t é dado em segundos
Assim, temos:
Leiaut Carielo – Escola de informática com eletrônica 140
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
4 *57 4
𝑆 ≅5.5555@AA ≅ @A.A
Onde o tempo t é dado em segundos. Substituindo t2 = 10. 𝑡, temos:
*57 4 48
𝑆 ≅ @A.A ≅@A.A
Onde t2 é dado em microssegundos.
Resumo: De forma simplificada, se temos a equação do primeiro método em mãos, isto
4
é, 𝑆 ≅5.5555@AA, podemos multiplicar tanto o numerador quando o denominador por 10. e não
4 *57 4 48
alteraremos o resultado. Ao fazer isso, teremos 𝑆 ≅ ≅ ≅ , em que t é dado em
5.5555@AA @A.A @A.A
segundos e t2 em microssegundos.
Exemplo
Faremos agora um exemplo em que t = 0,001 s.
Resolvendo pelo 1º método:
4
𝑆 ≅ 5.5555@AA
Em que o tempo t é dado em segundos.
5.55*
𝑆 ≅5.5555@AA
S≅17 cm
Resolvendo pelo 2º método:
4
𝑆 ≅ @A.A
Em que o tempo t é dado em microssegundos.
Como t = 0,001 s = 1000 μs:
*555
𝑆 ≅ @A,A ≅ 𝟏𝟕 𝒄𝒎
S≅17 cm
Leiaut Carielo – Escola de informática com eletrônica 141
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Método pulseIn()
BREVE ABORDAGEM DE UM MÉTODO QUE IREMOS UTILIZAR MUITO PARA OBTERMOS A DURAÇÃO DO PULSO ENVIADO PELO
SENSOR ULTRASSÔNICO.
Lê um pulso (tanto HIGH como LOW) em um pino. Por exemplo, se valor for HIGH, pulseIn() espera
que o pino vá para HIGH, inicia a cronometragem, e então espera que o pino vá para LOW e para
a cronometragem. Retorna a duração do pulso em microssegundos. Desiste e retorna 0 se
nenhum pulso iniciar dentro de um tempo especificado.
O tempo desta função foi determinado empiricamente e provavelmente dará erro em pulsos
longos. Funciona com pulsos entre 10 microssegundos e 3 minutos.
Sintaxe do método:
pulseIn(pino, valor)
pulseIn(pino, valor, tempo)
Parâmetros:
pino: O número do pino no qual você deseja ler o pulso. (int)
valor: Tipo de pulso a ler: tanto HIGH como LOW. (int)
tempo (opcional): O valor de tempo em microssegundos a esperar para que o pulso comece; o
padrão é um segundo (unsigned long)
Retorna:
A duração do pulso (em microssegundos) ou 0 se nenhum pulso iniciar antes do tempo
especificado (unsigned long)
Nesse código, a variável duration recebe o tempo do eco do sinal, em microssegundos, obtido
pela função pulseIn(). Essa função retorna à duração do pulso de eco durante nível alto. A variável
duration, portanto, armazena o valor em microssegundos do tempo do sinal.
Depois, para encontrar a distância basta dividir o tempo do eco, que a função pulseIn() nos
retorna, por 58.8.
Leiaut Carielo – Escola de informática com eletrônica 142
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
HCSR – 04 – Sensor Ultrassônico (Distancia)
Agora usaremos o Sensor ultrassônico para pedir distancias.
Passo 1: Monte o seguinte circuito na protoboard:
Pino Trigger na porta digital 7
Pino Echo na porta digital 6
Leiaut Carielo – Escola de informática com eletrônica 143
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte código:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para ver a distância que o sensor está detectando abra o monitor serial
clicando no botão:
Clique aqui
Se o circuito estiver e a programação estiverem corretos você verá a distância em
centímetros no monitor serial, lembrando que o sensor não detecta grandes
distâncias (limite de 4 metros).
Leiaut Carielo – Escola de informática com eletrônica 144
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Sensor Ultrassônico com Leds
Agora iremos montar o sensor ultrassônico que irá acionar os leds de acordo com a
variação da distância.
Passo 1: Monte o seguinte circuito na protoboard:
Pino Trigger na porta digital 7
Pino Echo na porta digital 6
Led verde na porta digital 9 – Resistor de 1k Ohms
Led amarelo na porta digital 10 – Resistor de 1k Ohms
Led vermelho na porta digital 11 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 145
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte algoritmo:
Leiaut Carielo – Escola de informática com eletrônica 146
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para ver a distância que o sensor está detectando abra o monitor serial
clicando no botão:
Clique aqui
Se o circuito estiver e a programação estiverem corretos você verá a distância em
centímetros no monitor serial e os leds serão acionados conforme a distância que o
sensor está lendo.
Leiaut Carielo – Escola de informática com eletrônica 147
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Sensor Ultrassônico com Buzzer
Montaremos agora um circuito que irá se comportar semelhante ao sensor de ré do carro.
Passo 1: Monte o seguinte esquema na protoboard:
Pino Trigger na porta digital 7
Pino Echo na porta digital 6
Buzzer na porta digital 10
Leiaut Carielo – Escola de informática com eletrônica 148
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte algoritmo:
Leiaut Carielo – Escola de informática com eletrônica 149
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para ver a distância que o sensor está detectando abra o monitor serial
clicando no botão:
Clique aqui
Se o circuito estiver e a programação estiverem corretos você irá escutar o buzzer
apitar cada vez mais rápido ao aproximar algum objeto do Sensor ultrassônico.
Leiaut Carielo – Escola de informática com eletrônica 150
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Exercício
I. Monte um circuito com o HCSR-04 com 2 leds um vermelho e um verde, no circuito
o led verde deverá acender quando a distância equivalente a 5 dedos for detectada
pelo sensor ultrassônico, caso a distância detectada for equivalente a 2 dedos ou
menos o led vermelho deverá acender, caso a distância for menor que 5 dedos e
maior que 2 dedos os dois leds deverão ficar apagados.
II. Monte um circuito com apenas 1 led e o sensor ultrassônico, no circuito o led deve
acender com intensidade proporcional a distância detectada pelo sensor
considerando a distância máxima de 40 cm, quando a distância for de 40 cm o led
deverá acender com intensidade total.
Leiaut Carielo – Escola de informática com eletrônica 151
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 6
Material prático
Leiaut Carielo – Escola de informática com eletrônica 152
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
ABORDAGEM TEÓRICA
Nessa aula veremos como usar um led com propriedades diferentes, o led RGB.
LED RGB
Imagem: Maker Project RGB LED Animated Pixel Box
O Led RGB é um componente composto por três leds, cada led com uma cor única, a saber:
vermelho, verde e azul. Cada led pode ser acionado individualmente ou em conjunto, cada led
pode ser acionado em 256 intensidades diferentes, isso permite ao led RGB uma diversidade de
mais de 16 milhões de cores possíveis, para ser mais exato, 256³ de cores que podem ser geradas
pelo led RGB.
Existem dois tipos de led RGB, Ânodo comum e Cátodo comum, veja abaixo o exemplo:
Imagem: Blog como fazer as coisas
Observe que no led RGB ânodo comum o terminal maior corresponde ao terminal de
alimentação (5V), já no tipo Cátodo comum o terminal maior corresponde ao aterramento (GND),
Leiaut Carielo – Escola de informática com eletrônica 153
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
como saber quando um led RGB é ânodo comum ou cátodo comum? Veja a seguir o teste para
identificar se um Led RGB ânodo comum e cátodo comum.
Para identificar se um Led RGB é ânodo comum ou cátodo comum, faça a seguinte montagem
na protoboard:
Resistor de 1k Ohms
Em seguida conecte o Arduino ao computador, se o led acender é do tipo ânodo comum, caso
contrário é do tipo cátodo comum.
Isso diferencia no modo como programamos o código, o led RGB necessita de alimentação e terra
como todos os outros leds, porém temos 4 terminais, como fazer a ligação?
Leiaut Carielo – Escola de informática com eletrônica 154
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Como já vimos anteriormente o led RGB ânodo comum recebe alimentação no terminal maior, e
o led RGB cátodo comum recebe aterramento no terminal maior, os demais terminais que são
referentes as cores serão ligados nas portas digitais, cada um em uma porta digital diferente,
portanto os terminais referentes as cores terão funções diferenciadas nos dois tipos de led RGB,
no tipo ânodo comum os terminais referentes as cores que serão ligados nas portas digitais terão
a função de aterramento, pois o terminal maior tem a função de alimentação, portanto para
acionar alguma cor no led RGB enviaremos o sinal de LOW, ou seja se por exemplo o terminal
referente a cor vermelha está ligado na porta digital 2, o comando para acionar a cor seria:
portanto a configuração para manusear o led RGB tipo ânodo comum é a
seguinte:
Acionar algum terminal à
Desligar algum terminal à
Já no led RGB cátodo comum a configuração é contrária, pois como o terminal maior tem a função
de terra os demais terminais que são referentes as cores terão a função de alimentação, portanto
a configuração para manusear o led RGB tipo cátodo comum é a seguinte:
Acionar algum terminal à
Desligar algum terminal à
Observe que a configuração para manusear um led RGB do tipo cátodo comum é a mesma que
qualquer outro led, somente nos leds RGB do tipo ânodo comum a configuração é contrária.
Cada terminal pode ser acionado em 256 intensidades diferentes através do comando
analogWrite lembrando que para acionar o led nessa função o terminal do mesmo deve estar em
uma porta do Arduino com função PWM, portanto podemos acionar um único terminal em 256
intensidades diferentes, se tivermos por exemplo o terminal referente a cor azul conectado a
porta 3 no Arduino Mega2560 podemos usar o comando analogWrite da seguinte maneira:
Onde x deve ser substituído por um valor de 0 a 255, onde 0 representa a intensidade mínima e
255 a intensidade máxima no led RGB do tipo cátodo comum, no led RGB tipo ânodo comum
255 representa intensidade mínima e 0 representa intensidade máxima. Podemos fazer isso em
qualquer terminal referente a uma cor simultaneamente a qualquer outro terminal, por exemplo:
para acender o led RGB, tipo ânodo comum, na cor cyano, supondo que os terminais referentes
as cores vermelha, verde e azul estão respectivamente nas portas 2, 3 e 4 do Arduino Mega2560,
usaríamos os seguintes comandos:
Logo você será capaz de produzir milhões de cores com esse led. Agora vamos a prática!
Leiaut Carielo – Escola de informática com eletrônica 155
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Led RGB
Iremos agora montar o Led RGB e alterar suas cores no código.
Passo 1: Monte o seguinte esquema na protoboard:
Jumper vermelho na porta digital 11 – Resistor de 1k Ohms
Jumper verde na porta digital 10 – Resistor de 1k Ohms
Jumper azul na porta digital 9 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 156
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Esquema do Led RGB tipo Ânodo Comum
Ânodo Comum
Passo 2: Agora escreva o seguinte algoritmo:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o circuito e a programação estiverem corretos o Led RGB acenderá azul.
Leiaut Carielo – Escola de informática com eletrônica 157
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Acender outras cores no Led RGB
Para acender outras cores ainda no mesmo circuito que montamos altere dentro do loop o
comando digitalWrite deixando-o da seguinte maneira:
Agora envie o seu código para a placa e confira o resultado.
Se desejar acender mais de uma cor ao mesmo tempo basta dar o comando digitalWrite para
as cores desejada, Exemplo:
Irá acender a cor azul e vermelho ao mesmo tempo no Led RGB.
Leiaut Carielo – Escola de informática com eletrônica 158
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Led RGB com analogWrite()
Iremos agora fazer com que o Led RGB apresente diferentes variações de cores
misturando as cores em intensidades diferentes.
Passo 1: Monte o mesmo esquema exemplo anterior:
Jumper vermelho na porta digital 11 – Resistor de 1k Ohms
Jumper verde na porta digital 10 – Resistor de 1k Ohms
Jumper azul na porta digital 9 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 159
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Para acender o led RGB usando o comando analogWrite o terminal referente a cor
que deseja deverá estar na porta ~PWM do Arduino. No nosso caso todos os terminais
já estão nas portas ~PWM.
Passo 2: Agora escreva o seguinte algoritmo:
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o circuito estiver e a programação o Led RGB acenderá azul intensificando a cor a
cada segundo, e em seguida apagando.
Leiaut Carielo – Escola de informática com eletrônica 160
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Led RGB – alterar cores (monitor serial)
Iremos agora usar o monitor serial para alterar as cores do led RGB em tempo real.
Passo 1: O circuito que iremos usar é o mesmo do exemplo anterior:
Jumper vermelho na porta digital 11 – Resistor de 1k Ohms
Jumper verde na porta digital 10 – Resistor de 1k Ohms
Jumper azul na porta digital 9 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 161
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Agora digite o seguinte algoritmo:
Leiaut Carielo – Escola de informática com eletrônica 162
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para poder alterar as cores abra o monitor serial clicando no botão:
Clique aqui
Passo 5: Agora digite no serial monitor a letra g que corresponde a cor verde:
Se todo o circuito e a programação estiver correta você verá a cor do led RGB mudar
ao digitar as letras r, g ou b.
Leiaut Carielo – Escola de informática com eletrônica 163
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Led RGB – alterar cores (Potenciômetro)
Iremos agora usar três potenciômetros para alterar as cores do led RGB.
Passo 1: Monte o seguinte esquema:
Potenciômetro (jumper vermelho) na porta analógica A1
Potenciômetro (jumper verde) na porta analógica A2
Potenciômetro (jumper azul) na porta analógica A3
Led RGB mesmo esquema dos exemplos anteriores
Terminal vermelho do RGB à porta digital 11 – Resistor de 1k Ohms
Terminal verde do RGB à porta digital 10 – Resistor de 1k Ohms
Terminal azul do RGB à porta digital 9 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 164
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Digite o seguinte código:
Leiaut Carielo – Escola de informática com eletrônica 165
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora abra o monitor serial clicando no botão:
Clique aqui
Gire os potenciômetros e confira se as cores se misturam no led RGB.
Exercício
I. Agora monte um circuito com 3 botões onde cada botão irá acender uma cor
diferente do led RGB.
Leiaut Carielo – Escola de informática com eletrônica 166
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 7
Material prático
Leiaut Carielo – Escola de informática com eletrônica 167
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Teclado matricial 4x4 - Abordagem Teórica
Nessa sétima aula de Arduino iremos aprender a usar o teclado matricial 4x4, que pode ser
usado para manusear sistemas de alarme e de automação, veja abaixo um modelo do teclado
que iremos usar:
Este teclado é formado por uma matriz de 4 linhas por 4 colunas, permitindo assim uma
combinação de 16 teclas, observe:
Circuito da matriz
1 4 5 8
Imagem: CircuitsToday.
Observe que temos no total 8 pinos, 4 pinos representando as linhas e 4 pinos representando as
colunas, se colocarmos as imagens sobrepostas teremos a formação do teclado.
Leiaut Carielo – Escola de informática com eletrônica 168
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Observe abaixo:
Veja que as teclas são uma combinação de trilhas, ao
ser pressionado um botão, essas trilhas entram em
contato, enviando o sinal digital para a porta do
Arduino, que por sua vez irá interpretar o sinal e
executar alguma ação (se programada a ação).
Para esse componente não usaremos uma biblioteca, apesar de ter algumas que podem até
facilitar nosso trabalho, iremos programar tecla por tecla individual.
Os pinos de 1 a 4 usaremos como atuadores, ou seja, saída (OUTPUT)
Através desses pinos enviaremos um sinal que irá percorrer toda a trilha dos quatro pinos
Leiaut Carielo – Escola de informática com eletrônica 169
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Já os quatro pinos de 5 a 8 usaremos como sensores (INPUT)
Esses pinos irão detectar quando for pressionado um botão
Quando um botão é pressionado, por exemplo o botão 7, a trilha referente ao terceiro pino faz
contato com a trilha referente ao oitavo pino, observe:
Siga as trilhas e
observe que pinos
fazem contato
Agora que vimos como funciona o teclado matricial, vamos a prática.
Leiaut Carielo – Escola de informática com eletrônica 170
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Teclado Matricial
Agora iremos montar o teclado matricial e configurar para que no serial monitor vejamos
as linhas e colunas que estão sendo pressionadas.
Passo 1: Monte o seguinte esquema na protoboard.
Resistor de 220 ohms
Leiaut Carielo – Escola de informática com eletrônica 171
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Agora digite o seguinte código:
Leiaut Carielo – Escola de informática com eletrônica 172
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Agora para poder alterar as cores abra o monitor serial clicando no botão:
Clique aqui
Se a montagem do teclado e o código estiverem corretos você vera no serial monitor
as linhas e colunas sendo informadas conforme você digita no teclado matricial.
Leiaut Carielo – Escola de informática com eletrônica 173
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Teclado Matricial - acionando componentes
Agora iremos acionar componentes a partir do teclado matricial.
Passo 1: Monte o mesmo esquema do teclado matricial do exemplo anterior, porém
adicione dois leds:
Resistor de 220 ohms para o teclado
Led Vermelho na porta 12 – Resistor de 1k Ohms
Led Azul na porta 13 – Resistor de 1k Ohms
Leiaut Carielo – Escola de informática com eletrônica 174
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Agora digite o seguinte código (você pode reaproveitar o código anterior,
altere apenas o que está entre as chaves em vermelho, e adicione o que falta):
Leiaut Carielo – Escola de informática com eletrônica 175
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 176
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Envie o algoritmo para a placa:
Clique aqui
Passo 4: Abra o Monitor Serial:
Clique aqui
Exercício
1. Faca com que o monitor serial imprima os números e letras que você pressiona no
teclado matricial em vez de imprimir linhas e colunas. EX:
Caso a tecla 3 do teclado matricial seja pressionada, deverá aparecer no monitor serial o
número 3, caso a tecla A do teclado matricial seja pressionada, deverá aparecer a letra A
no monitor serial.
Este exercício deverá ser completado antes de partir para o próximo exercício.
Leiaut Carielo – Escola de informática com eletrônica 177
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 8
Material prático
Leiaut Carielo – Escola de informática com eletrônica 178
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Controle Infravermelho - Abordagem Teórica
Que tal controlar o Arduino pelo controle remoto? Nessa aula prática de Arduino veremos o
Módulo IR, que é um módulo do sensor Infravermelho e serve para receber qualquer sinal
infravermelho de praticamente qualquer controle remoto, porém usaremos um controle remoto
genérico para essa aula.
Afinal qual o propósito de controlar o Arduino pelo controle remoto?
Com o controle remoto você poderá: Acionar leds, buzzers e controlar qualquer outro atuador
que esteja no Arduino, o mesmo proposito que tem o controle da TV também se aplica ao
Arduino.
Modulo receptor IR:
Este é o componente responsável por receber o sinal infravermelho e mandar para o Arduino. O
sinal recebido é um sinal digital, por padrão o sinal é convertido em um número decimal, porém
esse número é bastante extenso, por isso convertemos essa numeração para hexadecimal que
também e mais fácil de lembrar, tornando a programação menos complicada.
Como funciona?
Sinal transmitido Sinal interpretado
Quando um botão Receptor capta o sinal No Arduino programamos uma
é pressionado e envia para o Arduino ação para o sinal recebido
Leiaut Carielo – Escola de informática com eletrônica 179
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Pinagem
Observe que em evidência nos círculos amarelos está a
descrição dos pinos referentes a GND (terra) e S (que é o
pino do Sinal)
GND Porta digital
5V
/ Código
Usaremos a biblioteca IRremote-master para programar esse módulo infravermelho, abaixo
você verá uma explicação básica do algoritmo para configuração desse módulo:
Antes de tudo devemos importar a biblioteca:
Depois de importar a biblioteca devemos declarar a variável com o valor da porta onde
está conectado o pino referente ao sinal digital.
Variável RECV_PIN do tipo int de valor = 7
Criaremos outra variável para armazenar o valor obtido através do sinal Infravermelho.
Criar um objeto da classe IRrecv passando como argumento a variável referente ao pino
do sinal.
Classe: IRrecv;
Objeto: irrecv;
Argumento: RECV_PIN;
Depois precisamos criar outro objeto da classe decode_results
Classe: decode_results;
Objeto: results;
Leiaut Carielo – Escola de informática com eletrônica 180
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Agora devemos iniciar o objeto:
Agora no loop() devemos verificar se algum sinal foi detectado
Dentro do corpo da estrutura condicional devemos especificar o que o Arduino irá fazer
caso receber algum sinal
Nesse caso estamos apenas convertendo o valor que foi recebido em hexadecimal e
imprimindo o mesmo no Serial monitor.
Agora iremos armazenar o valor enviado pelo sinal na variável armazenavalor.
Objeto results chamando a propriedade value guarda o código do sinal recebido
Podemos comparar o código captado para programar uma determinada ação em um
botão, observe abaixa uma das formas de se programar um botão, exemplo do botão 1:
Dentro do corpo do condicional podemos programar praticamente qualquer algoritmo.
Depois de tudo devemos chamar o método resume() que irá permitir a continuidade de
leituras posteriores.
Esse comando deverá estar dentro da estrutura condicional que verifica se algum sinal
foi detectado à
Por ultimo concluímos fechando as chaves
A primeira chave que fechamos é referente a estrutura condicional
A segunda chave é referente ao loop()
Esse é o algoritmo necessário para o correto funcionamento do módulo infravermelho, lembre-
se na programação nada é estático, portanto todo algoritmo que existe pode ser construído de
outras formas e até melhores, porém para este curso usaremos esse algoritmo.
Agora que vimos a parte essencial do algoritmo, vamos a prática!
Leiaut Carielo – Escola de informática com eletrônica 181
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Controle remoto
Agora iremos montar o controle IR que tem como sensor um infravermelho. Para esse
projeto iremos precisar de uma biblioteca de códigos extra pois a mesma contém códigos
automatizados para facilitar nosso trabalho.
Passo 1: Na busca do Google digite “Arduino IRremote” sem as aspas.
Procure pelo link referente ao GitHub.
Passo 2: Em seguida baixe o arquivo compactado clicando em “Clone or download” depois
em “download zip”.
Clique aqui para baixar
Assim que baixar o arquivo, descompacte-o e renomeie a pasta interna para
“IRremote-master”, sem as aspas.
Leiaut Carielo – Escola de informática com eletrônica 182
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora abra a interface do Arduino e no menu Sketch escolha a opção incluir na
biblioteca > Adicionar biblioteca.zip
Clique aqui para adicionar
a biblioteca
Navegue até onde se encontra
o arquivo e selecionando-o
clique em escolher
Leiaut Carielo – Escola de informática com eletrônica 183
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Você verá a mensagem “Biblioteca adicionada às suas bibliotecas”.
Agora que temos a biblioteca de que precisamos vamos a prática.
Passo 1: Monte o seguinte circuito com o sensor IR.
Pino central na porta VCC (5V)
Pino negativo (esquerda) na porta GND
Pino coletor (direita) na porta digital 11
Leiaut Carielo – Escola de informática com eletrônica 184
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Escreva o seguinte código:
Importação da biblioteca
Essa biblioteca que importamos consiste de códigos necessários para que possamos
manipular o componente que iremos usar.
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Leiaut Carielo – Escola de informática com eletrônica 185
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 4: Agora para ver o estado do Reed Switch abra o monitor serial clicando no botão:
Clique aqui
Se o circuito e a programação estiverem corretos, e a biblioteca devidamente
renomeada e importada, você verá um valor em Hexadecimal no monitor serial
quando pressionar algum botão do controle remoto.
Observe os valores, cada um deles é referente a um botão, os que estão mostrando
apenas FFFFFFFF são do mesmo botão que está sendo pressionado, ou seja você verá
esse valor ao ser pressionado o mesmo botão.
Leiaut Carielo – Escola de informática com eletrônica 186
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Controle IR - acionando componentes
Agora iremos usar o controle infravermelho para acionar componentes do Arduino
Passo 1: Monte o seguinte esquema na protoboard:
Sensor IR(infravermelho) na porta digital 7
Terminal vermelho do led RGB na porta digital 2 – Resistor de 1k Ohms
Terminal verde do led RGB na porta digital 3 – Resistor de 1k Ohms
Terminal azul do led RGB na porta digital 4 – Resistor de 1k Ohms
Lembrando que neste exemplo estamos usando o led RGB ânodo comum.
Leiaut Carielo – Escola de informática com eletrônica 187
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 2: Digite o seguinte algoritmo de programação:
Leiaut Carielo – Escola de informática com eletrônica 188
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 189
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 190
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o código e o algoritmo estiverem certos os botões 1, 2 e 3 irão alternar
respectivamente entre as cores vermelho, verde e azul. E os botões cima e baixo irão
incrementar e decrementar a intensidade da cor selecionada.
Botão 1 à Escolhe cor vermelha
Botão 2 à Escolhe cor verde
Botão 3 à Escolhe cor azul
Seta para cima à Incrementa brilho
Seta para baixo à Decrementa brilho
Leiaut Carielo – Escola de informática com eletrônica 191
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Exercício
1. Faca um circuito com o controle IR e 1 led, onde os botões deverão estar
configurados para manipular o led da seguinte maneira:
Botão 1 à Acender led suavemente e apagar suavemente
Botão 2 à Acender led suavemente e apagar suavemente e piscar três vezes
Botão 3 à Piscar o led com uma frequência baixa e ir aumentando a frequência depois
diminuir e repetir
Leiaut Carielo – Escola de informática com eletrônica 192
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 9
Material prático
Leiaut Carielo – Escola de informática com eletrônica 193
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Tela LCD - Abordagem Teórica
Nesta aula de Arduino iremos fazer prática com a tela LCD 16x2, nessa aula iremos usar uma
biblioteca já existente no Arduino que é a biblioteca LiquidCrystal.
Existem vários tamanhos de telas LCD como mostra o exemplo abaixo:
16 x 2
16 x 4
20 x 4
Cada tela é composta por uma sequência de pinos semelhantes, onde cada pino corresponde a
uma função na tela LCD.
Para podermos usar a tela LCD no Arduino devemos primeiramente importar a biblioteca e logo
em seguida especificar os pinos em uma instância da classe que importamos da biblioteca, e por
ultimo, devemos, no método setup do Arduino, iniciar a tela LCD passando como parâmetro, no
método begin(), as dimensões da tela que estamos usando.
Leiaut Carielo – Escola de informática com eletrônica 194
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Importando a biblioteca
Definindo os pinos da tela LCD a partir de uma instância criada da classe LiquidCrystal
Definindo as dimensões (no método setup())
Comando para limpar a tela (não obrigatório)
Após definirmos todo o escopo de configuração para a tela LCD podemos agora imprimir algo
na tela LCD.
Para imprimir algo na tela LCD primeiramente devemos posicionar o cursor na posição
desejada, para isso devemos saber o layout da tela LCD, veja abaixo as especificações:
16 Colunas
2 Linhas
O comando para posicionar o cursor na tela LCD: onde o primeiro
parâmetro representa a coluna e o segundo parâmetro representa a linha. No nosso caso temos
uma tela Lcd de 16 colunas e 2 linhas, porém as colunas e linhas são numeradas iniciando em 0,
ou seja, as colunas são numeradas de 0 a 15 e as linhas de 0 a 1.
Leiaut Carielo – Escola de informática com eletrônica 195
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Portanto se dermos o comando ao escrevermos algo na tela Lcd,
o caractere inicial estará no meio da tela, na primeira linha.
Então a sintaxe do comando é a seguinte:
Onde lcd é a instância criada antes do método setup():
Instância
A instância pode ter qualquer nome, não precisa ser obrigatoriamente “lcd”.
Por ultimo o comando para imprimir algo na tela Lcd é o mais simples:
Lembrando que ao imprimir na tela lcd devemos especificar a posição que queremos escrever,
caso contrário, por padrão, o texto será escrito a partir da posição inicial da tela, coluna 0 e
linha 0.
A tela Lcd necessita de um potenciômetro para regular seu contraste, o qual deverá ser
alimentado através da porta 5v e aterrado na porta GND, observe abaixo a configuração do
potenciômetro para a tela Lcd:
5V
Pino 3 da tela Lcd
Gnd
Os pinos Gnd e 5V podem ser invertidos, mas o pino central do potenciômetro sempre tem a
mesma configuração. Agora você pode seguir a diante com uma aula prática.
Leiaut Carielo – Escola de informática com eletrônica 196
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Lcd
Agora iremos montar a tela de Lcd 16x2.
Passo 1: Conecte os seguintes pinos da tela Lcd ao Arduino, a disposição
dos pinos e jumpers fica a seu critério.
Observe a pinagem de acordo com a imagem a seguir:
Leiaut Carielo – Escola de informática com eletrônica 197
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
1 16
O potenciômetro deverá estar conectado a alimentação (VCC) e à porta
terra (GND) do Arduino para que o mesmo funcione, não basta apenas
conectar o pino central do potenciômetro na tela Lcd visto que o mesmo
não irá funcionar corretamente se não estiver alimentado com VCC e GND.
Após ter conectado todos os pinos vamos ao código:
Passo 1: Digite o seguinte algoritmo:
Observe que usamos a biblioteca LiquidCrystal que já está no
Arduino.
Leiaut Carielo – Escola de informática com eletrônica 198
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Se o código e a programação estiverem corretos você verá o texto
que programamos aparecer na tela Lcd.
Exercícios
1. Faca um letreiro digital contento uma propaganda qualquer seguindo
o seguinte roteiro:
à Mostrar nome do produto (qualquer texto) – apagar e acender
mesmo texto 2 vezes.
à Frase de incentivo a adquirir o produto (qualquer texto)
à Nome da empresa – Aparecer letra por letra da empresa a cada
500 milissegundos
àRepetir todos os passos acima indeterminadas vezes.
Leiaut Carielo – Escola de informática com eletrônica 199
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Aula 10
Material prático
Leiaut Carielo – Escola de informática com eletrônica 200
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Projeto safe house
Agora iremos montar um circuito que irá simular um alarme residencial onde o mesmo
poderá ser ativado ou desativado através do teclado matricial.
Para ter acesso ao menu do alarme o usuário deverá inserir uma senha, que será pré
configurada durante a programação, o usuário ao inserir a senha correta poderá ativar ou
desativar o alarme, escolhendo a opção no menu que estará visível na tela lcd.
Nesse circuito teremos os seguintes componentes:
Tela Lcd à irá mostrar o menu de acesso ao alarme onde o usuário irá digitar a
senha e ativar ou desativar o alarme.
Teclado matricial à permitirá o acesso ao sistema de alarme da residência podendo
ativar ou desativar o alarme.
Buzzer (função de sirene para alertar alarme da casa).
Reed Switch (sensor que irá detectar se a porta está aberta ou fechada para acionar
o alarme).
Neste circuito o alarme será ativado ou desativado através do teclado matricial, onde
teremos uma senha pré-definida.
O Reed Switch fará a função de “monitor da porta” onde o mesmo irá detectar se a porta
está aberta ou fechada: caso a porta esteja aberta e o alarme estiver ativado o buzzer será
acionado, caso o alarme estiver desativado e a porta for aberta o buzzer não será acionado.
Após essa abordagem sobre o nosso projeto vamos a prática.
Visto como teremos muitos componentes fazer um gráfico com todas a ligações não
ficaria usual, então a montagem, distribuição e organização dos componentes fica a
seu critério.
Leiaut Carielo – Escola de informática com eletrônica 201
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Primeiro passo
Monte os componentes a seguir na protoboard:
TELA LCD - PINAGEM
Imagem de referência dos pinos da tela Lcd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Pinos LCD Função Pinos Arduino
1 VSS GND
2 VDD 5V
3 V0 PINO CENTRAL DO
POTENCIOMETRO
4 RS 22
5 RW GND
6 E 23
7 D0 -
8 D1 -
9 D2 -
10 D3 -
11 D4 24
12 D5 25
13 D6 26
14 D7 27
15 A(luz) 40
16 K GND
Monte essa tela com o potenciômetro
Pinagem 5V e GND
pode ser invertida
GND 5V
Leiaut Carielo – Escola de informática com eletrônica 202
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
TECLADO MATRICIAL - PINAGEM
Observe a Pinagem
Pinos 1 2 3 4 5 6 7 8
Portas 3 4 5 6 7 8 9 10
Resistores de 220 ohms
Leiaut Carielo – Escola de informática com eletrônica 203
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
REED SWITCH - PINAGEM
5V
GND
Porta 30
Resistor de 10k ohms
O Reed Switch deverá ser usado com o Imã
Leiaut Carielo – Escola de informática com eletrônica 204
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
BUZZER - PINAGEM
Buzzer na porta 31;
Leiaut Carielo – Escola de informática com eletrônica 205
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Segundo passo
Digite o seguinte algoritmo:
Leiaut Carielo – Escola de informática com eletrônica 206
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 207
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 208
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 209
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 210
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Leiaut Carielo – Escola de informática com eletrônica 211
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552
Arduino I - Deivison charles
Passo 3: Agora envie o algoritmo para a placa clicando em “upload”
Clique aqui
Passo 4: Se desejar você pode abrir o serial monitor para ver os valores do controle IR:
Clique aqui
Revise seu código e o circuito e em seguida teste todos os componentes.
A senha de acesso ao alarme é 3673.
Leiaut Carielo – Escola de informática com eletrônica 212
Rua Joaquim Felipe, 119 – Boa Vista - (81) 3081-5552