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