Hoje temos à nossa disposição mais do que uma plataforma de desenvolvimento de hardware, mas uma possibilidade de inclusão dos dispositivos ao mundo IoT (Internet Of Things)
--//--
Por estes dias, recebi um desafio de um professor, amigo meu. Ensinar para uma turma de robótica os mecanismos de comunicação Bluetooth.
Mas não era um pequeno tutorial. Abrangeria demonstração com o Arduino e um controle básico usando o Android!
Challenge Accepted!
--//--
Quem já acompanhou em tópicos anteriores, montei há uns 2 ou 3 anos atrás um pequeno carro motorizado (kit da Tamyia) com um driver L293 e um outro usando o poderoso L298. O projeto do 298 está por aqui. Mas para não confundir ninguém resolvi simplificar o circuito simulando parte dos comandos usando LEDs.
Então vamos lá, o circuito base é o representado ao lado no breadboard. (Na demonstração com o arduino usei um shield, mas o esquema de conexão é o MESMO!)
O programa
Antes de qualquer coisa, precisamos definir os requisitos básicos do firmware. Vamos pensar como se estivéssemos controlando um motor. Linha para ativar o motor, linha para definir a direção conforme quadro abaixo:Led | Item | "0" | "1" |
---|---|---|---|
Vermelho | Ativação | Inativo | Ativo |
Verde | Rotação | horário | anti-horário |
No circuito apresentado, então temos 2 conjuntos de led Verde+Vermelho. Cada um significa um motor!
E como comandarei esses "motores"? Bem, vamos aproveitar a linha serial do Arduino e utilizar um programa terminal (Termite/PuTTY) para testar o programa. Agora definirei como fazer a interação.
E como comandarei esses "motores"? Bem, vamos aproveitar a linha serial do Arduino e utilizar um programa terminal (Termite/PuTTY) para testar o programa. Agora definirei como fazer a interação.
A minha sugestão é usar as letras das teclas para dar ações. Quem jogou usando o teclado do computador, sabe o significado das teclas E,S,D,X.
E, seria como mandar o motor pra frente, X para trás. S e D, fazem as vistas de esquerda e direita. Poderia usar as setas? poderia, mas o teclado do computador envia códigos complexos quando são as setas. Então, prefiro ficar no simples...
As outras teclas são: M e espaço: ativa/desativa o motor. E por fim "Z", zera o seu estado.
Simples?
--//--
Não. Abstraia... abstraia. Não o fiz com motores porque não tive o controlador em mãos, Ok. Mas o principio é o mesmo. Lembre-se que temos 4 leds, 2 verdes, 2 vermelhos. Cada um fazendo como se fosse um estado do motor.
Para girar um carro de 2 motores, podemos usar um artificio de girar motores em contraposição.Isto é, se girarmos um motor para um sentido e outro no sentido contrário, o conjunto todo irá girar para.
Nesse esquema teremos a seguinte indicação dos leds
Fácil! :) Lembre-se, os vermelhos estão acionados, (M ou espaço, alternam seu estado); led verde escuro, desativado; verde claro, ligado.
Vamos pro nosso primeiro algoritmo! Implemente o circuito acima e transfira o programa abaixo para o Arduino (Edite usando ArduinoIDE, compile e transfira).
Transferiu para o Arduino? Então conecte-se a ele, usando um programa de terminal ou até mesmo o Monitor de Porta Serial (no Arduino IDE), mande os comandos E,S,X,D,M,Z, espaço para compreender o seu funcionamento!
Na parte 2 iremos fazer o mesmo, só que via Bluetooth. Se ainda nao tem um modulo, arrume um, para nao perder o trem da "estória".
Vamos pro nosso primeiro algoritmo! Implemente o circuito acima e transfira o programa abaixo para o Arduino (Edite usando ArduinoIDE, compile e transfira).
// Este sketch adiciona porta serial e o controle de motores usando um terminal
// E - posiciona o motor à frente m12=m22=0;
// S - posiciona o motor à esquerda m12=1; m22=0
// D - posiciona o motor à direita m12=0; m22=1
// X - posiciona o motor à ré m12=m22=1;
// [espaço]M - Ativa/desativa o motor m11=m21=1/0
// Z - inicializa mXY=0;
// Definição dos motores
// mXY onde:
// X=motor (1 ou 2)
// Y=direção (0 FW; 1 BW)
// usando os pinos 8,9,10 e 11 do arduino
int m11=8;
int m12=9;
int m21=11;
int m22=10;
// armazena o estado do motor
int motor=0; // off
void testaLed() {
//testa os leds...
digitalWrite(m11,HIGH);
digitalWrite(m12,LOW);
digitalWrite(m21,HIGH);
digitalWrite(m22,LOW);
delay(500);
digitalWrite(m11,LOW);
digitalWrite(m12,HIGH);
digitalWrite(m21,LOW);
digitalWrite(m22,HIGH);
delay(500);
}
void setup() {
//inicia os pinos de controle do motor
pinMode(m11,OUTPUT);
pinMode(m12,OUTPUT);
pinMode(m21,OUTPUT);
pinMode(m22,OUTPUT);
Serial.begin(9600);
// comente a linha abaixo se realmente estiver
// usando um motor.
testaLed();
// motor desligado e registros zerados
motor=0;
digitalWrite(m11,LOW);
digitalWrite(m12,LOW);
digitalWrite(m21,LOW);
digitalWrite(m22,LOW);
}
void loop() {
// le instrução da porta serial
while(Serial.available()>0) {
char c=Serial.read();
switch(c) {
case 'Z': // zera o motor (desliga)
case 'z':
motor=0;
digitalWrite(m11,LOW);
digitalWrite(m12,LOW);
digitalWrite(m21,LOW);
digitalWrite(m22,LOW);
break;
case 'M': // alterna o estado do motor on/off
case ' ': // espaço:
motor=!motor; // inverte o estado do motor
digitalWrite(m11,motor?HIGH:LOW);
digitalWrite(m21,motor?HIGH:LOW);
break;
case 'E': // pra frente
case 'e':
digitalWrite(m12,LOW);
digitalWrite(m22,LOW);
break;
case 'X': // pra tras
case 'x':
digitalWrite(m12,HIGH);
digitalWrite(m22,HIGH);
break;
case 'S': // gira à esquerda
case 's':
digitalWrite(m12,HIGH);
digitalWrite(m22,LOW);
break;
case 'D': // gira à direita
case 'd':
digitalWrite(m12,LOW);
digitalWrite(m22,HIGH);
break;
}
}
}
Transferiu para o Arduino? Então conecte-se a ele, usando um programa de terminal ou até mesmo o Monitor de Porta Serial (no Arduino IDE), mande os comandos E,S,X,D,M,Z, espaço para compreender o seu funcionamento!
Na parte 2 iremos fazer o mesmo, só que via Bluetooth. Se ainda nao tem um modulo, arrume um, para nao perder o trem da "estória".
Nenhum comentário:
Postar um comentário