Paso 2: Controlar 2 DC cepillado motores
El GOduino III utiliza el L293D-puente en h (conductor del motor) que es un IC de inmersión robusto y de bajo costo que simplifica el diseño de circuito. Tiene protección incorporada de la EMF y apagado térmico en el caso de motores tirón demasiado actual que también podrían dañar el L293D.
Un L293D solo puede controlar 2 motores cepillados con pico/puesto actual hasta 600mA por motor. Pico/puesto actual es la corriente que el motor dibuja impedimento de girar mientras que todavía funciona.
Si cuestas dos ICs L293D, puede doble la corriente de la III GOduino de 1.2A por motor. Esto es más que suficiente para la mayoría de los motores DC para pequeños robots de energía.
Chip y Solarbotic, por ejemplo, ofrecen una amplia selección de motores que funcionan dentro de la clasificación de la corriente del L293D.
El circuito de lógica L293D es alimentado por el regulador de potencia de GOduino III (7805) pero el circuito de control del motor del L293D es alimentado directamente de la batería.
Cada motor se alimenta del L293D mediante un encabezado macho 2 pines (Motor 1 y Motor 2). El orden de conexión de un motor de polos a 2 pines decide el sentido de giro del motor. También puede cambiar la dirección de rotación del motor de su sketch de Arduino.
Consejo: La soldadura un 0.1uF condensador de cerámica a través de los polos de su cepillado motor de la C.C. para la estabilidad agregada del circuito. Acortar los cables en el condensador lo más posible para mejor respuesta y para evitar cortos eléctricos accidentales.
Pernos de ATmega328 el GOduino III se asignan al puente de h L293D, de esta manera (usando Arduino pin sistema de numeración):
Motor 1 Pole1---> Arduino Pin 4
Motor 1 Polo 2---> Pin Arduino 2
1 habilitar motor---> Arduion Pin 5 (PWM)
Motor 2 Pole1---> Arduino Pin 7
Motor Pole2 2---> Arduino Pin 8
Activar 2 motor---> Arduion Pin 6 (PWM)
LA BIBLIOTECA DE SOFTWARE
Escribí la biblioteca motor Goduino para eliminar la necesidad de memorizar el alta, baja pin salida secuencias necesarias para dar vuelta o parar un motor.
Hay 4 funciones en la biblioteca del motor de Goduino:
- motorSpeed (mot1speed, mot2speed) establece la velocidad de ambos motores.
- motorStop(motorNum) para un motor.
- motorForward(motorNum) hace girar un motor en una dirección.
- motorBack(motorNum) hace girar un motor en la dirección contraria.
PARÁMETROS
Hay dos cabezales macho 2 pines en la placa de GOduino III: Motor 1 y Motor 2. Las funciones en la biblioteca de Goduino motor que toma un solo parámetro, es 1 para el Motor 1 o 2 para Motor 2.
La única función que toma dos parámetros es la función de motorSpeed(). El primer parámetro ajusta la velocidad para el Motor 1 y el segundo establece la velocidad para Motor 2. La velocidad máxima es de 1023. Esto significa la velocidad máxima de su motor puede aumentar o disminuir en incrementos de 1023.
La biblioteca de GOduino III y otros archivos de apoyo pueden descargarse desde Github:
https://github.com/techbitar/goduino
Puede utilizar el código de ejemplo (motortest.ino) incluido en la biblioteca de Goduino en la carpeta de ejemplos para probar y sincronizar la dirección de rotación del motor. El video muestra el III GOduino ejecutando la rutina de la prueba. Desde el IDE de Arduino abierto:
Archivos/ejemplos/Goduino/motortest
Nota: he evitado usar Arduino Uno los pines 3 y 11 porque son utilizados por la función tone() de Arduino. Así que ahora puedo construir un robot que hace ruido. (aplausos).
Este es el código de prueba utilizado en el video. Por favor revise mi Github para las actualizaciones y correcciones de errores:
/*
Archivo: motortest.ino - sketch de ejemplo para probar el control del robot GOduino III.
Creado por: Hazim Bitar (techbitar arroba gmail punto com)
Fecha: 23 de agosto, 20012.
Versión: 0.11 beta
Licencia: Liberado al dominio público.
*/
#include < Goduino.h >
Goduino myrobot;
void setup() {}
Serial.Begin(9600);
Serial.println ("Set velocidad de ambos motores a 100 (máximo 1024)");
myrobot.motorSpeed(50,50);
}
void loop() {}
Serial.println ("fase de prueba I - girar dos motores juntos en la misma dirección");
Delay(3000);
Serial.println ("Spin ambos motores en una sola dirección (3 seg)");
myrobot.motorForward(1);
myrobot.motorForward(2);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin ambos motores en dirección opuesta (3 seg)");
myrobot.motorBack(1);
myrobot.motorBack(2);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
//=================================================================================
Serial.println ("prueba fase II - SPIN cada MOTOR OPPOSTE del otro");
Delay(3000);
Serial.println ("giro 1 motor en una dirección mientras motor 2 en la dirección opuesta (3 seg)");
myrobot.motorForward(1);
myrobot.motorBack(2);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("giro 2 motor en una dirección mientras motor 1 en dirección opuesta (3 seg)");
myrobot.motorBack(1);
myrobot.motorForward(2);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
//=================================================================================
Serial.println ("prueba fase III - SPIN cada MOTOR mientras que el otro está parado");
Delay(3000);
Serial.println ("Spin 1 motor en una dirección mientras motor 2 está parado (3 seg)");
myrobot.motorForward(1);
myrobot.motorStop(2);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin motor 2 en una dirección mientras que el motor 1 es detenido (3 seg)");
myrobot.motorForward(2);
myrobot.motorStop(1);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin en la dirección contraria del motor 1 motor 2 estando parado (3 seg)");
myrobot.motorBack(1);
myrobot.motorStop(2);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin motor 2 en la dirección contraria mientras que el motor 1 es detenido (3 seg)");
myrobot.motorBack(2);
myrobot.motorStop(1);
Delay(3000);
Serial.println ("parada de ambos motores para 1 seg");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
}