Hoje estarei mostrando como é possível fazer interações com o arduino através de um smartphone via protocolo bluetooth. Primeiramente é necessário você ter em mãos um arduino (óbvio) e um usb host shield com um dongle bluetooth para poder fazer a comunicação com seu smartphone.
O hardware |
Além disso, também é necessário você fazer o download de algum aplicativo que ofereça comunicação serial através de bluetooth para poder controlar o microcontrolador. Estou utilizando no momento um smartphone Nokia Lumia, equipado com Windows Phone 8.1 e consegui encontrar um aplicativo na loja chamado 'Bluetooth Agent' (https://goo.gl/ZrwIFK) que apresenta uma interface bem bacana com botões para você enviar comandos via serial bluetooth.
Nessa parte tudo o que você a fazer é colocar algum nome conveniente ao botão e configurar para cada botão enviar algum caractere. Um exemplo disso é o botão "Girar <" que ao ser pressionado envia o caractere "1" para a porta serial bluetooth. O mesmo funciona para os outros botões. Isso poderá ser entendido melhor ao analisarmos o código do arduino:
#include <SPP.h>
#include <usbhub.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
USB Usb;
BTD Btd(&Usb);
SPP SerialBT(&Btd);
int motorE1 = 2;
int motorD1 = 3;
int pin11 = 26;
int pin12 = 27;
int pin13 = 28;
int pin14 = 29;
int rele = A8;
void setup(){
pinMode(motorE1, OUTPUT);
pinMode(motorD1, OUTPUT);
pinMode(pin11, OUTPUT);
pinMode(pin12, OUTPUT);
pinMode(pin13, OUTPUT);
pinMode(pin14, OUTPUT);
pinMode(rele, OUTPUT);
digitalWrite(rele, HIGH);
Serial.begin(115200);
while (!Serial);
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while (1);
}
Serial.print(F("\r\nSPP Bluetooth Library Started"));
}
void loop(){
Usb.Task();
if (SerialBT.connected){
char x = SerialBT.read();
if(x == '1'){
digitalWrite(pin11, LOW);
digitalWrite(pin12, HIGH);
analogWrite(motorE1, 255);
digitalWrite(pin13, LOW);
digitalWrite(pin14, HIGH);
analogWrite(motorD1, 255);
}
if(x == '2'){
digitalWrite(pin11, HIGH);
digitalWrite(pin12, LOW);
analogWrite(motorE1, 255);
digitalWrite(pin13, HIGH);
digitalWrite(pin14, LOW);
analogWrite(motorD1, 255);
}
if(x == '3'){
digitalWrite(pin11, HIGH);
digitalWrite(pin12, HIGH);
analogWrite(motorE1, 255);
digitalWrite(pin13, HIGH);
digitalWrite(pin14, HIGH);
analogWrite(motorD1, 255);
}
if(x == '4'){
digitalWrite(pin11, LOW);
digitalWrite(pin12, HIGH);
analogWrite(motorE1, 255);
}
if(x == '5'){
digitalWrite(pin11, HIGH);
digitalWrite(pin12, LOW);
analogWrite(motorE1, 255);
}
if(x == '6'){
digitalWrite(pin11, HIGH);
digitalWrite(pin12, HIGH);
analogWrite(motorE1, 255);
}
if(x == '7'){
digitalWrite(pin13, LOW);
digitalWrite(pin14, HIGH);
analogWrite(motorD1, 255);
}
if(x == '8'){
digitalWrite(pin13, HIGH);
digitalWrite(pin14, LOW);
analogWrite(motorD1, 255);
}
if(x == '9'){
digitalWrite(pin13, HIGH);
digitalWrite(pin14, HIGH);
analogWrite(motorD1, 255);
}
if(x == 'a'){
digitalWrite(rele, LOW);
}
if(x == '0'){
digitalWrite(rele, HIGH);
}
if(x == 'b'){
digitalWrite(rele, LOW);
delay(1000);
digitalWrite(rele, HIGH);
}
}
}
O código se baseia em comparações à variável 'x', pois na mesma é guardado o último valor de leitura da porta bluetooth. Sendo assim, quando x for igual à 1 (aquele '1' enviado pelo botão "Girar <") é executado tal comando para controlar uma ponte-h. O mesmo ocorre para todas as outras funções.
Segue um vídeo de demonstração no qual controlei dois motores e um relé que faz acender uma lâmpada:
muito legal.
ResponderExcluiramigo posso usar esse seu código para controlar um braço robótico pelo celular?
ResponderExcluirSim, você só precisa adaptar para o seu projeto.
ExcluirParabéns Robison, estarei compartilhando o seu blog no face para ajudar!
ResponderExcluirObrigado pela resposta no forum da robocore.
Ah, muito obrigado. Compartilhar conhecimento é fundamental.
ExcluirParabéns Robison, estarei compartilhando o seu blog no face para ajudar!
ResponderExcluirObrigado pela resposta no forum da robocore.
Mostra o esquema elétrico. Estou precisando controlar dois motores utilizando um arduino nano, uma ponte-h ld298, um bluetoothhc-08 no Iphone 4. Me ajuda aí, por favor.
ResponderExcluir