Tutoriais

Tutorial Multiloógica
25 anos25 anos

Tutorial

Controlando um Servomotor via Bluetooth com Arduino e Android

March 10, 2017

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);
  }
}
Detalhe do Módulo Bluetooth HC-06na montagem do Tutorial 

Este é um tutorial que está sempre em atualização e revisão.