Académique Documents
Professionnel Documents
Culture Documents
Home
Motores De Corriente Continua
OBJETIVOS
MATERIAL REQUERIDO.
IVA IVA
ARDUINO
UNO REV 3 PROTOBOARD
830 PINES320.
Añadir al
Añadir al
carrito
carrito
CABLES
DUPONT KIT DE
MACHO- RESISTENCIAS
MACHO VARIADAS
Añadir al Añadir al
carrito carrito
LEDS DE
COLORES
VARIADOS POTENCIÓMETRO
10K OHM
Añadir al
Añadir al
carrito
carrito
TRANSISTOR
NPN 2222N RUEDA +
MOTOR
Añadir al
carrito Añadir al
carrito
Es difícil moverse por nuestro mundo sin tropezarte con motores eléctricos de todos los tipos y tamaños. Desde los pequeños con los que arrancas el
coche cada mañana a los muy pequeños que mueven tu reproductor de CDs o DVS, al que hace girar el microondas con el que te calientas el café al
levantarte, estamos rodeados de motores eléctricos.
Podemos comprar desde grandes motores trifásicos, de corriente alterna, de gran potencia para labores industriales hasta pequeños motores de
En sesiones previas, ya presentamos una introducción a como gobernar servos o pequeños motores de CC, pero ha llegado el momento de
dedicarles un poco más de tiempo y detalle a ver lo que son y cómo usarlos en nuestro proyectos de Arduino.
Y como siempre es preferible empezar por el principio vamos a comenzar con los motores de corriente continua y viendo cómo podemos controlarlos.
Estoy seguro, de que todos estaréis familiarizados con el hecho de que los imanes tienen un polo positivo y otro negativo y que mientras que los
polos opuestos se atraen, los iguales se repelen.
Hay una relación muy estrecha entre la corriente eléctrica y los campos magnéticos que definen las
ecuaciones de Maxwell (Ya estamos otra vez) y resulta que cuando hacemos circular una corriente
por un conductor que está inmerso en un campo magnético, este se ve sometido a una fuerza
mecánica, que llamamos electromotriz y que podemos usar como principio básico de
funcionamiento de un motor eléctrico
Desde un punto de vista práctico, si hacemos circular una corriente por un hilo que está entre los
polos de un imán, aparecerá una fuerza mecánica que se opondrá a los cambios de esta corriente e
intentara hacer girar el conductor para compensarlos.
La fuerza que aparezca será proporcional a la intensidad del campo magnético, y a el número de conductores que sean recorridos por la corriente,
( por eso lo que hacemos es arrollar espiras de cobre o devanados alrededor de un núcleo, para que la fuerza aumente ).
El estator o parte inmóvil que por regla general incluye o bien imanes potentes fijos o generan un campo
variable mediante corriente alterna (Lo que nos llevaría a construir un motor de corriente alterna claro)
El rotor, en el que disponemos espiras o arrollamientos de hilos de cobre alrededor de un núcleo, para que
la fuerza que se ejerce sobre el rotor se multiplique proporcionalmente a este número
La idea final es que podemos diseñar motores de corriente continua sencillos para que esta fuerza sea máxima.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Claro que a medida que la fuerza electromotriz hace girar una fracción de vuelta el rotor, al final nos encontraríamos que, llegaríamos a una posición
de equilibrio, lo que no nos conviene en absoluto porque se pararía el giro del motor.
Por eso tenemos que complicar un poco más el asunto y asegurarnos de que disponemos de múltiples grupos de espiras en distintas posiciones, de
forma que cuando un grupo alcance el equilibrio el otro tome el relevo y el motor siga girando.
Fijaros en los bloques negros marcados como + y – ( Que llamamos escobillas ) que se mantienen estáticos mientras alimentamos con corriente
eléctrica una pareja de espiras con devanados opuestos. Cuando llegan al punto de equilibrio, desconectan ese juego de espiras y las escobillas
alimentan el siguiente juego de espiras durante una fracción de vuelta… y vuelta a empezar.
De ese modo siempre hay un juego de espiras conductoras fuera de la posición de equilibrio que se ve sometido a la fuerza electromotriz y obliga al
motor a girar buscando un equilibrio (Como en el caso de los imanes ) al que nunca le permitimos llegar.
En la sesión transistores, vimos que era muy fácil hacer girar un pequeño motor mediante un transistor que regulase la intensidad de corriente que le
entregamos.
En aquella sesión nos centramos casi en exclusiva en el transistor, para presentar este componente, que vamos a utilizar una y otra vez, y
prácticamente usamos el motor como excusa sin entrar en el tema. Pero en esta ocasión queremos poner el foco en el motorcito y como lo
controlamos y por eso vamos a volver a este ejemplo, pero complicándolo un poco más (Que le vamos a hacer), añadiendo un potenciómetro que
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
nos permita variar la velocidad de giro el motor.
Para ello usaremos un motor de continua, de 5V, con rueda, que podéis encontrar por muy poco dinero y que nos viene de perlas para apreciar el de
giro.
Como cualquier motor, por pequeño que sea consume más de lo que uno de los pines de nuestros Duinos pueden proporcionar, necesitamos usar un
transistor como el 2N2222 para alimentarlo. Y usaremos uno de los pines de Arduino para gobernar este transistor.
Vamos a repetir el montaje que vimos en la sesión transistores con este motorcito. Os incluyo copia del esquema eléctrico que usamos allí y del
diagrama de pines del transistor.
Aquí tenéis el esquema inicial sin potenciómetro para que comprobéis las conexiones del motor y que funciona correctamente, antes de seguir.
void setup()
{ pinMode(control, OUTPUT) ; }
void loop()
{
for ( int n = 0 ; n < 255 ; n++)
{
analogWrite (control, n) ;
delay(15) ;
}
}
Que como veréis, simplemente pone un valor analógico en el pin 9. Podemos controlar la velocidad del motor variando la intensidad de tensión que
ponemos en la base del transistor, ya que esta regula la resistencia que el transistor presenta entre emisor y colector.
A 0V el transistor entra en corte (Resistencia infinita) y a 5V está en saturación, con lo que presenta resistencia nula.
No supongáis que podemos hacer que el motor gire de forma continua para todos los valores de tensión en
la base. Por debajo de un cierto umbral se parará y solo girará cuando este se supere.
Al hacer crecer el valor de tensión que le damos al motor, la velocidad de giro, irá aumentando
progresivamente.
La idea es que a medida que aumentamos o disminuimos la tensión en la base del transistor, la caída de tensión en este varia de forma acorde
haciendo que el motor reciba más o menos tensión y esto se traduce en una cambo de su velocidad de giro.
Y un programa que lee el potenciómetro y varía la velocidad de giro en consonancia puede ser algo como ésto:
void setup()
{ pinMode(control, OUTPUT) ;
Serial.begin(9600);
}
void loop()
{
int n = analogRead(A1)/ 4; // Las lecturas analogicas van hasta 1024 y no hasta 255
Serial.println(n);
analogWrite (control, n) ;
delay(200) ;
}
Esto queridos amigos será el motivo de la la próxima sesión, porque para eso necesitaremos sofisticar un poco más el circuito
RESUMEN DE LA SESIÓN
Vimos que la velocidad de giro es proporcional a la tensión que aplicamos en bornas del motor.
Anterior Siguiente
Reply
Reply y tengo que usar máximo 2 relevadores y tengo que usar 4 motores (2 motores funcionan en un solo relevador, los dos
al mismo tiempo)
necesito saber si hay una forma para invertir el giro de motor con los relevadores?
si alguna manera de invertirlo con transistores pero usando siempre los dos relevadores
Reply Debes usar reles DPDT. Con ellos puedes invertir el giro de los motores. Si buscas en Internet “control sentido motor
con rele” o similar, verás cómo es el conexionado.
Saludos.
Reply
Reply
SM 05 Abr 2017
Como se haría para que el motor no pare por completo?
Reply
Reply Cuando utilices varias dispositivos deberías unir siempre las tierras.
Reply Sobre la otra cuestión todavía no la tengo clara. En la sesión sobre transistores
( https://www.prometec.net/transistores/) se dice “un valor de 5V en la Base permite el paso de la corriente
sin restricciones.”
Si el pin digital de arduino, con un valor HIGH, tiene una tensión de 5V, si le conectamos una resistencia en
serie de 330 ohmnios, se tendrá una caída de tensión, por lo que el transistor no satura ya que en la base
tendremos una tensión inferior a 5. No sé si el razonamiento tiene un error de concepto… Además, 40mA que
da como máximo los pines digitales, ¿puede provocar daño al transistor?
Gracias de nuevo
Reply Manejar un transistor requiere de una serie de fórmulas que puedes encontrar en Internet como
“Polarización del transistor” o títulos similares, ya que es un tema algo extenso.
Pero con Arduino y microcontroladores lo que se suele usar es el transistor como interruptor, o
dicho de otro modo, en corte y saturación. En corte, cuando no conduce, y en saturación cuando
permite es paso de toda la corriente.
Hay una fómula sencilla para determinar esa resistencia que se coloca en la base del transistor,
pues su valor depende de la carga que vaya a manejar el mismo, el voltaje que entra por la base,
el Vbe sat o voltaje de saturación base/emisor y la ganancia del transistor o hfe. Es así:
Rbase = ((Vbase – Vbe sat) * hfe)/ I carga
Con esta sencilla fórmula puedes hallar la resistencia que debe llevar el transistor elegido con
respecto a la carga conectada a él y su corriente.
Saludos.
Saludos.
Reply Nada mas facil. Define una variable global llamada velocidad por ejemplo. Haz un programa en que cada vez que pulses
el bont de subir aumente el valor y cuando pulses ol otro boton haz disminui speed y despues haz que el valor de
speed corresponda a la señal PWM con que manejas la velocidad del motor
Reply
Reply
Reply
Reply
Reply
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Anonimo 11 Ene 2017
¿podrías mandarnos los códigos de arduino para realizar lo de regular la potencia del motor? gracias
Reply
Reply Extraje los motores de vibración de un mando de Playstation, ¿cómo puedo saber el voltaje máximo que le puedo
suministrar? ¿Será suficiente para un proyecto como este? Le puse una pila de 9V directamente y no tiene mucha fuerza
(monte una estructura de coche y apenas la mueve)
Reply Para saber el voltaje de esos motores mira la beteria que usa o el numero de pilas que usa. SI por ejempo usa 4 pilas
de 1,5 entonces sabes que como maximo sera 4×1,5 = 6V o sea 5V, pero ten en cuenta que esos motores de vibracion
no son demasiado potentes
Reply
Reply
Reply
GIVE A REPLY
Message
URL
Copyright Prometec
Home
Mas Sobre Motores De Corriente Continua
OBJETIVOS
Un integrado, el L293D .
MATERIAL REQUERIDO.
ARDUINO PROTOBOARD
UNO REV 3 830 PINES320.
Añadir al Añadir al
carrito carrito
CABLES
DUPONT
MACHO- RUEDA +
MACHO MOTOR
Añadir al
Añadir al
carrito
carrito
H-BRIDGE
L293D POTENCIÓMETRO
10K OHM
Añadir al
carrito Añadir al
carrito
Hemos visto por encima las características básicas de los motores de corriente continua con escobillas (Porque hay varios tipos además de este),
pero vamos a entrar un poco más en detalle de que cosas debes considerar cuando vayas a elegir uno de estos motores.
Cuando compres un motor de corriente continua debes fijarte en tres cosas básicamente:
Voltaje de funcionamiento: Que especifica los rangos de tensión entre los que el motor funcionará
correctamente. Por ejemplo el que yo estoy usando se mueve entre 3 y 6V, pero no es raro encontrarlos de
9, 12 y 24V
Revoluciones por minuto: Que indica la velocidad que puede alcanzar a las distintas tensiones y que se
suele consignar como Rpm. Típicamente en motores de Hobby andaremos entre 200 y 2.000 rpm
Par motor: O potencia que el motor puede desarrollar y que indica la carga útil que puede mover. En inglés
se llama Torque.
En la sesión anterior vimos como como conectar uno de estos motores a nuestro Arduino y como variar la velocidad de giro modificando la tensión
que le entregamos en bornes. La velocidad de giro del motor depende directamente de esta tensión
Pero una cosa que no hicimos en la sesión previa fue invertir el sentido de rotación del motor, porque este es un tema espinoso, ya que para ello
necesitamos invertir la polaridad de la tensión en bornes, y esto, queridos amigos, no podemos hacerlo usando solamente nuestros Arduinos
(Porque Arduino puede proporcionar +5V pero no -5V).
Para resolver este problema tenemos que usar un poco más de ingenio y diseñar un circuito que se llama puente en H ( H-bridge ). Para
comprenderlo, imaginaros el siguiente montaje a base de interruptores:
Cuando usamos los interruptores en la posición de la imagen izquierda el motor gira en un sentido que llamaremos directo. Pero si los colocamos en
la posición de la derecha girará en sentido contrario, porque hemos invertido la polaridad de la tensión en las entradas del motor, y por tanto el
sentido de giro, sin necesidad de invertir la polaridad de la tensión, cosa complicada.
A estos circuitos se les llama H-bridge , porque recuerdan vagamente a una H alrededor del motor.
Claro que invertir el giro mediante interruptores es poco práctico, y como aquí somos expertos electrónicos ( Sin carcajadas, por favor), vamos a ver
cómo podemos hacer la misma función usando electrónica y que no tengamos que conmutar manualmente, sino mediante señales eléctricas. Un
típico H-Bridge seria parecido a este circuito:
Observa que dos transistores son unos PNP y otros dos NPN para jugar con la polaridad de la tensión.
El campo magnético del rotor almacena energía, que puede ser importante, y que cuando cortamos la
alimentación debe ser liberada en forma de corriente eléctrica, y adecuadamente dirigida por los diodos
para impedir daños en los transistores o en la fuente de alimentación
Y como esta no iba a ser la excepción, nos encontramos que disponemos de varias versiones de circuitos H-bridge dependiendo de la tensión y la
intensidad que se debe conmutar.
Nosotros hoy vamos a utiliza un integrado barato, probado y fácil de encontrar que incluye dos H -bridge y que nos sirve para pequeños motores de
corriente continua. Se llama L293D.
EL H BRIDGE L293D
El L293D, es un pequeño integrado que incluye dos puentes H-Bridge que podemos usar para gobernar simultáneamente dos motores CC.
Asegurarte de que no sobrepasas la tensión máxima nominal de tus motores, es problema tuyo, así que ojo
que el chip lo aguanta, pero lo de tu motor es otra historia.
El pin 16, Vss, son los 5V con los que alimentamos el chip y el pin 8, Vs, es la tensión con la que
alimentamos el motor.
Los pines del 1 al 7 controlan el primer motor y los pines 9 a 15 controlan el segundo motor.
El pin 1, Enable1, Activa el uso del motor 1. Con un valor HIGH, el motor puede girar dependiendo del valor
de I1 e I2. Si es LOW se para independientemente de los valores del resto de pines
Los pines 3 y 6 son la salida a la que se conecta el motor 1, cuya polaridad se invierte en función los valores
de 2 y 7.
En el diagrama de arriba veis que hay pines equivalentes para el motor 2 y cuales son.
Podemos hacer una tabla para mostrar la lógica que sigue el giro del motor en función de los tres pines:
Por tanto tenemos que activar el pin enable para que el motor gire y después usamos los pines Input1 e Input2 con valore opuestos para hacer girar
el motor en una dirección o en la contraria. ¿Fácil no? Veamos cómo hacer el montaje con nuestros Arduinos.
1 10 Enable
2 9 Input 1
3 – Motor1 +
6 – Motor1 –
7 8 Input 2
ESQUEMA DE PROTOBOARD
Una vez que tenemos claras las conexiones, el diagrama de protoboard del chip L293D a nuestro Duino será algo así:
void setup()
{
for (int i = 8 ; i<11 ; i++) // Inicializamos los pines
pinMode( i, OUTPUT);
}
void loop()
{ digitalWrite(E1, HIGH); // Activamos Motor1
digitalWrite(I1, HIGH); // Arrancamos
digitalWrite(I2, LOW);
delay(3000);
El programa no puede ser más sencillo. Activamos el Enable1 para arrancar Motor1, y luego usamos I1 e I2 con valores invertidos. El motor arranca y
lo paramos a los 3 segundos. A la de 1 segundo levantamos de nuevo el Enable1y al intercambiar los valores de I1 e I2 el giro del motor se inicia y en
la dirección contraria.
Pero el truco está en que hemos conectado el pin Enable1 al pin Arduino 10 que es PWM (Así, como sin querer) y los L293D vienen diseñados para
variar la velocidad de giro de los motores correspondientes con la tensión aplicada a este pin, por lo que resulta trivial variar la velocidad del motor,
sin más darle valores analógicos.
Si por ejemplo añadimos un potenciómetro de nuevo conectado al A1, podemos escribir este valor directamente (dividido por 4, claro) al pin 10 como
analógico, sustituyendo la línea
Fijaremos la velocidad de giro del motor en función del valor del potenciómetro. El programa corregido, quedaría poco más o menos así:
void setup()
{
for (int i = 8 ; i<11 ; i++) // Inicializamos los pines
pinMode( i, OUTPUT);
}
void loop()
{ analogWrite(E1, analogRead(A1) / 4); // Activamos Motor1
digitalWrite(I1, HIGH); // Arrancamos
digitalWrite(I2, LOW);
delay(3000);
Y eso es todo.
Sería un buen ejemplo plantear un programita en el que la velocidad se varia inmediatamente, aunque para
ello tendréis que eliminar los delays.
RESUMEN DE LA SESIÓN
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Hemos presentado los H bridge y porqué son necesarios.
Vimos un integrado, el L293D, que incluye dos H bridge con la capacidad para regular dos motores tanto
en velocidad como en sentido de giro.
Anterior Siguiente
(115) Comments
Reply
Reply
Reply En realidad, no podemos hablar en este caso de “el máximo amperaje”, sino la “máxima tensión”. Se puede
perfectamente conectar un motor de 12V 100mA a una batería de auto de 40Ah. El motor va a tomar la corriente que
necesite. Otra cosa es que le conectes a esa batería un motor de 3V.
Saludos.
Saludos
Reply La primera es sobre las conexiones. Según la tabla que facilitas, el PIN 2 del chip (Input 1) corresponde al PIN 9 de
Arduino, y el PIN 7 del chip (Input 2) corresponde al PIN 8 de Arduino. Sin embargo en el programa los asignas al revés
La segunda duda es sobre el funcionamiento. A mi me está ignorando la instrucción de arrancar o parar el motor en todo
momento. Si pongo esto funciona todo igual
void loop()
{
No estoy activando el motor en ningún momento y, sin embargo, funciona el programa y gira, durante 1 segundo, en una
dirección y, durante otro segundo, el dirección contraria. Si añado digitalWrite(E1, LOW); en el medio o al final hace caso
omiso y no para el motor.
Muchas gracias
Reply
Reply
Reply
Reply
Reply
Reply Si alimento la placa por USB o mediante la entrada Jack sí que se comporta desde el inicio como debe, sin entrar en el
if. Sin embargo, ocurre todo lo contrario (entra en el if nada más alimentarlo) si lo alimento mediante la entrada Vin que
es la que voy a usar para el proyecto…
Reply
He adjuntado el código por si alguien me podría decir a qué se debe ese error, porque por más vueltas que le doy no sé
por qué hace eso…
//LED:
#define LED 2
#define E1 10
#define I1 8
#define I2 9
#define E2 5
#define I3 6
#define I4 7
long duracion;
long distancia;
int limite = 25; //Medida en vacío del sensor. cm.
void setup() {
Serial.begin(9600);
//LED:
pinMode(LED, OUTPUT);
//Sensor:
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
//Motor 2:
void loop() {
digitalWrite(LED, LOW);
digitalWrite(E1, HIGH); //El motor debe estar moviéndose al poner en marcha el programa hasta que encuentre un
obstáculo.
digitalWrite(I1, HIGH);
digitalWrite(I2, LOW);
digitalWrite(E2, HIGH);
digitalWrite(I3, HIGH);
digitalWrite(I4, LOW);
digitalWrite(E1, LOW);
digitalWrite(I3, HIGH); //Giro hacía la izq 180.
digitalWrite(I4, LOW);
delay(800);
else{
digitalWrite(LED, LOW);
digitalWrite(E1, HIGH);
digitalWrite(I1, HIGH);
digitalWrite(I2, LOW);
digitalWrite(E2, HIGH);
digitalWrite(I3, HIGH);
digitalWrite(I4, LOW);
int dist;
dist = duracion / 2 / 29.1 ; //Devidimos por dos porque el eco es tanto ida como vuelta.
return dist;
}
GIVE A REPLY
Message
URL
Post comment
Copyright Prometec
Home
Un Pequeño Robot Con Tracción 4×4
OBJETIVOS
MATERIAL REQUERIDO.
+ IVA IVA
ARDUINO
MEGA MOTOR SHIELD
V1
Añadir al
carrito Leer más
Out of
60.00€ Stock
50.00€
+ IVA
ROBOT
ROVER 4×4
Leer más
En las sesiones previas hemos visto cómo manejar los motores de corriente continua típicos. Hemos visto cómo hacerlos girar y como modificar
esta velocidad de giro, así como la forma de invertir el sentido de rotación mediante un H bridge integrado como el L293D.
¿Y qué hace un hombre normal, cuando consigue controlar un motor ( y más uno que esté leyendo esto )? Pues naturalmente, probar a manejar varios
motores a la vez, digamos 4, y empezar a pensar en hacer un pequeño cochecito con tracción a las 4 ruedas y control remoto inalámbrico y….
¡Quieto parado!
Vayamos por partes. De momento solo hemos gobernado un motor, aunque sabemos que el L293D dispone de capacidad para manejar un segundo
motor. Podríamos diseñar un circuito con dos L293D para mover 4 motores y quizás hacer un Shield para montar todo en la chepa de nuestro
Arduino.
Pero como siempre os digo, si existe una necesidad en este mundo electrónico, siempre hay alguien presto a vendernos la solución de forma
conveniente. Y como podréis imaginar, ni somos los primeros que hemos tenido esta idea (Ni seremos los últimos) ni es precisamente una novedad
la solución, el mercado nos ofrece toda una variedad de Shields para controlar motores muy interesantes, dependiendo del tamaño de los motores,
su consumo, la tensión y cualquier otra cosa que podáis imaginaros.
Como en esta humilde casa pensamos que para aprender hay que trastear y preferiblemente por poca pasta, vamos a presentar un sencillo Motor
Shield que fue diseñado por nuestros amigos de Adafruit y luego abandonado en favor de un controlador de motores más avanzado (y caro) y cuyo
relevo ha sido tomado por la nube de fabricantes chinos, proporcionándonos un Arduino motor shield V1.0, por muy poco dinero, que nos permite
iniciarnos gastando lo justo.
Aquí tenéis una foto del Motor Shield V1.0, que podéis encontrar fácilmente en cualquier proveedor:
Dispone de alimentación de motores, separada de la del Shield para evitar ruido e interferencias.
En resumen, es un Shield barato y práctico para manejar pequeños motores de 5V, pero que se quedará corto si necesitas una cierta potencia en
los motores, ya que la intensidad que estos demandaran superará con facilidad los 0,6A que tiene como límite este Shield.
Es ideal para construir robots autónomos con pequeños motores y sin peso y sobre todo como elemento de aprendizaje antes de invertir una pasta
gansa en otras opciones mas sofisticadas.
El shield conecta directamente los H Bridges L293D a los pines PWM de Arduino y además incorpora un viejo conocido nuestro el 74HC595, un
Shift Register, para ahorrar pines en la conexión.
El Shield se reserva los pines 3,4,5,6,7,8,9,10,11,12, los pines 9 y 10 se usan para los servos en caso de que los incluyamos y quedan libres los pines 2
y 13, así como el 0 y 1 que se usan para la comunicación USB con nuestro PC.
Hay conexiones para los bornes de 4 motores, marcados como M1, M2, M3 y M4 y conviene que al conectar sigas el mismo criterio en los bornes y
en el Shield porque de lo contrario conseguirás que alguno de los motores gire al revés de lo que pretendes. Lo que no es muy grave porque se
arregla con facilidad.
Una cosa interesante de este shield es que nos permite separar la alimentación de los motores de la alimentación de Arduino y es de agradecer
porque los motores generan mucha interferencia electromagnética que puede hacer que nuestro Arduino se comporte de forma errática.
Por eso siempre que sea posible conviene que separéis la alimentación de uno y otro ( Aunque en un robot autónomo va a ser difícil) . Para ello basta
Vamos a conectar un primer motor al Shield para probar. Lo primero montad el Shield a vuestro Arduino. Yo os recomiendo un MEGA para que
podamos seguir haciendo cosas en el futuro, pero también vale cualquier otro.
Conectad los bornes del motor a los tornillos A y B del Motor Shield , dejando libre el pin central marcado como GND.
No es importante que borne a que pin, porque lo único que ocurrirá si lo invertís es que el motor girará al
revés. Lo que sí es recomendable es que mantengáis el mismo criterio para todos los motores, porque os
ahorrará dolores de cabeza.
Como en este primer ejemplo vamos a alimentar el motor desde Arduino y el USB, no olvidéis conectar el
power jumper, para que alimentemos los motores directamente desde Arduino.
Seria sencillo manejar el motor a través del Shield directamente, recurriendo a los pines de control, y os lo propongo como ejercicio si os parece,
pero aquí vamos a descargar ahora una librería de Adafruit para manejar el Shield directamente, que nos permitirá abstraernos del detalle de pines.
La librería que necesitamos es esta adafruit-Adafruit-Motor-Shield-library-8119eec, y para instalarla seguimos el procedimiento habitual .
Para usarla, lo primero que tenemos que hacer es este par de instrucciones:
#include <AFMotor.h>
AF_DCMotor Motor1(1);
La primera línea, incluye la librería de AdaFruit en nuestro programa, y la segunda crea una instancia de un motor conectado a la puerta M1, y le
iniciamos con el parámetro que le pasamos que puede ir del 1, M1 al 4, M4.
La primera línea pone el motor a 200 / 255 del tope de revoluciones, y la segunda línea indica que queremos dejar el motor en punto muerto.
Motor1.run(FORDWARD);
Motor1.run(BACKWARD);
Y eso es todo lo necesario para controlar un motor. Si queremos hacer un primer programa sencillo que haga avanzar el motor unos segundos y
después retroceda, podemos escribir un programa similar a este Prog_92_1:
#include <AFMotor1.h>
AF_DCMotor1 Motor1(1);
void setup()
{ Motor1.run(RELEASE); }
void loop()
{ Motor1.run(FORWARD);
delay (2000);
Motor1.setSpeed(180);
Motor1.run(BACKWARD);
delay (2000);
}
Vamos a conectar ahora, 4 motores a nuestro Motor Shield . Yo tengo por aquí rodando un bastidor con 4 ruedas y motores que voy a usar como
base para hace un robot con tracción a las 4 ruedas.
Pero lo mismo da cualquier otro robot que tengáis, o hasta un bastidor con las ruedas, a condición de que podamos subirle nuestro Arduino mas el
En mi caso lo he puesto en un pedestal, para poder probar los diferentes motores sin que se me escape corriendo. Vamos con el programa de
prueba. Lo primero es incluir la librería y definir las instancias de los motores que esta ocasión son 4 en vez de 1:
#include <AFMotor.h>
AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);
void setup()
{ Serial.begin(9600); // set up Serial library at 9600 bps
Motor1.setSpeed(255);
Motor2.setSpeed(255);
Motor3.setSpeed(255);
Motor4.setSpeed(255);
}
Y por ultimo vamos a mandar moverse adelante y atrás y para los 4 motores simultáneamente:
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
delay (2000);
Motor1.run(BACKWARD);
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
delay (2000);
Como veis no es diferente de mover un solo motor, solo mas pesado. Aquí tenéis el programa Prog_92_2.
Es conveniente que comprobéis en vuestro montaje que todas las ruedas giran en la misma dirección y que no hay ninguna rotando al revés, porque
cuando queramos avanzar seria un problema.
ARDUINO FUNCIÓN
Pin 1 Disponible
Pin 2 Disponible
Tened presente que no hay ningun pin de Arduino conectado a los motores directamente. La gestión de los motores se realiza a traves del shift
register para ahorra pines y por eso tenéis necesariamente que usar la libreria para manejarlos.
Hemos presentado el Motor Shield V1 de Adafruit , que un Shield muy barato además de útil para
mover pequeños motores y como nuestra primera controladora.
Vimos sus características y limitación pero siempre es mas comodo un Shield que hacerse un invento.
Instalamos la librería de control de motores y empezamos con las nociones básicas de programación
de los motores.
Dejamos el Motor Shield conectado a un pequeño robot de 4 ruedas y prbamos que todo funcionaba
como se esperaba, dejando listo el hardware para que podamos empezar a programar el movimiento del
robot.
Anterior Siguiente
Reply
Reply
GIVE A REPLY
URL
Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield
Copyright Prometec
Home
Dirigiendo Un Robot Rover 4×4
OBJETIVOS
Seguimos jugando con los motores de corriente continua y la controladora Motor Shield V1 de Adafruit.
MATERIAL REQUERIDO.
+ IVA IVA
ARDUINO
MEGA MOTOR SHIELD
V1
Añadir al
carrito Leer más
Out of
60.00€ Stock
50.00€
+ IVA
ROBOT
ROVER 4×4
Leer más
En las sesiones previas hemos visto los conceptos básicos de los motores CC y cómo usar una controladora tipo MotorShield , para gobernar varios
motores simultáneamente. Pero de lo que no hemos hablado es de una cuestión básica que a algunas personas les suele parecer difícil de entender:
El giro.
Como los automóviles forman parte de nuestra vida diaria, comprendemos con facilidad el principio de giro que usan medinate el volante, y tenemos
una idea intuitiva de como este desvía la dirección de trazado de las ruedas con respecto a la dirección del movimiento del coche. De ese modo, las
ruedas delanteras trazan siempre la tangente a la curva del movimiento.
Pero quizás no resulte tan evidente que las dos ruedas delanteras de los modernos coches, no pueden girar
a la misma velocidad en curva, si queremos mantener la estabilidad y gobernabilidad del vehículo.
Pues es bastante fácil, y si lo piensas es el mismo principio que usan los tractores en el campo, que pueden hacer giros impensables para un
automóvil, o los tanques de guerra y excavadoras que se desplazan mediante orugas metálicas (sin dirección móvil).
Como en los automóviles disponemos de un único motor de explosión, tenemos que montar un complicado sistema mecánico, que reparta la
tracción entre las ruedas motoras, pero en los coches eléctricos en general y en nuestro Rover 4×4 en particular, disponemos de un motor por
rueda, por lo que podemos controlar la velocidad de cada una independientemente.
Esto es así, incluso en los vehículos híbridos comerciales, que usan un motor de combustión para recargar
las baterías centrales, pero disponen de un motor eléctrico por rueda, lo que nos permite además de
tracción 4×4, hacer algunas cosas poco habituales en un coche tradicional,
Controlando la velocidad de cada rueda podemos soslayar la necesidad de una dirección mecánica y podemos hacer movimientos que sorprenderían
El truco esta precisamente en hacer girar cada rueda a diferente velocidad, de modo que fuercen al vehículo a girar en la dirección y radio deseados.
Si las ruedas del lateral derecha giran al doble de velocidad que las del lateral izquierdo, nuestro Rover girara forzosamente a la izquierda y viceversa,
haciendo un giro continuo y tanto más suave cuanto menor sea la diferencia de velocidad entre el giro de los dos laterales.
El radio de giro será más o menos cerrado, dependiendo de la relación entre las velocidades de los laterales. No solo podemos hacer girar el Rover,
sino que además podemos controlar lo cerrado del giro. Si paramos completamente uno de los laterales y mantenemos el otro, el giro será muy
acusado.
Con tracción independiente a las cuatro ruedas podemos incluso hacer girar las ruedas de un lateral en sentido contrario al giro del otro lado, y en
este caso el Rover girará sobre su centro de gravedad sin desplazarse.
Para gobernar nuestro Rover con tracción a las 4 ruedas nos bastara controlar de forma diferencial la velocidad de giro de las ruedas, y esto ya
sabemos hacerlo de las sesiones previas. Así que vamos a pasar al programa.
AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);
Incluimos la librería e instanciamos las cuatro ocurrencias de los 4 motores. Después creamos una variable que usaremos para contener la velocidad a
la que deseamos mover el Rover. De ese modo variando el contenido de Vel, variaremos la velocidad general del vehículo, y definimos P como una
variable que indicará la proporción de velocidad entre un lado y el otro cuando queramos girar.
Como vamos a girar modificando la relación de velocidades de los motores, nos conviene empezar definiendo una función como esta, que usaremos
para programar la velocidad de cada rueda independientemente:
Recuerda que estas órdenes fijan la velocidad de cada motor pero aún no se ponen en marcha. Para eso vamos a definir algunos movimientos
básicos, como Avance, Retroceso y Paro:
void Retroceso()
{ SetVel(Vel,Vel,Vel,Vel); // Misma velocidad a las 4 ruedas
Motor1.run(BACKWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void Paro()
{ Motor1.run(RELEASE);
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
}
Para girar ya hemos comentado que bastará con mover a diferente velocidad los laterales del Rover. Podemos montar un sistema de giro abierto
haciendo que uno de los laterales se mueva a digamos 1/3 de la velocidad del otro lado, usando la variable P que definimos al principio.
En un Rover real, podemos alterar el radio de giro, leyendo un potenciómetro, como una palanca, de modo
que a medida que movemos la palanca hacia la derecha, por ejemplo, va reduciendo proporcionalmente la
velocidad de las ruedas de la derecha.
Os lo dejo como ejercicio, porque no creo que tengáis dificultad y ya hablaremos de ello cuando veamos
cómo usar un mando a distancia para gobernar el Rover.
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void giroDerecha()
{
int v = Vel * P ;
SetVel( Vel, v, Vel, v) ;
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
Y ya solo nos falta hacer una prueba en movimiento real. Vamos a programar el movimiento, (Porque aún no tenemos control remoto sobre la
dirección).
¿Fácil No? Avanza, retrocede y gira a un sentido y al otro. Vamos a probar como se mueve, de este modo tan sencillo.
Para mover el Rover la primera intención suele ser usar el cable de USB y dejar el Rover con el conectado para moverlo, pero aunque parece una
buena idea, me temo que no va a funcionar.
El cable USB puede mover los motores sin ninguna carga, pero escasamente podrá mover el Rover por una
alfombra, ya que los motores tienen la mala costumbre de consumir mucha intensidad y el USB típico no
pasa de medio Amperio máximo.
Tendréis que usar pilas y os recomiendo que sean 6 pilas, no 4, porque con el alimentador externo,
necesitamos por lo menos 7V para darnos 5V con garantías.(y 4 pilas x 1,5V = 6V, lo que resulta
insuficiente)
Además y por si fuera poco, los motores baratos suelen ser muy poco eficientes energéticamente y estos,
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
creedme, son muy baratos.
Para probar el movimiento vamos a necesitar un paquete de pilas externo y unas baterías. Algo así como esto:
El conector que veis, en la imagen de arriba, encaja perfectamente en vuestro Arduino (En ese conector que nadie usa, ya ves) y nos ahorrará el
llevar un cable colgando, que siempre acaba liándose con el movimiento.
Montando todo esto junto, tenemos el program Prog_94_2, y este es un mini video con el resultado
Motor1.run(BACKWARD) ;
Motor2.run(FORWARD);
Motor3.run(BACKWARD);
Motor4.run(FORWARD);
}
void giroDerecha()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(FORWARD) ;
Motor2.run(BACKWARD);
Motor3.run(FORWARD);
Motor4.run(BACKWARD);
}
Este tipo de giro nos resulta un tanto contra intuitivo, porque los coches no pueden hacerlo, pero funciona muy bien y hace que el Rover gire sobre
su propio centro geométrico.
RESUMEN DE LA SESIÓN
Hemos visto la teoría básica de como girar mediante velocidad diferencial con tracción a las 4 ruedas.
Vimos los programas básicos que gobierna el giro del Robot incluyendo el giro sobre su centro
Anterior Siguiente
Copyright Prometec
Home
Un Robot 4×4 Autónomo
OBJETIVOS
Seguimos jugando con los motores de corriente continua y la controladora Motor Shield V1 de Adafruit.
Buscamos que el Rover pueda buscar su ruta de forma autónoma evitando obstáculos .
MATERIAL REQUERIDO.
+ IVA IVA
ARDUINO
MEGA MOTOR SHIELD
V1
Añadir al
carrito Leer más
+ IVA
ROBOT SENSOR
ROVER 4×4 DISTANCIA
Leer más
Añadir al
carrito
En principio, esta sesión estaba pensada para montar un sistema de control a distancia de nuestro Robot, pero dado que en esta humilde página
aspiramos a poner los medios, para que quien lo desee pueda aprender a programar y dado que nuestro flamante robot con tracción total está en
marcha, no he podido resistirme a intentar una prueba con un sistema autónomo de control.
En un tutorial anterior vimos cómo manejarlo y sería bastante fácil de incorporar a nuestro pequeño robot 4×4 en el frontal. Naturalmente la cosa
puede hacerse tan complicado como queramos con múltiples sensores de distancia y sensores de luz, o de sonido.
Pero para este primer prototipo, aplicaremos una regla básica de la ingeniería: KISS, por sus iniciales en inglés (Keep It Simple Stupid, que no creo
que necesite traducción) y ya tendremos tiempo de complicarnos la vida (Que en el fondo es lo que nos pone).
Un algoritmo, por si aún no habíamos hablado antes de ello, es un procedimiento estandarizado para
resolver un problema concreto.
En nuestro caso el algoritmo será sencillamente girar a la izquierda cuando detecte un obstáculo a menos
de una distancia estipulada, lo que no es un algoritmo muy sofisticado que digamos, pero por algún sitio
hay que empezar.
CONECTANDO EL SENSOR
Ya vimos en una sesión previa como conectar el sensor de distancia por ultrasonidos a un Arduino UNO. En esta ocasión voy a usar un Arduino
MEGA, porque necesitamos disponer de pines libres para conectar el Sensor de distancia (2) y dejar sitio para el mando a distancia (como 6).
En principio, seguramente podríamos usar un UNO para todo esto, pero un MEGA es mas cómodo,
porque el Motor Shield no nos tapa todos los pines y además vamos a cargar varias librerías, que aunque
no son grandes, no estoy seguro como andaríamos de memoria con el UNO.
Este es un truco muy interesante cuando lo que vais a conectar no consume mas de los 20mA que un
Arduino de 5V es capaz de suministrar o recibir, y en ocasiones nos evita andar haciendo cosas raras para
buscar los 5V. Pero asesuraros de que no sobrepasareis este limite.
He elegido estos pines por pura vagancia, para que sea fácil pasar los cables, pero vosotros podéis elegir los que queráis, claro está.
Vamos a incluir aquí un esquema de los pines en los que lo he conectado yo para que podáis usar los mismos y no necesitéis modificar los
programas.
Solo hay que tener en cuenta que como no tenía a mano el pin de 5V, porque quedaba oculto por el Motor Shield, he usado el pin 52 como
alimentación, (Porque el sensor ultrasónico no consume casi nada y un pin del MEGA tiene capacidad para alimentarlo), y tenemos el GND al lado.
He elegido estos pines por pura vagancia, para que sea fácil pasar los cables, pero vosotros podéis elegir los que queráis, claro.
MEGA GND 52 48 50
En mi caso he sujetado el sensor de ultrasonidos, mediante una pieza de plástico que me hice con la impresora 3D, y celo al frontal del robot.
Como solo hemos montado un sencillo sensor de distancia, esta es toda la información que podemos usar y por eso la idea de movimiento autónomo
se tiene que basar en la distancia al obstáculo más cercano.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
No es la situación ideal pero nos servirá como primera aproximación. Por eso la idea que podemos aplicar, es algo así como lo siguiente.
Mientras no haya un obstáculo a menos de digamos 30 centímetros, avanzamos. Si por lo que sea la nos hemos metido en un problemas sin saber
cómo y la distancia de un obstáculo es menor de digamos 15 cm, retrocedemos. Y si el obstáculo esta entre 15 y 30 cm, lo que hacemos es girar a la
izquierda.
En todos los movimientos aplicamos un delay para asegurarnos de que el Rover se va moviendo poco a poco.
Vamos a partir del programa de la sesión anterior en la que teníamos los movimientos trabajados y simplemente cambiamos el setup de acuerdo con
el principio descrito arriba.
Tenemos que instalar la Libreria new_ping en caso de que no la tengáis instalada, y si no sabeís como hacerlo, aquí teneís el procedimiento habitual .
Veamos un poco el programa: Prog_95_0 . Empezamos con las librerías y algunas definiciones como es habitual:
#include <NewPing.h>
#include <AFMotor.h>
Los defines, corresponden a los pines que hemos elegido en el MEGA y el max_distance especifica la máxima medida que me devuelve la librería del
sonar, no tiene mucha importancia aquí. Tenemos ahora, que crear una instancia del sonar para uso del programa
Y en cuanto al setup, es de lo más simple. Definimos el pin 52 como de salida y lo ponemos en HIGH para que alimente el sonar, y ponemos un
pequeño delay para asegúranos de que la alimentación es estable
En cuanto al loop, tenemos que empezar enviando un pulso para medir la distancia:
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS)
int dist = uS / US_ROUNDTRIP_CM ;
Y ahora ya podemos pasar a decidir el movimiento de acuerdo a las reglas que mencionábamos arriba:
El resultado es bastante errático y con un comportamiento bastante extraño, como robótico en el peor sentido, y además se atasca sin que este muy
claro porque, pero como primera aproximación puede valer.
Para ser una primera prueba no está del todo mal. Seguro que podríamos imaginar algún algoritmo un poco más sofisticado que mejorase la
navegación.
Por ejemplo podríamos imaginar que el tiempo en que el robot está girando, dependa de la distancia al obstáculo detectado: Cuanto más próximo,
más tiempo gira, O que la dirección en la que gira sea aleatoria.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Otro modo de mejorar la toma de decisiones, seria incluir más sensores y basarnos en ellos para los giros. Podríamos usar un sensor de luz y
Aunque tendríamos que pensar en alguna manera de evitar que gire una vez a cada lado y siempre se dé de
frente contra el obstáculo al final.
Imaginaros que usáramos dos sensores de distancia ligeramente desviados de la dirección del movimiento. De este modo podríamos considerar que si
uno detecta un obstáculo, digamos a la derecha y el otro sensor no, la conclusión seria girar a la izquierda y viceversa.
De este modo con dos sensores de ultrasonidos, podríamos hacer giros adaptativos en función de la posición relativa de los obstáculos.
Como no tengo otro sensor disponible, me voy a quedar aquí, pero si el tema os interesa sería muy fácil de pensar en cómo darle vida propia al
movimiento autónomo. Os lo dejo como tareas pendientes y si alguno se os ocurre alguna solución ingeniosa, no dejéis de contármelo.
RESUMEN DE LA SESIÓN
Copyright Prometec
Home
Controlando El Rover Con Un Mando PS2
OBJETIVOS
Seguimos jugando con los motores de corriente continua y la controladora Motor Shield V1 de Adafruit.
Vamos a usar un controlador inalámbrico tipo PlayStation 2 para gobernar manualmente el Rover
4×4.
Mostraremos cómo detectar las pulsaciones básicas de los botones del mando .
MATERIAL REQUERIDO.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
+
Out of
13.30€ 9.00€ Stock
+ IVA IVA
ARDUINO
MEGA MOTOR SHIELD
V1
Añadir al
carrito Leer más
60.00€
Out of
Stock
+ IVA
50.00€
+ IVA
MANDO PLAY2
ROBOT SIN HILOS
ROVER 4×4
Añadir al
Leer más carrito
El control mediante Bluetooth es práctico porque siempre tenemos a mano un móvil con él, pero un poco errático y al final siempre nos deja la
Por eso, y como siempre solemos comentaros, al final, alguien tenía que venir con una solución “como Dios manda” y por eso el mercado nos
proporciona una impecable para controlar nuestros robots, motores o proyectos varios con un mando único, que a muchos nos resultará familiar: Un
mando como el de la PlayStation 2 inalámbrico.
Estos mandos se pueden conseguir por poco dinero en estos momentos (Gran cosa las bajadas de precios de todos los componentes electrónicos) y
tiene la enorme virtud de ser ergonómicos y muy cómodos de manejar, además de estar dotados de dos joysticks analógicos y como 14 botones
incluidos.
Estos mandos vienen con un receptor inalámbrico, que podemos conectar a nuestros Arduinos y usarlos para recibir las señales de control, sin
complicarnos mucho la vida, y un mando inalámbrico aparte muy similar al que habréis usado más de uno para jugar con la PS2 de Sony.
En esta sesión vamos a ver como conectar este tipo de mando inalámbrico a nuestros Arduinos y veréis que gracias a las librerías que nuevamente se
ha trabajado Mr. Bill Porter, son pero que muy fáciles de implementar y usar.
Como estamos montando un Rover 4×4 vamos a utilizar un Arduino Mega como el que venimos usando en las sesiones anteriores, para que el que
quiera pueda tener un robot funcional.
Cuando empecé a mirar en Internet la información de este tipo de mandos me pareció bastante confusa y lo que es peor me pasé un buen número
de horas tratando de hacerlo funcionar sin éxito
El problema que puede ocurrir al conectar el receptor inalámbrico a tu Duino es que lo enchufes al revés (Yo desde luego lo hice y me dio una tarea
que no veas hasta que me di cuenta) porque la información que hay en Internet es un poco oscura y hay que leer entre líneas para comprender de
que va el tema. En cuanto lo conectas bien no hay pérdida posible.
Si buscáis información en Internet, os encontrareis con que suelen describirte que es cada pin en función de
un código de colores, que quizás sea estándar con los mandos de Sony , pero que con los compatibles solo
va a servir para confundiros, así que olvidaros de los colores.
En su lugar usad este diagrama, mirando desde le frontal del receptor (Desde donde no salen cables)
Lo más cómodo es que conectéis los pines a vuestro Arduino en secuencia. En mi caso que uso un MEGA y la tabla de conexión seria así:
RECEPTOR 1 2 3 4 5 6 7 8 9
MEGA 22 24 26 28 30 32 34 36 38
Si disponéis de un pin header plano o a 90º es ideal para esto, porque dispondréis de un peine de pines que se conecta directamente a los
conectores de la Mega y el enganche es más fiable, porque están agrupados.
De nuevo, tenemos un par de pines que son GND y 5V, pero como el consumo es despreciable podemos poner en HIGH el pin 30 y en LOW el pin
28.
Aunque en la documentación dice que el pin 30 debe ser alimentado a 3.3V yo he probado con 5V sin
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
ningún problema y eso que lo he tendido encendido largo y tendido.
EL PROGRAMA DE CONTROL
Como ya es costumbre de la casa, vamos a empezar con un programa mínimo para comprobar unos pocos botones y después iremos viendo el resto
de los mandos disponibles.
Vamos a empezar incluyendo la librería y creando un controlador tipo para el manejo del mando. Prog_96_1
Después vamos a definir el setup para que nos alimente el receptor con GND y 5V.
Serial.begin(57600);
pinMode(28, OUTPUT) ; pinMode(30, OUTPUT);
digitalWrite(28, LOW); //Set Ground for remote
digitalWrite(30, HIGH); // Set 5V for remote
delay(500);
Ya habíamos usado antes este truco de alimentar algo con un pin del Arduino, pero recordar que este no debe superar los 40 mA Vamos a hora a
definir los pines que vamos a usar en la librería con la línea:
Fijaros que es aquí donde especificamos que pines vamos a usar y a que funciones del mando a distancia corresponden, por eso elegí que fueran
consecutivos (Recordad que la vagancia es muy valiosa si te ahorra trabajo inútil ), pero podéis definir los que queráis en función del modelo de
Arduino que estéis usando.
Y por último, en el setup, vamos a asegurarnos de que hay un mando disponible e imprimimos el tipo en caso afirmativo:
Después de esto, si hemos detectado correctamente el mando ya podemos pasar a controlar los botones que se pulsan, Pero antes tenemos que
salir si no hemos detectado el mando:
Vamos a hacer un pequeño programa que detecte los botones de la mano izquierda: UP, DOWN, LEFT, RIGTH.
Si volcáis este programa Prog_96_1 a vuestro Arduino, veréis que detecta con un mensaje en la consola el botón que pulsáis. Naturalmente la librería
provee variables para todos los botones disponibles en el mando mediante la función ps2x.Button().
BOTONES DE LA IZQUIERDA
BOTONES DE LA DERECHA
BOTONES TRASEROS
BOTON L1 L2 R1 R2
Los botones de la izquierda, tienen además, la curiosidad de que detectan de modo analógico la presión que ejerces en ellos con valores entre 0 y
255, mediante el comando
ps2x.Analog( Flag )
Donde Flag representa cualquiera de los valores indicados en la primera table. Por ejemplo para imprimir la intensidad con que s epulsa el botón UP,
bastaría con hacer:
Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
Como el mando nos devuelve un valor entre 0 y 255, cuando el joystick esta en reposo en la posición central, la lectura que nos da es de 127 tanto
en X como en Y. Espero que el siguiente gráfico os resulte sencillo:
Para leer los joysticks tenemos que leer independientemente la posición en X e Y de cada uno de ellos
EJE X Y X Y
Para leer los valores de los joysticks podemos usar el siguiente trozo de código:
Ahora te puede parecer muy complicado pero es una tontería ( En serio), simplemente el mando tiene tantos botones que hay que usar un montón de
flags para definir cada uno, pero siempre es lo mismo.
La librería viene con un ejemplo magnifico de uso, pero tiene el inconveniente de que muestra todas las posibilidades a la vez y puede ser un poco
avasallador, pero si vais a usar este mando desde luego os recomiendo que la echéis una ojeada.
El ejemplo es muy claro y auto expiclativa pero usa poco menos que todos los botones y comprueba
ademas si tu mando es un DUal SHock controller tipico o si por el contrarion esla guitarra del Guitar Hero,
lo que abre un monton de posibilidades con una guitarra de esas y aplicaciones musicales en Arduino.
Para aquellos que hayáis hecho el montaje como el de este ejemplo, os pongo el ejemplo corregido para que os funcione a la primera, en la que
simplemente he adaptado el ejemplo incluido a nuestros pines. Prog_96_2.
Solo nos queda ya montar un programa completo que incorpore el control de los motores y la dirección del movimiento respondiendo a las
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
pulsaciones del mando a distancia.
Vamos a empezar usando los 4 botones de la izquierda como controles simples de dirección. Para ello tenemos que incluir un par de librerías. Una
para el control de la controladora de motores y otra para el manejo del mando de la PS2: Prog_96_3
#include <AFMotor.h>
#include <PS2X_lib.h> //for v1.6
PS2X ps2x; // Creamos la clase del mando PS2
Fijaros en la línea
Aquí es donde inicializamos el controlador de la PS2 con los pines que usamos y nos aseguramos de que no haya error, para indicar que ha
encontrado un mando compatible. Y por último leemos el tipo de mando que ha encontrado, que puede ser de varios tipos, Tipo DualShock = 1 o
tipo Guitar Hero = 2.
Por último el loop es una variante del programa Prog_76_1, al que añadimos el control de los movimientos del robot que ya vimos en las sesiones
previas.
Aquí os dejo el programa completo Prog_96_3. Y un video con el resultado del robot montado y completo
Os presentamos las librerías PSX para el control de los mandos de Sony DualShock y Guitar Hero.
Vimos el modo de vincular estos mandos a nuestros proyectos y la forma de reconocer por programa las
pulsaciones realizadas.
Copyright Prometec
OBJETIVOS
Seguimos jugando con los motores de corriente continua y la controladora Motor Shield V1 de Adafruit.
Mostraremos una aplicación Android para poder controlar el Rover mediante bluetooth
MATERIAL REQUERIDO.
+ IVA IVA
ARDUINO
MEGA MOTOR SHIELD
V1
Añadir al
carrito Leer más
+ IVA
ROBOT LEVEL
ROVER 4×4 CONVERTER
3.3V 5V
Leer más
Añadir al
carrito
MODULO
BLUETOOTH
HC-05
Añadir al
carrito
INTRODUCCION
Hemos dedicado varios tutoriales al Rover 4×4 ya en nuestra página, en concreto los tutoriales:
Y ya que nos pasamos todo el día enganchados al móvil y que cada vez la tendencia es usarlo para todo, creemos que faltaba un tutorial con el que
pudiéramos manejarlo directamente con nuestro smartphone o nuestra tablet.
En las sesiones previas hemos visto los conceptos básicos de los motores CC y cómo usar una controladora tipo Motor Shield, para gobernar varios
motores simultáneamente, también hemos hablado de cómo gobernar el giro con tracción independiente a las cuatro ruedas controlando de forma
diferencial la velocidad de giro de las ruedas.
Toda la teoría está ya en los tutoriales previos, así que si no los habéis visto aún o se os ha olvidado un poco podéis repasarlos y refrescar
conceptos.
Lo único que añadiremos es un pequeño módulo bluetooth, en este caso el HC-05, un conversor de voltaje de 5V a 3.3V para el módulo y un
powerbank, como el que usamos para cargar el móvil, con el que alimentaremos nuestro Arduino Mega.
DIAGRAMA DE CONEXIÓN
La conexión del circuito es realmente simple, sólo tenemos que pinchar el Motor Shield v1 al Arduino Mega (fijaos en que el pin 0 del Motor Shield
coincida con el RX0 del Arduino Mega y que el A5 del Motor Shield coincida con el A5 del Arduino Mega), los cables para la transmisión y recepción
de datos, RX y TX, y la alimentación del módulo bluetooth.
El esquema Fritzing del Motor Shield es diferente del que vamos a utilizar, pero lamentándolo mucho no está disponible así que usamos este otro
porque ocupa los mismos pines aunque la disposición de los componentes en el shield sea algo diferente. Luego explicaremos como realizar las
conexiones basándonos en una fotografía.
Como pasa en muchos módulos vamos a usar un conversor de voltaje para alimentar el bluetooth con 3.3 V en lugar de los 5V que da la salida de
los pines de Arduino. En nuestro caso es un YP-6, pero hay un montón de ellos disponibles. Conectamos los cables del Arduino a los pines Vin y
GND del conversor y los Vout y GND a nuestro módulo bluetooth.
En cuanto a la conexión de los motores hay que tener en cuenta que están numerados del M1 al M4, girando en el sentido contrario a las agujas del
reloj, siendo el M1 y el M2 los motores de las ruedas delanteras y M3 y M4 los de las ruedas traseras. Siguiendo el código de colores el rojo es para
el positivo y el negro para el negativo, GND. Como usamos 6 pilas AA de 1,5 V estaremos alimentando los motores con 9V en total y el Motor Shield
se encargará de repartir la alimentación individualmente a cada motor.
Hay que fijarse en el cuadrado amarillo de la derecha en el que están serigrafiadas las letras PWR, Power o potencia, es muy importante. En el
cuadrado podemos observar un par de pines que pueden ser unidos mediante un jumper. Si el jumper estuviera uniendo los dos pines significaría que
estaríamos usando la misma alimentación de los motores para alimentar también a nuestro Arduino Mega, lo cual es una mala idea porque le
estamos proporcionando 9V cuando nuestro Arduino sólo necesita 5V. Aparte de posibles comportamientos erráticos podríamos correr el riesgo de
freír a nuestro Arduino Mega por lo que dejaremos los pines al aire, indicando que usaremos alimentación independiente a través del puerto USB del
En el cuadrado amarillo de la izquierda vemos también serigrafiadas las letras EXT_PWR ( External Power , alimentación externa) y +M (Alimentación
positiva de los motores), GND. En este conector es donde deberemos conectar los cables de alimentación de nuestro portapilas.
Sólo nos queda conectar el powerbank mediante un cable USB A-B, como el de las impresoras, a nuestro Arduino para poder alimentarlo. Es una
solución bastante económica, versátil, fácil de recargar y que no pesa demasiado para poder ser usado en proyectos en los que queramos mover
nuestros Arduinos sin tener que usar baterías más pesadas, de ácido y plomo, por ejemplo.
¡Voilá! Ya tenemos listo nuestro Rover bluetooth para cargar nuestro programa.
Como vamos a utilizar el Motor Shield, lo primero que debemos hacer es importar la librería que nos permita utilizarlo:
#include <AFMotor.h>
Ahora lo siguiente es definir cada uno de los motores que queremos controlar:
Acto seguido definimos la velocidad y la proporción de giro que usaremos para gobernar los motores:
Vamos ahora con la función setup(), en la que definimos el pin 49 del Arduino Mega como salida (con el que alimentaremos nuestro módulo
bluetooth HC-05) para después activarlo. Lo único que queda es activar la comunicación serie del puerto 1 del Arduino Mega estableciendo una
velocidad de 38400 bps, que es la velocidad por defecto en los módulos bluetooth.
Dentro de la función loop(), lo que hacemos es comprobar si existen datos disponibles a través del puerto serie 1 utilizando la función available(),
Serial1.available(). Si existe algún dato disponible definimos una variable de tipo char que almacene su valor y después analizamos la cadena usando
la función analizarCadena(c).
void loop()
{
if (Serial1.available()){
char c;
c = Serial1.read();
analizarCadena(c);
}
}
Aquí empieza la parte interesante, la función analizarCadena(). Esta función recibe como entrada el dato que el Arduino Mega recibe del módulo
bluetooth, char c, es decir, un dato de tipo caracter. Lo que debemos hacer es analizarlo para saber qué órdenes debemos mandar a los motores.
Usamos una triquiñuela para pasar de un tipo char a un tipo string, definiendo una cadena vacía, String s=””, y después concatenándola con el
caracter recibido para formar una cadena con el dato que hemos recibido a través del bluetooth. Este ejemplo es muy sencillo y no haría falta, pero
dependiendo de la cadena que recibáis podría venir muy bien poder usar las funciones disponibles para el manejo de cadenas.
En nuestro caso hemos usado una app gratuita que se llama Bluetooth Electronics y que además permite modificar el panel de control para
controlar el módulo bluetooth. Tampoco sería necesario en nuestro caso ya que lo único que vamos a usar es lo que en el programa llama pad para
manejar el Rover en 9 direcciones, pero puede ser interesante para futuros proyectos.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Si usáis otro programa para manejar el Rover debéis averiguar qué es lo que manda el programa al Arduino a través del módulo bluetooth para poder
mandar las órdenes a los motores.
La modificación que habría que realizar para ver qué es lo que manda es mínima. Habría que incluir estas instrucciones dentro de la función setup()
para inicializar el puerto serie y ver la salida en el monitor de la consola serie:
Serial.begin(9600);
Serial.println("A la espera de ordenes");
Serial.println("----------------------");
Serial.println("");
Y después dentro de la función loop() añadir una instrucción para ver qué es lo que recibimos, la instrucción Serial.write(c):
void loop()
{
if (Serial1.available()){
char c;
c = Serial1.read();
Serial.write(c);
analizarCadena(c);
}
}
De esta manera ya sabríamos que es lo que manda la aplicación cada vez que pulsamos una tecla y podemos programar la respuesta desde el
programa de Arduino.
Lo bueno de este programa es que se pueden editar los valores que queremos que mande cuando pulsemos las teclas. Lo veremos más adelante
cuando echemos un vistazo a cómo funciona el programa.
Utilizamos un bucle if múltiple con las diferentes opciones y analizamos la cadena usando la función startsWith(), es decir, empieza por. Según el
valor que obtengamos le damos las órdenes correspondientes al Rover.
giroIzquierda();
}
else if(s.startsWith("8")){
// Adelante a la Izquierda
Avance();
giroIzquierda();
}
else if(s.startsWith("0")){
// Frena
Paro();
}
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
}
Lo único que queda ya es introducir las funciones que gobiernan el avance, retroceso, giro, freno o control de velocidad de los motores.
void Avance()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void Retroceso()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(BACKWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void Paro()
{
Motor1.run(RELEASE);
Motor2.run(RELEASE);
Motor3.run(RELEASE);
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Motor3.run(RELEASE);
Motor4.run(RELEASE);
}
void giroIzquierda()
{
int v = Vel * P ;
SetVel( v, Vel, v, Vel) ;
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void giroDerecha()
{
int v = Vel * P ;
SetVel( Vel, v, Vel, v) ;
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void RetrocesoDerecha()
{
int v = Vel * P ;
SetVel( v, Vel, v, Vel) ;
Motor1.run(BACKWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void RetrocesoIzquierda()
{
int v = Vel * P ;
SetVel( Vel, v, Vel, v) ;
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
SetVel( Vel, v, Vel, v) ;
Motor1.run(BACKWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
LA APP BLUETOOTH
Hemos estado probando distintas aplicaciones y esta es bastante sencilla de utilizar, aunque el panel de control nos va a quedar un poco viudo…
sólo un pad con las nueve direcciones. Pero dicen que la belleza reside en la simplicidad así que vamos allá con la aplicación.
Lo primero que debemos hacer es conectarnos a Google Play y buscar Bluetooth Electronics.
En la siguiente pantalla tenemos una serie de paneles con los que poder trastear. Algunos vienen ya predefinidos, pero a través del botón Edit,
editar, podremos modificarlos a nuestro antojo.
Nos moveremos hasta la opción Pads y seleccionaremos el segundo por la izquierda. Usando el dedo seleccionamos el control, lo arrastramos y lo
soltamos dentro de la zona de despliegue del panel. Hay mucho sitio y no vamos a usar ningún otro, así que podéis ponerlo donde queráis, aunque
convendría centrarlo un poco.
La cadena de freno es la que llama “Release String”, es decir, el valor que manda cuando dejamos de pulsar una tecla.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Después tenemos dos opciones:
Mandar continuamente la cadena mientras tengamos la tecla pulsada, “Send Continuously while pressed”. Si seleccionáramos esta opción
también podríamos definir cada cuantos milisegundos queremos que se mande la cadena, dentro de la casilla “Repeat every (ms)”.
Nosotros dejaremos seleccionada la opción que viene por defecto, “Send on Change”, para que sólo mande la cadena cada vez que cambie la tecla
que esté pulsada.
Como algo opcional, podríamos añadir a la cadena algún caracter de inicialización o finalización dentro de las casillas “Start with” o “End with”,
respectivamente, aunque no lo vemos necesario.
Ya sólo tenemos que darle al botón regresar para volver a la pantalla anterior pero esta vez, seleccionaremos el panel 9 y pulsaremos el botón Run,
ejecutar.
Ahora viene la mejor parte, ya podemos utilizar el mando y empezar a juguetear con nuestro Rover, al menos hasta que se acaben las pilas.
Iremos haciendo más cosas con el Rover pero no está mal para ir abriendo boca.
Nota:
Esta es la versión 2.0 del programa que soporta la opción de un control deslizante para modificar la velocidad: bt_rover_v2
RESUMEN DE LA SESIÓN
Hemos visto cómo manejar nuestro Rover mediante bluetooth a través de nuestro móvil o tablet.
Hemos aprendido cómo usar una aplicación Android para controlar el Rover desde nuestro móvil o tablet
mediante bluetooth.
Hemos aprendido un nuevo uso para el powerbank de nuestro móvil, alimentar a nuestro Arduino.
Anterior Siguiente
(27) Comments
En mi caso tuve problemas al alimentar el módulo Bluetooth HC-05 desde el pin 49: enlazaba, pero no recibía los
comandos. Se solucionó conectando el módulo a los 5V que proporciona la MEGA en los pines de la esquina que están
entre el Pin 21 y el Pin 22. No necesité usar ningún divisor de tensión o conversor de voltaje con mi módulo. Tras esto
se puede eliminar las líneas:
pinMode(49, OUTPUT); // this pin will pull the HC-05 pin 9 (key pin) HIGH to switch module to AT mode
Reply
Reply
Reply
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Pável 02 Abr 2017
Hola, por alguna razón al subir el programa, marca error con el siguiente mensaje, “analizarCadena” was not declared in
this scope; por lo tanto cúal es la solución?
Reply
Reply
Reply Puedes encontrar toda la operativa del robot sin problems en nuestros tutoriales y la unica parate un poco distinta es
lo referente al NRF24L01. Pero es bastante pareceido a los ejemplos que hemos hecho en la pagina con este modulo,
ya que el joystic shield simplemente te brinda una plataforma comoda para montar el modulo RF y puedes seguir los
pasos del tutorial de nuestra web
Reply
De todas formas tienes un grupo de sesiones dedicadas por completo el bluetooth. Te dejo el enlace:
https://www.prometec.net/indice-bluetooth/
Un saludote!
Reply
Si tienes alguna duda sobre cómo funciona la nueva función analizarCadena() sólo tienes que decirlo.
void loop()
{
analizarCadena();
// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available())
Serial1.write(Serial.read());
}
void analizarCadena(){
if (Serial1.available()){
char c;
String s="";
c = Serial1.read();
s += c;
if(s.startsWith("S")){
// Modificamos la velocidad
long velocidad;
velocidad = Serial1.parseInt();
Vel = (int) velocidad;
return;
}
else if (s.toInt()>0 && s.toInt()<9){
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
int m = s.toInt();
switch(m){
case 1:
Serial.println("Arriba");
Avance();
break;
case 5:
Serial.println("Arriba a la Derecha");
Avance();
giroDerecha();
break;
case 2:
Serial.println("Derecha");
giroDerecha();
break;
case 6:
Serial.println("Abajo a la Derecha");
RetrocesoIzquierda();
break;
case 3:
Serial.println("Abajo");
Retroceso();
break;
case 7:
Serial.println("Abajo a la Izquierda");
RetrocesoDerecha();
break;
case 4:
Serial.println("Izquierda");
giroIzquierda();
break;
case 8:
Serial.println("Arriba a la Izquierda");
Avance();
giroIzquierda();
break;
case 0:
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
case 0:
Serial.println("Echa el freno");
Paro();
break;
}
}
}
Un saludo
Reply
Un saludo
Reply
Reply
El Powerbank lo usamos para alimentar las placas mientras que con el portapilas lo que alimentamos son los motores.
Un saludo.
Message
URL
Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield
Copyright Prometec
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO
Home
Conociendo Los Servos
OBJETIVOS
Que es un servo.
La función map().
Una Potenciómetro.
QUE ES UN SERVO
Normalmente los motores habituales lo que hacen es transformar la energía eléctrica ( O química ) en un giro continuo que podemos usar para
desarrollar trabajo mecánico.
En la sesión 13 utilizamos un pequeño motor de corriente continua y regulamos la velocidad de giro mediante una señal PWM de Arduino.
Los servos son también motores de corriente continua, pero en lugar de diseñarse para obtener un giro continuo que podamos aprovechar ( para
mover una rueda por ejemplo), se diseñan para que se muevan un angulo fijo en respuesta a una señal de control, y se mantengan fijos en esa
posición.
Estos servos o servomotores son muy frecuentes en Aero modelismo y en robótica, por la capacidad que presentan para moverse a un ángulo
concreto y mantenerse allí. De hecho se suelen diseñar para que giren un ángulo proporcional a una señal PWM, de forma que su control es muy
preciso. Un servo suele estar formado por:
Un motor de CC.
Un circuito de control
Habitualmente los servos tiene un margen de operación, es decir, pueden moverse entre 0º y ángulo dado, que suele ser de 180º, pero existen
modelos comerciales de todas la características imaginables (incluyendo servos de 360º ).
Normalmente estos pequeños servos funcionan sobre 5V y el control se realiza mediante una señal de control PWM, en la que el ancho el pulso
indica el ángulo que deseamos adopte el eje.
Un servo tiene un conector de 3 hilos, 5V ( rojo), GND ( negro o marrón) y el otro Control ( amarillo o blanco) .
Podríamos escribir un pequeño programa en Arduino que controle estos pulsos y los relacione con el ángulo buscado, pero antes de que nadie se
asuste, los servos (y otras cosas) son tan habituales, que ya ha habido gente que han escrito estos programas y los han puesto a nuestra disposición.
De este modo podemos manejar un servo sin preocuparnos para nada de cómo realizar el control de las señales, o de la operación interna, basta con
instalar estos programas en una forma especial llamada librería.
La ventaja de trabajar con una plataforma tan bien establecida como Arduino, es que hay cantidad de gente en el mundo desarrollando librerías, casi
para cualquier cosa que podáis imaginar.
Veréis que en las próximas sesiones vamos a utilizar librerías para cantidad de cosas, pero hoy vamos a comenzar con la primera, la librería servo.
Servo es una librería estándar en Arduino. Eso quiere decir que viene incluida cuando instaláis el IDE, a diferencia de otras librerías que debemos
buscar, descargar de Internet e instalar para poder usarlas.
Para usar una librería estándar, basta con pedirle al IDE que la incluya en nuestro programa. Id al menú Programa \ Importar Librería y os saldrá un
desplegable con todas las librerías que tenéis instaladas en el IDE.
Por ahora solo nos interesa la librería Servo. Pinchad en ella. Arduino incluirá una línea al principio de vuestro programa como esta:
#include <Servo.h>
Como es vuestra primera librería, y nosotros ya nos hemos leído el manual, vamos a llevaros de la mano.
Veréis que es de lo más fácil.
Vamos a montar un circuito en el que hagamos moverse al servo de forma controlada, e iremos viendo las instrucciones necesarias.
Vamos a conectar el servo primero a GND y 5V y luego el pin de control, a un pin de Arduino que permita PWM (Recordad esto o de lo contrario os
costara ver el problema). Recordad que es el ancho el pulso lo que controla el ángulo.
Vamos a empezar con una línea que ya conocíamos el include y otra nueva:
Para poder utilizar la librería debemos crear, lo que se conoce como un objeto tipo Servo que llamamos servo1.
C++ es un lenguaje orientado a objetos, esto significa que podemos definir objetos tipo (como servos) sin más que declarar un nuevo objeto del tipo
que deseamos. En la jerga de la programación se llama crear una instancia, o instanciar un nuevo objeto.
Así, esa segunda línea significa que vamos a crear una nueva instancia de tipo Servo que llamamos servo1.
Aunque ahora os pueda parecer una forma extraña de hacer las cosas, la programación orientada a objetos
(OOP por sus siglas en inglés), es una de las metodologías más potentes de las ciencias de computación
actuales y todos los lenguajes de programación que se precien, han incorporado las ideas de la OOP.
Entrar en la teoría del OOP, desborda con mucho las pretensiones de este humilde tutorial de Arduino, por
ahora nos limitaremos a mostraros como usar los objetos.
Una vez creada la instancia del objeto ( y podemos crear tantas como necesitemos, para manejar varios servos a la vez ) tenemos que incluir una línea
en la función setup() para informar a C++ que vamos a conectar ese objeto abstracto que todavía es servo1 a un pin físico del Arduino para
controlarlo. En nuestro caso el pin 9:
servo1.attach(9);
Una vez cumplido el trámite para gobernar la posición del servo recurrimos a
servo1.write( angulo);
Vamos a escribir un programa que vaya barriendo un Angulo en grados y moviendo el servo a esa posición.
void setup()
{
servo1.attach(9) ; // Conectar servo1 al pin 9
}
void loop()
{
for(angulo = 0; angulo <= 180; angulo += 1) //incrementa angulo 1 grado
{
servo1.write(angulo);
delay(25);
}
for(angulo = 180; angulo >=0; angulo -=1 ) //decrementa angulo 1 grado
{
servo1.write( angulo );
delay(25);
}
}
Veréis como el servo se va moviendo primero hacia adelante y luego retrocede para volver a empezar.
Vamos ahora a hacer que el valor del potenciómetro represente la posición del servo de manera que el servo se mueva siguiendo al potenciómetro.
Para ello hay que entender que el valor que leamos en la puerta A0 está comprendido entre 0 y 1024, y que estos valores tienen que distribuirse entre
0 y 180º. Así que para calcular el Angulo correspondiente basta con hacer:
Traducido quiere decir: Haz la proporción de los valores que leas en A0, entre 0 y 1024, en un valor comprendido entre 0 y 180 y asignale ese valor al
ángulo. //Prog_16_2
void setup()
{
servo1.attach(9) ; // Conectar servo1 al pin 9
}
void loop()
{
angulo = map( analogRead(A0), 0, 1024, 0, 180);
servo1.write(angulo);
delay(250);
}
Hemos presentado los servos y hemos vista una par de programas sencillos para usarlos.
Hemos introducido algún concepto básico de programación orientada a objetos para que podáis utilizar
las librerías.
Hemos definido las librerías como conjuntos de funciones y objetos que podemos utilizar sin
preocuparnos de cómo funcionan internamente.
Las librerías son un sistema excepcional de utilizar elementos electrónicos sin tener que entrar en los
Anterior Siguiente
(99) Comments
Reply
Reply Donde puedo encontrar informacion del consumo electrico del servo, cuando no esta funcionando? Lo quiero usar como
apagador para un rele, y asi reducir el consumo electrico de un sistema de riego que funcione solo con baterias. De
antemano gracias.
GIVE A REPLY
Message
Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield
Copyright Prometec
Home
Circuito Con Joystick Y Servo
OBJETIVOS
Leyendo el joystick.
MATERIAL REQUERIDO.
Un Joystick.
Un Servo con sus horns, esas pequeñas piezas de plástico que se ponen en el eje.
Un joystick suele estar formado por dos potenciómetros a 90º que transforman el movimiento en X e Y del mando en una señal eléctrica proporcional
a su posición y que además suele incluir un botón.
En realidad ya usamos todos estos componentes previamente y la única curiosidad del joystick es que resulta un elemento muy cómodo para
posicionar algo, aunque no sea demasiado preciso.
Vamos a montar un circuito con un servo como en la sesión previa y usaremos uno de los ejes del joystick para posicionar un servo, y si pulsamos el
botón encendemos un LED. (Ignoraremos el otro eje Y, aunque podríamos usarlo para posicionar un segundo servo).
El pin correspondiente al botón suele venir marcado como SW de Switch.
void setup()
{
servo1.attach(6) ; // Conectar servo1 al pin 6
pinMode( boton, INPUT_PULLUP) ;
}
void loop()
{
angulo = map( analogRead(A1), 0, 1024, 0, 180);
servo1.write(angulo);
if ( ! digitalRead(boton))
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
delay(250) ;
}
La parte que corresponde al servo es exactamente lo mismo que en la sesión 16. Por lo demás hemos
incluido unas definiciones al principio indicando que hemos conectado el eje X a la entrada analógica A1 y el
eje Y a la entrada A2.
El pulsador está conectado al pin digital 4 y el LED al 12, de forma que si queremos cambiar de pines, por la
razón que sea, bastara con actualizar esta lista al principio del programa.
Insistir en que hemos definido la entrada correspondiente al boto del joystick como INPUT_PULLUP y no como INPUT, porque de este modo no
necesitamos incluir una resistencia, sino que Arduino conecta un pullup internamente
Pero hay algo de epiléptico en el movimiento del servo (y más con uno barato como éste que estoy usando). Recibe muchas interferencias y el
movimiento es muy convulso, porque, aún si el servo tuviera una cierta precisión (lo que es una suposición entre optimista y muy optimista) los
potenciómetros y los convertidores analógicos a digital siempre tienen un margen de ruido.
Seguro que se nos puede ocurrir una forma de mejorar ese movimiento. Pensadlo, ¿Que podemos hacer para filtrar ese ruido?
Vale. En el mundo real, las cosas no son nunca blancas o negras, sino más bien en tonos grises (o muy frecuentemente chocolates), por eso no es
buena idea enviar las lecturas directamente al control el servo, o de lo que sea que estamos moviendo.
Vamos a leer el potenciómetro para decidir si subimos o bajamos el valor del Angulo. No para calcular Angulo directamente.
Como el potenciómetro nos da valores entre 0 y 10000, cuando está centrado o suelto, leerá sobre 500, poco más o menos (aunque bailará). Así que
le vamos a dar un margen de tolerancia. Solo aumentaremos el Angulo, un valor dado, si la lectura del potenciómetro sobrepasa el valor de 600 y lo
disminuiremos cuando baje de 400.
De este modo pequeñas oscilaciones alrededor del punto medio, no nos afectarán. Es decir las hemos filtrado. Esto reflejado en el programa, podría
ser algo así: Prog_17_2
void setup()
{
servo1.attach(6) ; // Conectar servo1 al pin 6
pinMode( boton, INPUT_PULLUP) ;
}
void loop()
{
int p = analogRead(A1);
if ( p < 400 ) // Si la lectura es menor de 400
angulo = angulo - salto ; // disminuimos el angulo
else if (p>600) // Si mayor de 600
angulo = angulo + salto ; // Aumentamos el angulo
servo1.write(angulo); // Y este es el que mueve el servo
delay (50); // Este delay regula la velocidad del movimiento
}
Creo que comprobareis que el movimiento es más fluido y uniforme, y que prácticamente elimina las convulsiones del servo. Además usamos este
método para dejar clavado al servo en la posición que nos interesa (Aunque soltemos el mando), algo que del otro modo sería imposible.
Hemos visto que un joystick son dos potenciómetros a 90º mas un pulsador, ambos normales y
corrientes.
Aprovechamos el montaje anterior para mover el servo con el joystick y mapear su valor entre 0 y 180º
Hemos introducido el concepto de filtrado de señales, que de por si es una rama específica de la
electrónica y la computación, y una, que cada día es mas importante en todos los ámbitos de
la tecnología.
(88) Comments
Reply
Reply
Reply
Reply
GIVE A REPLY
Message
Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield
Copyright Prometec
Home
Motores Paso A Paso
OBJETIVOS
Ver las carcateristicas que los definen y porque son diferentes delos servos o motores CC normales.
MATERIAL REQUERIDO.
MATERIAL REQUERIDO.
En sesiones previas hemos ido jugando con motores de corriente continua y también con motores Servos. Cada uno de ellos tiene su utilidad,
dependiendo de lo que queramos, pero imagínate que queremos mover con una cierta precisión los dos ejes de una impresora de chorro de tinta.
Un servo no será adecuado porque tiende a fijar una posición y quedarse allí y el problema de los motores de corriente continua es que cuando le das
una orden resulta complicado saber cuánto se ha movido exactamente, porque no tenemos en principio ningún mecanismo de realimentación que nos
informe.
Suponte que medimos exactamente la alimentación de 1 segundo a uno de esos motores… ¿Pero cómo saber cuántas revoluciones o fracciones de
revolución ha dado en ese tiempo?
Podemos incluir un sistema de realimentación como un sensor de efecto Hall y un pequeño imán en la rueda, o un disco transparente con múltiples
marcas en el borde, de modo que una foto sensor detecte el número de marcas que han pasado por delante de él.
.
Pero aun así, tendremos información de que nos hemos pasado o no pero no será fácil corregir la posición. Necesitamos un sistema de controlar con
precisión el movimiento de un motor eléctrico y aquí es donde aparecen los motores pasos a paso o stepper motors.
Un motor paso a paso es parecido a los motores de continua que vimos antes, pero en lugar de montar un sistema de asegurarnos de que siempre
hay una bobina fuera del equilibrio, en un motor paso a paso montamos un sistema de varias bobinas que garantizan que solo se mueve la distancia
(O paso) entre las bobinas contiguas.
Pues menudo asco de motor ¿O sea que solo se mueve un paso? Y entonces ¿Cómo hago para que gire de forma continuada?
Simplemente controlando cuidadosamente la alimentación de los grupos bobinas que fuerzan el movimiento de un paso y la secuencia en la que
alimentamos las bobinas.
De alguna manera hemos convertido en digital el movimiento del motor, ya que controlamos el movimiento que puede hacer,saltando entre
posiciones discretas, dando pulsos a las bobinas contiguas cuando queremos mantener el giro. Veamos un ejemplo con una ilustración sacada de la
Wikipedia:
Aquí se puede controlar con precisión el movimiento del motor porque lo diseñamos para eso, y
para que se mueva a medida que nosotros vamos alimentando en secuencia las bobinas
correspondientes y si dejamos de hacerlo, el motor se para fulminantemente y sabemos a ciencia
cierta donde está.
Controlarlos es un poco más difícil que controlar un motor CC normal, porque para moverlo no
basta con dar tension y olvidarnos, si no que hay que secuenciar la excitación de las bobinas en
un orden preciso y en un tiempo preciso (Para poder controlar la velocidad) , pero ¿Y eso que
importa? Nuestros Arduinos son geniales para hacer este tipo de control en modo automático.
Podemos posicionar uno de estos motores con mucha precisión con un sencillo control digital.
Son ideales para robots y demás, porque se puede sincronizar su movimiento velocidad y aceleración, con
gran facilidad (Y un poco de cálculo)
Máximo par motor a bajas velocidades. Porque están diseñados para eso, en cambio un motor CC normal
tiene muy poco par a baja revoluciones.
Para mantener el motor clavado en una posición hay que mantener excitada al menos una de las bobinas, lo
que nos coloca en la absurda situación de que consume en parado tanto o más que en marcha.
Normalmente están diseñados para que el par motor sea máximo a baja velocidad y eso hace que a gran
velocidad el par no sea especialmente bueno.
A diferencia de los servos, los motores paso a paso no tiene un modo de saber dónde está cuando arrancas
por ejemplo, y eso supone que solemos necesitar con ellos algún tipo de fin de carrera para saber dónde
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
está el cero o el tope, aunque luego el posicionamiento es perfecto.
Si normalmente el mercado ofrece electrónica especializada para cualquier necesidad que se os pueda ocurrir, en el caso de los motores paso a paso
la situación es inabarcable, y hay modelos para miles opciones necesidades y configuraciones.
Por eso vamos a centrarnos en unas pocas características para empezar y ya iremos viendo más adelante como evoluciona la cosa.
Par motor o torque: Es lo que os define la capacidad del motor para mover objetos.
Normalmente se expresa en kilogramos por centímetro. Cuanto mayor más potente el motor.
Tensión de alimentación del motor, y resistencia de las bobinas. Lo que nos indica la
Intensidad de la corriente que absorbe en carga.
Pasos por vuelta. Cuanto más, mejor precisión tiene el posicionamiento del motor y se suele
medir como numero de pasos por vuelta o por un Angulo que equivale a 360º de una vuelta
dividido por el número de pasos.
Por supuesto, los que venís a por nota, os habréis dado cuenta de que si queremos aumentar la precisión del posicionado, tenemos que aumentar el
número de bobinas que incluye el motor y esto es caro, así que en general se suelen utilizar reductoras mecánicas que mejoran la precisión por poca
tela.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Si tienes un motor de pasos de digamos 4 bobinas, una vuelta completa serian 4 pasos, pero con una reductora de 16:1 se convertiría en un motor de
16 x 4 = 64 pasos para alcanzar la vuelta completa.
Además el par motor aumenta considerablemente, pero a cambio la velocidad disminuye, y por eso en la práctica hay que revisar tanto el par como
la relación de la reductora, dependiendo de tus necesidades.
Lo mismo que con los motores de corriente continua típicos, el problema viene cuando queremos cambiar la dirección de giro (Ya que un motor que
solo avanza no suele ser demasiado útil)
¿Cómo podemos hacer para invertir el sentido de giro de uno de estos motores? Fíjate en la siguiente imagen:
El caso de la izquierda o Motor Bipolar solo tiene un par de espiras ( Normalmente dos pares de espiras conectadas) , lo que requiere invertir la
dirección de la corriente para invertir la dirección de giro, pero esto es algo que no podemos hacer con Arduino sin electrónica externa, es decir un
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
H-Bridge que ya vimos.
El caso de la derecha tiene las espiras partidas y conectadas por la mitad, lo que nos permite gobernar la dirección del motor sin necesidad de un H-
Bridge, simplemente usando la pata central como GND y alimentar uno u otro extremo con diferentes salidas de nuestro Arduino y un par de
transistores. A estos motores se les llama unipolares.
Por norma general, la mayoría de motores paso a paso que usaremos con Arduinos serán bipolares y son bastante típicos los Nema 17. Son motores
de 3,2 Kg / cm, o sea con fuerza, y son los que encontraréis por ejemplo en las impresoras 3D típicas, las Reprap. Pero en esta sesión vamos a usar
un motor de pasos mucho más modesto de 5 hilos y 4 fases, y que viene incluido en el kit de inicio
Pues depende. Básicamente depende de como se configuren los devanados y cada forma tiene sus propias ventajas en inconvenientes.
CONFIGURACION COMENTARIOS
Podemos convertirlo en uno de 5 hilos uniendo las patas centrales de cada espira
Las diferentes configuraciones nos permiten hacer un móntatelo tú mismo, en función de que busquemos más par motor, o más velocidad o menos
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
resistencia o…. lo que se te ocurra.
Para este tutorial, vamos a usar un pequeño motor unipolar BYJ48, que viene incluido en el kit de inicio
prometec.net.
Veamos como manejarlo, con unos graficos magnificos que he pillado en la pagina de Todorobots
Si nombramos los hilos a la manera del grafico de la izquierda, entonces la secuencia para hacer girar el motor es
como sigue:
1 ON ON OFF OFF
2 OFF ON ON OFF
4 ON OFF OFF ON
Es la secuencia que recomienda el fabricante, porque al haber siempre dos bobinas activas tenemos un par motor (Torque) importante para avanzar y
para mantener la posición.
Pero también podríamos activar solo una bobina cada vez de esta manera:
El consumo es menor, ya que solo se activa un devanado cada vez, pero también disminuye el par por el mismo motivo. Y por ultimo podríamos
hacer un mix:
2 ON ON OFF OFF
4 OFF ON ON OFF
8 ON OFF OFF ON
Donde vamos jugando con excitar una o dos bobinas para tener un movimiento mas suave y de mas pasos, con un resultado similar a esto:
RESUMEN DE LA SESIÓN
Hemos presentado los motores paso a paso, que aun sinedo de CC son diferenetes de los servos y de los
motores de giro continuo.
Vimos como funcionan y como se diseñan para moverse solo cuando se lo ordenadmos con un pulso, y
como retienen su posición mientras estén alimentados.
Vimos que hay varios tipos y hablamos de los Unipolares y los Bipolares
Anterior Siguiente
Home
Motores Paso A Paso: 28BYJ-48
OBJETIVOS
MATERIAL REQUERIDO.
ARDUINO PROTOBOARD
UNO REV 3 830 PINES320.
Añadir al Añadir al
carrito carrito
CABLES
DUPONT MOTOR
HEMBRA- STEPPER 4
HEMBRA FASES 5V
Añadir al Añadir al
carrito carrito
En la sesión anterior dimos un pequeño repaso a la teoría que hay detrás de los motores paso a paso e intentamos sentar las cuatro ideas
importantes que debéis conocer para elegir y usar con éxito, uno de esto motores.
En esta sesión, vamos a usar un pequeño motor paso a paso unipolar, muy común en el mundo Arduino por su pequeño tamaño y bajo coste, el
28BYJ-48 y el adaptador que suele venir con él, basado en el chip ULN2003A.
Y poco más que decir en esta pequeña introducción. Vamos pues, a meternos directamente en harina.
Este pequeño motor es muy habitual en los proyectos con pequeños robots y posicionadores caseros sencillos, porque aunque no es demasiado
potente, ni rápido tiene varias características más que simpáticas, además de ser muy barato (Unos pocos euros ).
Y como no podía ser de otra manera, empezaremos por buscar su manual ( Va que sí, que vosotros podéis encontrarlo en Internet ).
4 Fases.
Resistencia 50 Ω.
Reductora de 1 / 64 .
Sé que parece confuso. Hay 4 bobinas, si las excitamos de una en una tenemos 4 pasos x
64=256 pasos por vuelta. Pero también podemos excitar la bobina mediante medios pasos,
como veíamos en las tablas de la sesión previa (que es el ejemplo que vamos a hacer) y por
eso a medios pasos una vuelta son 8 * 64 = 512 impulsos
Además si no recuerdo mal de mis lejanos días de universidad, un par de 0,34 Kg por cm, significa que con una polea de un 1cm de diámetro
colocado en el eje, este pequeño motor levantaría un peso de 350 gramos contra la gravedad, lo que no está mal.
Este es su diagrama de conexión de bobinas, y además marca los colores del cable en función de su conexión interna. El motor presenta un conector
al extremo en el que podemos pinchar cables de protoboard si hay que moverlo directamente, o bien para conectarlo a su adaptador.
Fijaros que su consumo es muy bajo, de unos 55 mA, dentro del rango que nuestro USB proporciona a Arduino ( Siempre que no intentemos
alimentarlo con un pin) y lo alimentaremos mediante la breakboard típica que le acompaña, que suele usar un integrado del tipo ULN2003A que es
un array de transistores Darlington, que soporta hasta 500 mA y que ya dispone de un conector para el motor y de unos pines (IN1 – IN4) para
conectar a nuestro Arduino.
La ventaja de este esquema es que aumenta mucho la ganancia del transistor resultante y además permite
la conducción de grandes corrientes y tensiones.
Hemos usado uno de estos transistores para alimentar una tira Ed LEDS aquí.
Pues usando la breakboard no tiene mucho mérito. Conectad el motor primero a su conector, que tiene una posición para impedir que lo coloques al
revés y después vamos a colocar las 4 fases a nuestro Arduino de modo que podamos excitarlas de forma independiente.
No merece la pena montar un esquema de protoboard para esto. Para conectar vuestro Arduino usad la siguiente tabla:
ARDUINO 12 11 10 9
Conectad GND y Vcc a los pines correspondientes del adaptador y eso es todo ( Gran ventaja cuando usas módulos a medida ) vamos con el
programa.
EL PROGRAMA DE CONTROL
Mientras que los motores CC normales, están diseñados para que al alimentarlos giren de forma continua, un motor paso a paso está diseñado para
girar un pasito cada vez que alimentas una de las fases.
Por eso nuestro programa tendrá que gestionar la secuencia en la que excitamos las bobinas para que el motor vaya avanzando de forma continua.
En un motor de 4 fases como este que vamos a usar hay tres maneras de hacer esta secuencia como veíamos en la sesión anterior.
Excitando dos bobinas cada vez ( Suele ser lo que recomienda el fabricante )
2 OFF ON ON OFF
3 OFF OFF ON ON
4 ON OFF OFF ON
Que produciría un par menor ( Porque solo se activa una bobina en lugar de dos ) y consumo bajo.
4 OFF ON ON OFF
6 OFF OFF ON ON
8 ON OFF OFF ON
El movimiento es más suave y lento que con los métodos anteriores, y el consumo y el par es también intermedio.
Y naturalmente lo habituales, ya os habréis sospechado que vamos a definir unos arrays con estas tablas para secuenciar el movimiento. Por ejemplo
en el caso de usar medios pasos el array sería algo así:
int Paso [ 8 ][ 4 ] =
{ {1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 1},
{1, 0, 0, 1}
};
Y seguro que no tendréis problema en definir el array correspondiente a los otros dos tipos de movimiento
#define IN1 12
#define IN2 11
#define IN3 10
#define IN4 9
int steps_left=4095;
boolean Direction = true;
int Steps = 0; // Define el paso actual de la secuencia
Los defines indican a que pines de nuestro Arduino vamos a conectar cada una de los terminales de las bobinas del motor. Después algunas
variables para control y un array que representa la secuencia. El setup es bastante sencillo
void setup()
{ pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
Vamos a definir una función llamada stepper() que avanza un paso cada vez que la invocamos, en realidad medio paso dada la matriz de excitación y
que controle en que punto de la secuencia estamos.
Usamos Steps_left para definir el número de pasos que queremos girar, y por eso mientras queden pasos pendientes seguimos en el while, que lo que
hace es avanzar un paso, disminuir el número de pasos pendientes y hacer un delay que controla la velocidad de giro.
Cuando acaba el while, hacemos un delay para poder apreciar el final e invertimos el valor de direction para cambiar la dirección de giro.Vamos con la
funcion Stepper que parece más complicada:
SetDirection();
}
Lo se, da asco. Es tan fácil que aburre. Usamos la variable Steps para saber en cuál de los 8 estados posibles de la matriz estamos y escribimos en
las bobinas los valores que corresponden a esa situación.
Es SetDirection() quien va a controlar la dirección de giro y el valor de Steps, vamos a ver como:
Steps = ( Steps + 8 ) % 8 ;
}
Es muy fácil ver que si giramos en la dirección digamos positiva, hay que ir incrementando Steps para mantener el giro. Y tampoco es complicado ver
que en el giro contrario hay que irlo decrementando para que lea el array al revés. Pero quizás la última línea merece una explicación aparte.
A medida que vamos incrementando Steps, queremos que cuando pase de 7 vuelva a 0 y esto se consigue muy fácil haciendo
Steps = Steps % 8
Es decir tomando el modulo con respecto a 8, pero si lo vamos decrementando, alcanzaremos valores negativos, y el módulo de algo negativo sigue
siendo negativo, lo que no nos vale, porque necesitamos que el siguiente valor a 0 sea 7 y no -1.
Steps = ( Steps + 8 ) % 8 ;
Compruébalo si no me crees.
if (Steps>7)
Steps=0 ;
if (Steps<0)
Steps=7 ;
RESUMEN DE LA SESIÓN
Vimos las varias maneras de controlarlo según como excitemos las fases del motor.
Anterior Siguiente
(96) Comments
El par el M=F*d donde M(par en N*m), F(fuerza en N), d(distancia en m). Despejando F y calculando para 1cm de radio
de polea tenemos
Reply
Reply Los motores en general no tienen una referencia de posicion que puedas usar para volver a un punto incical concreto.
Por eso si necesitas arrancar desde un punto especifico, necesitas hacer girar el motor hasta que alcances alguna
marca o tope que te indique ese punto a partir del cual puedes empezar. Si lo usas para mover un carro, puedes
ponerle un fin de carrera o algo asi para detectar que has llegado al limite
Reply
Muchas gracias por el aviso, seguro que hay gente con el mismo problema que te agradecerá haberlo compartido. Un
saludo.
Reply
Reply
GIVE A REPLY
Message
URL
Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield
Home
Mas Sobre Motores Paso A Paso
OBJETIVOS
MATERIAL REQUERIDO.
ARDUINO PROTOBOARD
UNO REV 3 830 PINES320.
Añadir al Añadir al
carrito carrito
CABLES
DUPONT MOTOR
MACHO- STEPPER 4
MACHO FASES 5V
Añadir al Añadir al
carrito carrito
H-BRIDGE
L293D
Añadir al
carrito
En las dos últimas sesiones empezamos a hablar de motores pasos a paso y de la jerga que los rodea. Vimos que había motores unipolares y
motores bipolares y además dijimos que según el fabricante nos puede entregar 4, 5, 6, u 8 hilos de control.
Revisando un poco lo dicho hasta ahora, si alguien que no había visto nunca un motor paso a paso, ha entendido algo será un milagro. Y
francamente, viendo lo mucho que se escribe por i
Internet del tema, y el barullo semi interesado que pueden montarte, acabaras convenciéndote de que esto no es lo tuyo, pero no señor.
Los motores paso a paso , son una cosa sencilla, pero son muy versátiles y conviene ir pasito a pasito, porque si haces caso a todo lo que lees la
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
cosa se puede complicar mucho, así que vamos a dedicar esta sesión recapitular un poco y demostrarte que no es para tanto.
Recuerda que un motor paso a paso se diseña para que solo se mueva un paso cada vez que excitamos una de sus bobinas ( O varias según el caso ) y
por eso, el circuito de control, o sea nuestro Arduino, tiene que ir excitando en secuencia las bobinas del motor, y por eso tenemos que volver a las
configuraciones de las bobinas porque son las que definen como puedo excitar el motor.
Pero tienes que saber algo importante, casi son todos parecidos, ( solo casi). Fíjate en estas imágenes de configuraciones:
En el caso del de 5 hilos, primero excitamos un lado de la bobina del primer grupo y luego la media bobina del otro grupo, después vuelta a la
primera bobina, pero del otro lado y al final la que falta. Pero fíjate que el caso del motor de 5 hilos es igual que el de 6, solo que en el primero el
fabricante une los dos hilos centrales.
Y el caso de 8 hilos, es casi lo mismo pero, el fabricante te entrega 8 hilos para que los gobiernes como quieras. ¿Pero… para motores y bobinas
similares hay alguna diferencia en esto? Pues poco menos que no (Algo hay pero ahora pasamos de ello ).
No te preocupes por ahora de esto, ya tendrás tiempo más delante de entender las pequeñas
diferencias, que tienen que ver con el consumo, el par o la velocidad de giro, por ahora
olvídate de todo esto.
En la práctica eres tu quien configura la excitación de las bobinas porque parece que cuantos más opciones te ofrece el fabricante, más sofisticado
es el motor (Y el precio claro, no te olvides de la pasta ), pero es bien fácil convertir un motor unipolar de 8 hilos en uno 6 o de 5 y uno de 6 en uno
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
de 5.
Vale, más o menos los motores paso a paso unipolares son poco más o menos equivalentes, pero en cambio los bipolares son muy distintos ¿No?
Tienes marcado en rojo el hilo que une los comunes de las dos bobinas en el motor unipolar. ¿Qué pasa si simplemente los dejas al aire sin conectar?
Pues querido amigo, que acabas de conseguir un precioso motor bipolar.
Así que al final, en todo este asunto hay mucho teatro, por parte de unos que esperan cobrarte más por el Show, y porque algunos que no han
entendido nada, esperan convencerte de que te dejes aconsejar por ellos que son los que más saben de esto.
Hay un tema básico en que si se diferencian los motores unipolares y bipolares, y es que con un unipolar puedes usar un par de transistores
Darlington para excitar una u otra mitad de cada bobina, como hacíamos en la sesión anterior y la costumbre es usar un integrado del tipo del
ULN2003A.
En cambio un motor bipolar no puede ser gobernado de ese modo, porque hay que revertir el sentido de circulación de la corriente según en qué fase
estés y para eso necesitamos un viejo conocido nuestro: Un H-bridge .
Y como no queremos que nadie se quede con dudas, en esta sesión vamos a mover el motorcito que hemos visto, el 28BYJ-48, unipolar, mediante
un sencillo H-bridge, el LS293D manejándolo como si fuera bipolar ( Hoy tengo ganas de guerra, que queréis que os diga ) y montaremos un
pequeño circuito para gobernarlo.
En la sesión anterior controlamos el giro y la secuencia de fases del motor directamente, pero en esta ocasión aprovecharemos para ver que
Arduino dispone de una librería para gobernar motores paso a paso, a un mayor nivel de abstracción desentendiéndonos de tan agotador trabajo .
Coma ya vimos el H-Bridge L293D en una sesión previa, no vamos a insistir con el y os remito a la sesión correspondiente. Recordemos que este
chip tenía dos puentes H-Bridge y que en aquella sesión solo usamos uno de ellos porque era mas que suficiente para gobernar un motor de corriente
continua.
La diferencia es que ahora tenemos que manejar los dos H-bridges, porque vamos a tener dos juegos de bobinas, y por ello poned un poco de
cuidado con el cableado, porque vamos a conectar unos cuantos cables a la protoboard, y como ya es costumbre con uno mal puesto probablemente
dejará de funcionar.
Recordad, también, que para manejar nuestro motor 28BYJ-48 unipolar, como bipolar basta con que nos olvidemos casualmente, de usar el hilo
común de las bobinas que en el conector viene de color rojo y listo.
En Internet he visto varios artículos que recomendaban desmontar el motor y cortar la pista
interna que da al cable rojo, o bien cortar el cable rojo.
EL PROGRAMA DE CONTROL
#include <Stepper.h>
Para crear una instancia del motor paso a paso, tenemos que definir que pines usamos para gobernar las entradas del motor. Si habéis usado las
conexiones que os hemos marcado en el esquema:
Ahora tenemos que definir el número de pasos que nuestro motor tiene por vuelta y crear una instancia de la clase Stepper, pasándole los pines de
control definidos:
#define STEPS 512 // Define el numero de pasos del motor. 512 para 28BYJ-48
Stepper motor(STEPS, in1Pin, in2Pin, in3Pin, in4Pin);
El resto es gimnasia:
Serial.begin(115200);
motor.setSpeed(25); // Fijar la velocidad en rpms
}
Lo único digno de mención es la última línea, donde fijamos la velocidad del motor en revoluciones por minuto.
Yo sé que vais a intentar acelerar un poco el motor, porque es lento que da asco, pero tenéis que entender
que la excitación de las bobinas supone la creación de los campos magnéticos que inducen la fuerza
electromotriz y eso lleva un cierto tiempo.
Dicho de otro modo: Si fijáis una velocidad superior a la que vuestro motor puede excitarse, sencillamente
quedará inmóvil (Lo sé la vida es dura)
Estos motorcitos tienen un buen par motor, porque tienen una reductora 64: 1, lo que significa que es 64
veces más lento que el motor a pelo.
Para no aburrirnos, vamos a seguir la costumbre de Internet, para este ejemplo, de recibir por la puerta serie un número entero y usarlo como un
número de pasos que el motor debe avanzar si es positivo o retroceder si es negativo:
void loop()
{
if (Serial.available())
{ int steps = Serial.parseInt();
Serial.println(steps);
motor.step(steps);
}
}
RESUMEN DE LA SESIÓN
Nos dimos cuenta de lo sencillo que es, usar un bipolar como si fuera unipolar.
Anterior Siguiente
(38) Comments
Un saludo!
Reply
int motor_speed = 4;
int val1 = 0;
int val2 = 0;
void setup()
{
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
pinMode(motorPin1,OUTPUT);
pinMode(motorPin2,OUTPUT);
pinMode(motorPin3,OUTPUT);
pinMode(motorPin4,OUTPUT);
}
void loop()
{
val1 = digitalRead(boton1);
if(val1 == HIGH)
{
digitalWrite(motorPin1,HIGH);
digitalWrite(motorPin2,LOW);
digitalWrite(motorPin3,LOW);
digitalWrite(motorPin4,LOW);
delay (motor_speed);
digitalWrite(motorPin1,LOW);
digitalWrite(motorPin2,HIGH);
digitalWrite(motorPin3,LOW);
digitalWrite(motorPin4,LOW);
delay (motor_speed);
digitalWrite(motorPin1,LOW);
Reply Pues no se que decirte porque ya ves que el ejemplo es de lo mas sencillo, hay un hilo que controla la direccion del
motor. Yo lo revisaria por si acaso
Ademas apretando otra tecla (‘C’) logro borrar la pantalla, pero, al volver a cargar otra medida, me vuelve a aparecer el
numero anterior más este.
No se que hacer para que mi programa “se olvide” del dato anterior y pueda comenzar de nuevo…
Ojalá alguien me pueda echar una mano, porque estoy estancado con esto…
Gracias
Saludos, Beto.
Mil gracias!!
Saludos
Un saludote!
Reply
Reply
Tendras que haer pruebas para acertar cual es cual si no viene marcado de algun modo explicito
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Demian Jacome 22 Feb 2016
Hola!!!
Como haces para ingresarle los datos al arduino??
Reply
Reply
Reply No estoy seguro de comprender bien tu pregunta, pero me imagino que te refieres a como hacer que al pasar de la
cinta al elevador esta arranque y pare la cinta transportadora. SI es así la solución fácil es arrancar los dos a la vez y
olvidarte de las complicaciones. si por lo que sea no conviene, tienes que detectar el paso de lo que estas moviendo
por el final de la cinta .
Para eso puedes usar un final de carrera con una pértiga, o bien mas limpio, un sensor óptico que detecte el paquete
Reply
Reply
Muchas gracias
Message
URL
Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield
Home
Motor Shield V1 Y Motores Paso A Paso
OBJETIVOS
MATERIAL REQUERIDO.
ARDUINO PROTOBOARD
UNO REV 3 830 PINES320.
Añadir al Añadir al
carrito carrito
CABLES
DUPONT MOTOR
MACHO- STEPPER 4
MACHO FASES 5V
Añadir al Añadir al
carrito carrito
IVA
MOTOR
SHIELD V1
Leer más
En la sesión anterior vimos que podíamos manejar un motor paso a paso unipolar como bipolar, mediante un integrado H -Bridge L293D.
Vimos que controlar un motor paso a paso es un pelín más complicado que controlar un motor de corriente continua ( O un servo ya que estamos )
porque no podemos simplemente dar una señal y esperar que se ponga a girar, si no que debemos controlar el movimiento mediante el control de la
excitación de las bobinas (O coils en inglés ).
Y como un motor paso a paso debe tener al menos 2 bobinas, necesitamos por tanto 2 H -Bridge , es decir un integrado del tipo L293D completo
( Que tiene dos H-Bridges) y un buen número de cables colgando para conectar todo a nuestro Arduino.
Por ello y como no podía ser de otra manera, siempre hay alguien que ha tenido el problema y nos vende una solución. En este caso vamos a ver
cómo manejar motores paso a paso con un viejo conocido nuestro: El Adafruit Motor Shield V1 .
En el pasado usamos este shield para manejar cuatro motores CC para el Rover 4×4, ya que incluye dos integrados L293D, pero para mover
motores paso a paso necesitamos 2 H-Bridge por cada motor, por lo que solo podemos manejar dos Steppers con él.
Precisamente por la limitación de H-Bridges en los chips internos, podemos manejar 4 motores
Vamos a dedicar esta sesión a ver como manejamos los motores Stepper con este sencillo y accesible Shield, antes de pasar a otros Shields
dedicados más complejos
Lo primero que tenéis que recordar es que necesitamos manejar las dos bobinas del motor independientemente, y eso nos lleva a tener que
identificar los bornes de las bobinas claramente para conectarlas adecuadamente.
Para usar el motor 28BYJ, ya vimos la distribución de conexiones en este esquema de colores:
A 2 Pink
M1
B 4 Orange
A 1 Azul
M2
B 3 Yellow
Fijaros que el Motor Shield tiene entre M1 y M2 una conexion para GND, con lo que podemos conectar directamente el pin correspondiente y
manejar el motor como unipolar, o dejarlo al aire y tratarlo como bipolar
En caso de que el motor paso a paso que vayáis a usar sea diferente de este, siempre podéis buscar en Internet el manual de vuestro motor y hacer
las conexiones correspondientes.
El programa es muy sencillo ya que la librería de adafruit-Adafruit-Motor-Shield-library-1.0.0-0-g89a0973 se encarga de la parte más molesta, de
gestionar los timings y el control de las bobinas.
Para ello tenemos que incluir la librería y definir una instancia de la clase AF_stepper, para nuestro motor, con un par de parámetros:
#include <AFMotor.h>
AF_Stepper motor(256, 1); // A la puerta M1 M2
256 son los Steps por vuelta para nuestro motor ( Podéis probar diferentes valores y ver lo que pasa) y 1 significa que usamos el motor conectado a
M1 M2. SI conectamos un segundo motor a M3 M4, sería el motor 2.
void setup()
{
Serial.begin(9600);
Serial.println("Stepper test!");
motor.setSpeed(50); // 50 rpm
}
Os recomiendo que juguéis cambiando la velocidad y vayáis viendo lo que pasa. (¿Quien dijo
miedo?)
Si queréis repasar esto un poquito podéis volver a la sesión previa donde ya vimos todo esto.
Cada uno de esos métodos tiene ventajas e inconvenientes y es cuestión de decidir cuál usar dependiendo de lo que queramos hacer. Podemos
hacer un Pequeño resumen de cada modo:
SINGLE: Solo se excita una bobina cada vez ( También se le suele llamar Wave Drive ), No suele ser lo más frecuente porque el par es
relativamente bajo, pero a cambio el consumo de energía es bajo.
DOUBLE: Se excitan dos bobinas cada vez ( También se le llama Full Stepping ). Es bastante frecuente si lo que se busca es par motor
máximo, el doble que en single coil, pero también el doble de consumo.
INTERLEAVE : Se excitan pares de bobinas, lo que nos permite doble resolución, con un par y consumo intermedios. Naturalmente con
el doble de posiciones la velocidad es la mitad.
MICROSTEPPING: En ligar de alimentar las bobinas con todo o nada, usamos tensiones PWM con una ciertas relaciones entre la
alimentación de las dos bobinas, con lo que la transición entre pasos es más suave.
Reduce mucho el ruido del motor y la tensión mecánica, mejorando la vida útil del motor, pero a cambio la precisión se reduce y el par también
Entrar en una discusión detallado de estas técnicas sobrepasa con mucho la intención de este humilde tutorial y si tenéis interés, no vais a tener
dificultad en bucear en Internet para encontrar sesudas discusiones al respecto.
De momento es suficiente con decir que la librería os permite cambiar sin problemas y sobre la marcha, el tipo de stepping de estos motores:
Serial.println("Micrsostep steps");
motor.step(2000, FORWARD, MICROSTEP);
motor.step(1000, BACKWARD, MICROSTEP);
delay(1000);
}
La instrucción motor.step(), recibe el número de pasos a girar el motor, el sentido de giro como FORWARD y BACKWARD, y el método de
excitación de las bobinas como SINGLE, DOUBLE, INTERLEAVE o MICROSTEP.
El Adafruit motor Shield es un juguete muy simpático que os permitirá por muy poco dinero jugar con los motores y hacer pequeños proyectos que
manejen cargas pequeñas.
Pero este Shield se queda pequeño en cuanto haya que poner fuerza encima de la mesa, y para eso Adafruit ( Entre otros muchos ) diseñó la versión
V2 de la que espero hablar en futuras sesiones de modo específico:
Y cuando se requiere manejar 4 o 5 motores de paso a paso con una cierta potencia hay diferentes Shields disponibles para ello. Por ejemplo, las
impresoras 3D de RepRap, o Prusa, las más comunes, utilizan un shield para 5 motores paso a paso con drivers de una cierta potencia, llamada
RAMPS:
En algun momento hablaremos de esta controladora que es muy barata porque se usa para las impresoras 3D y se vende como rosquillas lo que hace
que haya disponible un software estándard parametrizable para su control.
RESUMEN DE LA SESIÓN
Comprobamos que es más seguro usar un shield para manejar vatios Steppers que usar un circuito,
porque disminuye grandemente el número de conexiones necesarias.
Anterior Siguiente
Copyright Prometec
Home
Motor Shield V1 Y Servos
OBJETIVOS
MATERIAL REQUERIDO.
IVA IVA
ARDUINO
UNO REV 3 MOTOR SHIELD
V1
Añadir al
carrito Leer más
SERVO
FUTABA
MG945
Añadir al
carrito
En una sesión previa, ya hicimos una primera aproximación al servo motor. Vimos que son motores de corriente continua diseñados no para girar
sin fin, sino que se concebidos de modo que se muevan a una posición específica y se mantengan en ella.
Vimos que podíamos usar señales PWM como medio de controlar con precisión el angulo en que queremos posicionar el servo.
Este tipo de posicionamiento mediante servos, es de lo más interesante en el caso de timones de navegación y vuelo, o posicionamiento de brazos
robots, y están muy extendidos tanto en la industria, como en los aficionados al radio control.
MODEL: TGY-9018MG
Size: 23X12.1X25.8mm
Weight: 13g
Leyendo las características, vemos que podemos alimentarlo entre 4,8 y 6V. Sin problemas con nuestro Arduino, y consumirá entre 200 y 250 mA y
con esto hay que tener un poco cuidado, porque si estamos alimentando nuestro Arduino con USB, este solo puede proporcionar un máximo de
500mA
Eso quiere decir que podemos manejar un servo sin problemas, pero si metemos el segundo servo pueden empezaran a pasar cosas raras:
Por si alguien está pensando que 250mA es mucho más de los 40 mA que cualquier pin de Arduino puede
proporcionar, tened en cuenta que la señal PWM no alimenta el servo, sino que proporciona la señal de
control.
Por eso la alimentación se hace a través de Vcc y GND y no podríamos alimentarlo con un pin de Arduino,
pero sí de las líneas principales, a condición de no sobrepasar la capacidad de la fuente (0,5 A en el caso de
un USB típico)
Nos detalla un par de 2,5 Kg por cm, lo que significa que si usamos un brazo de un cm alrededor de su eje, puede levantar 2,5 Kg, lo que no está
nada mal para un motorcito tan pequeño como este.
Así pues no tenemos ningún problema en alimentar nuestro servo con un programa sencillo como este que ya vimos:
void setup()
{ servo1.attach(9) ; } // Conectar servo1 al pin 9
void loop()
{ for(angulo = 0; angulo <= 180; angulo += 1)
{ servo1.write(angulo);
delay(25);
}
Cuando hablamos en sesiones anteriores que el Adafruit Motor Shield V1 , dijimos que podía manejar cuatro motores de continua o dos motores
paso a paso y vimos las razones de que esto fuera así, pero hasta ahora no habíamos comentado que el motor shield V1, puede manejar dos servos
adicionales también.
Pero ¿Por qué iba a querer usar el motor Shield para majear servos, si puedo manejarlos directamente desde el propio Arduino?
Bueno en primer lugar porque si usas un Arduino UNO ibas a ir mal de conectores para conectar los servos, porque el Shield te los tapa (Aunque
En segundo lugar porque un servo tiene normalmente un conector de 3 pines y para conectarlo a nuestros Duinos hay que poner cables, mientras
que el Shield trae un par de conectores para servo directos y es mas limpio.
En tercer lugar, porque el Motor Shield te permite usar una fuente de alimentación independiente de la que usa tu Arduino y esto puede ser
importante, ya que hay servos de 12 y 24V y no podrías alimentarlos directamente. El shield te ofrece un sistema fácil de combinar ambas cosas.
Y en tercer lugar porque hay proyectos que necesitan más de un motor o tipo de motor, y con este shield podrías usar simultáneamente un motor
paso a paso con 2 motores de continua y dos servos (Con alimentación externa indudablemente pero resulta factible).
Por eso, porque la vida es complicada, los chicos de Adafruit nos proporcionan la capacidad de manejar los servos directamente desde la librería que
acompaña al shield.
Pero tened en cuenta de que la librería hace poco más que definir la forma de usar los pines digitales 9 y 10, para el control de los servos mediante
una señal PWM y proporcionarnos una forma coherente de manejar estos motores por software, igual o muy similar a la que usamos para mover los
motores de continua o Steppers.
Fijaros en la imagen y veréis en la esquina superior izquierda, las conexiones de los servos 1 y 2, que son independientes del resto de los motores.
#include <AFMotor.h>
#include <Servo.h>
Servo servo1, servo2 ;
El resto del programa se parece mucho al que pusimos un poco mas arriba:
void setup()
{ Serial.begin(115200);
servo1.attach(9); // El servo 1 se controla con el pin 9
servo2.attach(10); // El servo 2 se controla con el pin 10
}
void loop()
{ for (int ang =0 ; ang <180 ; ang++)
{ servo1.write( ang) ;
servo2.write( ang );
delay(25);
}
delay(1000);
}
Fijaros que barremos un ángulo de 0 a 180º porque aparentemente este servo se comporta así, con un ángulo de 90º se coloca en la posición central
y luego puede moverse a 0º o hasta 180º, pero esto es algo que tenéis que comprobar con vuestro servo.
Si le dais un ángulo superior a lo que puede moverse, simplemente zumbara y no podrá haceros caso,
porque para eso tiene topes.
En un servo pequeño como esto no es grave, pero evitaría algo así en servos de una cierta potencia y
precio por si acaso.
Este Motor Shield V1 está pensado como un sistema sencillo y de bajo coste para introducirse en el mundo de los pequeños motores, y no es
llevéis a engaño, se pueden hacer muchas cosas con el especialmente para interesar a gente que desea empezar de modo sencillo sin complicaciones
ni tener que empeñar un riñón en las compras.
Pero a medida que vuestros proyectos vayan creciendo, el Motor Shield V1 se os quedara corto, primero porque su capacidad de alimentar motores
es limitada sin una fuente externa y en segundo lugar porque con solo 2 servos no vas a hacer un robot muy interesante.
Y estáis de suerte porque naturalmente el mercado nos ofrece todo una plétora de soluciones en forma de shields y tarjetas integradas que nos
permiten controlar múltiples servos, pero hay algunas cosas que necesitáis tener en cuenta antes de comprar una.
Lo primero cuantos servos vais a usar y cuál es el consumo máximo en carga, porque tenéis que prever una alimentación suficiente para el peor
caso. Por ejemplo si necesitas 12 servos de 250 mA, tienes un consumo de 3A en el peor caso. Quizás nunca se de pero tienes que preverlo, y no
todos los shield o tarjetas pueden aguantarlo aunque parezca que sí, asegúrate.
Lo segundo es si quieres comprar un shield para tu Arduino, o una tarjeta que ya incluya un Arduino y más cosas, y hay muchos así.
Que incluyen un chip compatible con Arduino UNO la primera y con MEGA la segunda para mayor potencia y por el número de pines necesarios.
Suelen encontrarse con capacidad para controlar 16, 24 y 32 servos.
La propia tarjeta incluye USB y Arduino para manejar directamente los servos, pero fíjate que ninguna de estas tarjetas tiene alimentación propia y
por tanto necesitas prever el uso de una fuente externa.
Imagínate que quieres hacer algo así como una araña robot. Cada pata necesita tres grados de libertad: Girar el hombro arriba y abajo para levantar
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
la pata y girar el hombro adelante y atrás para avanzar y por ultimo girar el codo arriba y abajo (De momento ignoramos el tobillo ) y como una araña
usa 8 patas, salimos por la bonita cantidad de 24 servos mínimo para hacer una araña.
Algo así va a llevar a límite a este tipo de controladoras y por eso las hay de hasta 32 servos que yo haya visto. Tengo por aquí una que compre hace
un tiempo (Para una araña robótica precisamente ) que es de lo más grande que he visto:
Se llama Spider Controller e incluye el corazón de un Arduino Mega y es compatible con él y además 48 conectores para servo y una fuente de
alimentación de 3ª, junto con el USB para programarlo, lo que le convierte en el mayor monstruo que he visto nunca para controlar servos.
Quizás mas adelante lo usemos un día para algo ( Una Araña no me suena mal )
Hemos visto cómo usar el Motor Shield V1 para controlar un par de servos.
Vimos tanto como conectarlos en los pines asociados como lo necesario para programarlos mediante la
librería de Adafruit.
Presentamos otras posibilidades en cuanto a Shields con capacidad para controlar mayor número de
servos.
Anterior Siguiente
Copyright Prometec
MATERIAL REQUERIDO.
IVA + IVA
RUEDA +
MOTOR MOTOR NEMA 17
STEPPER
Añadir al
Añadir al
carrito
carrito
Esta sesión es poco más que una traducción libre del magnífico documento de Adafruit sobre este Shield y que podéis encontrar aquí, y en el
que encontrareis una información mucho más extensa sobre este Shield, de lo que pretendemos en este sencillo tutorial.
CONTROLADORAS DE MOTORES
Hemos dedicado ya unas cuantas sesiones a hablar del Motor Shield V1 , que era una pieza de lo más simpática y accesible y que te permitía iniciarte
con los motores de un modo económico sin demasiadas complicaciones.
Con un Shield de unos pocos euros y una librería sencilla puedes manejar 4 motores de continua o dos de paso a paso y además dos servos.
Cunado necesitas cargas superiores ya vimos que existían otros Shields como el Ardumoto, que acepta cargas de hasta 2A lo que no está mal,
pero que como en la vida no existe la felicidad completa, tiene el inconveniente de vernos limitados a dos motores de continua o único paso a paso.
Y claro más de uno empezó a preguntarse… ¿ Tenemos que elegir entre un Shield excelente y versátil pero poco potente y uno más potente pero
limitado?
Y como siempre que unos cuantos empiezan a hacerse este tipo de preguntas hay algún ingeniero avispado ( Normalmente varios ) que huele el
dólar y te ofrece una solución para el problema.
En este caso los chicos de Adafruit, que son los padres del Motor Shield V1 , decidieron rediseñarlo, pero con más potencia y manteniendo las
prestaciones del Shield original, y al resultado le dieron el ingenioso nombre , quien lo diría, de Motor Shield V2 .
En el próxima capitulo veremos cómo, porque requiere una explicación más tranquila de lo que ahora
mismo seria posible
De Nuevo el Motor Shield V2 permite manejar 4 motores de corriente continua o 2 motores de paso a paso, o bien 2 motores de continua y un
paso a paso, y además 2 servos adicionales, y lo hace rediseñando de arriba abajo el Shield V1.
En lugar de un chip L293D que ya nos es de lo más familiar, emplea un MOSFET TB6612 driver con una capacidad de 1,2 Amperios por canal y
picos de hasta 3 Amperios, y con circuito de protección térmica incluida.
Además incluye un chip generador de PWM propio, con lo que libera nuestro Arduino de esta tarea y todo el conjunto se controla mediante el bus
I2C.
Otra caracteristica nueva, muy de agradecer es que además permite apilar los Shield uno encima de otro hasta 32, lo que le da la capacidad de
controlar un disparatado número de motores, pero que por ellos no quede, y por ultimo además de permitir separar la alimentación de motores y
servos de la de nuestro Arduino, incluye un área de prototipos para soldar directamente lo que se nos ocurra sin necesidad de otros Shields.
No os preocupéis por cual es el positivo y el negativo. No tiene importancia, pero sí que importa que
todos los conectéis del mismo modo, más que nada, para que cuando quieras avanzar, todas las ruedas lo
hagan en la misma dirección.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Si los conectáis al atolondradamente cuando deis la orden de avanzar el espectáculo será un tanto caótico,
fijo.
Para alimentar vuestros motores con una fuente externa, retirad el jumper de alimentación común y usad los bornes externos de alimentación de
motores, veréis que se ilumina un pequeño LED azul para indicaros que hay tensión en la entrada.
Antes de nada, como el Motor Shield V2 es un rediseño del original con diferentes componentes hay que utilizar una librería diferente de la que
vimos con el Shield V1: Adafruit_Motor_Shield_V2_Library-master
Una vez descargada , instaladla por el procedimiento habitual que ya tenéis dominado y veamos cómo se usa la nueva librería, mediante C++
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Ya hemos comentado que este Shield se controla mediante I2C para poder gobernar mayor número de motores, pero de eso se encarga la
librería, así que no os preocupéis.
Ahora tenemos que crear una instancia por cada motor que vayamos a manejar. Como esto solo es un ejemplo de uso y soy un vago irreductible,
solo voy a conectar un motor y de ese modo espero que el ejemplo mínimo sea lo más didáctico posible.
Hemos creado con esto una instancia de motor, pero ahora debemos indicar a la librería el tipo del mismo, porque permite varios tipos , y es la
librería la que va a hacer el control final:
Lo que solo significa que AFMS va devolver un puntero a un motor de tipo DC, y por cierto el 1 entre paréntesis, significa que lo hemos conectado
a las bornes del M1. El resto ya no tiene dificultad.
void setup ()
{ AFMS.begin(); // create with the default frequency 1.6KHz
myMotor->setSpeed(150);
myMotor->run(FORWARD);
myMotor->run(RELEASE);
}
Simplemente inicializamos el control del motor con el begin() muy al estilo de como lo hacemos con la puerta serie y después fijamos la velocidad
consetSpeed, al que le pasamos un valor entre 0 y 255 para indicar la velocidad deseada.
Ojo, si das valores muy bajos probablemente tu motor se parará por completo. Usa un mínimo de 80, pero
esto depende de tu motor y de lo eficaz que sea (Y el que yo voy a usar no es de los mejores).
Para controlar el movimiento del motor usamos las keyword FORWARD ( Adelante), REVERSE ( Atrás) y RELEASE ( Liberar o parar). Veamos un
pequeño ejemplo de uso de un motor CC:
myMotor->run(FORWARD);
for (i=0; i<255; i++)
{ myMotor->setSpeed(i);
delay(10);
}
myMotor->run(BACKWARD);
for (i=0; i<255; i++)
{ myMotor->setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--)
{ myMotor->setSpeed(i);
delay(10);
}
myMotor->run(RELEASE);
delay(1000);
}
Aquí estamos usando un operador del que no hemos hablado aun, (Y del que no quiero hablar por ahora ) que es “->”. No le hagáis mucho caso y
usadlo sin más. No muerde aunque parezca raro
Como veis la idea es simplemente fijar la dirección hacia adelante y luego hacia atrás e ir variando la velocidad de giro del motor. EL resultado lo
podéis ver en este mini Video:
Si ya conoces los motores paso a paso, poco voy yo a poder contarte, pero si eres nuevo en el tema, te recomiendo que empieces por la
introducción a los Steppers que hicimos en unas sesiones previas y que te vendrán muy bien para coger 4 ideas importantes, antes de meternos en
harina en esta sesión.
No es muy distinto controlar un Stepper de un motor CC pero hay pequeñas diferencias que nos conviene tener en cuenta. Para empezar los
motores paso a paso pueden tener un número de hilos desde 4 en adelante.
Yo voy a usar un típico motor bipolar para no complicarme la vida. Un NEMA 17 , que es un Stepper muy potente y uno de los típicos, de por ejemplo
las impresoras 3D, de 4 hilos.
Recordad que necesitamos usar 4 pines para controlar un motor bipolar, y atentos al
conectar los hilos, que aquí sí que importa el orden, y si los ponéis al azar el motor hará
cosas raras.
Muchas veces no está muy claro el orden en que debe ponerse los hilos, porque además
hay fabricantes que los suministran con un conector mono y otros simplemente con los
hilos colgando (Para ahorra hasta los céntimos, que la competencia es feroz)
Si no tenéis claro como conectarlos probad a seguir el mismo orden que os fija la salida
del motor y haced una prueba con cuidado. En mi caso voy a conectar las dos bobinas
de mi motor (Son 4 hilos en total) a los conectores M3 y M4 asegurándoos que dejáis libre
el borne rotulado como GND (Que se usaría para Steppers de 5 y 6 hilos )
PROGRAMA DE CONTROL
El programa para controlar Steppers es muy similar al de los motores de continua, pero, naturalmente tiene sus propias manías, que veremos
enseguida Empezamos con las definiciones previas habituales:
void setup()
{ AFMS.begin();
myMotor->setSpeed(10); // 10 rpm
}
Aquí la curiosidad radica en que lo que pasamos la velocidad es el número de revoluciones por minuto que queremos y podemos ir ya al loop:
Serial.println("Microstep steps");
myMotor->step(50, FORWARD, MICROSTEP);
myMotor->step(50, BACKWARD, MICROSTEP);
}
La librería nos permite manejar las bobinas del motor de los diferentes modos posibles y que ya vimos en sesiones previas (Y por eso si no entiendes
nada, es buen momento para que las eches una ojeadilla)
Aquí va un mini video con el resultado de este programa y un motor Nema 17:
RESUMEN DE LA SESIÓN
Hemos visto las posibilidades y el interés del Adafruit Motor Shield V2.
Anterior Siguiente
Copyright Prometec
Home
Adafruit Motor Shield V2 II
OBJETIVOS
MATERIAL REQUERIDO.
IVA + IVA
ARDUINO
UNO REV 3 MOTOR SHIELD
V2
Añadir al
Añadir al
carrito
carrito
SERVO
FUTABA
MG945
Añadir al
carrito
Esta sesión es poco más que una traducción libre del magnífico documento de Adafruit sobre este Shield y que podéis encontrar aquí, y en el
que encontrareis una información mucho más extensa sobre este Shield, de lo que pretendemos en este sencillo tutorial.
MOTOR SHIELD V2
En la sesión previa como hablamos de cómo usar este Motor Shield V2 para controlar motores CC y Steppers o paso a paso y también comentamos
porque este Shield era de lo más interesante porque aceptaba intensidades del doble de lo que aceptaba el V1.
Si. Eso significa que puedes poner un Shield V2 encima de otro y así hasta un número ridículamente grande e Shields ( Como 32 ), lo que permite
manejar hasta 128 motores CC o 64 Steppers.
No es fácil imaginar que proyecto puede requerir semejante número de motores, pero Adafruit ha aplicado el conocido principio de “Mas madera…”
y que por nosotros no quede.
Como cada Shield incorpora un controlador I2C basta con cambiar la dirección de cada Shield y asegurarnos de que no hay conflicto de direcciones,
para tener el asunto resuelto y a otro tema.
En esta sesión trataremos este tema de como fijar esta dirección I2C del Shield, no solo para poderlos apilar, sino también por si en algún momento
queréis usar este Shield en combinación con algún otro dispositivo, con la mala fortuna de que tengáis un conflicto de direcciones.
Veremos cómo cambiar esta configuración, y veremos también, en la próxima sesión, que hay otros Shield de Adafruit que utilizan el mismo sistema
para cambiar el direccionamiento I2C.
Pero antes y para descansar un poco, veremos cómo usar Servos con este Shield, porque lo dejamos en la última sesión para no ponerme
demasiado pesado, y estaba pendiente.
Los servos son unos motores de lo más simpáticos que básicamente se diseñan, no para que giren a una determinada velocidad, sino más bien, para
giren un cierto ángulo y se mantengan allí quietos.
Imaginad un timón de un barco o los alerones de un avión. Quieres darle una señal de control y que el motor tome una posición angular sostenida
También hay servos de 360º que giran de continuo y de los que hablaremos en algún
momento en el futuro.
.
Ya hemos hablado en más de una ocasión de los servos y por eso no quisiera repetirme, y el objetivo de este rollo. simplemente era hacer las
presentaciones y mostraros como los podemos usarlos cómodamente desde el Motor Shield V2 .
Para empezar este Shield no está pensado para muchos servos, no señor, solamente permite 2. En el futuro hablaremos de un Shield pensado para
manejar un gran número de servos (Que asombrosamente recibe el creativo nombre de Adafruit Servo Shield ), pero en este caso permite un par de
ellos además de los motores CC y pasó a paso que ya vimos.
Están rotulados como Servo 1 y 2 y un poco más a la derecha podéis ver que los pines de control son el 10 y 9 respectivamente. El único problema
que podéis tener con los servos es que cada fabricante pinta los cables de color que se le pone y no es fácil a veces saber cuál es cual.
Los servos tienen siempre tres hilos: GND, Vcc y señal. Si la cosa fuera tan fácil que los fabricantes se pusieran de acuerdo y pusieran el Vcc en rojo
( Esto prácticamente se cumple siempre) y el GND en negro ( Normalmente es así ) el otro seria la señal y no habría confusión posible.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Pero como sois gente despierta, ya sospecháis que esto sería demasiado fácil y no van a desaprovechar una ocasión de ser unos capullos. ¡¡Faltaría
más!!
Por eso parece un buen momento para pintar aquí una tablita con el código de colores que suelen emplear, dependiendo del fabricante:
Por ejemplo los servos que yo voy a usar en este tuto son tan simpáticos que son Marrón, Rojo y Amarillo ( Es por subir el nivel ). Por lo demás es
bastante fácil conectar los servos:
void setup()
{ servo1.attach(9) ; // Conectar servo1 al pin 9
servo2.attach(10);
}
void loop()
{ servo1.write(0);
servo2.write(120);
delay(400);
servo1.write(30);
servo2.write(90);
delay(400);
servo1.write(60);
servo2.write(600);
delay(400);
servo1.write(90);
servo2.write(30);
delay(400);
servo1.write(120);
servo2.write(0);
delay(400);
}
Incluimos la Liberia Servo y creamos dos objetos del tipo servo1 y servo2, y después simplemente escribimos el ángulo que queremos que gire.
Para darle algo de gracia vamos a mover dos servos diferentes al revés y que el video quede un poco más vistoso ( Y porque si no, me aburro ). Aquí
tenéis un mini video con el resultado:
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
ALIMENTANDO LOS SERVOS
Según viene de fábrica el Motor Shield V2 , alimenta directamente los servos mediante el regulador de Arduino lo que supone una limitación
importante de potencia. Si usáis un par de servos sin carga, como en el ejemplo que os he puesto en el vídeo, no habrá problemas, pero en cuanto
metáis un servo de una cierta potencia o le pidáis un cierto esfuerzo, el alimentador de Arduino se demostrará insuficiente.
Además si la intensidad se agacha, son muy probables daños irreparables en tu Arduino o en los servos y no es cosa de broma porque al final
pueden valer pasta.
El recuadro rojo destaca los conectores verdes que disponéis al efecto, pero ( No iba a ser tan fácil ) estos conectores vienen unidos por una pista del
circuito impreso a Vcc y GND por lo que si queremos usar una tensión diferente es necesario cortar una pista del circuito impreso o PCB
Ya hemos comentado que este Shield tiene la agradable propiedad de permitir apilar múltiples unidades una encima de otra, hasta 32 unidades. De
este modo el número de motores que podemos controlar crece con facilidad hasta un número descabellado.
La ventaja de incluir controladores I2C en el propio chip permite que cambiemos la dirección I2C de cada Shield y por eso pueden trabajar en
paralelo.
Como además el propio Shield incorpora un chip de gestión del PWM , no hay que preocuparse por la precisión de estos aun cuando el número de
motores sea alto.
La única condición es que la dirección I2C de cada Shield sea distinta ( Recordad que el bus I2C está pensado para conectar múltiples dispositivos a
los mismos hilos de comunicaciones)
Cuidado: Por muchos Shields que apiles, el número de servos posibles siguen siendo solo 2, porque estos
están unidos a los pines 9 y de 10 de Arduino
Si eso ha sonado raro, tranquilos que parece difícil pero es una tontería. De la misma manera que el numero binario 00010 representa los bits desde
el menos significante a la derecha hacia el más significante a la izquierda, lo hacemos en este caso.
La idea es que montas el número binario soldando el par que te interesa y como hay 5 pares puedes hacer 2 5 combinaciones, o sea 32 y por eso el
límite del máximo número de Shields que puedes apilar ¿Qué te parece ?
La dirección base del Shield V2 viene de fábrica a 0x60 hex y la dirección final se calcula sumándole el numero binario que soldéis con estos pares.
Por ejemplo, si sueldas los 2 pares de la derecha, habrás configurado el número 3, 00011 en binario y asignarás la dirección 60+3 = 0x63 hex. Eso es
todo.
Cuando envías una orden al motor Shield V2 , puedes omitir la dirección hexadecimal del mismo pero entonces Arduino asumirá que es la dirección
0x60. Para ordenar algo a un Shield con dirección diferente, tienes que especificar la dirección concreta para quien es la orden y por eso puedes
manejar más motores sin más que especificar a que Shield está conectado. ¿Elegante. a que si ?
Quedaros con la copla porque volveremos a ver más Shields que usan este mismo sistema para asignar direcciones.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
RESUMEN DE LA SESIÓN
Vimos que podíamos apilar estos Shields para aumentar el número de motores a controlar.
Anterior Siguiente
(13) Comments
Luego sólo tienes que llamar cada vez al shield que necesites, por ejemplo:
// On the top shield, connect two steppers, each with 200 steps
Adafruit_StepperMotor *myStepper1 = AFMS1.getStepper(200, 1);
Adafruit_StepperMotor *myStepper2 = AFMS1.getStepper(200, 2);
// On the bottom shield connect a stepper to port M3/M4 with 200 steps
Adafruit_StepperMotor *myStepper3 = AFMS2.getStepper(200, 2);
// And a DC Motor to port M1
Adafruit_DCMotor *myMotor1 = AFMS2.getMotor(1);
Reply
Reply
Al adafruit tendría que conectarle por ejemplo en +12 v el pin 11 del ATX y en GND el pin 24 con los bornes de
alimentación del Adafruit . Creo que hasta ahora estoy en lo cierto , pero agradezco cualquier ayuda o correción.
Gracias.
Esquema:
https://drive.google.com/file/d/0B7E0rOkFsC59RGpOekxFcERwWEE/view?usp=sharing
Reply Gracias por la fantástica web que tenéis , estoy encontrando un montón de información .
descubrí los como usar los motores paso a paso y los diferentes tipos de movimientos que pueden hacer.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Single coil steps, Double coil steps, Interleave coil steps, Microstep steps
Y gracias a esta entrada aprendí como usar las fuentes ATX ( la verdad es que muy muy interesante) y ademas de como
encenderla con un pulsador y con un led a modo de ” test” de que todo esta correcto .
https://www.prometec.net/fuentes-atx/
Ahora pregunto yo …
Utilizar la ATX para darle alimentación al Adafruit Motor Shield V2 y ademas que la acción del motor fuera cordinada con
una botonera? Un botón para ” Adelante” y un botón para ” Atras ”
Alguna ayuda?
gracias.
EG
Reply ahora no lo que no veo tan claro es como hacerlo… alguna sugerencia por donde empezar? estoy mas
perdido que un pulpo en un garaje. !
gracias.
Reply
GIVE A REPLY
Message
URL
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
URL
Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield
Copyright Prometec
Home
Ardumoto Shield Y L298
OBJETIVOS
MATERIAL REQUERIDO.
IVA + IVA
ARDUINO
UNO REV 3 ARDUMOTO
SHIELD
Añadir al
Añadir al
carrito
carrito
RUEDA +
MOTOR
Añadir al
carrito
Esta sesión es poco mas que una traducción libre de la página de Sparkfun Ardumoto Hookup guide
Ya vimos en varias sesiones anteriores como manejar motores de corriente continua (CC) directamente mediante señales PWM y también como usar
un sistema un poco más cómodo para manejar 4 motores mediante el Motor Shield V1.
Vimos que este Motor Shield V1, era cómodo y práctico para mover hasta 4 motores CC, y la pregunta es entonces ¿Por qué ver más chips /
Shields de control de motores?
La realidad es que el Motor Shield V1 es un juguete esplendido para iniciaros con el control de motores en Arduino y por muy poco dinero, pero
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
enseguida encontrareis que este Shield V1 está un poco limitado por la intensidad máxima que toleraba en su diseño, y que no podía sobrepasar 0,6
Amp, lo que no da para mucho en cualquier proyecto en el que tengáis que usar motores de continua con algo más de consumo.
En cuanto empecéis a buscar motores de una cierta potencia veréis que el consumo se dispara con rapidez impidiendo usar drivers sencillos como los
que hemos visto hasta ahora.
Por eso el mercado, siempre atento a las oportunidades, nos brinda otras soluciones cuando la carga a mover crece, y una solución es utilizar drivers
cuya capacidad de carga sea un poco superior.
No es difícil encontrar chips y Shields para Arduino que resuelven este problema, pero la documentación suele ser el primer defecto de muchas de
estas soluciones (Por su inexistencia) y el precio puede crecer muy rápidamente sino se elige con cuidado.
Por eso, entre las muchas soluciones disponibles, hemos optado por presentaros un chip típico para estas ocasiones, el L298 , que es muy
interesante porque nos permite gobernar dos motores de continua, con una carga de hasta 2 Amperios por cada uno, e incluye todo lo necesario
para invertir la dirección de movimiento de estos y para controlar la velocidad de giro. Todo en un único chip.
Es muy frecuente encontrar este chip gobernando pequeños robots de dos ruedas y en esta sesión presentaremos este chip L298 y también un
Shield llamado Ardumoto que nos permitirá controlar con comodidad un par de motores de corriente continua de un modo conveniente sin
necesidad de grandes desembolsos.
Vamos a empezar viendo un poco las características del L298 . Básicamente este chip es un controlador doble full bridge, es decir que permite
manejar dos motores (De corriente continua o de paso a paso) y controlar tanto la velocidad como el sentido de giro de ambos motores.
Se presenta en dos versiones, en formato para soldar a una PCB (O protoboard) y en formato SMD, de soldadura en superficie que resulta un poco
Según su data sheet, puede entregar hasta 50V a los motores manteniendo 2Amp de carga y hasta 3Amp de pico (Que mejor no sea sostenido, si os
gusta vuestro chip)
2 Amperios sostenidos es ya un consumo medio y con una cierta capacidad para desarrollar trabajo, por lo que este chip es muy apreciado en esos
Por eso os lo encontrareis una y otra vez en diferentes proyectos Arduino, porque es un chip competente, muy extendido y de precio moderado, y
en muchas ocasiones se encuentra ubicado en un Shield como el que vamos a usar en esta sesión…
ARDUMOTO SHIELD
La manera más cómoda de usar este chip es mediante un pequeño shield que nos permita conectarlo a nuestros Duinos, sin demasiada
complicación y el Ardumoto Shield es uno diseñado con esa intención. Originalmente diseñado por SparkFun, ha sido rápidamente copiado por los
fabricantes chinos que ofrecen replicas directas del mismo.
También podéis apreciar que dispone de una pequeña área de pruebas y prototipos, donde podréis soldar componentes adicionales, como LEDS,
Bluetooth o WIFI o cualquier otra cosa que se os pueda ocurrir, y que siempre viene bien cuando montas motores.
El shield utiliza 2 pines de Arduino para controlar cada motor. Uno regula la dirección de giro y el otro la velocidad mediante una señal PWM, lo que
hacen un total de 4 pines dejando libres el resto.
A mano izquierda podéis ver las conexiones para los motores A y B, así como un conector para alimentar los motores independientemente de la
alimentación de Arduino.
No tiene demasiada importancia en qué orden conectáis los cables de los motores, siempre y cuando lo tengáis claro. Os recomiendo que os fijéis en
los colores de los cables y conectéis ambos pares de igual modo para evitar sorpresas.
EL PROGRAMA DE CONTROL
El shield Ardumoto usa simplemente los pines de control que mostramos en la tabla más arriba, por lo que no requiere ninguna librería especial para
mover los motores sino que usamos Arduino y sus pines para controlar el L298N y por tanto la velocidad y sentido de los motores conectados.
El programa que nos presenta SparkFun es de lo más sencillo y le vamos a usar como ejemplo de control. Empezamos con algunas definiciones para
implicar el programa:
#define MOTOR_A 0
#define MOTOR_B 1
Y ahora vamos a definir un par de funciones sencillas de manejo. La primera la usaremos para arrancar uno de los motores con un sentido y
velocidad dados:
Y como tenemos que programar los pines, porque no tenemos una librería que nos haga el trabajo sucio, podemos definir una función que lo haga:
void setupArdumoto()
{ pinMode(PWMA, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(DIRA, OUTPUT);
pinMode(DIRB, OUTPUT);
digitalWrite(PWMA, LOW);
digitalWrite(PWMB, LOW);
digitalWrite(DIRA, LOW);
digitalWrite(DIRB, LOW);
}
EL resto del programa tiene poco mérito. Básicamente vamos llamando a Ardumoto() para hacer girar los motores en diferente sentido y con distinta
velocidad.
void loop()
{ // Mueve solo el Motor A, a diferentes velocidades
driveArdumoto(MOTOR_A, CCW, 255); // Motor A, avance a toda maquina
delay(1000); // Motor A girará 1 segundo
Hemos presentado el L298, un chip de doble bridge completo muy habitual en los montajes de pequeños
robots móviles.
El Ardumoto Shield se puede usar para controlar dos motores CC o uno paso a paso .
Copyright Prometec
Home
Índice Brazo Robot De Dos Ejes
Copyright Prometec