Sie sind auf Seite 1von 56

FACULDADE DE TECNOLOGIA DE SOROCABA

ELETRNICA AUTOMOTIVA

Apostila de Experincias para Mini Curso de


Arduino

Dr. Jos Luiz Antunes de Almeida


Tecnlogo Maurcio Ribeiro Maciel
Sorocaba
2015

NDICE

1.

Download e Instalao da IDE Arduino ............................................................ 2

2.

Experincia 01 - Pisca LED ................................................................................ 2

3.

Experincia 02 - Acionamento de LED com Boto ........................................ 10

4.

Experincia 03 - Monitoramento do sinal analgico via serial ..................... 18

5.

Experincia 04 - Leitura Analgica com variao de Freqncia ................ 23

6.

Experincia 05 - Variando o LED ..................................................................... 28

7.

Experincia 06 - Controle do brilho de um LED com Potencimetro........... 31

8.

Experincia 07 - Display 7 Segmentos............................................................ 36

9.

Experincia 08 - Contador................................................................................ 39

10. Experincia 09 - Controle utilizao de um Display LCD ............................... 48


11. Programas Finais............................................................................................... 55

1. Download e Instalao da IDE Arduino


Para instalar o IDE do Arduino, entre na pgina www.arduino.cc e clique em
Download. Na pgina seguinte, selecione qual o sistema operacional desejado e
instale diretamente o IDE ou baixe o arquivo compactado e salve-o em uma pasta do
seu computador. A Figura1 mostra a pgina de download.

Figura 1. Pgina de download do IDE do Arduino


Fonte: www.arduino.cc

2. Experincia 01 - Pisca LED

Existe um programa que j vem normalmente gravado no Arduino e que faz


um LED conectado ao pino 13 piscar. Ser feito o mesmo programa, mas explicado
passo a passo e com o LED conectado a outra sada digital, o pino 10.

2.1.

O Hardware

Com

software

gratuito

Fritzing,

disponvel

na

pgina

http://www.fritzing.org, possvel desenhar os esquemas de ligao do Arduino. A


Figura2 ilustra o hardware do programa que ser elaborado.

No esquema da Figura 2, observe as ligaes dos fios nos pinos 10 (sada


digital, feita com fio vermelho) e massa (GND, feita com fio preto).
O LED tem um terminal mais longo que o outro, que seu terminal de anodo.
Como os LEDs possuem limite de corrente, foi adicionado um resistor de 220, em
srie com o LED da Figura 2. Isso tambm garante a limitao de corrente de sada
do pino digital do Arduino.

Figura 2. Esquema de ligao do LED para o primeiro exemplo


Fonte. Desenhado com o software Fritzing.

2.2.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta uma pgina
como a da Figura 3, que um modelo (template) do arquivo que ser criado para o
programa.

Os programas no Arduino possuem dois loops, respectivamente o loop de


setup, onde so feitas vrias definies e um loop de execuo, que ser
executado indefinidamente quando o programa for acionado.
A primeira providncia salvar o programa com um nome mais significativo,
relacionado com a ao executada. Neste caso, escolhemos o nome Pisca_LED e
selecionamos Arquivo/Salvar como... e salvamos o programa com o nome
escolhido.
Verifique que aps ter salvado o arquivo, foi criada uma pasta com o nome do
projeto e que contm internamente o arquivo Pisca_LED.ino. Para criar o
programa, digite o texto contido na Figura 4.
Na linguagem do Arduino, assim como em outras linguagens, o contedo
escrito aps duas barras inclinadas (//) considerado comentrio e no
compilado. Assim, as duas primeiras linhas poderiam at ser suprimidas. Isso,
entretanto, no conveniente. bom inserir um cabealho indicando o nome do
arquivo criado e qual o resultado quando esse arquivo for executado.

Figura 3. Template para a elaborao do programa.

Antes do loop de setup, definida uma constante inteira, chamada LED,


que passa a ser um apelido para o pino 10. Assim, durante o programa, no
necessrio ficar lembrando a todo instante em que pino est o LED. Alm disso, se
for decidido trocar o pino de conexo do LED, isso poder ser feito apenas nessa
definio, mantendo-se o restante do programa intacto.
Dentro do loop de setup feita a definio como sada do pino onde o LED
est conectado. Isso sempre necessrio, uma vez que esse pino digital poderia ser
utilizado de outra maneira, por exemplo, como entrada. Para tanto, utilizada a
funo pinMode, com parmetros LED (o pino e questo) e OUTPUT (indicando que
esse pino ser sada).
Observe a palavra void antes do setup. Isso significa que esse loop no
retorna qualquer valor. (void pode ser traduzido como vazio, sem valor).
5

Figura 4. O programa Pisca_LED

Tambm interessante observar a necessidade de concluir uma linha de


cdigo com ponto e vrgula ( ; ) para indicar o fato ao compilador. Na sequncia
funo pinMode so colocadas duas barras inclinadas e acrescentado um
comentrio explicando o que faz aquela linha de cdigo.
No loop de execuo, chamado simplesmente de loop foi colocada a
palavra void com o mesmo significado anteriormente explicado. Dentro do loop( )
colocado o programa que ser executado indefinidamente.
Na primeira linha colocada a funo digitalWrite(LED,HIGH) que far o
LED acender, pois escrever um nvel lgico 1 (HIGH), ou seja colocar 5 V no
pino 10 (LED) fazendo o LED acender.

A seguir, chamada uma funo de atraso, disponvel na biblioteca do


compilador, chamada delay(N), em que N um nmero inteiro. O resultado que
6

ser dado um atraso de N milissegundos (ms) no programa. O comentrio explica


que o LED permanecer aceso durante esse tempo da rotina de atraso.
Na sequncia, novamente executada uma funo digitalWrite, mas agora
com os parmetros LED e LOW, que significa que ser escrito um nvel lgico 0
(LOW), ou seja, o pino 10 ser colocado terra, apagando o LED. Uma nova
chamada funo delay( ), parametrizada com 1000, far o LED permanecer
apagado por 1000 ms = 1 s.

2.3.

Executando o programa

Feitas as ligaes fsicas e escrito o programa, ele deve ser compilado para
gera o arquivo executvel que ser descarregado pelo bootloader do Arduino.

Quando o Arduino conectado ao PC gerada uma porta serial virtual, no


caso do PC utilizado para gerar este texto, a PORTA COM5, conforme pode ser
visto na Figura 5, no Gerenciador de Dispositivos do Windows. No menu
ferramentas/Portas do IDE do Arduino possvel confirmar se foi atribuda a porta
correta, conforme se v na Figura 6.

Figura 5. Gerenciador de dispositivos do Windows

Figura 6. Confirmao da Porta Serial de Conexo do Arduino

A seguir, o programa escrito deve ser compilado, selecionando-se Verificar /


Compilar, no menu Sketch. Pode-se usar o atalho Ctrl + R, ou seja,
pressionando-se simultaneamente a tecla CTRL e a tecla R.
8

Terminada a compilao, pode-se seguir a gravao do programa no


dispositivo. Com o Arduino conectado porta serial virtual criada, pelo menu
Arquivo/Carregar, ou mediante o atalho Ctrl + U, pode-e iniciar o upload do
programa para o dispositivo da placa. Isso concludo, o programa passar a ser
executado, piscando o LED na cadncia selecionada.

Indicao do
progresso de
Compilao

Figura 7. Programa sendo Verificado e Compilado

Como modificao sugere-se conectar o LED a outro pino do Arduino e


selecionar outra cadncia para pisc-lo. Experimente essas modificaes e a cada
uma delas, faa o upload do programa novamente.

3. Experincia 02 - Acionamento de LED com Boto


Um boto proporciona um contato sem reteno. Esse boto, com um pulldown por meio de um resistor, garante um nvel lgico zero em uma entrada digital
do Arduino. Esse valor, lido pelo Arduino garante que um LED fique apagado.
3.1.

Uma primeira verso

Ao ser pressionado o boto, h uma conexo momentnea com a


alimentao impondo mesma entrada digital do Arduino um nvel lgico um. Esse
valor, lido pelo Arduino resulta na ligao do LED que acende.

O nico inconveniente que, por no ter reteno, o boto deve ficar


permanentemente acionado para garantir o acendimento do LED. Liberado o boto o
LED apaga.
3.2.

O Hardware

A Figura 8 mostra o esquema eltrico do hardware a ser utilizado.

Figura 8. Esquema Eltrico Liga_LED


Fonte: Desenhado com o software Fritzing.

10

No acionado, o boto representa uma chave aberta que no conecta


nenhuma tenso externa ao pino 7 do Arduino. O resistor de pull-down de 10 k
garante o nvel lgico zero no pino 7 quando a chave est desligada. Estando
pressionado, o boto conecta a fonte de 5 V ao pino 7.
O programa dever ler o pino 7 e quando ele estiver em nvel lgico 0, o
LED dever ser apagado. Estando acionado o boto o pino 7 ficar com nvel lgico
1, que ao ser lido pelo programa, far o LED ser ligado.

A Figura 9 mostra o desenho do Arduino e do protoboard do shield, com as


ligaes do esquema eltrico da Figura 8.

Figura 9. Ligaes do Arduino para o programa Liga_LED


Fonte: Desenhado com o software Fritzing.

11

3.3.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta a pgina


como modelo (template) do arquivo que ser criado para o programa. Salve o novo
programa com o nome Liga_LED. A Figura 10 mostra o programa j editado. Copie
o programa no modelo aberto.

Inicialmente so definidas as constantes relativas aos pinos que sero


utilizados: LED (pino 10) e BOTAO (pino 7 ). tambm criada uma varivel
chamada estado, que ir armazenar o estado do boto, ou seja, se pressionado
(estado = 1) ou, se liberado (estado = 0). No setup o pino do LED definido como
sada e o pino do BOTAO como entrada.
No loop a situao do BOTAO lida e memorizada na varivel estado. Ela
testado com uma instruo if. Se aquilo que estiver entre parnteses no if for
verdadeiro, a instruo que se segue entre chaves ser executada. Caso contrrio, o
programa desvia para as instrues contidas dentro das chaves do else.
Se o boto estiver pressionado, o valor de estado ser 1, ou seja, o nvel
lgico do pino 7 ser 1, o que corresponde a ter sido aplicada uma tenso de 5 V
nesse pino. Nessa condio o comando entre chaves faz o LED acender, pois
escrito um nvel lgico 1 (HIGH) no pino 10.

12

Figura 10. O Programa Liga_LED

Se o boto no estiver pressionado, ou seja, liberado, o comando entre as


chaves do else ir apagar o LED.

O inconveniente nesse programa que o LED apagar se o boto parar de


ser pressionado. O programa a seguir modifica o programa original de modo a
manter o LED aceso se o boto for pressionado e apaga o LED se o boto vier a ser
pressionado novamente.

13

3.4.

Uma segunda verso

A Figura 11 uma verso modificada do programa anterior. Foi criada uma


varivel flag que ir armazenar o estado em que o LED deve ficar. Se o boto tiver
sido pressionado, a varivel flag ter seu valor invertido, indicando que se o LED
estiver aceso ele dever ser apagado e, caso contrrio, se o LED estiver apagado,
ele dever ser aceso.
O loop de setup no foi modificado, pois o circuito fsico no foi alterado. No
loop de execuo, o boto lido e se estiver pressionado, a varivel flag ser
complementada para inverter o estado do LED.

Figura 11. Programa Liga_LED_0A

Esse programa tambm tem problemas de funcionamento. Como o loop


executado muito rapidamente, o tempo que ficamos pressionando o boto permite
14

que esse seja lido muitas vezes, pois o Arduino trabalha com frequncia de 16 MHz,
o que, pela sua arquitetura, resulta em executar cerca de 16 milhes de instrues
por segundo. Assim, como a varivel que comanda o LED invertida cada vez que
se verifica que o boto est pressionado, ela modificada muitas vezes, enquanto
estivermos pressionando o boto. Ocasionalmente, sem que isso esteja no controle
do operador, possvel que ao retirar a presso no boto, o LED fique em algum
estado que no o que se esperava.

Compile o programa, faa o upload para o Arduino e verifique por si mesmo


que o funcionamento est sujeito a falhas.

3.5.

Uma terceira verso

Para corrigir o programa necessria a criao de uma nova varivel que


armazenar o estado anterior do boto, alterando-a apenas quando o boto for
pressionado e atualizando o estado atual do boto. O programa das Figuras 5a e 5b
corrige o problema anteriormente verificado.

Foi criada mais uma varivel que armazenar o estado antigo do boto.
Dessa forma, quando o boto for pressionado pela primeira vez, o LED ter seu
estado modificado e a varivel estado ser atualizada com o valor da varivel
estado_antigo, ficando ambas iguais. Como no comando if testado se houve
variao das variveis, ou seja, testado se o boto foi pressionado e o estado
anterior era de boto no pressionado, executa-se a alterao do estado do LED
apenas quando o boto for pressionado. Mesmo que se demore para retirar o dedo
do boto, o estado do LED s ser alterado uma vez a cada presso no boto.
No programa, observe que tanto a varivel estado quanto a varivel
estado_antigo so inicializadas com zero.
No loop, o boto lido constantemente e testado se ele apresenta um
estado high, ou seja, se o boto est pressionado e seu estado comparado com
15

o estado_antigo. Quando o boto for pressionado pela primeira vez, a varivel


estado ser high e a varivel estado_antigo continuar em low, as dentro do
if, a varivel flag ser complementada, para mudar o estado do LED. Na
sequncia, a varivel estado_antigo ser atualizada para high (o valor da varivel
estado no momento), preparando para a prxima comparao.
A varivel flag testada para definir o estado do LED. Esse estado ser
low (LED apagado) na primeira passagem, mas mudar medida que o boto for
sendo pressionado.

Figura 12. Programa Liga_LED_0B

16

Na prxima vez em que loop for executado, o estado das variveis estado
e estado_antigo sero iguais e a varivel flag no ser modificada. Isso
permanecer at que o boto seja liberado, a execuo passe novamente pelo if
com ambas as variveis em low e, aps ser sido o boto novamente pressionado,
quando a varivel flag voltar a ser modificada dentro do if.

Outro modo de usar esse programa , controlando o acionamento de algum


circuito de potencia, por exemplo: motor de porto automtico, motor de elevador,
acionamento de lmpadas, acionamento temporizado de irrigadores, entre outros.

As sadas do Arduino tem um limite de corrente de 40mA(mileampere), ou


seja, se o circuito ligado ao pino de sada do Arduino consumir mais do que os 40mA
de corrente, a respectiva porta do Arduino queimar. Ento, para que possa ser feito
o controle de algum circuito de potncia, necessrio o uso de transistores e/ou
rels para chaveamento.

17

4. Experincia 03 - Monitoramento do sinal analgico via serial

O Arduino Uno possui 06 portas de entrada analgica nas quais, pode-se


efetuar a leitura de sinais de 0 a 5volts. Ele trabalha com um conversor analgicodigital com preciso de 10bits, e no retorna exatamente o valor de tenso lido por
sua entrada. O valor lido varia de 0 a 1023, onde 0 equivale a 0Volts e, 1023 o
valor mximo de tenso de 5Volts.

Na prtica, possvel fazer um controle de um processo. Por exemplo, um


controle de nvel, controle de temperatura, de luminosidade, de umidade etc.
possvel efetuar diversos tipos de controle desde que os sensores utilizados
forneam como resposta um sinal analgico de tenso.

Um potencimetro ser usado para variar a tenso na porta analgica do


Arduino. Ele um dispositivo eletromecnico que possui um resistor de valor fixo
sobre o qual se move um contato deslizante, fazendo a resistncia variar.
Normalmente possui 3 terminais: VCC, GND e sinal (analgico).

Ao girar o potencimetro, o programa efetua a leitura do sinal aplicado no pino


A0 e, envia esse valor lido via serial para o computador. Para visualizar o valor da
leitura ser utilizada a funo Monitor Serial, que pode ser executada a partir da IDE
do Arduino.

18

4.1.

O Hardware

A Figura 13 mostra o esquema eltrico do hardware a ser utilizado.

Figura 13. Esquema eltrico da experincia Leitura de Sinal Analgico.


Fonte: desenhado com o software Fritzing.

A Figura 14 ilustra como deve ser feita as ligaes do hardware a ser


utilizado.

Figura 14. Esquema eltrico do hardware


Fonte: Desenhado com o software Fritzing.

19

4.2.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta a pgina


como modelo (template) do arquivo que ser criado para o programa. Salve o novo
programa com o nome Leitura_de_Sinal_Analogico. A Figura 15 mostra o programa
j editado. Copie o programa no modelo aberto.
No inicio ser atribudo o nome Sinal ao pino A0 que ser usado para
conexo do sinal do potencimetro, esse pino no precisa ser configurado como
entrada, o Arduino faz isso automaticamente. Para armazenar o valor lido ser
criada uma varivel chamada Valor.
Dentro da funo void setup utilizaremos apenas uma instruo Serial.begin
(9600); . Essa instruo inicializa a comunicao serial do Computador como
Arduino.
Dentro da funo void loop, a varivel Valor preenchida com o valor lido
no pino A0 que ser entre 0 e 1023.
Agora ser usada a instruo Serial.print(frase); para enviar uma palavra
ou um frase atravs da serial, quando for necessrio o envio de uma varivel pela
serial usaremos a mesma instruo, porm dentro o parnteses no ser colocado
as aspas, ficando ento dessa maneira, Serial.print(varivel); ao adicionar ln no
final da instruo, a prxima mensagem enviada pela serial ser visualizada na linha
subseqente.

20

Figura 15. Programa editado

21

Figura 16. Monitor Serial

Compile o programa e faa o upload para a placa do Arduino observe seu


funcionamento. A Figura 04 mostra a tela Monitor Serial com o programa rodando.
Corrija ou faa as modificaes que julgar interessantes.

22

5. Experincia 04 - Leitura Analgica com variao de


Freqncia
O objetivo neste exerccio o de controlar a frequncia em que o LED ir
piscar, usando um potencimetro e a entrada analgica do Arduino.
Um potencimetro linear de 20 k tem uma de suas extremidades ligada
tenso de 5 V. A outra extremidade ligada no terra e o cursor, terminal do meio do
potencimetro, ligado a uma das entradas analgicas do Arduino.
5.1.

Uma primeira verso

A entrada analgica dever ser lida e, dependendo da posio do


potencimetro, esse valor estar entre os extremos de 0 V e 5 V. O valor lido servir
para controlar a varivel volt. Assim, a frequncia de acionamento do LED ser
variada e o LED piscar mais ou menos rapidamente.

5.2.

O Hardware

A Figura 17 mostra o esquema eltrico do hardware a ser utilizado.

Figura 17. Esquema eltrico POT_LED


Fonte:Desenhado com o software Fritzing

23

O potencimetro atua como um divisor de tenso. A tenso no pino central do


potencimetro poder varia de 0 V a 5 V. Esse valor ser lido pelo programa do
Arduino, mediante a instruo analogRead(pino) e servir de parmetro para a
instruo delay(varivel) que fornecer um atraso que poder variar de 0 at um
valor mximo de 1023 ms. Desse modo, o LED piscar com uma frequncia que
depender do valor analgico conectado entrada.
A Figura 18 mostra o desenho do Arduino e do protoboard do shield, com
as ligaes do esquema eltrico da Figura 17.

Figura 18. Ligaes do Arduino para o programa POT_LED


Fonte: Desenhado com o software Fritzing

5.3.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta a pgina


como modelo (template) do arquivo que ser criado para o programa. Salve o novo
programa com o nome POT_LED.

24

A Figura 3 mostra o programa j editado. Copie o programa no modelo


aberto. Inicialmente so definidas as constantes relativas aos pinos que sero
utilizados: LED (pino 10) e POT (pino A0). tambm criada uma varivel chamada
volt que ir armazenar o valor da tenso do terminal central do potencimetro
transformado em valor digital.

Figura 19. O programa POT_LED

25

No setup definido que o pino de conexo do LED ser sada. No h


necessidade de configurar o pino de conexo do potencimetro como entrada. Isso
feito automaticamente.
No loop principal, valor da tenso do potencimetro lido e convertido em
um valor digital, sendo armazenado na varivel volt.

O LED aceso e assim mantido por um intervalo que depender da tenso


lida do potencimetro, pois esse valor servir de parmetro para a instruo
delay(val) que seguir.

Terminado o intervalo de tempo em que o LED ficar aceso, esse apagado,


assim permanecendo pelo mesmo intervalo de tempo em que ficou aceso, definindo
assim uma onda quadrada cuja frequncia depender do valor lido do
potencimetro.

Compile o programa, faa o upload para o Arduino e verifique por si mesmo o


funcionamento alterando a posio do eixo do potencimetro. O LED ficar piscando
e esse piscar pode ser alterado mediante alterao do cursor do potencimetro.
5.4.

Uma segunda verso

Em vez do potencimetro para fornecer uma valor de tenso varivel para a


entrada analgica, pode-se usar um LDR (light dependente resistor), que, como o
prprio nome deixa transparecer, um resistor cuja resistncia tem um valor que
depende da quantidade de luz incidente.

A Figura 20 mostra a modificao efetuada no circuito. Um LDR, cuja


resistncia varia entre aproximadamente 3,5k e 70k permite que a tenso na
entrada analgica varie o suficiente para se perceber que o LED muda a frequncia
de acendimento.

26

Figura 20. circuito com LDR


Fonte: Desenhado com o software Fritzing

Com o LDR sem obstruo o Arduino recebe aproximadamente 4 V, pois a


resistncia do LDR baixa, e com obstruo, essa tenso cai para cerca de 0,3 V.
Com isso, sem obstruo o LED ficar piscando com frequncia baixa, aumentandoa progressivamente, medida em que a obstruo aumentar. Monte o circuito
modificado e verifique por si mesmo o funcionamento.

27

6. Experincia 05 - Variando o LED


Assim como a instruo digitalWrite(pino, valor) permite escrever um nvel
lgico

LOW

ou

HIGH

em

uma

determinada

sada

digital,

instruo

analogWrite(pino, valor) permite escrever um sinal analgico em um pino


configurado para ser sada analgica.
Entretanto no fornecido um valor contnuo ao pino da sada analgica,
mas sim uma onda retangular, variando de zero at 5 V, cujo valor mdio
corresponde ao parmetro valor inserido na instruo analogWrite. Esse tipo de
ao denomina-se controle PWM (Pulse = pulso, Width = largura, Modulation =
modulao), ou controle por modulao (variao baseada em um sinal de controle)
da largura de pulso. A Figura 21 ilustra o processo de PWM.
Ser criada uma varivel que servir de parmetro para a instruo
analogWrite( ). Essa varivel ser incrementada em intervalos de tempo regulares
at atingir o valor mximo, quando ento ser decrementada tambm em intervalos
regulares, at chegar a zero. Se isso for feito de forma cclica, o LED ir
aumentando seu brilho at o brilho mximo e depois ir diminuindo seu brilho at
apagar.

Figura 21. O processo de PWM

28

6.1.

O Hardware

Figura 2 Ligaes do Arduino para o projeto Variando_LED

Figura 22. Ligaes do Arduino para o projeto Variando_LED


Fonte: Desenhado com o software Fritzing

6.2.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta a pgina


como modelo (template) do arquivo que ser criado para o programa. Salve o novo
programa com o nome Variando_LED.
A Figura 23 mostra o programa j editado. Copie o programa no modelo
aberto. A varivel medio ir definir qual a intensidade da luz emitida pelo LED, uma
vez que ser usada como parmetro para a instruo analogWrite( ).
A varivel medio inicializada com zero. Dentro do loop existem dois
loops for. No primeiro deles, a varivel medio incrementada de 1 em cada
passagem e ao LED imposta uma tenso como aquela da Figura 1, em que o valor
mdio varia de 0 V a 5 V. Assim, o LED vai progressivamente aumentando seu
brilho.
Quando a varivel medio atinge o mximo (255 em oito bits), o LED
mantido aceso com brilho mximo por um intervalo de tempo (500 ms no caso do
programa).
29

No segundo loop for, a varivel mdio decrementada de 1 em cada


passagem e ao LED imposta uma tenso como aquela da Figura 1, em que o valor
mdio varia de 5 V a 0 V. Assim, o LED vai progressivamente diminuindo seu brilho.
Quando a varivel medio atinge o mnimo (0), o LED mantido apagado por um
intervalo de tempo (500 ms no caso do programa).

Figura 23. O programa Variando_LED

Compile o programa e faa o upload para a placa do Arduino observe seu


funcionamento. Corrija ou faa as modificaes que julgar interessantes.

30

7. Experincia 06 - Controle do brilho de um LED com


Potencimetro
O objetivo neste exerccio o de controlar o brilho de um LED por um
potencimetro, usando a entrada analgica e uma sada PWM do Arduino.
O esquema eltrico desse programa igual ao esquema eltrico do exemplo
Leitura analgica com variao de freqncia. Um potencimetro linear de 20 k
tem uma de suas extremidades ligada tenso de 5 V. A outra extremidade ligada
no terra e o cursor, terminal do meio do potencimetro, ligado a uma das entradas
analgicas do Arduino.
7.1.

Uma primeira verso

A entrada analgica dever ser lida e, dependendo da posio do


potencimetro, esse valor estar entre os extremos de 0 V e 5 V. O valor lido servir
para controlar o PWM aplicado ao pino de sada do Arduino conectado ao LED.
Assim, a largura do pulso emitido ao LED ser variada aumentando ou diminuindo o
brilho do LED.

Figura 24. Esquema eltrico POT_LED


Fonte:Desenhado com o software Fritzing

31

O potencimetro atua como um divisor de tenso. A tenso no pino central do


potencimetro poder varia de 0 V a 5 V. Esse valor ser lido pelo programa do
Arduino, mediante a instruo analogRead(pino) e servir de parmetro para a
instruo map(ValorLido, 0, 1023, 0, 255) que converte proporcionalmente o valor
de 0 a 1023, para um valor de 0 a 255 para ento aplicar esse valor a porta de sada
PWM onde o LED est conectado. Desse modo, a intensidade do brilho do LED
depender do valor analgico fornecido pelo potencimetro.
A Figura 25 mostra o desenho do Arduino e do protoboard do shield, com
as ligaes do esquema eltrico da Figura 24.

Figura 25. Ligaes do Arduino para o programa POT_LED


Fonte: Desenhado com o software Fritzing

32

7.2.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta a pgina


como modelo (template) do arquivo que ser criado para o programa. Salve o novo
programa com o nome Controle_PWM_com_Potenciometro. A Figura 26 mostra o
programa j editado. Copie o programa no modelo aberto.
Inicialmente so definidas as constantes relativas aos pinos que sero
utilizados: LED (pino 9) e POT (pino A0). tambm criada uma varivel chamada
ValorLido que ir armazenar o valor da tenso do terminal central do potencimetro
transformado em valor digital.

Figura 26. O programa editado

33

No setup definido que o pino de conexo do LED ser sada. No h


necessidade de configurar o pino de conexo do potencimetro como entrada. Isso
feito automaticamente.
No loop principal, valor da tenso do potencimetro lido e convertido em
um valor digital, sendo armazenado na varivel ValorLido.

O brilho emitido pelo LED depender da tenso lida do potencimetro, pois


esse valor servir de parmetro para a instruo map(ValorLido, 0, 1023, 0, 255)
que seguir.

Compile o programa, faa o upload para o Arduino e verifique por si mesmo o


funcionamento alterando a posio do eixo do potencimetro. O LED ficar aceso e
seu brilho pode ser alterado mediante alterao do cursor do potencimetro.
7.3.

Uma segunda verso

Em vez do potencimetro para fornecer uma valor de tenso varivel para a


entrada analgica, pode-se usar um LDR (light dependente resistor), que, como o
prprio nome deixa transparecer, um resistor cuja resistncia tem um valor que
depende da quantidade de luz incidente.

A Figura 27 mostra a modificao efetuada no circuito. Um LDR, cuja


resistncia varia entre aproximadamente 3,5k e 70k permite que a tenso na
entrada analgica varie o suficiente para se perceber a alterao de brilho do LED.
Com circuito modificado, verifique por si mesmo o funcionamento.

34

Figura 27. Circuito com LDR


Fonte: Desenhado no software Fritzing

Compile o programa e faa o upload para a placa do Arduino observe seu


funcionamento. A Figura 04 mostra a tela Monitor Serial com o programa rodando.
Corrija ou faa as modificaes que julgar interessantes.

35

8. Experincia 07 - Display 7 Segmentos


Em muitas aplicaes interessante mostrar o resultado de uma operao
(leitura de tenso, corrente, temperatura, etc) em um display de sete segmentos. A
Figura 1 mostra o aspecto fsico e a pinagem do display HS-3191AS.

Figura 28. Display Sete Seguimentos HS-3191AS

8.1.

O Hardware

A Figura 29 mostra as ligaes do hardware a ser utilizado.

Figura 29. Ligaes do Arduino para o projeto Sete_seguimentos

36

8.2.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta a pgina


como modelo (template) do arquivo que ser criado para o programa. Salve o novo
programa com o nome Sete_segmentos. As Figuras 30 e 31 mostram o programa j
editado. Copie o programa no modelo aberto.

Inicialmente so definidas constantes com os nomes dos segmentos do


display, atribuindo a elas os nmeros dos pinos do Arduino aos quais os segmentos
estaro conectados. Essas constantes esto de acordo com a Figura 1 em que
esto definidos os pinos do display correspondentes aos segmentos.

A seguir, esses pinos so todos definidos com sadas, pois o display de sete
segmentos do tipo catodo comum. Assim, para ser acionado um segmento,
necessrio colocar um nvel lgico HIGH no pino correspondente. Na Figura 31
mostrado o loop que executado indefinidamente, enquanto a alimentao estiver
ligada.

Figura 30

37

Figura 31

No loop cada segmento alimentado por uma instruo digitalWrite(nome


do pino, HIGH), seguindo-se um intervalo de 500 ms definido pela instruo
delay(500). A seguir, o mesmo segmento apagado por uma instruo
digitalWrite(nome do pino, LOW). Esse processo inicia-se no segmento A e repetese at atingir o segmento G. O processo ento repetido indefinidamente, sendo os
segmentos acesos sucessivamente, na ordem alfabtica.
Compile o programa e faa o upload para a placa do Arduino observe seu
funcionamento. Corrija ou faa as modificaes que julgar interessantes.
38

9. Experincia 08 - Contador
Inmeras situaes exigem que sejam exibidos no display de sete segmentos
os nmeros decimais correspondentes a uma determinada operao, por exemplo
indicar o resultado de uma leitura de tenso. No caso de apenas um display os
nmeros podem variar apenas entre 0 e 9, inclusive.

O exemplo aqui ilustrado procura mostrar como o display pode ser acionado
para exibir o nmero desejado. Ser mostrada a utilizao da instruo switch
case. A instruo switch case permite escolher uma entre vrias aes possveis
em funo de uma varivel. A Figura 30 ilustra sua execuo.

Figura 32. A instruo "switch case"

Por exemplo, o cdigo da Figura 1 utiliza como parmetro para a instruo


switch case a varivel valor. Essa varivel determinar qual valor ser atribudo
varivel x. Ao ser executada a instruo switch case a execuo ser desviada
para a linha case correspondente ao valor do parmetro valor. Por exemplo, se
no instante de execuo da instruo a varivel valor for igual a 2, varivel x
ser atribudo o valor 4. Aps a execuo da instruo ou conjunto de instrues do
39

case, a execuo continua fora da instruo switch case, em funo do comando


break.
Para utilizao do display como contador, ser definida uma varivel cont
que ser variada de 0 a 9. Dependendo desse valor, dentro de uma instruo swtich
case, sero ativados os segmentos necessrios para que o nmero correspondente
seja exibido no display.
9.1.

O Hardware

A Figura 31 mostra o esquema eltrico do hardware a ser utilizado, que o mesmo


j utilizado para teste do display de sete segmentos.

Figura 33. Ligaes do Arduino para o projeto Contador


Fonte: Desenhado no software Fritzing

9.2.

O Software

Para editar o programa, execute o aplicativo Arduino. Ser aberta a pgina


como modelo (template) do arquivo que ser criado para o programa. Salve o novo
programa com o nome Sete_segmentos. As Figuras 34, 35, 36 mostram o programa
j editado. Copie o programa no modelo aberto.
40

Inicialmente so definidos os pinos do Arduino aos quais se conectam os


segmentos A, B, C, D, E, F e G do display. A seguir, no set up so definidos todos
os pinos do Arduino utilizados como sada, para alimentar os LEDs do display.

Figura 34. O incio do programa Contador


Fonte: Desenhado no software Fritzing

41

No incio do loop, utilizado um lao for para atribuir todos os valores da


varivel cont que ser passada como parmetro instruo switch case, para
definir quais os segmentos que iro ser ativados para exibir o nmero decimal
correspondente contagem. Observe que o loop for ser executado com a
varivel cont inicializada em 0 e sendo incrementada de uma unidade a cada
passagem. Terminado o loop, esse voltar a ser executado desde o incio, quando
a varivel cont ser reinicializada em 0. Assim, o display ficar continuamente
exibindo a contagem de 0 a 9, com intervalo de 1 s, entre as contagens.

Figura 35. Incio "loop" do programa Contador

42

Ainda na Figura 33, observe o caso para a exibio do nmero 0 no display.


Apenas o segmento G estar apagado, com os restantes mantidos acesos.

Figura 36. Os casos para o s nmeros 1 e 2

43

Figura 37. Os casos para os nmeros 3 e 4

44

Figura 38. Os casos para os nmeros 5 e 6

45

Figura 39. Os casos para os nmeros 7 e 8

46

Figura 40. O caso para o nmero 9, e o final do programa

Compile o programa e faa o upload para a placa do Arduino observe seu


funcionamento. Corrija ou faa as modificaes que julgar interessantes.
47

10.

Experincia 09 - Controle utilizao de um Display LCD

O objetivo neste exerccio o de controlar um display de LCD de modo a


permitir o envio de mensagens que permitiro seu uso como uma interface de
comunicao com o Arduino.
10.1. O display de LCD de 16 colunas e 2 linhas

Grande parte dos displays LCDs baseia-se no circuito integrado HD44780 da


Hitachi ou em outros compatveis. Desse modo, aprendendo a usar esse display
com o Arduino, facilitar seu uso com outros processadores.

10.2. Aspecto fsico e pinagem do display

A Figura 41 uma imagem do display indicando que ele possui 16 pinos,


numerados de 1 a 16, que por sua vez possuem funes especficas.

Figura 41. Display de Cristal Lquido


Fonte: http:/mercadolivre.com.br

O controle do display feito mediante envio de sinais de controle ou dados


pode ser feito atravs de quatro bits (D7, D6, D5 e D4) ou a oito bits (D7 a D0).
48

Alm dos pinos de dados (d0 a D7) esto disponveis os pinos de


alimentao, contraste e de controle (Rs, R/W e E).

O pino 4 o de comando RS que determina se o dado presente nas linhas D0


a D7 vai ser interpretado como controle (RS=0) ou dados (RS=1). Tambm
possvel ler dados do display. Quando isso ocorre, (RS=1) os dados lidos indicam o
STATUS do display.
Tabela 1. Atribuio dos pinos do LCD

Pino

Nome

Funo

Vss

Terra

Vdd

Alimentao

V0

Contraste (cursor do potencimetro de contraste)

RS

RegisterSelect (comando / dados)

R/W

Read / Write (ler / escrever dados no display)

Enable (habilitar a transferncia de comandos / dados)

D0

bit D0

D1

bit D1

D2

bit D2

10

D3

bit D3

11

D4

bit D4

12

D5

bit D5

13

D6

bit D6

14

D7

bit D7

15

Anodo do LED (backlight)

16

Catodo do LED (backlight)

49

O pino R/W (Read/Write) utilizado para definir se o dado a ser tratado deve
ser lido ou escrito no display. Com R/W=0, os dados ou comandos so escritos no
display, com R/W=1, dados sero lidos do display.

O pino E (Enable) usado para iniciar a transferncia de dados ou comandos


entre o display e o controlador externo, no caso, as chaves fsicas ou os pinos do
microcontrolador.

Quando se escreve no display, os dados so transferidos somente na borda


de descida (transio de High para Low) do sinal E. Quando se l do display, os
dados estaro disponveis logo aps a borda de subida do sinal Ee permanecero
disponveis at que o sinal em E retorne para zero.

Por utilizar menor nmero de fios, a biblioteca disponibilizada no


Arduinoimplementa a comunicao com o display por meio de 4 fios de dados (D7 a
D4) e dois fios de controle (RS e E). O pino R/W deve ser aterrado, ou seja, a
comunicao ser apenas para escrever no display.

10.3. O Hardware

A Figura 42 a foto da Shield LCD para o Arduino, projetada e confeccionada na


Fatec Sorocaba. A Shield permite a utilizao de todas as entradas analgicas do
Arduino, alm de ter dois botes configurados como PULL-UP, conectados aos
pinos digitais 7 e 8, e pinos de alimentao.

50

Figura 42. Shield LCD

10.4. O programa Hello World!

O programa seguinte foi extrado dos exemplos do prprio IDE do Arduino, feitas
as adaptaes e esclarecimentos necessrios para maior compreenso. As Figuras
43 e 44 mostram o programa j editado. Copie o programa no modelo aberto.

51

Figura 43. Incio do programa

Inicialmente so definidos os pinos de conexo do LCD com o Arduino,


conforme j mostrado anteriormente. interessante registrar essa pinagem, pois
nem sempre haver o texto para acompanhamento e isso pode ser necessrio para
futuras mudanas ou reutilizao de parte do programa.

52

Observe que os comentrios referentes pinagem, por ultrapassarem uma linha,


iniciam-se por /* e terminam por */.

Figura 44. Continuao do programa

Inicialmente, necessrio incluir na compilao do programa a biblioteca de


funes do LCD. Isso feito com a diretiva #include LiquidCrystal.h. A seguir, so
definidos os pinos do Arduino que correspondero aos pinos atribudos na biblioteca,
para controle e para comunicao. No loop de setup, que executado apenas
53

uma vez,so chamadas duas funes da biblioteca do LCD. A primeira


LCD.begin(16,2) define qual tipo de display est sendo utilizado, no caso, de 16
colunas e 2 linhas.A segunda, LCD.print(hello world!) envia uma string entre aspas
duplas, que ser exibida no display.
No loop principal, de execuo cclica, so chamadas duas outras funes da
biblioteca do LCD, sendo a primeira destinada a posicionar o curso na segunda linha
(definida como linha 1, pois a primeira considerada linha 0. A segunda funo, a
mesma j utilizada, imprime um valor em segundos no display, utilizando a funo
millis( ).
A funo millis( ) fornece um valor numrico correspondente ao tempo
decorrido aps o reset do Arduino em milissegundos. Como o valor dentro da funo
print est dividido por 1000, a cada segundo o display exibir um valor atualizado.
10.5. Outros programas
Existem outros programas prontos nos exemplos do IDE do Arduino. Procure
no menu Arquivo/Exemplos/LiquidCrystal esses programas e grave-os no Arduino. A
execuo explicar o que podem fazer esses outros comandos de deslocamento do
display, ajuste do cursor, etc.

Figura 45. Acesso a outros programas para o LCD

Procure analisar os programas e verificar como os exemplos foram


desenvolvidos.
54

11.

Programas Finais

Termmetro com LM35 e display LCD (No usar isqueiro)

Cronmetro com pausa e reset 2 botes (conta at 60seg) no LCD

Semforo: Um semforo para veculos e um para pedestres


Para veculos:

Verde

20 segundos

Vermelho

15 Segundos

Amarelo

05 Segundos

Para Pedestres: Verde


Vermelho

15 Segundos
25 Segundos

55

Das könnte Ihnen auch gefallen