Mover un servo motor utilizando el celular

En la entrada anterior expliqué cómo conectar el Módulo Bluetooth HC-06 al arduino y enviar mensajes desde el celular a través de una app llamada Bluetooth SPP.

Modo Control

Hasta ahora lo utilizamos en modo “terminal”. Ya podemos pasar al modo “Control” de la aplicación (en el menú de hamburguesa – las tres rayitas)

Comenzamos investigando qué recibe el Arduino cuando tocamos cada tecla. Para ello, abrimos el monitor serie y pulsamos los botones. Recibe una A, una B, una C, una D y cuando soltamos, una Z.

Por lo tanto, modificamos el programa para que nos avise qué recibe cada vez que tocamos una flecha. Vamos a pedirle que cuando se oprime el botón hacia arriba nos devuelva “Arriba”, y eso mismo con todos los botones:

void setup()  
 {
   Serial.begin(9600);
 }
 void loop() 
 {
   if (Serial.available())
   {
     char dato=Serial.read();
     Serial.print("Dato recibido: ");
     Serial.println(dato);
     if (dato=='B') {
       Serial.println("Abajo");
     }
        if (dato=='A') {
       Serial.println("Arriba");
     }
        if (dato=='C') {
       Serial.println("Izquierda");   
     }
        if (dato=='D') {
       Serial.println("Derecha");
     }
   }
 }

Y el resultado, al tocar las flechas:

Conectando el Servo Motor Tower Pro Micro Servo 9g

Si nunca utilizaste el servo motor, comenzá por aprender a utilizarlo, por ejemplo, con esta entrada: Servo motor 9g Tower Pro

Ahora vamos a hacer esas mismas conexiones, repasando:

  • cable anaranjado: va a un pin de tipo PWD (los de la tilde de la eñe)
  • cable color marrón: GND (tierra)
  • cable color rojo: +5v

El problema es que tenemos el pin de +5v ocupado por el módulo HC-06, así que vamos a tener que conectar el módulo de Bluetooth y el Servo a una breadboard / placa de pruebas, y de allí sacar un cable para el pin de Arduino llamado +5v

Ahora le agregamos unas líneas a nuestro programa, para que se mueva el servo motor al presionar los botones:

#include <Servo.h>
 
Servo myservo;   

void setup()  
 {
   Serial.begin(9600);
   myservo.attach(9);
 }

void loop() 
 {
   if (Serial.available())
   {
     char dato=Serial.read();
     Serial.print("Dato recibido: ");
     Serial.println(dato);
     if (dato=='B') {
       Serial.println("Abajo");
       myservo.write(90);
         delay(15); 
     }
        if (dato=='A') {
       Serial.println("Arriba");
       myservo.write(0);
         delay(15); 
     }
        if (dato=='C') {
       Serial.println("Izquierda"); 
       myservo.write(180);  
     }
        if (dato=='D') {
       Serial.println("Derecha");
       myservo.write(45);
     }
   }
 }

Como el servo no gira 360 grados, los botones no lo mandan exactamente arriba, abajo, derecha, izquierda. Ya mejoraremos eso en otra entrada.

Leave a Reply

Your email address will not be published. Required fields are marked *