Como Fazer Um Scroll Com o LCD 16x2 - Arduino & CIA

2
quinta-feira, 13 de março de 2014  Arduino - Como r ealizar um scroll no LCD 16x2, deixando uma linha fixa Um leitor do site enviou uma pergunta hoje, sobre como realizar um scroll no LCD 16 x2 ligado ao Ard uin o, mas apenas em uma linha. A outra ficaria estática.  A pergunta é aparentemente simples mas, ao pes quisar o assu nto, vi que r ealizar o scro ll em apenas uma linha envolve questões como mexer diretamente na memória do LCD e alterar (ou criar) bibliotecas.  Ao invés de u sar uma bibl ioteca nova, p or que não fazer isso ut ilizando 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 estática, mas a linha superior realizava o scroll uma única vez. O que eu fiz foi alterar o código para que o scroll não só fosse realizado de forma ininterrupta, como também aceitasse qualquer tamanho de string que fosse colocada no programa. O resultado você pode ver no vídeo 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.  Além do LCD, usei como co mponente a dicional um r esistor de 10 K para ajuste d o contraste :  Abaixo, o pro grama utiliza do para tes tes e mostra do no vídeo acima :  / / Pr ogr ama : Scroll LCD 16x2 a pen as emuma li nha / / Al t eracoes e a daptacoes : Ardui no e C i a / / / / Baseado no p r ogr am a ori gi nal de N i shant Ar ora Pesquise neste blog : Tutoriais, projetos, programas e dicas relacionadas ao Arduino. Bem v indo !  Ard ui no e Ci a 365 Curtir Curtir Parceiros Receba as atualizações do blog por email : Seguir @ArduinoeCia  2014 (10)  Março 2014 (1)  Arduino - Como realizar um scroll no LCD 16x2, dei... Fevereiro 2014 (3)  Arqu ivo do bl og Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0... 1 de 26 13/03/2014 21:42

Transcript of Como Fazer Um Scroll Com o LCD 16x2 - Arduino & CIA

  • quinta-feira, 13 de maro de 2014

    Arduino - Como realizar um scroll no LCD 16x2, deixando umalinha 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 linhaenvolve 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 utilizadapor todos e provavelmente j instalada na sua IDE ?

    Encontrei um colega l da India (http://nishantarora.in/), que criou um programinha exatamente para isso, masque infelizmente resolvia apenas parte do problema : a linha inferior permanecia esttica, mas a linha superiorrealizava 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 tambmaceitasse qualquer tamanho de string que fosse colocada no programa. O resultado voc pode ver no vdeoabaixo :

    O circuito utilizado o mesmo mostrado no post Display LCD Winstar WH1602A. O modelo do LCD oWH1602A mas o programa pode ser utilizado sem problemas em outros modelos de display 16x2, como oHD44780, 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 :

    //Programa : Scroll LCD 16x2 apenas em uma linha //Alteracoes e adaptacoes : Arduino e Cia // //Baseado no programa original de Nishant Arora

    Pesquise neste blog :

    Tutoriais, projetos, programas e dicasrelacionadas ao Arduino. Bem vindo !

    Arduino e Cia365CurtirCurtir

    Parceiros

    Receba as atualizaes do blog por email :

    Seguir @ArduinoeCia

    2014 (10)

    Maro 2014 (1)

    Arduino - Como realizar um scroll noLCD 16x2, dei...

    Fevereiro 2014 (3)

    Arquivo 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

    #include //Inicializacao do display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configuracoes LCD 16x2 int screenWidth = 16; int screenHeight = 2; //String para as 2 linhas //line1 = Scroll String line1 = "Arduino e Cia, dicas, projetos e

    //line2 = Linha inferior - estatica String line2 = " Arduino e Cia"; // just some reference flags int stringStart, stringStop = 0; int scrollCursor = screenWidth; int tamanho =0; void setup() { //Inicializacao do display lcd.begin(screenWidth,screenHeight); } void loop() { lcd.setCursor(scrollCursor, 0); lcd.print(line1.substring(stringStart,stringSto

    lcd.setCursor(0, 1); lcd.print(line2); //Quanto menor o valor do delay, mais rapido o

    delay(250); scroll_sup(); //Chama a rotina que executa o sc

    //Verifica o tamanho da string tamanho = line1.length(); if (stringStart == tamanho) { stringStart = 0; stringStop = 0; } } void scroll_sup() { lcd.clear(); if(stringStart == 0 && scrollCursor > 0){ scrollCursor--; stringStop++; } else if (stringStart == stringStop){ stringStart = stringStop = 0; scrollCursor = screenWidth; } else if (stringStop == line1.length() && scro

    stringStart++; } else { stringStart++; stringStop++; } }

    Basicamente o que o programa faz calcular a posio do cursor, imprimir a string line1 na linha superior e astring line2 na linha inferior. Depois ele apaga a tela, calcula a nova posio do cursor e imprime novamente asduas strings.

    E o procedimento vai se repetindo at que toda a string line1 seja mostrada na linha superior. Quando issoacontece, todo o processo reiniciado.

    Este um cdigo que pode ser melhorado, especialmente para retirar o efeito "piscar" da tela, causado pelouso do comando lcd.clear(), mas que serve de base para o seu projeto. :-)

    Janeiro 2014 (6)

    2013 (67)

    Politica de Privacidade

    Acionando portas doArduino usando Android ebluetoothHoje vou mostrar umesquema bem simples (pelomenos eu espero que seja)

    para controlar as portas do Arduino usandobluetooth e o mdulo blue...

    Ligando uma lampada commdulo relConforme prometido, segueesquema para ligao deuma lampada utilizandomdulo rel. Procurei deixar

    o circuito o mais simples possvel,...

    Mdulo Bluetooth JY-MCU -ConfiguraoConforme comentei, hojevou mostrar um tutorial quevai ajudar voc a configuraro mdulo bluetooth JY-MCU

    . Este mdulo voc pode adquirir...

    Medidor de distncia com osensor ultrasonico HC-SR04Hoje apresento um circuito"medidor de distncia"usando o sensor ultrasonicoHC-SR04 , o display LCD

    Winstar WH1602A e claro, o ...

    Ligando uma lampada comrelEscrevi um post a um tempoatrs sobre a ligao deuma lmpada utilizando omdulo rel :

    http://www.arduinoecia.com.br/2013/02/ligando-u...

    Postagens populares

    Arduino e Cia -Formulrio de ContatoUtilize este espao para entrar emcontato 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 Nenhum comentrio:

    Marcadores: 16x2, display lcd, HD44780, lcd scroll, liquidcrystal, WH1602A

    Sensor dereconhecimento decor TCS230 /TCS3200

    Video - Enviandodados do Arduinopara o Androidusando bluetooth

    Gravandobootloader noATMEGA328usando Arduino

    Motor ShieldArduino e motorDC 12 volts

    Controlando umservo motorutilizando Androide Bluetooth

    quinta-feira, 20 de fevereiro de 2014

    NewTone - Alternativa biblioteca tone do ArduinoUm leitor do site me escreveu , dizendo que ao tentar utilizar a biblioteca IRremote junto com o comando Tonedo Arduino, o programa no compilava, apresentando a seguinte mensagem :

    J havia acontecido comigo em algumas oportunidades, especialmente ao tentar utilizar o comando Tone juntocom a biblioteca NewPing, usada para controlar mltiplos sensores ultrasnicos HC-SR04 (usei a NewPingno post Controle de estacionamento com o sensor HC-SR04).

    A biblioteca tone do Arduino realmente apresenta alguns problemas de compatibilidade com outras bibliotecaquando estas utilizam a mesma interrupo/timer.

    Felizmente encontrei uma biblioteca bem simples, a NewTone, que pelo menos nos meus testes, noapresentou nenhum conflito. Inclusive utilizei os programas que eu j havia criado no post Sons no Arduinopara me certificar que no seriam necessrias grandes alteraes no cdigo.

    E realmente a utilizao simples. As nicas alteraes no programa so o carregamento da bibliotecaNewTone no incio, e a substituio dos comandos Tone por NewTone, e noTone por noNewTone. E s.

    //Programa : Som no Arduino - Sirene - Teste biblioteca NewTone //Autor : Arduino e Cia #include #define tempo 10 int frequencia = 0; int Pinofalante = 10; void setup() { pinMode(Pinofalante,OUTPUT); //Pino do buzzer } void loop() { for (frequencia = 150; frequencia < 1800; frequencia += 1) { NewTone(Pinofalante, frequencia, tempo); delay(1); } for (frequencia = 1800; frequencia > 150; frequencia -= 1) { NewTone(Pinofalante, frequencia, tempo); delay(1); } }

    Ao montar o circuito, ligue o buzzer na porta 10 do Arduino, e no se esquea de ligar em srie um resistor depelo menos 100 ohms :

    Se voc est enfrentando problemas de conflito com a biblioteca tone padro do Arduino, esta pode ser a

    .....\arduino\cores\arduino/Tone.cpp:535: multiple definition of `__vector_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 Nenhum comentrio:

    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 Nenhum comentrio:

    Marcadores: arduino, color recognition, cor, reconhecimento de cores, sensor, tcs230, tcs3200

    Video - Sensor de reconhecimento de cor TCS230 / TCS3200Vdeo demonstrando o funcionamento do circuito e programa apresentados no post Sensor dereconhecimento 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 coresusando o mdulo TCS230 / TCS3200.

    Esse mdulo usa o sensor TCS230 (datasheet), que composto por 64 fotodiodos. Desses 64 fotodiodos, 16tem 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 geramna 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 ledsbrancos 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 decontrole 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 enviarinformaes continuamente ao Arduino.

    No circuito adicionei 3 leds nas cores correspondentes, para que acendam quando determinada cor forreconhecida pelo sensor. Apesar de trabalhar nesse experimento apenas com as 3 cores primrias, nadaimpede 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 eS3, que determinam qual fotodiodo ser ativado. Veja na tabela abaixo as combinaes que determinam o tipode frequncia de sada e tambm o padro de ativao dos fotodiodos :

    //Programa : Detector de cores usando modulo TCS230 //Alteracoes e comentarios : Arduino e Cia // //Baseado no programa original de Martin Mason //Pinos de conexao do modulo TCS230 const int s0 = 8; const int s1 = 9; const int s2 = 12; const int s3 = 11; const int out = 10;

    Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...

    5 de 26 13/03/2014 21:42

  • //Pinos dos leds int pinoledverm = 2; int pinoledverd = 3; int pinoledazul = 4; //Variaveis que armazenam o valor das cores int red = 0; int green = 0; int blue = 0; void setup() { pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); pinMode(out, INPUT); pinMode(pinoledverm, OUTPUT); pinMode(pinoledverd, OUTPUT); pinMode(pinoledazul, OUTPUT); Serial.begin(9600); digitalWrite(s0, HIGH); digitalWrite(s1, HIGH); } void loop() { color(); //Chama a rotina que le as cores //Mostra no serial monitor os valores detectados Serial.print("Vermelho :"); Serial.print(red, DEC); Serial.print(" Verde : "); Serial.print(green, DEC); Serial.print(" Azul : "); Serial.print(blue, DEC); Serial.println(); //Verifica se a cor vermelha foi detectada if (red < blue && red < green && red > 50) { Serial.println("Vermelho"); digitalWrite(pinoledverm, HIGH); //Acende o led vermelho digitalWrite(pinoledverd, LOW); digitalWrite(pinoledazul, LOW); } //Verifica se a cor azul foi detectada else if (blue < red && blue < green) { Serial.println("Azul"); digitalWrite(pinoledverm, LOW); digitalWrite(pinoledverd, LOW); digitalWrite(pinoledazul, HIGH); //Acende o led azul } //Verifica se a cor verde foi detectada else if (green < red && green < blue) { Serial.println("Verde"); digitalWrite(pinoledverm, LOW); digitalWrite(pinoledverd, HIGH); //Acende o led verde digitalWrite(pinoledazul, LOW); } Serial.println(); //Aguarda 2 segundos, apaga os leds e reinicia o processo delay(2000); digitalWrite(pinoledverm, LOW); digitalWrite(pinoledverd, LOW); digitalWrite(pinoledazul, LOW); } void color() { //Rotina que le o valor das cores digitalWrite(s2, LOW); digitalWrite(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 red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s3, HIGH); //count OUT, pBLUE, BLUE blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s2, HIGH); //count OUT, pGreen, GREEN green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); }

    Carregue o programa e aproxime objetos de diferentes cores ao sensor. O led correspondente ir acender, etambm gerada uma sada como essa no serial monitor, onde voc pode ver exatamente os nveis de sinaldas 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 BluetoothA um tempo atrs eu escrevi um post sobre como controlar as portas do Arduino usando um mdulobluetooth JY-MCU. Recentemente, mostrei como enviar dados do Arduino para o Android no post Enviandodados do Arduino para o Android usando bluetooth.

    Vou agora usar o mesmo princpio desses artigos, mas dessa vez para controlar um servo motor, um MicroServo 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 atenso 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 anteriormentepara montar o post com o sugestivo nome de Controlando um Servo. No exemplo, utilizado umpotencimetro para controle do ngulo de rotao do motor.

    Seguindo esta idia, e usando o programa MicrocontrollerBT no Android, vou criar um boto deslizante parafazer 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 funodesses resistores atuar como um divisor de tenso, j que o mdulo BT que estou utilizando trabalha com 3.3v no pino de sinal, e se ligarmos diretamente esse pino no Arduino, que trabalha com 5 volts, corremos o riscode danificar o mdulo BT. Utilizei 2 resistores, um de 220 ohms e um de 330 ohms, que fizeram com que atenso 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 deentrada (Input Voltage), digite os valores dos resistores (R1 e R2) que voc possui, e pressione o botoCompute para verificar no campo Output Voltage qual ser a tenso de sada, lembrando que por seguranaesta 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 nahora da transmisso pelo computador.

    //Programa : Controle de servo pelo Android utilizando Bluetooth //Autor : Arduino e Cia #include Servo myservo; int val; void setup() { //Pino de dados do servo ligado na porta 4 myservo.attach(4); Serial.begin(9600); } void loop() { if(Serial.available()>=2)

    Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...

    8 de 26 13/03/2014 21:42

  • { int key=Serial.read(); int val=Serial.read(); myservo.write(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 layoutescolhido 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 abana parte inferior, at que aparecam os botes que podem ser adicionados ao layout. Clique no botodeslizante, 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, selecioneAnalog Input. em Set Key, escolha 5. Abaixo, em MAX, escolha 180, que o valor mximo, em graus, que oservo 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 ficarana 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, JY-MCU, micro servo, servo motor

    Escolha o dispositivo bluetooth, que deve estar previamente pareado com o seu aparelho, e aps algunssegundos o layout do programa ficar verde, indicando que o mesmo est conectado ao mdulo bluetooth noArduino. 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, lembrandoque o boto foi configurado at o valor mximo de 180 graus, que o ngulo mximo de movimentao desteservo.

    Voc pode utilizar mais motores no Arduino usando este procedimento. Fique atento apenas ao fato de queesses motores costumam exigir muita corrente da placa, e provavelmente voc ter que utilizar uma fonte dealimentao externa para aliment-los.

    sexta-feira, 24 de janeiro de 2014

    Ligando display LCD 16x2 em modo 8 bitsEstava aqui observando os meus posts usando display LCD 16x2 e notei uma coisa : todos os circuitos usamos pinos D4, D5, D6 e D7 do display, mas nenhum usa os pinos D0, D1, D2 e D3. Se o display funcionacorretamente, 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 ospinos de dados. Certamente quem usa o Arduino Uno e outras placas Arduino menores precisa economizarportas, 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 dodisplay e no vai utilizar tantos sensores, pode utilizar o modo de 8 bits e observar um ganho de performanceno 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 amontagem 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, testandoos 2 modos e tirando suas prprias concluses :

    // include the library code: #include // initialize the library with the numbers of the interface pins //Habilite a linha abaixo se for usar o display no modo 4 bits //LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Modo 4 bits //Habilite a linha abaixo se for usar o display no modo 8 bits LiquidCrystal lcd(12, 11, 6, 7, 8, 9, 5, 4, 3, 2); //Modo 8 bits void setup() { // set up the LCD's number of columns and rows: lcd.begin(16,2); } void loop() { // set the cursor to (0,0): lcd.setCursor(0, 0); // print from 0 to 9: for (int thisChar = 0; thisChar < 10; thisChar++) { lcd.print(thisChar); delay(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 Nenhum comentrio:

    Marcadores: arduino, display lcd, HD44780, LCD, liquid crystal

    } // set the cursor to (16,1): lcd.setCursor(16,1); // set the display to automatically scroll: lcd.autoscroll(); // print from 0 to 9: for (int thisChar = 0; thisChar < 10; thisChar++) { lcd.print(thisChar); delay(500); } // turn off automatic scrolling lcd.noAutoscroll(); // clear screen for the next loop: lcd.clear(); }

    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 maisdo 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 usandobluetoothVdeo mostrando o funcionamento do circuito apresentado no artigo Enviando dados do Arduino para oAndroid 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, JY-MCU, optico, potenciometro, sensor, tcrt5000

    Enviando dados do Arduino para o Android usando bluetoothNo primeiro post sobre o Android e Arduino (leia aqui), eu mostrei como usar um celular com Android paraenviar 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 oprograma Microcontroller BT, disponvel no Google Play.

    Para isso, montei um circuito usando o nosso j conhecido sensor ptico reflexivo TCRT5000 (leia aqui umartigo referente esse sensor), um mdulo bluetooth JY-MCU e um potencimetro. O Arduino enviar osdados 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 funodesses resistores atuar como um divisor de tenso, j que o mdulo BT que estou utilizando trabalha com 3.3v no pino de sinal, e se ligarmos diretamente esse pino no Arduino, que trabalha com 5 volts, corremos o riscode danificar o mdulo BT. Utilizei 2 resistores, um de 220 ohms e um de 330 ohms, que fizeram com que atenso 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 deentrada (Input Voltage), digite os valores dos resistores (R1 e R2) que voc possui, e pressione o botoCompute para verificar no campo Output Voltage qual ser a tenso de sada, lembrando que por seguranaesta 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 resistorde 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 programaabaixo no Arduino. Por que desligar o Vcc ? Porque o mdulo bluetooth tambm utiliza a comunicao serialcom o Arduino, e isso pode gerar algum conflito na hora de transferirmos o programa pelo computador :

    //Programa : Envio de dados Arduino => Android //Autor : Arduino e Cia int contador = 0; int pinosensor = 7; //Ligado ao pino "coletor" do sensor optico int leitura; //Armazena o valor lido pelo sensor

    Arduino & Cia http://www.arduinoecia.com.br/search?updated-min=2014-01-01T00:0...

    15 de 26 13/03/2014 21:42

  • int pinpot = A0; //Ligado ao pino central do pot void setup() { pinMode(pinosensor, INPUT); //Define o pino do pinMode(pinpot, INPUT); //Define o pino do pote

    Serial.begin(9600); //Envia o valor inicial zero do contador para o

    Serial.write(201); Serial.write(highByte(contador)); Serial.write(lowByte(contador)); } void loop() { leitura = digitalRead(pinosensor); //Le as info if (leitura != 1) //Verifica se o objeto foi de

    { contador = contador++; //Incrementa o valor do while(digitalRead(pinosensor) != 1) //Loop cas

    { Serial.println(contador); //Envia o valor atualizado do contador para o

    Serial.write(201); Serial.write(highByte(contador)); Serial.write(lowByte(contador)); } } //Envia as informacoes do potenciometro para o

    int valor_pot = analogRead(pinpot); Serial.write(202); Serial.write(highByte(valor_pot)); Serial.write(lowByte(valor_pot)); delay(50); }

    Finalizada a transferncia do programa para o Arduino, ligue novamente o Vcc do mdulo bluetooth e, noAndroid, 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 layoutescolhido no canto superior esquerdo. Aperte novamente a tecla MENU do seu celular e escolha a opo EDITMODE :

    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 isso4 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 deedio, 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 superiordireito, 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 modode 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 algunssegundos o layout do programa ficar verde, indicando que o mesmo est conectado ao mdulo bluetooth noArduino. Observe no lado direito, no topo do layout, que o meu celular est conectado ao dispositivo LINVOR eo 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, JY-MCU, optico, potenciometro, sensor, tcrt5000

    segunda-feira, 13 de janeiro de 2014

    Montando Arduino na protoboardNo ltimo post (Gravando bootloader no ATMEGA328 usando Arduino) eu falei sobre como gravar obootloader no ATMEGA328 utilizando a prpria placa do Arduino como gravador, o que permite que voc useo microcontrolador fora da placa Arduino. Lembre-se tambm que na FILIPEFLOP voc tem a opo decomprar 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 doprograma contido no microcontrolador. Depois que voc testar o circuito na protoboard e estiver tudo ok, vocpode transfer-lo para uma placa de circuito impresso e, com alguns componentes adicionais, fazer com queele funcione "sozinho".

    Assim voc elimina, por exemplo, a necessidade do circuito regulador de tenso e tambm o chip decomunicao 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 e5,5 volts, que so os valores limite fornecidos pelo fabricante e que constam no datasheet domicrocontrolador.

    Testar o ATMEGA328 fora da placa bem simples e podemos usar praticamente o mesmo circuito quemontamos para gravar o bootloader do post anterior, com o acrscimo de um push button para fazer a funode 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 seguinteprograma :

    //Programa : Sequencial de leds - Teste ATMEGA328 //Autor : Arduino e Cia int pino_verde = 4; //Pino ligado ao led verde int pino_verm = 5; //Pino ligado ao led vermelho int pino_amar = 6; //Pino ligado ao led amarelo int tempo = 1000; //Controla o tempo de ativacao dos leds void setup() { //Define os pinos dos leds como saida pinMode(pino_verde, OUTPUT); pinMode(pino_verm, OUTPUT); pinMode(pino_amar, OUTPUT); } void loop() { digitalWrite(pino_verde, HIGH); digitalWrite(pino_verm, LOW); digitalWrite(pino_amar, LOW); delay(tempo); digitalWrite(pino_verde, LOW); digitalWrite(pino_verm, HIGH); digitalWrite(pino_amar, LOW); delay(tempo); digitalWrite(pino_verde, LOW); digitalWrite(pino_verm, LOW); digitalWrite(pino_amar, HIGH); delay(tempo); tempo = tempo-50; if (tempo < 100) { tempo = 1000; } }

    Esse programa aciona os 3 leds do circuito abaixo em sequncia, e a varivel TEMPO define o tempo que oled ficar ligado/desligado. A cada sequncia a varivel tem o valor diminudo, o que faz com que os ledsacendam cada vez mais rpido. Quando a varivel TEMPO atinge um valor menor do que 100 milisegundos, oprocesso 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 doATMEGA328, 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 ATMEGA328funcionar sem uma placa Arduino.

    quinta-feira, 9 de janeiro de 2014

    Gravando bootloader no ATMEGA328 usando ArduinoTer um microcontrolador de reserva recomendvel quando o seu Arduino comea a se comportar de formaestranha e voc quer se certificar que o problema est (ou no) no microcontrolador. Uma simples troca dechip 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 ostestes 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 kittambm acompanha todos os componentes necessrios para montar um Arduino na Protoboard, comomostrado 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 umATMEGA328P-PU "vazio", no qual vamos gravar o bootloader do Arduino Uno.

    Vamos utilizar o seguinte material :

    Arduino UnoChip ATMEGA328P-PUResistor de 10 K ohmsCristal de 16 Mhz1 led1 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 ISPPassos 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 sercompletamente 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 oprograma 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 paragravao 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 ArduinoLigue o pino 17 (MOSI) do ATMEGA ao pino 11 do ArduinoLigue o pino 18 (MISO) do ATMEGA ao pino 12 do ArduinoLigue 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 ohmsLigue um resistor de 10 K ao pino 1 (RST) do ATMEGA, e a outra extremidade do resistor ligue noVcc 5V do ArduinoLigue o pino 20 do ATMEGA ao Vcc 5vLigue o pino 22 do ATMEGA ao GNDLigue o pino 7 do ATMEGA ao Vcc 5vLigue o pino 8 do ATMEGA ao GNDNos 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 antigasIncio

    Assinar: Postagens (Atom)

    Postado por Arduino e Cia s 16:23 Nenhum comentrio:

    Marcadores: arduino, atmega328, atmel, bootloader, gravador, isp

    Passo 8 - O processo de gravao ser iniciado, e voc pode acompanhar o andamento na parte inferior daIDE, 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 testadona prpria placa ou utilizado para montar um circuito definitivo. Para ver um exemplo de utilizao, veja o artigoMontando 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