Y como primer paso en construir mi robot exterminador de la humanidad, empezaré con la construcción preliminar de un cochecito autónomo con Arduino, quizás un seguidor de líneas, pero ya se verá en que acaba…
NOTA: Este blog y esta serie de entradas de “Cochecito con Arduino” al igual que siempre, lo escribo principalmente para mi mismo… abierto a todos eso sí. Con esto quiero decir que no esperéis de mi ahora un trabajo finalizado y detallado, ya que lo escribo para ayudarme a hacerlo. Escribo lo que voy a hacer o como pienso que debo hacerlo. Es decir, lo escribo antes de haberlo hecho. Lo que pasará es que habrán imprecisiones que iré corrigiendo en post posteriores o retocando en un futuro los anteriores. Poc a poc i bona lletra…
No sé muy bien cómo empezar. Tengo un Arduino, un servo (que no usaré en este caso), y algunos componentes tipo resistencias y leds, pero solo con esto no arranco. Así que lo primero es identificar el material que voy a necesitar, y antes que eso definir qué tipo de cochecito quiero hacer.
Cochecito Arduino de tres ruedas, seguidor de línea o no…
Lo de que siga una línea o no ya lo iré viendo. De momento vamos a hacer que se mueva, ¿vale?. El cochecito tendrá dos ruedas delanteras controladas por motores independientes, detrás tendrá una sola rueda loca. Una madera fina y plana servirá de apoyo al Arduino, la protoboard, y demás circuitos. Bajo la madera estarán las ruedas y supongo que motores…
Sería algo como lo que hay aquí, pero supongo que más cutre aun si cabe…
Para adquirir materiales he mirado varias webs. Y puesto que vivo en Barcelona he mirado Diotronic, Radio Watt y Onda Radio, pero he de decir que son horrorosas. Son tan malas tan malas que hasta se me ha ocurrido montar yo una tienda virtual, e incluso una física (solo que en realidad vivo en Sant Boi y ahí a parte de locos no hay mucho potencial de clientes). Offtopic: tengo alguna idea de negocio rollo tienda virtual + tienda física + centro presencial educativo abierto para niños y jóvenes. Si te interesa como socio y eres de por la zona avisa!!! ;-). Si será por ideas… :-D
En fin que al final abandono la idea de adquirirlo de forma presencial y me quedo con la fantástica web de BricoGeek, a quienes aprovecho para felicitar públicamente. Eso es lo que uno espera de una tienda online: sencilla y agradable de uso, buenos productos, relaciones entre ellos, explicaciones y detalle, blog tecnológico, etc… Bueno, allá vamos…
Lista de materiales:
Arduino: ¿Por qué Arduino?. Pues porque adoro a Arduino. Filosofía open hardware, versatilidad, abundante información, etc…
Protoboard: ¿Por qué?. Pues dado que lo que hacemos son prototipos no nos vamos a poner todavía con circuitos impresos… Ya llegará…
Motor micro metal DC con reductora 30:1 (2 unidades): ¿Por qué?. La verdad, ni idea. Hay varios motores, sin reductora o con reductoras de más o menos potencia. Voy a probar con este y a ver qué pasa… El hecho de poner 2 motores es porque cada una de las ruedas delanteras será controlada de forma independiente por un solo motor.
Controlador de motores doble puente H - L298: ¿Por qué?. Por lo que he leído por ahí Arduino por sí solo no puede controlar motores por un tema de potencia eléctrica. Para controlar un motor, y que dicho control permita regular la velocidad del motor y dirección de giro en cualquier momento es necesario una arquitectura eléctrica conocida como Puente H. El chip L298 proporciona de forma integrada dos puentes H, lo que permite controlar dos motores en un solo chip. El controlador este tiene puesto ese chip por ahí y digo yo que tendrá más cosas, sino de que, ¿eh?. :-D. Además en la propia web de BricoGeek esta fantásticamente bien documentado su uso con Arduino. Digo yo que entonces será fácil, ¿no?
Rueda todo terreno 42x19mm: ¿Por qué?. Miedo!!!. Uno sabe que si en el mundo de la informática (de donde vengo) no hay estándares, pues en el mundo de la robótica (por donde voy) todavía hay menos. Esto van a ser las ruedas delanteras. Y yo ya me estoy viendo que me llega un motor por aquí, unas ruedas por ahí…, y que luego no hay manera de encajarlas…, que el diámetro del eje del motor y su forma no coinciden con el del eje de las ruedas… Para evitar esto pillo estas ruedas que según la web “están especialmente diseñadas para encajar con los motores DC Micro Metal”. Además se venden por parejas. A ver qué tal…
Rueda loca: ¿Por qué?. Pues porque la dirección y la tracción irá en las dos ruedas delanteras, y la parte de atrás con que vaya siguiendo y no arrastre el cuerpo por el suelo pues como que ya nos vale…
Madera fina: ¿Por qué?. Mirar, otros no sé, pero yo al menos esta vez voy a construir el chasis por mí mismo. Vale los hay muy chulos que ya están hechos, cosa que te permite centrarte en otras cosas, pero por otro lado y mirando al futuro…, no puedes entrar en una tienda y decir “deme un chasis para robot exterminador de la humanidad”. Si quieres hacer eso algún día tendrás que empezar hoy a entender también como se construye un chasis más sencillo… En mi caso la madera la saqué serrando un trozo de un “panel cuelga-herramientas” que pille en Leroy Merlin.
Fundas protectoras para motor micro metal (2 und.): ¿Por qué?. Para facilitarnos la vida atornillaremos los motores a la madera con esto…, no vaya a ser que tengamos que pegarlos con chicle… :-D
Manos a la obra (fijaros que aun no he puesto los sensores en la lista). De momento voy pidiendo esto y ya os iré contando cómo va en sucesivas entregas…
Informática, robótica educativa y electrónica para el aprendizaje de niños y principiantes.
Mostrando entradas con la etiqueta arduino. Mostrar todas las entradas
Mostrando entradas con la etiqueta arduino. Mostrar todas las entradas
viernes, 31 de enero de 2014
jueves, 6 de junio de 2013
Controlar un servomotor con Arduino: magia
Y ahora que ya nos hemos hecho mayores, vamos a empezar a ver cosas más divertidas. La primera de ellas, controlar un servomotor HS-311 con Arduino.
Este servo, muy conocido y usado, suele venir al comprar el kit de iniciación básico de Arduino con sus accesorios.
Antes de empezar, comentar que he tomado prestada la información básica de esta entrada desde aquí (NOOBotics), y también de la página de Arduino UNO, y que las dos me han sido muy útiles.
Para empezar, lo básico es conectar el servo al Arduino. Es sencillito, podéis conectarlo directamente (como en esta imagen de ejemplo), o utilizar la protoboard (como he hecho yo, ver ejemplo abajo), pero lo que hay que hacer es lo mismo:- Cable rojo del servo al positivo (pin marcado como 5V de Arduino)
- Cable negro del servo al negativo (uno de los marcados como GND de Arduino)
- Cable amarillo del servo al PIN 9 de Arduino (o a cualquiera de los PINs marcados como PWM: Pulse Width Modulation, o modulación por ancho de pulsos), por donde se enviará la señal de control al servo.
Pero..., ¿Cómo funciona el servomotor?. Me gusta que te hagas esta pregunta. :-D Solo con preguntas como esta conseguirás hacer frente a los robots cuando lleguen..., esto... Trataré de explicarlo con lo que he ido leyendo y aprendiendo por ahí.
De entrada, para que funcione hace falta cargar un programa al Arduino, cosa que más abajo veremos. Pero para entender lo que hará el programa es necesario antes entender como funciona un servo de estos. Un poco de teoría, vamos.
Los que venimos de la nada, o en el mejor de los casos del mundo Lego, un servomotor es un motor en el que le programas la potencia, la dirección del movimiento, y le dices cuanto tiempo ha de estar girando en esa situación. Esa base, aun no siendo mala, no sirve para enfrentarse a un servomotor de modelismo típico como puede ser el HS-311.
Este tipo de servos (como el HS-311) ni siquiera están diseñados para girar continuamente en una misma dirección, de hecho en muchos modelos no son capaces ni siquiera de dar una vuelta completa en una misma dirección. Por el contrario el diseño de los motores ofrece un muy buen control del numero de grados entre 0 y 360 (o el limite menor a 360 que cada fabricante fija) en que puede moverse el eje del motor.
Para hacer una analogía gráfica, podríamos decir que el servo que utilizábamos en Lego WeDo nos permitía directamente mover continuamente las ruedas de un coche, pero no nos permitía moverlas 15 grados. Por el contrario los servos como el HS-311 no nos permiten (directamente) mover las ruedas de un coche, pero si nos permiten decirle a nuestro robot exterminador que levante su brazo ejecutor unos 45º antes de volarnos la cabeza... Para un robot de verdad, al final necesitaremos saber controlar tanto un tipo de motores como otros.
Hasta aquí todo fantástico, Los mundos de Yupi!. Le dices al servo los grados en los que ha de situarse y el va y se sitúa. Pero no. No es tan fácil. Y no es tan fácil porque ¿como le dices al motor la posición en grados en la que ha de situarse?. Pues de entrada hay que saber que todo servo tiene una posición de ángulo mínimo (0 grados) y una posición de ángulo máximo (180 grados). Así que de entrada olvídate de momento de los 360º.
Bueno, pues de lo primero que habrá que hacer por código es establecer los anchos de pulso en microsegundos que se corresponderán con la posición mínima y con la máxima del servo.
¿Y que es el ancho de pulso o PWM?. Pues una buena explicación la he encontrado aquí. Pero yo trataré de explicarlo de nuevo a mi manera para cuando se me haya olvidado (pasado mañana) y tenga que volverlo a leer..., a ver si soy capaz de entenderme... :-).Pues como dice en esa página la modulación por ancho de pulsos es una técnica para transferir energía mediante una señal cuadrada. En esta imagen podéis ver un buen detalle. La tensión máxima (el valor alto de la señal) que aplicaremos serán unos 5V (volts) puesto que Arduino utiliza ese voltaje con el USB que lo alimenta, y el valor bajo pues serán 0V.
Estos servos, y generalmente por especificaciones del fabricante (o eso creo, y si no pues búscalo por un servicio que han abierto ahora nuevo que se llama internet...) definen según cada modelo cual es el ancho de pulso mínimo que hay que enviar para que se sitúe en el ángulo mínimo (0º) y cuál es el máximo (180º). En nuestro caso (servo HS-311) esos valores de ancho de pulso son 600 microsegundos y 2400 microsegundos respectivamente para min y max (más o menos, vamos, que total esto de la electrónica no es una ciencia exacta... ¿¿¿???).
Afortunadamente no estamos solos para mover el servomotor. Tenemos un aliado importante, que se llama Arduino. Y arduino tiene un conjunto de PINs (entre ellos el PIN 9) llamados PWM que están justamente diseñados para cosas como esta de mover un servo. Y además de tener Arduino tenemos unas herramientas más, como es un entorno y lenguaje de programación y además una API o librería de servos!!!. Esto nos va a ayudar muchísimo, ya que solo queda realizar un programa como el que se ve más abajo y cargarlo al Arduino.
Básicamente lo que hace el programa es:
#include <Servo.h> Servo myservo; //create servo object int pos = 0; //servo position int positions[] = {0, 45, 90, 135, 180}; //positions (in degrees) to send to the servo int numPositions = 5; void setup() { //control servo via pin 9 myservo.attach(9, 650, 2350); //start serial comm. for debugging Serial.begin(9600); } void loop() { int i = 0; //iterate over positions for(i = 0; i < numPositions; i++) { pos = positions[i]; //print debug output Serial.println("SETTING:"); Serial.println(pos); //tell servo to set the new position myservo.write(pos); //wait for two seconds delay(2000); } }
- Incluye la librería "Servo.h"
- Inicia unas variables, entre ellas un objeto "myservo"
- Asocia (con attach) el control del servo al PIN 9, y establece los anchos de pulso mínimo y máximo para los grados mínimo (0 grado) y máximo (180 grados) que admite el motor.
- Establece (con Serial.begin) la velocidad en baudios a 9600 por segundo. Esto ya lo explicare otro día..., si me entero de para que vale aquí... :-(
- Y luego entra en un bucle donde (con write) le indica directamente al servo a qué posición en grados a de situarse. En el ejemplo itera continuamente en el mismo bucle pasando el motor continuamente a los grados 0, 45, 90, 135 y 180 de forma indefinida, y esperando un par de segundos en cada posición.
Esta librería es la que se encarga de comunicar y transformar a bajo nivel los grados que le indicas a los que quieres que se ponga el servo, a señales específicas (un porron de señales cuadradas tipo PWM) a los PINs de Arduino, y que este hará llegar al servo a través del PIN 9 indicado. Es decir, la magia es lo que no ves. Y lo que solo los magos pueden ver.
Ala!. Y ponlo ya en marcha que por hoy ya esta!.
;-)
viernes, 31 de mayo de 2013
Arduino básico. ¿Como empezar?
Ya se, ya se que en estos primeros posts (y quizás en todos los demás) voy saltando de un tema a otro sin un aparente orden o concierto. Pero creerme sí que lo hay (o no). El orden que sigo es el que yo mismo me voy buscando, de temáticas diferentes pero siempre con el objetivo de aprender y facilitar que mi nene (o quien lea este blog) pueda ir aprendiendo pausadamente y desde la base sin demasiado encasillamiento en un tema concreto.
Arduino es una maravilla. Paradigma del hardware libre, nos facilita todo un ordenador en la palma de la mano. No es un ordenador de sobremesa o portátil como estamos acostumbrados a ver, pero si es todo un ordenador en el sentido de contener una CPU, una memoria, entradas y salidas digitales y analógicas, y capacidad de programarse.
Cualquier "cosa" externa al Arduino con la que queramos que interactue necesitará no solo de saber programarlo, sino de la necesidad de entrar en temas de electrónica, y por lo tanto hardware. Y es que un robot es eso, hardware y software.
Manos a la obra!. Seguidamente vamos a ver como empezar a utilizar Arduino.
NOTA: Este primer ejemplo básico, y casi todo lo que aquí se condensa en pocos pasos, ha sido obtenido directamente de la propia web de Arduino, tanto de la versión en Español como en la Inglesa.
1 - Adquirir una placa Arduino. De cualquier modelo. Yo uso una Arduino UNO.
2 - Conectar la Placa al puerto USB del ordenador. Esto proporciona alimentación a la Placa (seguramente se encenderá alguna lucecita por ahi), y por tanto alimentará también a los componentes que conectes a ella. Pero no te confíes, la alimentación no te dará mucha potencia, con lo que si quieres conectar varios cacharrillos necesitaras alimentarlos externamente con pilas.
3 - Descargar sofware de aquí. Descargar y luego instalar, claro.
4 - Abrir entorno IDE de Arduino. Tras instalar aparecerá un entorno IDE como este:
5 - Configurar entorno para el acceso a Arduino. Lo primero que hay que hacer es:
6 - Cargar el primer ejemplo básico: Blink. Ir al menú Archivo>Ejemplos>01.Basics>Blink.
Este ejemplo simplemente hace parpadear a un LED. Pero claro, hay que conectar el LED. Considerar también que el lenguaje de programación de Arduino esta basado en C/C++, aunque también se puede utilizar otros como Scratch.
7 - Conectar un LED al Arduino. Aquí podéis ver un ejemplo tanto "real" como en plan esquemático de donde y como hay que conectar el LED. Si tenéis Arduino conectado por USB y el LED no va a estar encendido mucho rato, podéis probar sin poner en medio la resistencia, y cruzar los dedos para que el LED no se estropeé a la primera...
Arduino es una maravilla. Paradigma del hardware libre, nos facilita todo un ordenador en la palma de la mano. No es un ordenador de sobremesa o portátil como estamos acostumbrados a ver, pero si es todo un ordenador en el sentido de contener una CPU, una memoria, entradas y salidas digitales y analógicas, y capacidad de programarse.Cualquier "cosa" externa al Arduino con la que queramos que interactue necesitará no solo de saber programarlo, sino de la necesidad de entrar en temas de electrónica, y por lo tanto hardware. Y es que un robot es eso, hardware y software.
Manos a la obra!. Seguidamente vamos a ver como empezar a utilizar Arduino.
NOTA: Este primer ejemplo básico, y casi todo lo que aquí se condensa en pocos pasos, ha sido obtenido directamente de la propia web de Arduino, tanto de la versión en Español como en la Inglesa.
1 - Adquirir una placa Arduino. De cualquier modelo. Yo uso una Arduino UNO.
2 - Conectar la Placa al puerto USB del ordenador. Esto proporciona alimentación a la Placa (seguramente se encenderá alguna lucecita por ahi), y por tanto alimentará también a los componentes que conectes a ella. Pero no te confíes, la alimentación no te dará mucha potencia, con lo que si quieres conectar varios cacharrillos necesitaras alimentarlos externamente con pilas.
3 - Descargar sofware de aquí. Descargar y luego instalar, claro.
4 - Abrir entorno IDE de Arduino. Tras instalar aparecerá un entorno IDE como este:
5 - Configurar entorno para el acceso a Arduino. Lo primero que hay que hacer es:
- Ir al menú de Herramientas>Tarjetas y seleccionar el modelo de tarjeta Arduino. Como he dicho en mi caso es Arduino UNO.
- Ir al menú de Herramientas>Puerto Serial y seleccionar el puerto serie al que esta conectado la placa Arduino. En un Windows puedes tratar de buscar esto yendo al Administrador de Dispositivos de Windows y abrir la opción de ver los puertos COM, como la imagen siguiente, donde se ve que en mi caso se me ha conectado al puerto COM10. Y si no, pues pruébalos todos hasta que funcione... :-)
6 - Cargar el primer ejemplo básico: Blink. Ir al menú Archivo>Ejemplos>01.Basics>Blink.
Este ejemplo simplemente hace parpadear a un LED. Pero claro, hay que conectar el LED. Considerar también que el lenguaje de programación de Arduino esta basado en C/C++, aunque también se puede utilizar otros como Scratch.
7 - Conectar un LED al Arduino. Aquí podéis ver un ejemplo tanto "real" como en plan esquemático de donde y como hay que conectar el LED. Si tenéis Arduino conectado por USB y el LED no va a estar encendido mucho rato, podéis probar sin poner en medio la resistencia, y cruzar los dedos para que el LED no se estropeé a la primera...
Recordar que la pata larga del LED es el positivo (y por lo tanto va al PIN 13 de Arduino, en este ejemplo), y la corta es el negativo y va al PIN GND (ground, toma de tierra).
8 - Cargar el programa al Arduino. Ya esta todo listo. Tenemos nuestro Arduino encendido, con el LED conectado, el IDE en marcha y configurado con el programa Link en pantalla. Solo queda cargar ese programa al Arduino. Para esto, y si todo esta bien, solo hay que darle al icono
del entorno IDE del Arduino.
Y ya esta!!!. Felicidades!!!. Si todos los pasos han salido bien el LED empezará a parpadear. Misión cumplida. De ahí a construir el robot que ha de aniquilar a toda la humanidad ya solo queda conectar algunos cables y componentes más y tirar unas cuantas más lineas de código... ;-D
Suscribirse a:
Entradas (Atom)














