Seleccionar página

En esta semana hemos recibido el driver de motores L298P para arduino, por lo que nos hemos puesto manos a la obra con la programación.

20160207_163628

Ya hemos conseguido controlar con móvil por medio de bluetooth uno de los dos motores que ésta shield nos permite colocar, pero conseguir controlar el segundo motor no va a suponer un gran desafío teniendo ya la base del programa.

20160207_163828

El programa que vamos a dejar a continuación nos permite controlar (por ahora) un solo motor, que corresponde al canal A del controlador de motores. Mediante el móvil y una conexión bluetooth, podremos controlar el motor para que gire en una dirección o en otra, además de tener 5 velocidades diferentes.

En la pantalla del móvil podremos visualizar el estado del motor (Velocidad y dirección de giro).

Screenshot_2016-02-07-19-48-39

CÓDIGO

#include<SoftwareSerial.h>  //Crea una comunicación por medio de software

int Tx = 2;
int Rx = 4;

int referencia = 0;
int contadorVelocidad;
int contador = 0;

int velocidadA = 3;
int velocidadB = 11;

int direccionA = 12;
int direccionB = 13;

int frenaA = 9;
int frenaB = 8;

char valueBT;
char valueSerial;
char adelante = 118; //Carácter v
char atras = 97; //Carácter a
char dcha = 100; //Carácter d
char izda = 105; //Carácter i
char para = 112; //Carácter p
char mas = 109; //Carácter m
char menos = 110; //Carácter n

SoftwareSerial BT1 (Rx, Tx); //Establece el nombre y los pines Rx (4) y Tx (2) para la comunicación por software.

void setup(){

Serial.begin(9600); //Inicia la comunicación por el monitor serial
BT1.begin(9600); //Inicia la comunicación por software

//Setup Canal A
pinMode(velocidadA, OUTPUT);
pinMode(direccionA, OUTPUT);
pinMode(frenaA, OUTPUT);

//Setup Canal B
pinMode(velocidadB, OUTPUT);
pinMode(direccionB, OUTPUT);
pinMode(frenaB, OUTPUT);
}

void loop(){

again:

valueBT = BT1.read(); //Almacena los datos leídos por el bluetooth en la variable valueBT
valueSerial = Serial.read(); //Almacena los datos leídos por el monitor serial en la variable valueSerial

if (valueBT – adelante == referencia){ //Si el valor leído por bluetooth menos el carácter asignado a adelante (v) sea igual a referencia (0)…
while(digitalRead(9) == HIGH){ //Si el freno del canal A está activado…
digitalWrite(frenaA, LOW); //descativa el freno.
}

digitalWrite(direccionA, HIGH); //El motor del canal A gira.
analogWrite(velocidadA, contadorVelocidad); //Ajusta la velocidad del motor del canal A.

Serial.println(«Avanza.»);
BT1.println(«Avanza.»);
}

if (valueBT – atras == referencia){ //Si el valor leído por bluetooth menos el carácter asignado a atras (a) sea igual a referencia (0)…
while(digitalRead(9) == HIGH){ //Cuando el freno del canal A esté activado…
digitalWrite(frenaA, LOW); //…descativa el freno.
}

digitalWrite(direccionA, LOW); //Invierte el giro del motor del canal A.
analogWrite(velocidadA, contadorVelocidad); //Ajusta la velocidad del motor del canal A.

Serial.println(«Marcha atras.»);
BT1.println(«Marcha atras.»);
}

if (valueBT – dcha == referencia){ //Si el valor leído por bluetooth menos el carácter asignado a dcha (d) sea igual a referencia (0)…

Serial.println(«Gira a la derecha.»);
BT1.println(«Gira a la derecha.»);
}

if (valueBT – izda == referencia){ //Si el valor leído por bluetooth menos el carácter asignado a izda (i) sea igual a referencia (0)…

Serial.println(«Gira a la izquierda.»);
BT1.println(«Gira a la izquierda.»);
}

if (valueBT – para == referencia){ //Si el valor leído por bluetooth menos el carácter asignado a para (p) sea igual a referencia (0)…

digitalWrite(frenaA, HIGH); //Activa el freno del canal A.

Serial.println(«Frena.\n»);
BT1.println(«Frena.\n»);
}

if (valueBT – mas == referencia){ //Si el valor leído por bluetooth menos el carácter asignado a mas (m) sea igual a referencia (0)…

contadorVelocidad = contadorVelocidad + 50; //…la variable contadorVelocidad aumenta en 50.
contador = contador + 1; //…la variable contador aumenta en 1.

if (contador != 6){ //Si la variable contador no es igual a 6…

Serial.println(«La velocidad ha sido aumentada en 50 puntos»);
Serial.print(contador);
Serial.print(«/5\n»);

BT1.println(«La velocidad ha sido aumentada en 50 puntos»);
BT1.print(contador);
BT1.print(«/5\n»);
}

while (contador == 6){ //Cuando la variable contador sea igual a 6…

contador = contador – 1; //…reduce en 1 contador.

Serial.println(«No se puede aumentar mas la velocidad.»);
Serial.print(contador);
Serial.print(«/5\n»);

BT1.println(«No se puede aumentar mas la velocidad.»);
BT1.print(contador);
BT1.print(«/5\n»);
}

while (contadorVelocidad == 300){ //Cuando contadorVelocidad sea igual a 300…

contadorVelocidad = contadorVelocidad – 50; //…reduce contador en 50.
}

Serial.println(contadorVelocidad);
}

if (valueBT – menos == referencia){ //Si el valor leído por bluetooth menos el carácter asignado a menos (n) sea igual a referencia (0)…

contadorVelocidad = contadorVelocidad – 50; //…la variable contadorVelocidad se reduce en 50.
contador = contador – 1; //…la variable contador se reduce en 1.

if (contador != -1){ //Si la variable contador no es igual a -1…

Serial.println(«La velocidad ha sido reducida en 50 puntos.»);
Serial.print(contador);
Serial.print(«/5\n»);

BT1.println(«La velocidad ha sido reducida en 50 puntos.»);
BT1.print(contador);
BT1.print(«/5\n»);
}

while (contador == -1){ //Cuando la variable contador sea igual a -1…

contador = contador + 1; //…aumenta en 1 contador.

Serial.println(«No se puede reducir mas la velocidad.»);
Serial.print(contador);
Serial.print(«/5\n»);

BT1.println(«No se puede reducir mas la velocidad.»);
BT1.print(contador);
BT1.print(«/5\n»);
}

while (contadorVelocidad == -50){ //Cuando la variable contadorVelocidad sea igual a -50…

contadorVelocidad = contadorVelocidad + 50; //…aumenta contador en 50.
}

Serial.println(contadorVelocidad);
}

while (((valueBT) == adelante || atras || dcha || izda) && ((valueSerial) != adelante || atras || dcha || izda)){ //Cuando los datos leídos por el bluetooh no sean igual que los datos
//leídos por el monitor serial…

goto again; //Vuelve a again.
}

}

 

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies