Mostrando postagens com marcador Arduino. Mostrar todas as postagens
Mostrando postagens com marcador Arduino. Mostrar todas as postagens

terça-feira, 10 de junho de 2014

Arduino + Threads

Ou... como piscar dois LEDs com Arduino de maneira foda.

:-)

Falando sério, o +Ivan Seidel criou uma biblioteca muito legal de threads para Arduino e fez esses vídeos para explicá-la. É muuuuito útil para programar o seu robô!

O primeiro vídeo é uma excelente aula sobre programação de Arduino (e de microcontroladores em geral). O segundo ensina a usar a biblioteca. Vale muito à pena ver os dois!




Até a próxima!

sexta-feira, 2 de maio de 2014

Mini-curso de Sistemas Embarcados com Arduino

Quem quer construir seu próprio robô precisa ter conhecimentos básicos de sistemas embarcados. A denominação "sistemas embarcados" é utilizada para caracterizar sistemas que contêm um computador (ou mais) dedicado e encapsulado no dispositivo ou sistema que controla. Ou seja, é um conceito muito amplo que envolve eletrônica, microcontroladores, sensores, atuadores, comunicação de dados etc.

Pela primeira vez a ISA-ES promoveu um Curso Estudantil de Introdução a Sistemas Embarcados com Arduino, que tive o prazer de lecionar. O curso teve carga-horária de 16h e foi realizado de 31 de março a 03 de abril de 2014 nas instalações da Faculdade MULTIVIX - Serra, ES. Teve a participação de 24 estudantes que, em sua maioria, atuam como profissionais nas indústrias capixabas.

Apesar de sua curta duração, durante o curso foi possível abordar vários dos tópicos mencionados acima, relacionando-os com uma atividade prática sempre que possível. O resultado da pesquisa ao final do curso me deixou muito feliz, pois demonstrou um ótimo índice de satisfação dos alunos: 63% atingiram suas expectativas e os demais tiveram suas expectativas superadas!

--- editado em 25/06/2014
A convite do professor Thiago Maduro, nos dias 19 e 20 de julho eu repeti esse curso no Campus São Mateus do IFES. A ideia principal era motivar o grupo de alunos que está trabalhando com robótica, mas a turma do curso acabou sendo mais ampla, com alunos e professores dos cursos Técnico em Eletrotécnica e Engenharia Mecânica. Todos contaram com kits contendo Arduino e componentes eletrônicos e puderam exercitar o conteúdo do curso através de mais de uma dezena de atividades práticas.

Os slides atualizados do curso estão aqui:



As atividades práticas realizadas durante o curso incluíram a leitura de sensores digitais e analógicos, comunicação serial, comunicação entre Arduinos, acionamento de LCD de caractere, acionamento PWM, entre outras. Os programas estão disponíveis em meu GitHub:

https://github.com/felipenmartins/curso_arduino

Espero que essas informações e exemplos ajudem no entendimento de conceitos importantes para a robótica.

Até a próxima!


Referências:
http://www.isa-es.org.br/portal/noticia/pela-primeira-vez-a-isa-es-promoveu-curso-estudantil-de-introducao-a-sistemas-embarcados-com-arduino/
http://isaesblog.wordpress.com/cursos/curso-microcontrolador-arduino/

domingo, 22 de dezembro de 2013

Simulador on-line para Arduino

Durante muito tempo eu procurei por um simulador de Arduino que fosse bom e fácil de usar (como o próprio Arduino). Apesar de existirem vários programas capazes de simular o Arduino, acho que o 123D Circuits, da Autodesk, é de longe o melhor de todos!

A Autodesk oferece ferramentas de simulação 3D há anos e agora também está entrando na área de simulação eletrônica. O 123D Circuits é gratuito e roda direto no navegador (isso mesmo: você não precisa instalar nada!).

Além de simular circuitos eletrônicos que incluem o Arduino, o 123D Circuits permite que você crie o desenho de uma placa de circuito impresso com o circuito que você projetou e simulou. Essa placa pode ser personalizada por você e pode ser entregue na sua casa (essa parte você paga).

Experimente o 123D Circuits aqui mesmo: a figura abaixo mostra um circuito bem simples que eu construí com um Arduino, um resistor, um LED e um voltímetro. Os quatro ícones da direita mostram  quatro diferentes telas:

  • visão do proto-board;
  • simulação em funcionamento (programa do Arduino e eletrônica);
  • diagrama esquemático;
  • placa de circuito impresso.
Clique e experimente!





Na simulação acima o Arduino está rodando um programa bem simples, que aumenta e diminui o brilho do LED gradativamente. Também é possível abrir uma janela de terminal e testar a comunicação serial entre o computador e o Arduino! Veja:



Acessando a página do simulador você terá acesso ao código, ao circuito e aos desenhos das placas de circuito impresso desse e de muitos outros projetos! Sim! Você pode compartilhar seu projeto no site e ter acesso aos projetos da galera! Aproveite essa poderosa ferramenta!!

Até a próxima!


quinta-feira, 10 de outubro de 2013

Minicurso de Eletrônica com Arduino

Nos dias 8 e 9 de outubro de 2013 eu ministrei um minicurso de Introdução à Eletrônica com Arduino no Campus Serra do IFES (Instituto Federal de Educação, Ciência e Tecnologia do Espírito Santo). O minicurso era parte da programação da VIII Jornada de Iniciação Científica do Instituto e foi oferecido a alunos dos cursos Técnico em Automação, Técnico em Informática, Bacharelado em Sistemas de Informação e Engenharia de Controle e Automação que tinham interesse em aprender um pouco de eletrônica e de Arduino.

Apesar da curta duração do curso, os alunos puderam realizar vários experimentos que auxiliaram no entendimento de conceitos-chave de eletrônica, como Pisca-LED, Pisca-LED suave (com capacitor) e Monitoramento de Nível Luminoso através de Monitor Serial.

Os slides do minicurso estão disponíveis no Slide-Share:




Estamos planejando uma continuação!
Até a próxima!


Licença Creative Commons
O trabalho Introdução à Eletrônica com Arduino de Felipe Nascimento Martins foi licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 3.0 Não Adaptada.

domingo, 7 de julho de 2013

Arduino Robot - O primeiro Robô Arduino oficial!

Nerea e Iván com seu robô Nexus.
Asociación de Robótica Complubot é sediada em Madri, Espanha, e trabalha com robótica educacional desde 2003. Com o objetivo principal de contribuir com o aprendizado, a Complubot apoiou (e apóia) o desenvolvimento de diversos robôs por crianças e adolescentes participantes de seus projetos.

Nerea de la Riva e Iván Gallego, hoje com  21 e 19 anos de idade, respectivamente, formam parte da Complubot desde o início, orientados por Eduardo Gallego. Com seus robôs Nexus, por 6 anos participaram de campeonatos de futebol de robôs organizados pela RoboCupJunior, e por 4 vezes foram campeões mundiais! Tive o imenso prazer de conhecê-los e de trabalhar com eles durante a RoboCupJunior 2013, evento que agora eles ajudam a organizar.

Por sua experiência no desenvolvimento de robôs, Nerea e Iván participaram do projeto do Arduino Robot, uma plataforma fantástica para quem quer aprender robótica! O projeto nasceu em setembro de 2010, quando eles participaram de um campeonato na Itália e tiveram a oportunidade de conversar com David e Máximo (da equipe do Arduino) sobre a ideia de desenvolverem uma plataforma didática de robótica. Desde então eles trabalharam com a equipe do Arduino no desenvolvimento do robô que em breve estará disponível para venda!

Você pode ler a história com mais detalhes no site da Complubot.

Arduino Robots apresentados no Workshop da RoboCupJunior 2013.

O Arduinto Robot é uma plataforma de tração diferencial com 19cm de diâmetro e 10cm de altura. Cada robô possui duas placas, cada uma com seu próprio microcontrolador ATmega32u4 . De fato, é como se cada robô tivesse dois Arduinos, um responsável pelo controle dos motores e outro responsável pelos sensores e pelo comportamento do robô. As duas placas se comunicam e o usuário pode programá-las com a conhecida IDE do Arduino. A placa inferior já vem pré-programada, podendo o usuário programar apenas os comportamentos de alto-nível. Mas, também é possível alterar o programa da placa inferior pois, como todo Arduino, o projeto é open-source.

Arduino Robot - vista supuperior (esq.) e inferior (dir.).

A placa superior conta com um belo LCD gráfico colorido (conectado via SPI), um leitor de cartão SD, um speaker, um potenciômetro e alguns botões para interface com o usuário. Também conta com uma bússola incorporada e diversos conectores para montagem de sensores.

Caixa assinada pelos projetistas do robô.
A placa inferior possui um suporte para 4 baterias recarregáveis NiMh tamanho AA, circuito para carga das baterias, um conversor DC-DC para alimentação de 5V para todo o robô, circuitos para acionamento dos dois motores DC e sensores infravermelhos de reflexão apontando para o piso. Esses sensores podem ser usados para detecção de linhas, por exemplo.

Todos os sensores e atuadores do robô são acessados através de bibliotecas especialmente desenhadas para o Arduino Robot. Por exemplo, o programa abaixo faz o robô se movimentar para frente com velocidade máxima, parar, girar em torno do próprio centro no sentido horário e parar novamente (você vai precisar do Arduino IDE versão 1.0.5 ou superior):

#include
void setup(){
  Robot.begin();
}
void loop(){
  Robot.motorsWrite(255,255); //Make the robot go forward, full speed
  delay(1000);
  Robot.motorsWrite(0,0); //Make the robot stop
  delay(1000);
  Robot.motorsWrite(255,-255);//Make the robot rotate right, full speed
  delay(1000);
  Robot.motorsWrite(0,0); //Make the robot stop
  delay(1000);
}

Na página oficial do Arduino há um guia para você começar a brincar com seu robô!

Deixo vocês com Iván e Nerea apresentando o Arduino Robot recém saído do forno! :-)



Até a próxima!

Referências:
http://complubot.educa.madrid.org/proyectos/arduino/ArduinoRobot/es/ArduinoRobot_es.php
http://complubot.educa.madrid.org/proyectos/arduino/ArduinoRobot/es/ArduinoRobot_historia_es.php
http://arduino.cc/en/Main/Robot

quarta-feira, 6 de março de 2013

Comunicação I²C entre Lego NXT e Arduino


Os kits de robótica Lego NXT são ferramentas de desenvolvimento fantásticas! São fáceis de se trabalhar e permitem a construção e programação de robôs de forma intuitiva e rápida (veja mais sobre esses kits aqui).

No entanto, o controlador do Lego NXT 2.0 (ilustrado na figura abaixo) possui limitação em termos do número de sensores e de motores que podem ser utilizados de maneira simultânea: usando o hardware original, apenas quatro sensores e três motores podem ser conectados simultaneamente ao controlador do robô! Para conexão de mais sensores é necessário comprar um hardware adicional que faz a expansão das entradas, permitindo que até quatro sensores sejam conectados a uma mesma entrada.


Controlador Lego NXT conectado a 4 sensores e 3 motores.

Embora tal limitação não seja um problema para muitas aplicações, em alguns casos o uso de apenas quatro sensores pode ser crítico. Uma solução de baixo custo que permite a utilização de mais sensores é conectar um microcontrolador a uma das portas de entrada do NXT e conectar os sensores ao microcontrolador. Dessa forma, o microcontrolador serve como uma "ponte", fazendo a multiplexação dos sinais dos diversos sensores ligados a ele e enviado ao NXT a leitura de um sensor de cada vez.

As portas do NXT podem utilizar dois padrões de comunicação: RS-485 ou I²C. O aluno Daniel Barcelos Mendes realizou e apresentou o trabalho “Desenvolvimento de Interface de Comunicação e Expansão para Kit de Robótica Educacional” na VII Jornada de Iniciação Científica do IFES, em outubro de 2012. Basicamente, ele implementou uma interface de comunicação entre o NXT e um Arduino. Como o Arduino possui bibliotecas para uma grande variedade de sensores, sua conexão dá ao NXT acesso a muitos sensores diferentes dos oferecidos pela Lego!

Em seu trabalho, Daniel realizou estudos de montagem e de programação do NXT (em linguagem NXC) e do Arduino, montou protótipos e testou a comunicação. Para prova de comunicação foram utilizados no Arduino um sensor de luz tipo LDR (resistor dependente de luz), um sensor de distância ultrassônico e um servomotor.

O texto completo contém códigos para Lego (NXC) e para Arduino e está disponível para download aqui.

Se você prefere realizar comunicação RS-485, veja este tutorial que já foi apresentado aqui no blog.

Divirta-se!
Até a próxima!

domingo, 9 de setembro de 2012

Monte seu robô com Arduino!

Mini-robô com Arduino.
Quer montar seu próprio robô? Você pode!! 

Neste post vou descrever como você pode montar o robô ao lado, mostrando onde comprar as peças e dando dicas para sua montagem. 

A montagem não é complicada! Você não precisa ser um expert em eletrônica para montar este robô, mas precisa ter noções básicas (para poder ligar os cabos corretamente), além de fazer soldagem de componentes e fios. 

Se você quer montar um robô sem precisar fazer soldas nem se preocupar com a eletrônica, experimente o Lego NXT (veja aqui).

O vídeo abaixo mostra um resumo da montagem e testes do mini-robô com Arduino:


Por onde começar?

Em primeiro lugar, você deve definir o que seu robô vai fazer e em que ambiente ele vai se deslocar. Isso é essencial para a escolha das peças e estrutura corretas. Por exemplo, a estrutura de um robô que irá se deslocar em piso liso e limpo será muito diferente daquela de um robô capaz de se locomover em ambientes externos com piso de areia. 

Uma opção bem econômica é aproveitar aquele velho carro de controle-remoto que você não usa mais (ou roubar o do seu irmão). Nesse caso, você pode aproveitar a estrutura mecânica e os motores. Retire toda a eletrônica original (com cuidado, para que você consiga montar novamente caso seu irmão descubra), e substitua pelas placas que vou descrever a seguir.

Eu montei o meu com as peças mostradas abaixo.

Peças usadas na montagem do robô. A lista completa e locais de compra encontra-se no final deste post.


No fim deste post há uma lista detalhada com a quantidade de peças necessárias e seus sites para compra. 



Se você quiser montar um robô diferente, pode usar qualquer um dos diversos kits disponíveis no mercado. Veja alguns exemplos em:


Robô com Esteiras

Um robô a esteiras é melhor do que um robô a rodas para se deslocar em ambientes acidentados. Ele pode passar por cima de obstáculos maiores que robôs com rodas, o que é interessante! No entanto, robôs com esteira exigem mais energia durante seu deslocamento, o que significa que eles gastam mais bateria que os robôs a rodas.

A estrutura mecânica deste robô torna desnecessário o uso de rodas direcionais. Para fazer curvas, basta que uma esteira se movimente mais rápido que a outra. Se uma se mover num sentido e a outra se mover no sentido contrário com a mesma velocidade, o robô fará um giro em torno de seu centro. Isso resulta em boa mobilidade e facilita o controle.

Dicas de Montagem - Vamos ao que interessa!

Base


A base tem dimensões de 98 x 86 x 39 mm. É feita de plástico, tem suporte para 4 pilhas AA, para os dois motores e para as rodas. As quatro rodas e as duas esteiras de borracha acompanham o conjunto.


A base vem quase pronta, mas alguma montagem é necessária. Você vai precisar encaixar os contatos metálicos para as pilhas. Os contatos das extremidades não têm local fixo de encaixe, então você pode colá-los com um pouco de Super Bonder ou prender com uma fita dupla-face. Eu usei fita isolante mesmo. É uma boa ideia soldar os fios aos contatos das pilhas antes de prendê-los à base! Lembre-se de usar fios de cores diferentes para os terminais positivo e negativo das pilhas, pois isso ajuda a evitar ligações incorretas que podem resultar em queima dos circuitos.


Motores 

Os motores que usei são micro-motores de 6V que já vêm com uma caixa de redução de 100:1. Ou seja, a cada 100 voltas no eixo do motor, a roda dará apenas uma volta. Isso significa que a roda gira numa velocidade muito menor que o eixo do motor. Porque queremos isso? Simples: com a caixa de redução, o torque disponível na roda aumenta na mesma proporção da redução da velocidade. Ou seja, o robô fica mais lento, mas muito mais forte!

No site da Pololu você encontra outros motores que se encaixam na base. Eles têm o mesmo tamanho e mesma tensão, mas relação de redução é diferente. Com isso, se você quiser um robô mais rápido (e menos forte), pode usar um motor com redução menor (50:1, por exemplo).


Atenção! As rodas dos motores são diferentes! Elas tê um pequeno rasgo na lateral e o encaixe do eixo não é perfeitamente redondo: possui um chanfro para encaixar o eixo do motor. Depois de encaixar os motores nas rodas, você pode usar a própria roda como base para soldar os fios nos terminais dos motores. De novo, lembre-se de usar cores diferentes para os terminais positivo e negativo.

      

Após encaixar os motores e soldar os terminais, encaixe os motores na base.

Sensores de giro (opcional)

Se você quiser, pode instalar codificadores ópticos (encoders) para medir o giro das rodas de seu robô. Essa característica é interessante se você pensa em aplicar controladores mais complexos em seu robô, pois os encoders permitem medir a velocidade das rodas e estimar a posição relativa do robô. Se não quiser usar encoders, seu robô também vai funcionar!


Os encoders que eu usei são próprios para as rodas que vêm com a base. Por isso, basta cortar um pouco o plástico superior da base e parafusar os encoders como mostrado na foto ao lado. Sim, o furo da placa se alinha perfeitamente ao furo da base!


O funcionamento do encoder (de forma resumida) é o seguinte: LEDs da placa emitem luz infravermelha que é refletida pelos dentes existentes na parte interna da roda. Com o giro da roda, os dentes se movem e a reflexão ocorre de maneira alternada. A partir da detecção ou não do reflexo de luz, um trem de pulsos elétricos é gerado. Contando o número de pulsos é possível saber quantos graus a roda girou. Conhecendo a geometria do robô, pode-se determinar sua velocidade e seu deslocamento. 

Detalhe: para saber se a roda está girando no sentido horário ou anti-horário, cada placa tem dois emissores e dois receptores. Eles são montados de forma que o giro da roda em dado sentido provoca reflexão em um dos sensores primeiro. 

Os sensores da Pololu são muito bons. Eles podem ser alimentados diretamente pelo Arduino e seus sinais de saída também são conectados diretamente aos pinos do Arduino. No entanto, verifiquei que os encoders sofrem muita interferência de iluminação externa, o que pode exigir algum ajuste ou colocação de algum tipo de cobertura. 

Motor Shield para Arduino

O uso do Arduino como placa controladora permite a utilização de um shield para controle dos motores. Eu usei o Arduino Uno, mas você também pode usar outras versões, como o Leonardo ou o Duemilanove. 

Motor Shield encaixado no Arduino.

O shield que utilizei está mostrado na figura ao lado, já encaixado no Arduino Uno. Ele tem um chip com duas pontes-H com capacidade para controlar dois motores de corrente contínua de maneira independente. Recebe alimentação entre 6 e 15V e inclui um regulador de 5V para alimentar o Arduino, o que é muito interessante já que as 4 pilhas (alcalinas) resultam numa fonte de 6V. 

A ligação dos motores ao motor shield é bem simples: basta parafusar seus fios ao conector verde com as indicações M1+, M1-  (motor 1) e M2+, M2- (motor 2).  Os terminais da bateria devem ser ligados ao conector com as indicações VS (positivo) e GND (negativo). O jumper J4 deve permanecer encaixado para que a alimentação do Arduino seja feita através do regulador do motor shield.  Encaixe o motor shield no Arduino de maneira que as bordas das placas fiquem alinhadas.

Um código para teste do shield e acionamento dos motores está disponível na página do fabricante (veja link no final do post). A velocidade dos motores é controlada pela variação da razão cíclica do sinal PWM gerado pelo Arduino. No exemplo do fabricante, ele usa a função analogWrite para gerar o PWM, o que resulta num sinal com frequência de ~490Hz. Nos testes que realizei, os motores funcionaram sem nenhum problema com esse PWM, mas emitiram ruído audível que pode incomodar um pouco.

Detalhe importante: para que o robô se desloque em linha reta é necessário que as duas esteiras girem na mesma velocidade. No seu programa, você pode usar o mesmo valor na função analogWrite de ambos os motores, mas isso não garante que as rodas irão girar na mesma velocidade! Apesar de serem do mesmo tipo, dois motores nunca são exatamente iguais. Além disso, características como atrito, deslizamento e até diâmetro das rodas irão afetar a velocidade final de deslocamento. Com o uso de encoders você pode fazer um programa que mede a velocidade das rodas e realiza a compensação necessária, caso queira que o robô se mova em linha reta.

Com a base montada, motores encaixados e eletrônica pronta, seu robô já está pronto para andar!


Sensor ultrassônico

Módulos ultrassônicos.
Um robô só é um robô de verdade quando ele pode perceber o meio. Um sensor muito popular que permite a medição de distância a obstáculos é o sensor ultrassônico. A figura ao lado apresenta dois módulos de sensores ultrassônicos (um é visto de frente e o outro é visto de costas). Segundo o fabricante, esse módulo é capaz de medir distância a obstáculos entre 3cm e 4 metros!

O módulo ultrassônico funciona como um Sonar. Para medir a distância ao objeto que está a sua frente, o módulo emite um pulso de ultrassom (som em frequência de 40kHz, nesse caso) e mede o tempo que o reflexo do som leva para retornar. Sabendo que a velocidade do som no ar (à temperatura ambiente) é de ~340m/s, conhecendo o tempo que o som levou para ir até o obstáculo e voltar você pode calcular a que distância ele está! 

O Arduino possui um exemplo de programa que funciona exatamente com esse modelo de sensor. Você pode encontrá-lo em Exemples -> 06. Sensors -> Ping. Usei este exemplo para testar o módulo ultrassônico como mostrado no vídeo. Pude observar que esse módulo tem precisão de +/-1cm para leituras entre 3 e 30cm. Também notei que o ângulo de abertura do sensor não é muito grande: para distâncias menores que 20cm, o obstáculo deve estar praticamente em frente ao sensor para que possa ser detectado. A 20cm do sensor, um afastamento de 5cm do centro de sua linha de ação já faz com que o obstáculo não seja percebido.

Robô montado

Provisoriamente, encaixei os sensores de ultrassom numa pequena matriz de contatos apoiada na parte superior do robô. Um sensor está voltado para para a frente e o outro para trás, já que esse robô pode se deslocar nos dois sentidos. 

Robô montado.

Espero que tenha gostado do post e que ele lhe ajude a montar o seu próprio robô! 
A seguir, veja a listagem de peças utilizadas, seu modelo, a quantidade necessária e sites para compra.

Até a próxima!



domingo, 6 de maio de 2012

Arduino Wireless parte II - via Bluetooth!

Comunicação Bluetooth entre Arduino e Android.
Esse post é uma continuação do anterior, que pode ser acessado aqui. No primeiro, mostrei o teste de um módulo que permite a comunicação sem fio entre o Arduino e o computador (ou entre outros dispositivos) usando um módulo de rádio muito interessante, da Wixel Shield.

Agora, apresento um teste simples que fiz com um módulo Bluetooth. De fato, reproduzi o teste descrito pelo professor Cássio Agnaldo Onodera numa vídeo aula que ele tem no YouTube (acesse aqui), para verificar o funcionamento do módulo de comunicação Bluetooth.

O módulo Bluetooth que testei é de muito fácil utilização com o Arduino. Trata-se do modelo JY-BT03, fabricado pela Shenzhen Jiayuan Electronic Co. Ltd. Este módulo é muito prático, pois se conecta ao Arduino através dos pinos RX e TX, comportando-se como um dispositivo serial padrão! O próprio módulo cuida de toda a parte de comunicação Bluetooth. Ou seja, do ponto de vista do Arduino, tudo o que é necessário fazer é enviar e receber caracteres pela porta serial.

Módulo Bluetooth JY-BT03.
Algumas características do módulo Bluetooth são:

  • Comunicação Bluetooth 2.0;
  • Baud rate: 2.400 a 1.382.400 bps;
  • Tensão de alimentação: 5,0 V (3,6V a 6,0V);
  • Corrente: 35mA quando realiza "pareamento"; 8mA quando conectado;
  • Antena impressa na própria placa;
  • Possui 7 pinos de entrada e saída na placa;
  • Possui LED que indica o estado da conexão Bluetooth;
  • Senha padrão: 1234
Conexão ao módulo Bluetooth.
Como já mencionei, a conexão entre o Arduino e o módulo Bluetooth é muito simples. Ligue os dois pinos de alimentação do módulo (+5,0V e GND) aos pinos correspondentes do Arduino, de maneira que o módulo seja alimentado pelo próprio Arduino.

Quanto aos pinos de comunicação, basta conectar o pino de recepção de dados (RX) do módulo ao pino de transmissão de dados (TX) do Arduino, e vice-versa.

Observação importante: para transferir o programa ao Arduino é necessário que o módulo Bluetooth não esteja alimentado, ou não esteja conectado aos pinos RX e TX. Como o programa é transferido ao Arduino usando comunicação serial, a conexão do módulo Bluetooth vai interferir na comunicação, impedindo a correta transferência do programa. Só depois de programar o Arduino você pode fazer a conexão do módulo Bluetooth como indicado.

O código utilizado para teste do módulo é este:


void setup()
{
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  char c = Serial.read();
  
  if (c=='1') digitalWrite(13,HIGH);
  if (c=='2') digitalWrite(12,HIGH);  
  if (c=='3') digitalWrite(11,HIGH);  
  
  if (c=='A') digitalWrite(13,LOW);  
  if (c=='B') digitalWrite(12,LOW);  
  if (c=='C') digitalWrite(11,LOW);  
 
  delay(1000);
}


O programa é bastante simples: apenas aguarda a chegada de um caractere pela serial e, de acordo com seu valor, coloca uma das portas digitais do Arduino em nível alto ou baixo. Especificamente, foram utilizados três LEDs ligados aos pinos 11, 12 e 13 do Arduino. Cada um dos LEDs é  ligado quando um dos caracteres "1", "2" ou "3" é recebido, e desligado com a recepção dos caracteres "A", "B" ou "C".


Você pode testar o programa usando o Serial Monitor da IDE do Arduino. Nesse caso, lembre-se de desconectar a alimentação do módulo Bluetooth para evitar interferências na comunicação. Usando o Serial Monitor, experimente enviar os caracteres "123ABC" e veja se o resultado é o acendimento e desligamento de todos os LEDs, em sequência. Se tudo funcionar como esperado, desconecte o cabo USB do Arduino e reconecte os pinos ao módulo Bluetooth.

Para evitar problemas com a comunicação, não alimente o Arduino através da conexão USB do computador. Prefira alimentar o Arduino com uma fonte externa ou com uma bateria, como mostrado na primeira foto do post.

Fiz o teste do Bluetooth com um celular Android. Usei o programa S2 Bluetooth, disponível gratuitamente na Play Store (há outros, que você pode testar). Esse programa permite o envio de caracteres através da comunicação Bluetooth. Antes de abrir o programa, ative o Bluetooth no dispositivo Android e faça o "pareamento" com o módulo. A senha padrão é 1234. Em seguida, abra o programa S2 Bluetooth, clique no menu "Conect a Device" e escolha o dispositivo "linvor", conforme mostrado a seguir.

S2 Bluetooth: realizando conexão ao módulo.

Quando a conexão for realizada com sucesso, o LED do módulo Bluetooth vai permanecer aceso. Então, escreva os caracteres "123ABC" no programa S2 Bluetooth e clique em "SEND".

S2 Bluetooth: envio de caracteres.

Se tudo deu certo, você deve ver os LEDs acendendo e apagando em sequência. Pronto! Agora, com um pouco de criatividade, você já pode controlar o seu robô a partir de seu celular ou tablet Android via Bluetooth!

----- Editado em 26/set/2012 -----

Se você estiver animado, pode fazer seu próprio programa para Android usando o AppInventor! Esta é uma ferramenta de programação desenvolvida e mantida pelo MIT. A programação é feita de forma gráfica e é bastante intuitiva.

Um tutorial bem direto está disponível no site do Laboratório de Garagem (veja aqui). Com base nesse tutorial, Joanesburgo conseguiu fazer um programa que se comunica com o Arduino via Bluetooth!

JoanesApp - o aplicativo da Joanesburgo para Android.

Divirta-se e até a próxima!


Referências:
Módulo Bluetooth no Deal Extreme: http://www.dealextreme.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299?item=1
Especificações do módulo Bluetooth: http://www.globalsources.com/gsol/I/Arduino-Bluetooth-Module/p/sm/1045071327.htm
Arduino: http://www.arduino.cc/
Vídeo-aula do professor Cássio Agnaldo Onodera: http://youtu.be/IwnofqvGKow
Tutorial do AppInventor: http://labdegaragem.com/forum/topics/tutorial-criando-aplica-o-para-android-para-controlar-o-arduino
AppInventor: http://appinventor.mit.edu/

sábado, 7 de janeiro de 2012

LCD para seu robô com Arduino

Gostaria que seu robô tivesse uma tela para mostrar informações sobre os sensores, configurações etc.? Bem... se você usa o NXT (da Lego), você já tem isso. Se não, você pode conectar seu robô a um tablet ou a um computador, construir uma interface gráfica e aproveitar a tela de seu dispositivo (como o Ivan fez - veja no blog TechLego).

Mas, se quer uma coisa mais simples (e barata), seus problemas acabaram! :-)

Se você está usando o Arduino (ou qualquer microcontrolador) para controlar seu robô, usar um display de cristal líquido não é uma tarefa complicada.

Os displays de cristal líquido mais comuns (chamados simplesmente de LCDs - Liquid Crystal Displays) são construídos em módulos que possuem esquemas de ligação e de comunicação padronizados (pelo menos até certo ponto). Por isso, seu uso se torna mais simples, principalmente se o compilador do seu microcontrolador possui uma biblioteca para uso dos LCDs (como é o caso do Arduino). Esses displays possuem seus próprios processadores que cuidam do acionamento dos pixels da tela de cristal líquido. O que você precisa fazer é informar ao processador do display o que você quer exibir, e em que lugar.

Existem basicamente dois tipos comuns de LCDs: os de caractere e os gráficos. Os de caractere são os mais simples de se usar. Esses LCDs possuem pequenos retângulos com um número fixo de pixels, sendo que cada retângulo pode exibir apenas um caractere. O número de retângulos determina a quantidade de caracteres que o display pode exibir. O da imagem abaixo é o tipo mais comum de LCD de caractere: possui 16 colunas e 2 linhas ou, simplesmente, 16x2. Outros tipos são 20x2, 16x4, 16x1, entre outros.

LCD 16x2 tipo caractere.

Os LCDs de caractere possuem memória com o mapa dos caracteres que podem ser exibidos. O seu microcontrolador deve informar ao display qual caractere quer exibir, e em que posição da tela. Isso é feito através de comandos padronizados. Não é o objetivo deste post dar detalhes sobre o funcionamento dos LCDs. Se você quiser saber mais, pode acessar este tutorial que mostra a função de cada pino, o mapa de caracteres etc.

Para usar os LCDs de caractere com o Arduino, você pode utilizar a biblioteca LiquidCrystal, disponível no ambiente de compilação. Nesse caso, escrever no display se resume a usar o comando lcd.print()! É muito fácil! A conexão elétrica entre o LCD e o Arduino é mostrada na figura abaixo. Um exemplo completo de utilização da biblioteca está disponível no site oficial do Arduino. Veja aqui!



Se você usa microcontrolador PIC, veja esta apostila disponível no blog Mecatrônica de Garagem.

O uso de LCDs gráficos não é tão simples, pois deve-se controlar cada pixel individualmente. A padronização desses LCDs também permitiu o surgimento de bibliotecas que facilitam bastante a utilização desses displays. No entanto, existem diversas variações entre fabricantes e modelos, o que exige mais cuidado e atenção ao se utilizar displays gráficos.

O LCD gráfico mais comum é baseado no chip KS0108. Os LCDs de 128x64 pixels que eu conheço são todos baseados nesse chip. É tão comum que existe uma biblioteca para uso desses LCDs com o Arduino (veja detalhes na página que descreve o uso da biblioteca GLCD - Graphic LCD).

Como mencionei, a padronização desses displays não é tão forte como a dos LCDs de caractere. Por isso, tente identificar seu LCD antes de fazer a ligação de seus pinos à placa. Alguns LCDs trazem os pinos de alimentação (Vcc e GND) invertidos!! A página da biblioteca GLCD do Arduino traz informações sobre a ligação de quatro subtipos comuns desse LCD.

Uma observação importante é que alguns LCDs gráficos exigem que a alimentação do potenciômetro de ajuste de contraste seja feita com tensão negativa! Se isso não for feito, mesmo que todos os pinos de seu LCD estejam ligados corretamente, nada aparecerá na tela. Felizmente os módulos atuais trazem um pino especial para alimentar o potenciômetro de contraste, sendo que a tensão negativa é gerada pelo próprio circuito do LCD (assim, você só precisa fazer a ligação correta e alimentar o display com +5V). 

Fiz um teste com o display que tenho ligado a um Arduino Nano. O modelo do meu LCD é  KSM12864J-4. Ele não está na lista da página do Arduino, por isso tive de fazer alguns testes até conseguir fazê-lo funcionar corretamente. A ligação entre o LCD e o Arduino ficou assim:


Arduino Nano Função Pino LCD Comentários
5V +5 volts 2
GND GND 1
-- Vo (Contraste) 3 Ligar ao pino central do potenciômetro
8 D0 7
9 D1 8
10 D2 9
11 D3 10
4 D4 11
5 D5 12
6 D6 13
7 D7 14
14 (alog0) CSEL1 15
15 (alog1) CSEL2 16
-- Reset 17 Ligar a um resistor de 470R a +5V
16 (alog2) R_W 5
17 (alog3) D_I 4
18 (alog4) EN 6
-- Vee (saída contraste) 18 Ligar a um dos pinos do potenciômetro
-- Backlight +5 19 Ligar a um resistor de 100 a 330R a +5V
GND Backlight Gnd 20 Ligar o outro pino do potenciômetro também ao GND


Fiz a ligação do LCD utilizando como alimentação a própria tensão de 5V da placa do Arduino.

Note que o pino de RESET deste LCD NÃO deve ser ligado ao pino de reset do Arduino! Se você fizer isso, a comunicação entre o computador e a placa do Arduino falha. Como o RESET deste LCD é ativo em nível baixo, eu liguei um resistor de 470 ohms entre o pino 17 do LCD e +5V do Arduino, para manter o LCD sempre em funcionamento.

O ajuste de contraste deve ser feito por um potenciômetro de 10k a 20kohms (usei um de 10k, e funcionou bem). O pino central desse potenciômetro deve ser ligado ao pino 3 do LCD. Um dos outros dois pinos (qualquer um) deve ser ligado ao pino 18 do LCD e o outro, ao GND do Arduino.

A alimentação do backlight do LCD é feita através de um resistor de 330 ohms ligado ao pino 19 do display.

Testei esse LCD com a biblioteca GLCD do Arduino. O código a seguir gera a tela mostrada na figura abaixo. Note que os comandos de desenho e de escrita na tela são bem simples! Veja o código:


#include <ks0108.h>
#include "Arial14.h"         
#include "SystemFont5x7.h"   


void setup(){
  delay(500);                // tempo para reset do LCD
  GLCD.Init(NON_INVERTED);   // inicializa display
  GLCD.ClearScreen();  
}


void loop(){   
  GLCD.DrawRect(0, 0, 127, 63, BLACK); // desenha retangulo
  GLCD.DrawRoundRect(2, 2, 123, 59, 5, BLACK);  // retangulo com quinas arredondadas
  GLCD.SelectFont(Arial_14);  // define fonte
  GLCD.CursorTo(1,1);  // posicao inicial do cursor
  GLCD.Puts("Visite:");  // imprime mensagem na posicao selecionada
  GLCD.SelectFont(System5x7); // define fonte - padrao do display
  GLCD.CursorTo(2,5);
  GLCD.Puts("www.nossosrobos.");
  GLCD.CursorTo(4,6);
  GLCD.Puts("blogspot.com");
}



Exemplo de utilização do display gráfico 128x64 pixels com Arduino.

Última dica: você pode fazer o display escrever com fundo invertido (fundo branco e caracteres negros). Basta substituir a linha de inicialização do LCD para:

  GLCD.Init(INVERTED);   // inicializa display

Espero que possa aproveitar essas dicas para deixar seu robô mais interativo!
Até a próxima!

Referências:
http://www.arduino.cc/playground/Code/GLCDks0108
http://www.arduino.cc/en/Tutorial/LiquidCrystal
http://afonsomiguel.com/sites/default/files/lcd16x2_1.pdf
http://mecatronicadegaragem.blogspot.com/2011/01/apostila-usando-lcd-16x2-nos.html

quarta-feira, 7 de dezembro de 2011

Arduino wireless!

Arduino Mega com Wixel shield e módulos wireless.
Que tal fazer seu computador se comunicar com o Arduino sem precisar ligar cabos? Isso permite que você construa um robô com o Arduino e faça seu controle à distância! Ou ainda, que seu robô transmita dados de seus sensores ao computador, que pode processá-los e interferir na movimentação do robô!

Além do uso em robótica, existem várias aplicações para comunicação sem fio entre Arduino e computador, como sensoreamento remoto, sistemas embarcados e qualquer aplicação em que a conexão de cabos seja difícil ou não desejável.

No mercado existem diversos shields que permitem turbinar seu Arduino para que ele possa fazer comunicação sem fios. Alguns permitem comunicação via Bluetooth, outros possuem um rádio digital que transmitem os sinais da porta serial do Arduino (pinos RX e TX).

O shield que testei é o Wixel Shield, vendido pela Pololu:
http://www.pololu.com/catalog/product/2501

Trata-se de um shield que permite o acoplamento de um módulo wireless que se comunica com outro módulo gêmeo, ligado ao computador. Algumas coisas que eu achei muito bacanas nesse shield são:

  • Possui rádio de 2,4GHz com alcance de ~30 metros e velocidade de até 350kbps;
  • Possui um microcontrolador pode ser programado através de uma interface bastante amigável, disponível para download no site da Pololu;
  • Tem 15 pinos de entrada e saída, incluindo 6 entradas analógicas, que podem ser programados de forma independente da comunicação, o que permite expandir a capacidade do Arduino;
  • Permite a criação de uma rede com até 128 módulos de comunicação (por exemplo, 127 Arduinos e um computador);
  • Para fazer comunicação entre computador e Arduino, a configuração é muito simples: basta baixar para o módulo o programa indicado no site e configurar como você quer. A partir daí, a comunicação é feita como se fosse comunicação serial padrão;
  • Permite gravar programas no Arduino sem ligar o cabo USB à placa! Isso facilita muito a atualização do código.


O programa de testes que fiz é bem simples, e está disponível para download aqui.

Ele ativa a saída digital 12 com um sinal PWM cuja razão cíclica pode ser definida de duas formas: através da leitura do valor analógico do pino A2 (0 a 5V), ou através do valor digitado no Serial Monitor, enviado ao microcontrolador. No início, uma mensagem é enviada pela serial para solicitar o modo de funcionamento. A comunicação é feita a 57.600 bps.

Testei o programa no Arduino Mega 1280, com shield Wixel e módulos Wixel wireless. A comunicação funcionou muito bem! Caminhei com o Arduino pela casa e vi que ele era capaz de manter a comunicação em outro cômodo, mesmo separado por uma parede. No entanto, para distâncias maiores (dois cômodos ou mais), a comunicação começava a falhar. Nesse caso, o LED vermelho do módulo wireless se acende para indicar a falha.

Os módulos wireless foram configurados para comunicação em 57.600bps, pois esta é a velocidade de upload de código no Arduino Mega 1280. Dessa forma, isso me permite gravar programas no microcontrolador do Arduino usando a interface wireless (sem precisar ligar o cabo USB à placa). Se você tem outro modelo de Arduino pode ser necessário configurar o módulo wireless para outra velocidade. Exemplos:
Arduino Uno: 115.200 bps
Arduino Mega 2560: 115.200 bps
Arduino Mega 1280: 57.600 bps
Arduino Duemilanove com ATmega328: 57.600 bps
Arduino Diecimila ou Duemilanove com ATmega168: 19.200 bps

O vídeo abaixo ilustra o teste do sistema que montei:


Mais informacoes sobre o uso do Wixel Shield podem ser obtidas em: 

http://www.pololu.com/docs/0J47

E sobre o Wixel Programmable USB Wireless Module estão aqui:
http://www.pololu.com/catalog/product/1337 

Até a próxima!