Este tutorial tem o objetivo de demonstrar uma experiência muito interessante para quem já iniciou o uso do Arduino e quer começar a fazer acionamentos sem fio, com montagem simples, uma vez que o Módulo Bluetooth será utilizado com as configurações de fábrica (não é necessário reconfigurar com comandos AT).
Para quem já possui o Kit Iniciante com Arduino Uno R3basta adquirir os seguintes itens:
- Módulo Bluetooth HC-05ou Módulo Bluetooth HC-06
- Servo motor micro
- Adaptador P4 - Fêmea
- Fonte 5V / 2A
Será necessário também o uso de um dispositivo com Android versão 4.0 ou superior, com o App Sensoduino instalado ou instalar desde o Google Play. Caso o App não esteja disponível para a versão Android desejada, baixare instalar manualmente.
O SensoDuino é um aplicativo gratuito para Android que captura informação de sensores do celular e transmite essas informações para o Arduino através de um Módulo Bluetooth. O SensoDuino elimina a necessidade de uma conexão USB para seu celular ou Arduino. Este aplicativo é atualizado e melhorado regularmente, portanto as fotos apresentadas aqui podem ser diferentes da última versão, mas o conceito é o mesmo.
Instruções
1) Instalar o App Sensoduino no dispositivo Android.
2) Montar o circuito como mostrado.
3) Note que é importante alimentar o circuito do servomotor com uma fonte separada, pois o Arduino não provê corrente suficiente para o servomotor na saída de 5V.
4) Fazer o Upload do código abaixo para o Arduino.
5) Abrir o Aplicativo Sensoduino.
6) Conectar o Android e o HC-05 ou o HC-06 através do Bluetooth do dispositivo.
7) Localizar na lista de sensores o sensor de orientação (orientation) e selecionar as duas primairas opções.
8) Inclinar o Android para a esquerda e para a direita e observar o movimento do servomotor, que deve reagir conforme a inclinação.
Código Fonte
Download do arquivo em formato .ino
// Exemplo didático de acionamento de um Servomotor com Arduino através de Bluetooth e Android
// utilizando :
// -Módulo Bluetooth HC-05 ou HC-06 com configuração default
// -Arduino UNO
// -Android com aplicativo Sensoduino
// -Servomotor tipo RC com fonte de alimentação externa
// Multilogica-shop 2017 multilogica-shop.com
// Código de domínio público, serve de base para compreensão do conceito e futuras modificações
// (p.ex.: para ler mais sensores e acionar mais Servomotores simultaneamente)
// O Servomotor neste exemplo, deve responder com movimentos para a esquerda e para a direita
// conforme a inclinação do Android para esquerda e para a direita
// Materiais :
// Todos adquiridos na loja: multilogica-shop.com (com exceção do dispositivo Android)
// Referências:
// instructables.com
// techbitar.com
// biblioteca Servo.h
#include <Servo.h> // inclui a biblioteca para controle do Servomotor
#include <SoftwareSerial.h>
SoftwareSerial mySerial(4,5);
Servo Servomotor; // nomeia o dispositivo
#define INICIO '>' // sintaxe de protocolo
#define SERIAL 1 // Pode ser mudado para "zero" se não quiser saida de dados do sensor via serial
int val_servo;
float valor_0, valor_1, valor_2;
void setup() {
Servomotor.attach(9); // Define o pino do UNO para ligar o sinal do Servomotor
mySerial.begin(9600); // Inicia a serial com 9600 bauds (padrão de fábrica dos HCs)
Serial.begin(9600);
Serial.println("\n Multilogica-shop.com 2017, Acionando Servomotor com Android e Arduino \n");
Serial.println("Lendo o sensor ROLL do Android: ");
Serial.flush();
}
void loop()
{
// mySerial.flush();
Serial.flush();
// preset de variáveis:
int Tipo_Sensor = 0;
unsigned long Contagem_log = 0L;
// lê a serial:
char getChar = ' ';
// espera pela entrada de dados seriais:
if (mySerial.available() < 1) return; // sem serial, retorna para o loop().
// detecta o start
getChar = mySerial.read();
if (getChar != INICIO) return; // sem start, retorna para o loop().
// Lê o trem da dados e faz a relação sintática das variáveis e valores:
Tipo_Sensor = mySerial.parseInt(); // Tipo do sensor (Deve retornar "tipo 3 e valor_2 para o sensor "ROLL")
Contagem_log = mySerial.parseInt(); // contagem de log das leituras
valor_0 = mySerial.parseFloat(); // Primeiro valor
valor_1 = mySerial.parseFloat(); // Segundo valor
valor_2 = mySerial.parseFloat(); // Terceiro valor
// neste exemplo, somente o valor_2 (sensor ROLL) interessa
// limita os valores e faz a proporção:
if (valor_2 <-90) valor_2 = -90;
if (valor_2 >90) valor_2 = 90;
val_servo = map(valor_2,-90,90,0,180);
// posiciona o servomotor:
Servomotor.write(val_servo);
// Envia os dados via serial que podem se vistos no Serial Monitor:
if (SERIAL) {
Serial.print(" Sensor ROLL : ");
Serial.println(valor_2);
Serial.print("Pos. Servo : ");
Serial.println(val_servo);
delay(10);
}
}
Este é um tutorial que está sempre em atualização e revisão.