Você está na página 1de 26

quinta-feira, 13 de maro de 2014

Arduino - Como realizar um scroll no LCD 16x2, deixando uma


linha fixa
Um leitor do site enviou uma pergunta hoje, sobre como realizar um scroll no LCD 16x2 ligado ao Arduino,
mas apenas em uma linha. A outra ficaria esttica.
A pergunta aparentemente simples mas, ao pesquisar o assunto, vi que realizar o scroll em apenas uma linha
envolve questes como mexer diretamente na memria do LCD e alterar (ou criar) bibliotecas.
Ao invs de usar uma biblioteca nova, por que no fazer isso utilizando a LiquidCrystal, amplamente utilizada
por todos e provavelmente j instalada na sua IDE ?
Encontrei um colega l da India (http://nishantarora.in/), que criou um programinha exatamente para isso, mas
que infelizmente resolvia apenas parte do problema : a linha inferior permanecia esttica, mas a linha superior
realizava o scroll uma nica vez.
O que eu fiz foi alterar o cdigo para que o scroll no s fosse realizado de forma ininterrupta, como tambm
aceitasse qualquer tamanho de string que fosse colocada no programa. O resultado voc pode ver no vdeo
abaixo :
O circuito utilizado o mesmo mostrado no post Display LCD Winstar WH1602A. O modelo do LCD o
WH1602A mas o programa pode ser utilizado sem problemas em outros modelos de display 16x2, como o
HD44780, que eu abordei neste artigo.
Alm do LCD, usei como componente adicional um resistor de 10 K para ajuste do contraste :
Abaixo, o programa utilizado para testes e mostrado no vdeo acima :
/ / Pr ogr ama : Scr ol l LCD 16x2 apenas emuma l i nha
/ / Al t er acoes e adapt acoes : Ar dui no e Ci a
/ /
/ / Baseado no pr ogr ama or i gi nal de Ni shant Ar or a

Pesquise neste blog :
Tutoriais, projetos, programas e dicas
relacionadas ao Arduino. Bem vindo !
Arduino e Cia
365 Curtir Curtir
Parceiros
Receba as atualizaes do blog por email :
Seguir @ArduinoeCia
2014 (10)
Maro 2014 (1)
Arduino - Como realizar um scroll no
LCD 16x2, dei...
Fevereiro 2014 (3)
Arqui vo do blog
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
1 de 26 13/03/2014 21:42
Voc tambm pode gostar
#i ncl ude <Li qui dCr yst al . h>

/ / I ni ci al i zacao do di spl ay
Li qui dCr yst al l cd( 12, 11, 5, 4, 3, 2) ;

/ / Conf i gur acoes LCD 16x2
i nt scr eenWi dt h = 16;
i nt scr eenHei ght = 2;

/ / St r i ng par a as 2 l i nhas
/ / l i ne1 = Scr ol l
St r i ng l i ne1 = " Ar dui no e Ci a, di cas, pr oj et os e
/ / l i ne2 = Li nha i nf er i or - est at i ca
St r i ng l i ne2 = " Ar dui no e Ci a" ;

/ / j ust some r ef er ence f l ags
i nt st r i ngSt ar t , st r i ngSt op = 0;
i nt scr ol l Cur sor = scr eenWi dt h;
i nt t amanho =0;


voi d set up( ) {
/ / I ni ci al i zacao do di spl ay
l cd. begi n( scr eenWi dt h, scr eenHei ght ) ;
}

voi d l oop( ) {
l cd. set Cur sor ( scr ol l Cur sor , 0) ;
l cd. pr i nt ( l i ne1. subst r i ng( st r i ngSt ar t , st r i ngSt o
l cd. set Cur sor ( 0, 1) ;
l cd. pr i nt ( l i ne2) ;
/ / Quant o menor o val or do del ay, mai s r api do o
del ay( 250) ;
scr ol l _sup( ) ; / / Chama a r ot i na que execut a o sc
/ / Ver i f i ca o t amanho da st r i ng
t amanho = l i ne1. l engt h( ) ;
i f ( st r i ngSt ar t == t amanho)
{
st r i ngSt ar t = 0;
st r i ngSt op = 0;
}
}

voi d scr ol l _sup( )
{
l cd. cl ear ( ) ;
i f ( st r i ngSt ar t == 0 && scr ol l Cur sor > 0) {
scr ol l Cur sor - - ;
st r i ngSt op++;
} el se i f ( st r i ngSt ar t == st r i ngSt op) {
st r i ngSt ar t = st r i ngSt op = 0;
scr ol l Cur sor = scr eenWi dt h;
} el se i f ( st r i ngSt op == l i ne1. l engt h( ) && scr o
st r i ngSt ar t ++;
} el se {
st r i ngSt ar t ++;
st r i ngSt op++;
}
}
Basicamente o que o programa faz calcular a posio do cursor, imprimir a string line1 na linha superior e a
string line2 na linha inferior. Depois ele apaga a tela, calcula a nova posio do cursor e imprime novamente as
duas strings.
E o procedimento vai se repetindo at que toda a string line1 seja mostrada na linha superior. Quando isso
acontece, todo o processo reiniciado.
Este um cdigo que pode ser melhorado, especialmente para retirar o efeito "piscar" da tela, causado pelo
uso do comando lcd.clear(), mas que serve de base para o seu projeto. :-)
J aneiro 2014 (6)
2013 (67)
Politica de Privacidade
Acionando portas do
Arduino usando Android e
bluetooth
Hoje vou mostrar um
esquema bem simples (pelo
menos eu espero que seja)
para controlar as portas do Arduino usando
bluetooth e o mdulo blue...
Ligando uma lampada com
mdulo rel
Conforme prometido, segue
esquema para ligao de
uma lampada utilizando
mdulo rel. Procurei deixar
o circuito o mais simples possvel,...
Mdulo Bluetooth J Y-MCU -
Configurao
Conforme comentei, hoje
vou mostrar um tutorial que
vai ajudar voc a configurar
o mdulo bluetooth J Y-MCU
. Este mdulo voc pode adquirir...
Medidor de distncia com o
sensor ultrasonico HC-SR04
Hoje apresento um circuito
"medidor de distncia"
usando o sensor ultrasonico
HC-SR04 , o display LCD
Winstar WH1602A e claro, o ...
Ligando uma lampada com
rel
Escrevi um post a um tempo
atrs sobre a ligao de
uma lmpada utilizando o
mdulo rel :
http://www.arduinoecia.com.br/2013/02
/ligando-u...
Postagens populares
Arduino e Cia -
Formulrio de Contato
Utilize este espao para entrar em
contato com o administrador do blog :
Endereo de email *
Mensagem *
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
2 de 26 13/03/2014 21:42
Recomendado por
Postado por Arduino e Cia s 16:48 Nenhumcomentrio:
Marcadores: 16x2, display lcd, HD44780, lcd scroll, liquidcrystal, WH1602A
Sensor de
reconhecimento de
cor TCS230 /
TCS3200
Video - Enviando
dados do Arduino
para o Android
usando bluetooth
Gravando
bootloader no
ATMEGA328
usando Arduino
Motor Shield
Arduino e motor
DC 12 volts
Controlando um
servo motor
utilizando Android
e Bluetooth
quinta-feira, 20 de fevereiro de 2014
NewTone - Alternativa biblioteca tone do Arduino
Um leitor do site me escreveu , dizendo que ao tentar utilizar a biblioteca IRremote junto com o comando Tone
do Arduino, o programa no compilava, apresentando a seguinte mensagem :
J havia acontecido comigo em algumas oportunidades, especialmente ao tentar utilizar o comando Tone junto
com a biblioteca NewPing, usada para controlar mltiplos sensores ultrasnicos HC-SR04 (usei a NewPing
no post Controle de estacionamento com o sensor HC-SR04).
A biblioteca tone do Arduino realmente apresenta alguns problemas de compatibilidade com outras biblioteca
quando estas utilizam a mesma interrupo/timer.
Felizmente encontrei uma biblioteca bem simples, a NewTone, que pelo menos nos meus testes, no
apresentou nenhum conflito. Inclusive utilizei os programas que eu j havia criado no post Sons no Arduino
para me certificar que no seriam necessrias grandes alteraes no cdigo.
E realmente a utilizao simples. As nicas alteraes no programa so o carregamento da biblioteca
NewTone no incio, e a substituio dos comandos Tone por NewTone, e noTone por noNewTone. E s.
/ / Pr ogr ama : Somno Ar dui no - Si r ene - Test e bi bl i ot eca NewTone
/ / Aut or : Ar dui no e Ci a

#i ncl ude <NewTone. h>

#def i ne t empo 10
i nt f r equenci a = 0;
i nt Pi nof al ant e = 10;

voi d set up( )
{
pi nMode( Pi nof al ant e, OUTPUT) ; / / Pi no do buzzer
}
voi d l oop( )
{
f or ( f r equenci a = 150; f r equenci a < 1800; f r equenci a += 1) {
NewTone( Pi nof al ant e, f r equenci a, t empo) ;
del ay( 1) ;
}
f or ( f r equenci a = 1800; f r equenci a > 150; f r equenci a - = 1) {
NewTone( Pi nof al ant e, f r equenci a, t empo) ;
del ay( 1) ;
}
}
Ao montar o circuito, ligue o buzzer na porta 10 do Arduino, e no se esquea de ligar em srie um resistor de
pelo menos 100 ohms :
Se voc est enfrentando problemas de conflito com a biblioteca tone padro do Arduino, esta pode ser a
.....\ar dui no\c or es\ar dui no/Tone.c pp:535: mul t i pl e def i ni t i on of `__vec t or _7'
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
3 de 26 13/03/2014 21:42
Postado por Arduino e Cia s 16:36 Nenhumcomentrio:
Marcadores: arduino, biblioteca, conflito, HC-SR04, irremote, newping, newtone, sons, tone, vector_7
soluo.
sexta-feira, 14 de fevereiro de 2014
Postado por Arduino e Cia s 14:22 Nenhumcomentrio:
Marcadores: arduino, color recognition, cor, reconhecimento de cores, sensor, tcs230, tcs3200
Video - Sensor de reconhecimento de cor TCS230 / TCS3200
Vdeo demonstrando o funcionamento do circuito e programa apresentados no post Sensor de
reconhecimento de cor TCS230 / TCS3200

quinta-feira, 13 de fevereiro de 2014
Sensor de reconhecimento de cor TCS230 / TCS3200
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
4 de 26 13/03/2014 21:42
O artigo de hoje fala sobre como utilizar o Arduino para montar um sistema de reconhecimento de cores
usando o mdulo TCS230 / TCS3200.
Esse mdulo usa o sensor TCS230 (datasheet), que composto por 64 fotodiodos. Desses 64 fotodiodos, 16
tem filtros para a cor vermelha, 16 para a cor verde, 16 para a cor azul e 16 no tem filtro algum.
Distribudos uniformemente sobre o sensor, esses sensores captam a luminosidade, filtrando as cores, e geram
na sada um sinal de onda quadrada com as informaes sobre a intensidade das cores vermelho (R = Red),
verde (G = Green) e Azul (B = Blue).
Como no mdulo mostrado acima, o sensor TCS230 geralmente vem montado em conjunto com quatro leds
brancos para iluminao, e oito pinos para conexo.
O mdulo aceita alimentao de 3 5 volts e so utilizados 5 pinos para conexo ao Arduino : os pinos de
controle S0, S1, S2, S3, e o pino OUT, que o responsvel pelo envio das informaes.
O pino OE (Output Enable, ou sada habilitada/ativada) deve ser ligado ao GND, j que o mdulo vai enviar
informaes continuamente ao Arduino.
No circuito adicionei 3 leds nas cores correspondentes, para que acendam quando determinada cor for
reconhecida pelo sensor. Apesar de trabalhar nesse experimento apenas com as 3 cores primrias, nada
impede que outras combinaes sejam usadas no programa, de acordo com os nveis do sinal RGB.
No programa, os pinos S0 e S1 so colocados em nvel alto e ento so alternados os estados dos pinos S2 e
S3, que determinam qual fotodiodo ser ativado. Veja na tabela abaixo as combinaes que determinam o tipo
de frequncia de sada e tambm o padro de ativao dos fotodiodos :
/ / Pr ogr ama : Det ect or de cor es usando modul o TCS230
/ / Al t er acoes e coment ar i os : Ar dui no e Ci a
/ /
/ / Baseado no pr ogr ama or i gi nal de Mar t i n Mason

/ / Pi nos de conexao do modul o TCS230
const i nt s0 = 8;
const i nt s1 = 9;
const i nt s2 = 12;
const i nt s3 = 11;
const i nt out = 10;
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
5 de 26 13/03/2014 21:42

/ / Pi nos dos l eds
i nt pi nol edver m= 2;
i nt pi nol edver d = 3;
i nt pi nol edazul = 4;

/ / Var i avei s que ar mazenamo val or das cor es
i nt r ed = 0;
i nt gr een = 0;
i nt bl ue = 0;

voi d set up( )
{
pi nMode( s0, OUTPUT) ;
pi nMode( s1, OUTPUT) ;
pi nMode( s2, OUTPUT) ;
pi nMode( s3, OUTPUT) ;
pi nMode( out , I NPUT) ;
pi nMode( pi nol edver m, OUTPUT) ;
pi nMode( pi nol edver d, OUTPUT) ;
pi nMode( pi nol edazul , OUTPUT) ;
Ser i al . begi n( 9600) ;
di gi t al Wr i t e( s0, HI GH) ;
di gi t al Wr i t e( s1, HI GH) ;
}

voi d l oop( ) {
col or ( ) ; / / Chama a r ot i na que l e as cor es
/ / Most r a no ser i al moni t or os val or es det ect ados
Ser i al . pr i nt ( " Ver mel ho : " ) ;
Ser i al . pr i nt ( r ed, DEC) ;
Ser i al . pr i nt ( " Ver de : " ) ;
Ser i al . pr i nt ( gr een, DEC) ;
Ser i al . pr i nt ( " Azul : " ) ;
Ser i al . pr i nt ( bl ue, DEC) ;
Ser i al . pr i nt l n( ) ;
/ / Ver i f i ca se a cor ver mel ha f oi det ect ada
i f ( r ed < bl ue && r ed < gr een && r ed > 50)
{
Ser i al . pr i nt l n( " Ver mel ho" ) ;
di gi t al Wr i t e( pi nol edver m, HI GH) ; / / Acende o l ed ver mel ho
di gi t al Wr i t e( pi nol edver d, LOW) ;
di gi t al Wr i t e( pi nol edazul , LOW) ;
}
/ / Ver i f i ca se a cor azul f oi det ect ada
el se i f ( bl ue < r ed && bl ue < gr een)
{
Ser i al . pr i nt l n( " Azul " ) ;
di gi t al Wr i t e( pi nol edver m, LOW) ;
di gi t al Wr i t e( pi nol edver d, LOW) ;
di gi t al Wr i t e( pi nol edazul , HI GH) ; / / Acende o l ed azul
}
/ / Ver i f i ca se a cor ver de f oi det ect ada
el se i f ( gr een < r ed && gr een < bl ue)
{
Ser i al . pr i nt l n( " Ver de" ) ;
di gi t al Wr i t e( pi nol edver m, LOW) ;
di gi t al Wr i t e( pi nol edver d, HI GH) ; / / Acende o l ed ver de
di gi t al Wr i t e( pi nol edazul , LOW) ;
}
Ser i al . pr i nt l n( ) ;
/ / Aguar da 2 segundos, apaga os l eds e r ei ni ci a o pr ocesso
del ay( 2000) ;
di gi t al Wr i t e( pi nol edver m, LOW) ;
di gi t al Wr i t e( pi nol edver d, LOW) ;
di gi t al Wr i t e( pi nol edazul , LOW) ;
}

voi d col or ( )
{
/ / Rot i na que l e o val or das cor es
di gi t al Wr i t e( s2, LOW) ;
di gi t al Wr i t e( s3, LOW) ;
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
6 de 26 13/03/2014 21:42
Postado por Arduino e Cia s 15:16 2 comentrios:
Marcadores: arduino, color recognition, cor, reconhecimento de cores, sensor, tcs230, tcs3200
/ / count OUT, pRed, RED
r ed = pul seI n( out , di gi t al Read( out ) == HI GH ? LOW: HI GH) ;
di gi t al Wr i t e( s3, HI GH) ;
/ / count OUT, pBLUE, BLUE
bl ue = pul seI n( out , di gi t al Read( out ) == HI GH ? LOW: HI GH) ;
di gi t al Wr i t e( s2, HI GH) ;
/ / count OUT, pGr een, GREEN
gr een = pul seI n( out , di gi t al Read( out ) == HI GH ? LOW: HI GH) ;
}

Carregue o programa e aproxime objetos de diferentes cores ao sensor. O led correspondente ir acender, e
tambm gerada uma sada como essa no serial monitor, onde voc pode ver exatamente os nveis de sinal
das cores detectadas :
Em breve um vdeo demonstrando a utilizao deste programa. At l !
Atualizado : Veja neste link o vdeo de demonstrao deste experimento.
tera-feira, 28 de janeiro de 2014
Controlando um servo motor utilizando Android e Bluetooth
A um tempo atrs eu escrevi um post sobre como controlar as portas do Arduino usando um mdulo
bluetooth JY-MCU. Recentemente, mostrei como enviar dados do Arduino para o Android no post Enviando
dados do Arduino para o Android usando bluetooth.
Vou agora usar o mesmo princpio desses artigos, mas dessa vez para controlar um servo motor, um Micro
Servo 9G, com ngulo de rotao de 180 graus :

Desta vez, o mdulo bluetooth utilizado tem nvel de sinal de 3.3 v (verifique no verso do seu mdulo BT qual a
tenso do nvel de sinal) :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
7 de 26 13/03/2014 21:42
O funcionamento deste circuito segue um dos exemplos da biblioteca SERVO, e que eu j utilizei anteriormente
para montar o post com o sugestivo nome de Controlando um Servo. No exemplo, utilizado um
potencimetro para controle do ngulo de rotao do motor.
Seguindo esta idia, e usando o programa MicrocontrollerBT no Android, vou criar um boto deslizante para
fazer a funo do potencimetro e controlar o motor.
Observe na montagem do circuito que eu utilizei 2 resistores no pino RX do mdulo Bluetooth. A funo
desses resistores atuar como um divisor de tenso, j que o mdulo BT que estou utilizando trabalha com 3.3
v no pino de sinal, e se ligarmos diretamente esse pino no Arduino, que trabalha com 5 volts, corremos o risco
de danificar o mdulo BT. Utilizei 2 resistores, um de 220 ohms e um de 330 ohms, que fizeram com que a
tenso do sinal vindo do Arduino casse para aproximadamente 3 volts.
Voc no tem resistores de 220 e 330 ohms ? No tem problema. Acesse este link, digite 5 para a tenso de
entrada (Input Voltage), digite os valores dos resistores (R1 e R2) que voc possui, e pressione o boto
Compute para verificar no campo Output Voltage qual ser a tenso de sada, lembrando que por segurana
esta deve ser, no mximo, de 3.3v.
Monte o circuito e carregue o programa abaixo no Arduino, mas antes desconecte o Vcc do mdulo blueooth,
pois como ele tambm utiliza a comunicao serial para transmitir dados ao Arduino, pode gerar algum erro na
hora da transmisso pelo computador.
/ / Pr ogr ama : Cont r ol e de ser vo pel o Andr oi d ut i l i zando Bl uet oot h
/ / Aut or : Ar dui no e Ci a

#i ncl ude <Ser vo. h>

Ser vo myser vo;

i nt val ;

voi d set up( )
{
/ / Pi no de dados do ser vo l i gado na por t a 4
myser vo. at t ach( 4) ;
Ser i al . begi n( 9600) ;
}

voi d l oop( )
{
i f ( Ser i al . avai l abl e( ) >=2)
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
8 de 26 13/03/2014 21:42
{
i nt key=Ser i al . r ead( ) ;
i nt val =Ser i al . r ead( ) ;
myser vo. wr i t e( val ) ;
}
}
Conecte o Vcc novamente ao mdulo BT. Vamos passar agora para a parte de configurao do Android.
Carregue o Microcontroller BT :
Clique no boto MENU do seu celular, e escolha a opo NEW LAYOUT :
Adicione um nome ao seu layout. Utilizei Arduino Servo :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
9 de 26 13/03/2014 21:42
Aps digitar o nome, o programa volta para a tela anterior, com o layout em branco, e o nome do layout
escolhido no canto superior esquerdo :
Clique novamente o boto MENU, e em EDIT MODE :

Note que a parte superior do layout ficar vermelha, indicando que vc est no modo de edio. Arraste a aba
na parte inferior, at que aparecam os botes que podem ser adicionados ao layout. Clique no boto
deslizante, conforme destacado, e segure at que o mesmo aparea na tela principal do layout ::
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
10 de 26 13/03/2014 21:42
Agora clique sobre o boto deslizante para configurar suas propriedades. Na parte superior esqueda, selecione
Analog Input. em Set Key, escolha 5. Abaixo, em MAX, escolha 180, que o valor mximo, em graus, que o
servo ir rotacionar . A configurao do boto deslizante ficar assim :
Terminada a parte de configurao, basta apertar a teclar RETORNAR, no seu celular. Note que o layout ficara
na cor cinza novamente, indicando que voc saiu do modo de edio :
Clique agora no boto MENU, depois em Connnect :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
11 de 26 13/03/2014 21:42
Postado por Arduino e Cia s 07:11 7 comentrios:
Marcadores: 9g, android, arduino, bluetooth, hx900, J Y-MCU, micro servo, servo motor
Escolha o dispositivo bluetooth, que deve estar previamente pareado com o seu aparelho, e aps alguns
segundos o layout do programa ficar verde, indicando que o mesmo est conectado ao mdulo bluetooth no
Arduino. Observe no lado direito, no topo do layout, que o meu celular est conectado ao dispositivo LINVOR :
Feito isso, mexa no boto deslizante para ver o servo se movimentar at o ngulo correspondente, lembrando
que o boto foi configurado at o valor mximo de 180 graus, que o ngulo mximo de movimentao deste
servo.
Voc pode utilizar mais motores no Arduino usando este procedimento. Fique atento apenas ao fato de que
esses motores costumam exigir muita corrente da placa, e provavelmente voc ter que utilizar uma fonte de
alimentao externa para aliment-los.
sexta-feira, 24 de janei ro de 2014
Ligando display LCD 16x2 em modo 8 bits
Estava aqui observando os meus posts usando display LCD 16x2 e notei uma coisa : todos os circuitos usam
os pinos D4, D5, D6 e D7 do display, mas nenhum usa os pinos D0, D1, D2 e D3. Se o display funciona
corretamente, pra que servem esses pinos, afinal ?
Esse tipo de display pode funcionar em modo 4 bits (usando 4 pinos), ou no modo 8 bits, usando todos os
pinos de dados. Certamente quem usa o Arduino Uno e outras placas Arduino menores precisa economizar
portas, especialmente se for ligar, ao mesmo tempo, o display e vrios sensores.
"Teoricamente" (prestem ateno s aspas), se voc necessita de uma taxa de atualizao mais eficiente do
display e no vai utilizar tantos sensores, pode utilizar o modo de 8 bits e observar um ganho de performance
no LCD.
Para tentar observar isso, liguei um display com o controlador HD44780 na protoboard, utilizando 8 pinos, e
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
12 de 26 13/03/2014 21:42
rodei o programa exemplo que vem junto com a biblioteca Liquid Crystal, chamado Autoscroll. Para a
montagem do circuito, utilizei a tabela abaixo :
O comando LiquidCrystal tem a seguinte sintaxe se voc for usar o display no modo 4 bits :
LiquidCrystal(rs, enable, d4, d5, d6, d7)
J no modo 8 bits, basta acrescentar os pinos referentes ao D0, D1, D2 e D3 do display :
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
Ento no programa eu coloquei os dois comandos, e voc mesmo pode comentar uma linha ou outra, testando
os 2 modos e tirando suas prprias concluses :
/ / i ncl ude t he l i br ar y code:
#i ncl ude <Li qui dCr yst al . h>

/ / i ni t i al i ze t he l i br ar y wi t h t he number s of t he i nt er f ace pi ns
/ / Habi l i t e a l i nha abai xo se f or usar o di spl ay no modo 4 bi t s
/ / Li qui dCr yst al l cd( 12, 11, 5, 4, 3, 2) ; / / Modo 4 bi t s

/ / Habi l i t e a l i nha abai xo se f or usar o di spl ay no modo 8 bi t s
Li qui dCr yst al l cd( 12, 11, 6, 7, 8, 9, 5, 4, 3, 2) ; / / Modo 8 bi t s


voi d set up( ) {
/ / set up t he LCD' s number of col umns and r ows:
l cd. begi n( 16, 2) ;
}

voi d l oop( ) {
/ / set t he cur sor t o ( 0, 0) :
l cd. set Cur sor ( 0, 0) ;
/ / pr i nt f r om0 t o 9:
f or ( i nt t hi sChar = 0; t hi sChar < 10; t hi sChar ++) {
l cd. pr i nt ( t hi sChar ) ;
del ay( 500) ;
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
13 de 26 13/03/2014 21:42
Postado por Arduino e Cia s 22:45 Nenhumcomentrio:
Marcadores: arduino, display lcd, HD44780, LCD, liquid crystal
}

/ / set t he cur sor t o ( 16, 1) :
l cd. set Cur sor ( 16, 1) ;
/ / set t he di spl ay t o aut omat i cal l y scr ol l :
l cd. aut oscr ol l ( ) ;
/ / pr i nt f r om0 t o 9:
f or ( i nt t hi sChar = 0; t hi sChar < 10; t hi sChar ++) {
l cd. pr i nt ( t hi sChar ) ;
del ay( 500) ;
}
/ / t ur n of f aut omat i c scr ol l i ng
l cd. noAut oscr ol l ( ) ;

/ / cl ear scr een f or t he next l oop:
l cd. cl ear ( ) ;
}

Faz diferena ? Na minha opinio, pouqussima. A no ser que o seu programa exija muito do display, o que
um pouco difcil em se tratando de um display basicamente para texto, no vale a pena gastar 4 pinos a mais
do Arduino para usar o modo de 8 bits.
Vale o aprendizado e para usos futuros, quem sabe em outros displays.
Voc fez o teste ? Notou diferena ? Compartilhe a sua opinio na rea de comentrios. Obrigado !
tera-feira, 21 de janeiro de 2014
Video - Enviando dados do Arduino para o Android usando
bluetooth
Vdeo mostrando o funcionamento do circuito apresentado no artigo Enviando dados do Arduino para o
Android usando bluetooth :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
14 de 26 13/03/2014 21:42
Postado por Arduino e Cia s 14:29 2 comentrios:
Marcadores: android, arduino, bluetooth, celular, contador, J Y-MCU, optico, potenciometro, sensor, tcrt5000
Enviando dados do Arduino para o Android usando bluetooth
No primeiro post sobre o Android e Arduino (leia aqui), eu mostrei como usar um celular com Android para
enviar comandos e controlar as portas do Arduino atravs do bluetooth.
Hoje vou mostrar o caminho inverso, ou seja, como enviar dados do Arduino para o Android, tambm usando o
programa Microcontroller BT, disponvel no Google Play.
Para isso, montei um circuito usando o nosso j conhecido sensor ptico reflexivo TCRT5000 (leia aqui um
artigo referente esse sensor), um mdulo bluetooth JY-MCU e um potencimetro. O Arduino enviar os
dados recebidos do sensor (que funcionar como um contador incremental) e tambm do potencimetro,
gerando no Android uma tela como essa :
Observe na montagem do circuito que eu utilizei 2 resistores no pino RX do mdulo Bluetooth. A funo
desses resistores atuar como um divisor de tenso, j que o mdulo BT que estou utilizando trabalha com 3.3
v no pino de sinal, e se ligarmos diretamente esse pino no Arduino, que trabalha com 5 volts, corremos o risco
de danificar o mdulo BT. Utilizei 2 resistores, um de 220 ohms e um de 330 ohms, que fizeram com que a
tenso do sinal vindo do Arduino casse para aproximadamente 3 volts.
Voc no tem resistores de 220 e 330 ohms ? No tem problema. Acesse este link, digite 5 para a tenso de
entrada (Input Voltage), digite os valores dos resistores (R1 e R2) que voc possui, e pressione o boto
Compute para verificar no campo Output Voltage qual ser a tenso de sada, lembrando que por segurana
esta deve ser, no mximo, de 3.3v.
Para o sensor ptico, utilizei um resistor de 10 K para o transistor (parte inferior/preta do sensor), e um resistor
de 330 ohms para o led infravermelho (parte superior/azul) :
Antes de partir para a configurao do Android, desconecte o Vcc do mdulo bluetooth e carregue o programa
abaixo no Arduino. Por que desligar o Vcc ? Porque o mdulo bluetooth tambm utiliza a comunicao serial
com o Arduino, e isso pode gerar algum conflito na hora de transferirmos o programa pelo computador :
/ / Pr ogr ama : Envi o de dados Ar dui no => Andr oi d
/ / Aut or : Ar dui no e Ci a

i nt cont ador = 0;
i nt pi nosensor = 7; / / Li gado ao pi no " col et or " do sensor opt i co
i nt l ei t ur a; / / Ar mazena o val or l i do pel o sensor
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
15 de 26 13/03/2014 21:42
i nt pi npot = A0; / / Li gado ao pi no cent r al do pot

voi d set up( ) {
pi nMode( pi nosensor , I NPUT) ; / / Def i ne o pi no do
pi nMode( pi npot , I NPUT) ; / / Def i ne o pi no do pot e
Ser i al . begi n( 9600) ;
/ / Envi a o val or i ni ci al zer o do cont ador par a o
Ser i al . wr i t e( 201) ;
Ser i al . wr i t e( hi ghByt e( cont ador ) ) ;
Ser i al . wr i t e( l owByt e( cont ador ) ) ;
}

voi d l oop( )
{
l ei t ur a = di gi t al Read( pi nosensor ) ; / / Le as i nf o
i f ( l ei t ur a ! = 1) / / Ver i f i ca se o obj et o f oi de
{
cont ador = cont ador ++; / / I ncr ement a o val or do
whi l e( di gi t al Read( pi nosensor ) ! = 1) / / Loop cas
{
Ser i al . pr i nt l n( cont ador ) ;
/ / Envi a o val or at ual i zado do cont ador par a o
Ser i al . wr i t e( 201) ;
Ser i al . wr i t e( hi ghByt e( cont ador ) ) ;
Ser i al . wr i t e( l owByt e( cont ador ) ) ;
}
}
/ / Envi a as i nf or macoes do pot enci omet r o par a o
i nt val or _pot = anal ogRead( pi npot ) ;
Ser i al . wr i t e( 202) ;
Ser i al . wr i t e( hi ghByt e( val or _pot ) ) ;
Ser i al . wr i t e( l owByt e( val or _pot ) ) ;
del ay( 50) ;
}

Finalizada a transferncia do programa para o Arduino, ligue novamente o Vcc do mdulo bluetooth e, no
Android, execute o aplicativo Microcontroller BT (disponvel para download nesse link do Google Play) :
Aperte a tecla MENU no seu celular e escolha a opo NEW LAYOUT :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
16 de 26 13/03/2014 21:42
D um nome ao seu layout. Escolhi "Arduino Monitor" :
Aps digitar o nome, o programa volta para a tela anterior, com o layout em branco, e o nome do layout
escolhido no canto superior esquerdo. Aperte novamente a tecla MENU do seu celular e escolha a opo EDIT
MODE :
Repare que o layout ficar na cor vermelha, indicando que voc est no modo de edio. Na base da tela,
arraste a aba at aparecerem os botes para criarmos o layout :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
17 de 26 13/03/2014 21:42
Clique no boto TextView e segure at que o mesmo seja transferido para a tela principal do layout. Faa isso
4 vezes, criando 4 botes texto. Seu layout inicialmente ficar assim :
Clique no boto TEXTVIEW superior esquerdo, e configure-o com as opes abaixo. Clicando no cone de
edio, conforme destacado, voc consegue alterar o texto do boto, que no meu caso eu configurei como
"CONTADOR :". Clique em DONE quando terminar de configurar :
Faa o mesmo com o boto inferior esquerdo. Utilizei o texto "Potenciometro" :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
18 de 26 13/03/2014 21:42
Vamos agora configurar os botes de texto que recebero os dados do Arduino. Clique no boto superior
direito, referente ao sensor ptico e configure-o da seguinte maneira :
O boto inferior direito receber os dados lidos do potencimetro :
Terminada a configurao do layout, sua tela estar parecida com essa :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
19 de 26 13/03/2014 21:42
Postado por Arduino e Cia s 07:23 2 comentrios:
Aperte a tecla "retornar", do seu celular, e o layout voltar a ficar em cinza, indicando que voc saiu do modo
de edio. Aperte a tecla MENU do seu celular, e escolha a opo Connect. :
Selecione o dispositivo bluetooth, que deve estar previamente pareado com o seu aparelho, e aps alguns
segundos o layout do programa ficar verde, indicando que o mesmo est conectado ao mdulo bluetooth no
Arduino. Observe no lado direito, no topo do layout, que o meu celular est conectado ao dispositivo LINVOR e
o programa est recebendo os dados referentes ao sensor ptico e ao potencimetro :
Veja neste link um vdeo demonstrando o circuito apresentado neste artigo.
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
20 de 26 13/03/2014 21:42
Marcadores: android, arduino, bluetooth, celular, contador, J Y-MCU, optico, potenciometro, sensor, tcrt5000
segunda-feira, 13 de janeiro de 2014
Montando Arduino na protoboard
No ltimo post (Gravando bootloader no ATMEGA328 usando Arduino) eu falei sobre como gravar o
bootloader no ATMEGA328 utilizando a prpria placa do Arduino como gravador, o que permite que voc use
o microcontrolador fora da placa Arduino. Lembre-se tambm que na FILIPEFLOP voc tem a opo de
comprar o chip j com o bootloader gravado e com todos os componentes utilizados neste artigo.
Ok, legal, mas como eu uso o microcontrolador fora da placa Arduino ?
Projetos definitivos utilizando Arduino no precisam, na maioria das vezes, de atualizao constante do
programa contido no microcontrolador. Depois que voc testar o circuito na protoboard e estiver tudo ok, voc
pode transfer-lo para uma placa de circuito impresso e, com alguns componentes adicionais, fazer com que
ele funcione "sozinho".
Assim voc elimina, por exemplo, a necessidade do circuito regulador de tenso e tambm o chip de
comunicao USB com o computador, composto pelo ATMEGA16U2.
Fique atento ao fato de que, utilizando o ATMEGA328 desta forma, a alimentao do CI deve ficar entre 1,8 e
5,5 volts, que so os valores limite fornecidos pelo fabricante e que constam no datasheet do
microcontrolador.
Testar o ATMEGA328 fora da placa bem simples e podemos usar praticamente o mesmo circuito que
montamos para gravar o bootloader do post anterior, com o acrscimo de um push button para fazer a funo
de boto de reset, e 2 capacitores cermicos de 22 pF para ligao ao cristal.
Assumindo que temos um Arduino UNO, vamos colocar o microcontrolador no soquete e carregar o seguinte
programa :
/ / Pr ogr ama : Sequenci al de l eds - Test e ATMEGA328
/ / Aut or : Ar dui no e Ci a

i nt pi no_ver de = 4; / / Pi no l i gado ao l ed ver de
i nt pi no_ver m= 5; / / Pi no l i gado ao l ed ver mel ho
i nt pi no_amar = 6; / / Pi no l i gado ao l ed amar el o
i nt t empo = 1000; / / Cont r ol a o t empo de at i vacao dos l eds

voi d set up( )
{
/ / Def i ne os pi nos dos l eds como sai da
pi nMode( pi no_ver de, OUTPUT) ;
pi nMode( pi no_ver m, OUTPUT) ;
pi nMode( pi no_amar , OUTPUT) ;
}

voi d l oop( )
{
di gi t al Wr i t e( pi no_ver de, HI GH) ;
di gi t al Wr i t e( pi no_ver m, LOW) ;
di gi t al Wr i t e( pi no_amar , LOW) ;
del ay( t empo) ;
di gi t al Wr i t e( pi no_ver de, LOW) ;
di gi t al Wr i t e( pi no_ver m, HI GH) ;
di gi t al Wr i t e( pi no_amar , LOW) ;
del ay( t empo) ;
di gi t al Wr i t e( pi no_ver de, LOW) ;
di gi t al Wr i t e( pi no_ver m, LOW) ;
di gi t al Wr i t e( pi no_amar , HI GH) ;
del ay( t empo) ;
t empo = t empo- 50;
i f ( t empo < 100)
{
t empo = 1000;
}
}
Esse programa aciona os 3 leds do circuito abaixo em sequncia, e a varivel TEMPO define o tempo que o
led ficar ligado/desligado. A cada sequncia a varivel tem o valor diminudo, o que faz com que os leds
acendam cada vez mais rpido. Quando a varivel TEMPO atinge um valor menor do que 100 milisegundos, o
processo reiniciado.
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
21 de 26 13/03/2014 21:42
Postado por Arduino e Cia s 16:56 3 comentrios:
Marcadores: arduino, atmega, atmega16u2, atmega328, bootloader, protoboard
Com o programa carregado e devidamente testado, vamos agora utilizar o ATMEGA fora do Arduino Uno.
Retire o microcontrolador, coloque-o na protoboard e monte o circuito abaixo, observando as conexes do
ATMEGA328, sendo que agora vamos ligar o led verde porta D4 (Pino 6 do ATMEGA), o led vermelho
porta D5 (pino 11 do ATMEGA), e o led amarelo ao D6 (pino 12 do ATMEGA). O resistor ligado ao pino 1
(Reset) tem o valor de 10K :
Alimente o circuito com pilhas/baterias ou outra fonte que fornea at 5.5 volts, e veja o seu ATMEGA328
funcionar sem uma placa Arduino.
quinta-feira, 9 de janeiro de 2014
Gravando bootloader no ATMEGA328 usando Arduino
Ter um microcontrolador de reserva recomendvel quando o seu Arduino comea a se comportar de forma
estranha e voc quer se certificar que o problema est (ou no) no microcontrolador. Uma simples troca de
chip pode poupar muitas horas de tentativa e erro para achar um problema no seu circuito.
Voc tambm pode precisar de um ATMEGA para montar o seu circuito definitivo, depois de ter feito todos os
testes e ajustes no circuito montado na protoboard e estar satisfeito com o resultado.
Uma opo voc comprar o chip ATMEGA j com o bootloader, como esse da FILIPEFLOP. Esse kit
tambm acompanha todos os componentes necessrios para montar um Arduino na Protoboard, como
mostrado no post Montando Arduino na protoboard.
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
22 de 26 13/03/2014 21:42
Outra opo, at como aprendizado, utilizar o tutorial que vou apresentar e que utiliza o prprio Arduino e um
ATMEGA328P-PU "vazio", no qual vamos gravar o bootloader do Arduino Uno.
Vamos utilizar o seguinte material :
Arduino Uno
Chip ATMEGA328P-PU
Resistor de 10 K ohms
Cristal de 16 Mhz
1 led
1 resistor limitador de corrente para o led. No meu circuito, utilizei um de 330 ohms
O tutorial tem vrias etapas, que vou detalhar, mas os passos principais podem ser divididos desta maneira :
Passos 1 3 : Consistem na preparao do Arduino Uno como gravador ISP
Passos 4 9 : Ligao do Arduino Uno ao ATMEGA328P-PU e gravao do bootloader
No pule etapas ou inverta os passos. Os passos 1 3, que so a preparao do Arduino Uno, devem ser
completamente finalizados antes de prosseguir com a gravao.
Passo 1 - Carregue a IDE do Arduino. No menu Arquivo => Exemplos, escolha a opo ArduinoISP :
Passo 2 - Ser aberta uma nova janela, com o sketch do ArduinoISP, o programa responsvel pela gravao :
Preparao do Arduino Uno
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
23 de 26 13/03/2014 21:42
Passo 3 - Com a nova janela selecionada, pressione o boto CARREGAR, conforme destacado, e transfira o
programa para o Arduino Uno, como normalmente voc faz com outros programas :
Essas 3 etapas encerram o processo de preparao do Arduino Uno. Vamos agora montar o circuito para
gravao do ATMEGA, antes observando a pinagem do CI :
Passo 4 - Monte o circuito conforme a figura abaixo, seguindo o seguinte esquema :
Ligue o pino 1 (RST) do ATMEGA ao pino 10 do Arduino
Ligue o pino 17 (MOSI) do ATMEGA ao pino 11 do Arduino
Ligue o pino 18 (MISO) do ATMEGA ao pino 12 do Arduino
Ligue o pino 19 (SCK) do ATMEGA ao pino 13 do Arduino
Ligue o led ao pino 7 do Arduino, juntamente com o resistor de 330 ohms
Ligue um resistor de 10 K ao pino 1 (RST) do ATMEGA, e a outra extremidade do resistor ligue no
Vcc 5V do Arduino
Ligue o pino 20 do ATMEGA ao Vcc 5v
Ligue o pino 22 do ATMEGA ao GND
Ligue o pino 7 do ATMEGA ao Vcc 5v
Ligue o pino 8 do ATMEGA ao GND
Nos pinos 9 e 10 (Clock) do ATMEGA, conecte o cristal de 16 Mhz
Circuito e gravao do bootloader
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
24 de 26 13/03/2014 21:42
Passo 5 - Conecte o Arduino UNO ao computador. Na janela da IDE do ArduinoISP, v em Ferramentas =>
Placa e escolha a opo Arduino UNO, que o bootloader que desejamos gravar no ATMEGA :
Passo 6 - No menu Ferramentas, escolha a opo GRAVADOR e selecione Arduino as ISP :
Passo 7 - Para iniciar a gravao, v em Ferramentas e selecione Gravar Bootloader :
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
25 de 26 13/03/2014 21:42
Postagens mais recentes Postagens mais antigas Incio
Assinar: Postagens (Atom)
Postado por Arduino e Cia s 16:23 Nenhumcomentrio:
Marcadores: arduino, atmega328, atmel, bootloader, gravador, isp
Passo 8 - O processo de gravao ser iniciado, e voc pode acompanhar o andamento na parte inferior da
IDE, e tambm pela sinalizao do LED ligado porta 7, que ficar aceso durante o processo de gravao:
Passo 9 - Finalizado o processo, que geralmente rpido (no meu equipamento demorou menos de 1 min),
apresentada a mensagem mostrando que a gravao foi bem sucedida :
Isso encerra o tutorial. O ATMEGA est agora gravado com o bootloader para Arduino Uno, e pode ser testado
na prpria placa ou utilizado para montar um circuito definitivo. Para ver um exemplo de utilizao, veja o artigo
Montando Arduino na protoboard.
Arduino e Cia - 2013 - . Tecnologia do Blogger.
Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...
26 de 26 13/03/2014 21:42

Você também pode gostar