28 janeiro 2014

Controlando um servo motor utilizando Android e Bluetooth

A um tempo atrás eu escrevi um post sobre como controlar as portas do Arduino usando um módulo 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 princípio desses artigos, mas dessa vez para controlar um servo motor, um Micro Servo 9G, com ângulo de rotação de 180 graus :
 
servo motor android arduino

24 janeiro 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 vários sensores.

"Teoricamente" (prestem atenção às aspas),  se você necessita de uma taxa de atualização mais eficiente do display e não 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 rodei o programa exemplo que vem junto com a biblioteca Liquid Crystal, chamado Autoscroll. Para a montagem do circuito,  utilizei a tabela abaixo :

Ligacao LCD HD44780 - Modo 8 bits

lcd 16x2 modo 8 bits hd44780

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)

Então no programa eu coloquei os dois comandos, e você mesmo pode comentar uma linha ou outra, testando os 2 modos e tirando suas próprias conclusões :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Programa : Teste LCD 16x2 em modo 8 bits

// include the library code:  
#include <LiquidCrystal.h>  
   
//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);  
  }  
   
  // 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 diferença ? Na minha opinião, pouquíssima. A não ser que o seu programa exija muito do display, o que é um pouco difícil em se tratando de um display basicamente para texto, não 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 diferença ? Compartilhe a sua opinião na área de comentários. Obrigado !

21 janeiro 2014

Video - Enviando dados do Arduino para o Android usando bluetooth

Vídeo mostrando o funcionamento do circuito apresentado no artigo Enviando dados do Arduino para o Android usando bluetooth :






arduino android bluetooth


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 através do bluetooth.

Hoje vou mostrar o caminho inverso, ou seja, como enviar dados do Arduino Uno R3 para o Android, também usando o programa Microcontroller BT, disponível 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 módulo bluetooth JY-MCU e um potenciômetro. O Arduino enviará os dados recebidos do sensor (que funcionará como um contador incremental) e também do potenciômetro, gerando no Android uma tela como essa :

Tela final Android - Recebendo dados

13 janeiro 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 própria placa do Arduino como gravador, o que permite que você use o microcontrolador fora da placa Arduino. Lembre-se também que na FILIPEFLOP você tem a opção 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 não precisam, na maioria das vezes, de atualização 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".

09 janeiro 2014

Gravando bootloader no ATMEGA328 usando Arduino

Ter um microcontrolador de reserva é recomendável quando o seu Arduino começa a se comportar de forma estranha e você quer se certificar que o problema está (ou não) no microcontrolador. Uma simples troca de chip pode poupar muitas horas de tentativa e erro para achar um problema no seu circuito.

Você também 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 opção é você comprar o chip ATMEGA já com o bootloader, como esse Mini Kit Arduino ATmega328 da FILIPEFLOP. Esse kit também acompanha todos os componentes necessários para montar um Arduino na Protoboard, como mostrado no post Montando Arduino na protoboard.

Outra opção, até como aprendizado, é utilizar o tutorial que vou apresentar e que utiliza o próprio 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 várias etapas, que vou detalhar, mas os passos principais podem ser divididos desta maneira :

Passos 1 à 3 : Consistem na preparação do Arduino Uno como gravador ISP
Passos 4 à 9 : Ligação do Arduino Uno ao ATMEGA328P-PU e gravação do bootloader

Não pule etapas ou inverta os passos. Os passos 1 à 3, que são a preparação do Arduino Uno, devem ser completamente finalizados antes de prosseguir com a gravação.

Preparação do Arduino Uno

Passo 1 - Carregue a IDE do Arduino. No menu Arquivo => Exemplos, escolha a opção ArduinoISP :

Seleção Sketch ArduinoISP

Passo 2 - Será aberta uma nova janela, com o sketch do ArduinoISP, o programa responsável pela gravação :

Sketch ArduinoISP

Passo 3 - Com a nova janela selecionada, pressione o botão CARREGAR, conforme destacado, e transfira o programa para o Arduino Uno, como normalmente você faz com outros programas :

Carregando sketch ArduinoISP no Arduino Uno

Essas 3 etapas encerram o processo de preparação do Arduino Uno. Vamos agora montar o circuito para gravação do ATMEGA, antes observando a pinagem do CI :

Pinagem ATMEGA328

Circuito e gravação do bootloader

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

gravar bootloader atmega328 arduino Uno R3


Passo 5 - Conecte o Arduino UNO ao computador. Na janela da IDE do ArduinoISP, vá em Ferramentas => Placa e escolha a opção Arduino UNO, que é o bootloader que desejamos gravar no ATMEGA :

Bootloader Arduino
Passo 6 - No menu Ferramentas, escolha a opção GRAVADOR e selecione Arduino as ISP :

Selecionando gravador
Passo 7 - Para iniciar a gravação, vá em Ferramentas e selecione Gravar Bootloader :

Seleção gravar bootloader
Passo 8 - O processo de gravação será iniciado, e você pode acompanhar o andamento na parte inferior da IDE, e também pela sinalização do LED ligado à porta 7, que ficará aceso durante o processo de gravação:

Processo de gravação do bootloader em andamento
Passo 9 - Finalizado o processo, que geralmente é rápido (no meu equipamento demorou menos de 1 min), é apresentada a mensagem mostrando que a gravação foi bem sucedida :

Processo de gravação do bootloader finalizado
Isso encerra o tutorial. O ATMEGA está agora gravado com o bootloader para Arduino Uno, e pode ser testado na própria placa ou utilizado para montar um circuito definitivo. Para ver um exemplo de utilização, veja o artigo Montando Arduino na protoboard.