martes, 23 de octubre de 2018

NORBA LANDER 1: desplazamiento por ruedas con tracción independiente

Para estudiar el uso de motores convencionales, el curso pasado, con los alumnos de 4º de ESO Juan Barco Gil y Adaya Ruiz Mayoral, comenzamos a desarrollar un vehículo con ruedas cuyo movimiento era controlado electrónicamente mediante interruptores. Hoy lo incluimos dentro del proyecto NorbaSKY como el "NorbaLander 1" de primera generación, que sentará las bases de futuros diseños de otros vehículos. A diferencia de los servomotores, que permiten realizar giros discretos de ángulos concretos, los motores DC con escobilla convencionales se limitan a dar vueltas continuamente. Acompañados de sistemas de reducción de revoluciones, podemos disminuir la velocidad de giro y aumentar la potencia del vehículo, algo imprescindible si queremos usarlos para el desplazamiento del sistema con un pequeño voltaje. La principal ventaja de estos motores es su sencillez, y por tanto también su precio. En contra tenemos su elevado consumo si los comparamos con otro tipo de motores, su calentamiento si se utilizan demasiado tiempo y las corrientes inducidas que pueden generar (recordemos que un motor es también un generador cuando el movimiento se crea de forma externa y se transmite al rotor). Y es precisamente la existencia de posibles corrientes inducidas lo que puede provocar que nuestro circuito quede frito si no aislamos el motor correctamente con optoacopladores o integrados que realicen la función de estos. Puedes probar a montar el siguiente circuito (en una placa real, no en simulador) y a continuación girar el eje del motor a un lado y a otro. Comprobarás el efecto de la corriente inducida. Está guay, ¿no?
Motor conectado a led, capaz de encenderlo mediante corriente inducida.
En particular, este vehículo dispone de dos ruedas motrices controladas por dos motores independientes, una tercera rueda doble articulada no motriz y es capaz de avanzar recto, girar a la izquierda o a la derecha y detenerse, acciones que son controladas mediante interruptores. Para aislar a los motores del resto de la circuitería se usa el integrado L293D que permite controlar dos motores independientes de una forma sencilla, suministrándoles voltajes entre 4,5V a 36V, y pudiendo controlar electrónicamente la velocidad de giro.
Integrado L293D para el control de dos motores.
En el desarrollo del mismo se han empleado casi tres meses, incluyendo el estudio inicial del controlador, conceptos básicos de programación, uso de interruptores, leds, y un largo etcétera de componentes hasta llegar a un diseño cuyo esquema hardware, realizado usando Tinkercad, se muestra a continuación:
Circuito para controlar dos motores DC mediante interruptores y placa Arduino.
Este diseño funciona perfectamente, pero tiene una serie de problemas. El primero es que la potencia suministrada a los motores es mínima (se toma de la propia placa arduino) y el segundo es que los interruptores de control se encuentran en la misma placa de pruebas o "protoboard" que el resto de los componentes electrónicos, que deberían ir en el chasis del vehículo, con lo que para controlarlo habría que acceder a ellos cuando este estuviera en marcha, algo impracticable. Es por ello por lo que para la implementación final se ha utilizado un esquema hardware ligeramente distinto, con batería externa de 9V para alimentar a los motores e interruptores ubicados en una segunda placa de pruebas que actúa como mando a distancia:
Circuito de control de dos motores DC mediante interruptores ubicados en mando a distancia.
Por su parte, el programa de control implementado para la gestión de este circuito es el siguiente:

#define botonIzq 5
#define botonSS  6
#define botonDer 7
#define motorIzqAvanza 11
#define motorIzqAtras  12
#define motorDerAvanza 9
#define motorDerAtras  10

int StarStop=0; //Posibles valores: 0 (apagado) y 1 (en marcha)
void MueveRobot(int direccion, int StarStop);


void setup(){

  for(int cont=9;cont<=12;cont++){pinMode(cont,OUTPUT);}
  for(int cont=5;cont<=7;cont++){pinMode(cont,INPUT);}
  MueveRobot(0,0);
  }

void loop(){

   int Direccion; //Posibles valores: -1 (izq), 0 (recto), 1 (der)
   
   Direccion=0; //Por defecto recto, salvo botón dirección pulsado
   if(digitalRead(botonIzq)){Direccion= -1;}
   if(digitalRead(botonDer)){Direccion=  1;}
   if(digitalRead(botonSS)){
      StarStop=!StarStop;
      while(digitalRead(botonSS)){} //Espera a levantar botón
      }
   MueveRobot(Direccion,StarStop);
   }

void MueveRobot(int direccion,int StarStop){

   digitalWrite(motorIzqAvanza,StarStop&&(direccion >  -1));
   digitalWrite(motorIzqAtras, StarStop&&(direccion == -1));
   digitalWrite(motorDerAvanza,StarStop&&(direccion <  1));
   digitalWrite(motorDerAtras, StarStop&&(direccion == 1));
   }  

Alumnos con versión alfa de Norba Lander 1.

Versión beta de Norba Lander 1.
La primera versión de este prototipo, junto a una memoria asociada al mismo, se envió durante el curso 2017-18 a la "Segunda edición del Certamen de Ciencias" que organiza conjuntamente la Fundación Caja de Extremadura, el Ateneo de Cáceres y MENSA España, obteniendo un tercer premio.




No hay comentarios: