Control de motores por celular

Control de motores por celular

  • Autor de la entrada:
  • Categoría de la entrada:Arduino
  • Comentarios de la entrada:Sin comentarios

Sistema de grúa con Arduino nano controlado por celular mediante Bluetooth

A continuación le presentamos un circuito muy divertido que nos ayudará a entender el principio mecánico de una grúa que pueda girar sobre su eje horizontal además de poder levantar y bajar en forma vertical cualquier objeto con un peso acorde a la fuerza del motor acoplado a un mecanismo reductor de velocidad en cuyo interior se encuentran sistemas de engranajes que trabajan; este principio mecánico nos permitirá además entender con más detenimiento los diferentes procesos físicos característicos de algunos dispositivos que nos rodean, permitiéndonos así no solo aplicarlo a una grúa sino a diferentes proyectos relacionado al control de motores empleando una red corta (WPAN), para ello usaremos la señal inalámbrica o radiofrecuencia(RF) que proporciona nuestro bluetooth de clase 2 que opera en la frecuencia de 2.4 GHz con una cobertura máxima de 5 a 10 metros, para poder transmitir voz y datos.

Dispositivos que usaremos:

Un (01) Arduino nano 
Un (01) controlador de motor L298N
Un (01) Módulo Bluetooth HC-06
Un (01) Módulo reductor DC – DC STEP-DOWN LM2596
Dos (02) Motores DC de 6V con caja reductora
Una (01) protoboard
Una (01) fuente de alimentación de 12Vc
Un multímetro 
Cables conectores

Como paso siguiente el circuito y sus conexiones. Es importante resaltar que los negativos o GND del Arduino nano, Bluetooth y L298N estén conectados en un punto común y desde éste conectarse recién al negativo del regulador step down, caso contrario los motores no tendrán la suficiente fuerza para moverse. 

Figura 1. Diagrama de sistema de grúa accionado por dispositivo celular mediante Bluetooth

Video 1.  Ilustrativo sobre el funcionamiento del sistema de grúa accionado por celular mediante la red WPAN o bluetooth.

Explicación y funcionamiento del sistema

El diagrama de la Figura 1 esquematiza la interacción del microcontrolador Arduino nano entre el bluetooth y el L298N, encargándose de procesar la señal serial o datos que recibe del dispositivo celular o smartphone, éste enviará las ordenes para los motores que se encuentran acoplados a mecanismos de giro horizontal o eje X y giro vertical o eje Y mediante una polea o cuerda que permitirá levantar o bajar un peso determinado. Para tal efecto resulta pertinente mencionar el dispositivo L298N que además de controlar el giro de los motores, permite darle fuerza mediante sus terminales digitales PWM (Modulación por Amplitud de Pulsos) cuyos valores digitales van desde 0 a 255, siendo el cero baja potencia o LOW y 255 máxima potencia o HIGH, estos terminales PWM están señalados como ENA conectado al terminal 3 y ENB al terminal 11 del Arduino nano respectivamente. Los terminales N1, N2, N3 y N4 determinarán los giros del motor y sus conexiones están definidos en el Arduino nano de la siguiente forma: N1 al terminal 5, N2 al terminal 6, N3 al terminal 9 y N4 al terminal 10.

Explicación del código

En el interfaz de desarrollo (IDE) de Arduino procederemos a declarar las variables:

int N1 = 5;
int N2 = 6;
int N3 = 9;
int N4 = 10;

Variables  de potencia PWM de los motores A y B, consideramos los terminales 3 y 11 del nano.

int ENA = 3;
int ENB = 11;

variable tipo caracter que almacenará el valor de la señal de datos

char estado = 'c';

Configuración del setup para inicializar valores por única vez, determinando como salida OUTPUT los terminales correspondientes al L298N.

void setup() {
 Serial.begin(9600); 
 pinMode(N1, OUTPUT);
 pinMode(N2, OUTPUT);
 pinMode(N3, OUTPUT);
 pinMode(N4, OUTPUT);
 pinMode(ENA, OUTPUT);
 pinMode(ENB, OUTPUT);

}

Ahora declaramos la función principal que se ejecutará indefinidamente, para lo cual abriremos la función void loop(){ procederemos a insertar el código condicional que permitirá verificar si la señal o dato ha sido recibido if (Serial.available()>0){ si es verdad entonces que realice la lectura de dicho valor y le asigne a la variable estado mediante la sentencia estado = Serial.read(); } cerrando a la vez el condicional.

No olvidar que aún estamos en la función void loop (),  procederemos a seleccionar el valor recibido mediante la sentencia switch – case, que nos permitirá invocar las funciones encargadas de accionar los motores DC, como se aprecia a continuación:

 switch (estado){
   case 'a':
    levanta();
    break;
   case 'b':    
    izquierda(); 
    break;
   case 'c':   
    detener();
    break;
   case 'd':
    derecha();
    break;
   case 'e':
    bajar();
    break;      
   } //cierra case
}   //cierra void loop

Estos valores (a, b, c, d y e) son enviados desde un control de mando del celular o smartphone mediante un aplicativo (App) diseñado en MIT App Inventor o Blink, según su interés. Bien, una vez terminado el case, cerramos la función principal y crearemos  las funciones  para mover los motores A y B.

Motor A: levanta y baja el peso en forma vertical.

void levanta(){
 analogWrite(ENA,150);
 digitalWrite(N1, HIGH);
 digitalWrite(N2, LOW);
 delay (4000);}

void bajar(){
 analogWrite(ENA,150);
 digitalWrite(N1, LOW);
 digitalWrite(N2, HIGH);
 delay (4000);}

Motor B:  permite el giro horizontal de derecha e izquierda y viceversa.

void derecha(){
 analogWrite(ENB, 150);
 digitalWrite(N3, HIGH);
 digitalWrite(N4, LOW);
 delay(4000);}

void izquierda(){
 analogWrite(ENB, 150); 
 digitalWrite(N3, LOW);
 digitalWrite(N4, HIGH);
 delay(4000); }

Apaga o detiene ambos motores (A y B).

void detener(){
 digitalWrite(N1, LOW);
 digitalWrite(N2, LOW);
 digitalWrite(N3, LOW);
 digitalWrite(N4, LOW);
 delay(4000); }

Bien, esperemos haya sido de su agrado y no olviden de compartirlo, dejando sus  comentarios o sugerencias para realizar nuevos proyectos. Gracias.

Deja una respuesta