viernes, 31 de enero de 2014

Cochecito con Arduino (1)

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…

Robot exterminador de la humanidad – (0)

Sí, he visto muchas películas. Terminator, Matrix y otras.

Yo quiero construir uno de esos bichos, voy a hacerlo, algún día. Aquellos que me conocen bien me han escuchado decir un montón de veces que mi objetivo vital, uno de ellos al menos, es construir un robot exterminador de la humanidad. Y no, no le voy a dotar de armas, de hecho no es mi intención ni mi objetivo que nos extermine, mi intención es solo construir un robot tan pero tan completo e inteligente que por sí solo decidirá que lo mejor que puede hacer es exterminarnos a todos. No será desde luego porque yo lo programe para ello, no. Lo que ocurrirá es que creo que él llegará por sí mismo a esta conclusión.

Ah, ¿la resistencia humana?. No la habrá. Todas las películas fallan en eso. Si los robots toman un día esa decisión por si solos, de verdad, no tendremos ninguna opción. Ninguna.

Eh! Que nadie se asuste por esta entrada fuera de lugar, eh!. No estoy loco, sabemos lo que queremos!. Además, técnicamente me queda aun “un poco lejos”. :-D

jueves, 13 de junio de 2013

Papa, ¿Y qué es la electricidad?


Si, sé que he hablado antes de electrónica básica, e incluso llegué a exponer la ley de Ohm. Pero hoy voy a hacer un regreso a algo todavía más básico que eso. Hoy voy a tratar de exponer algunos de los fundamentos más básicos de la electricidad.

Esta entrada de hoy la he desarrollado atendiendo al reclamo de todos aquellos miles y miles de comentarios (¿¿¿ :-D ???) que me estáis poniendo en cada una de las entradas pidiéndome que explique fundamentos más básicos.

He de decir y advertir que al poco que tengas una pequeña base de electrónica esta entrada de hoy te será completamente inútil y no te aportará nada en absoluto. Por el contrario, si te estás asomando por primera vez a este mundillo puede que te ayuda a clarificar algún concepto. Por otra parte también pido disculpas a aquellos entendidos del tema que tras leer esta entrada puedan evidenciar pequeñas confusiones o directamente monumentales falacias argumentales. El objetivo que tengo no es hacer definiciones categóricas, sino solo facilitar con algún que otro ejemplo el entendimiento elemental de la electricidad. Y empiezo…

Carga eléctrica
Lo primero a entender, creo yo, es que todo en este mundo tiene una determinada carga eléctrica. Es sencillo. Estamos hechos de átomos que tienen electrones y protones (entre otros bichillos…). Cada elemento básico (de aquellos de la tabla periódica de elementos), tiene una diferente carga eléctrica, y la combinación de esos elementos (en una manzana, un humano, un robot exterminador, o un kilo de plutonio) proporciona a cada cuerpo una diferente carga eléctrica (y no vayas a pensar que la carga eléctrica de esa combinación es la suma de las cargas individuales, es bastante más complejo el tema).

Diferencia de potencial (Voltaje - V)
Atendiendo a lo anterior todos los cuerpos tienen un potencialeléctrico, la diferencia de potencial (también llamada tension, o voltaje) puede entenderse como la diferencia de carga eléctrica (en realidad potencial eléctrico) entre dos cuerpos. El voltaje se mide en voltios (volts), y típicamente se representa con una letra ‘V’ (como la de los lagartos…).
.
Dado que todos los cuerpos y cosas del mundo mundial tienen potencial eléctrico (bueno, ignoro si hay algunas cosas que no lo tienen, como la materia oscura, o como Justin Bieber…) pues entonces existe la posibilidad de medir esa diferencia de potencial de los cuerpos, cosa que puede hacerse con un tester.


Corriente eléctrica (Intensidad - I)
Que haya una diferencia de potencial eléctrico entre dos cuerpos no significa necesariamente que haya corriente eléctrica entre ellos. Por ejemplo, entre la pantalla de mi portátil y el plato de sopa que ha dejado mi nene debe haber alguna diferencia de potencial, pero sin embargo no hay corriente entre ellos. Cuando entre cuerpos con diferencias de potencial se produce una conexión eléctrica entre ellos (por ejemplo, se conecta un cable) se produce un flujo de carga eléctrica (electrones) entre el cuerpo que tiene una carga mayor y el que tiene una menor. Ese flujo eléctrico es lo que se llama intensidad, y suele representarse por la letra ‘I’ y medirse en amperios.
.
La corriente eléctrica se produce entre un “emisor” de electrones (que llamaremos positivo ‘+’) y un receptor de electrones (que llamaremos negativo ‘-’, masa, o tierra). Cuando no hay un punto concreto negativo respecto al que considerar el positivo, se considera que el negativo es cero, o masa (Ground o GND en inglés), y se asocia a una conexión a tierra (que se toma como 0 voltios, siempre respecto al positivo).

Cuando se produce este flujo, y si no hay oposición que lo impida, este flujo de corriente seguirá en el tiempo hasta que la diferencia de potencial entre los dos puntos llegue a cero (es decir ambos puntos origen y destino tengan el mismo potencial eléctrico). En ese momento cesará la corriente. Por supuesto, si tenemos un elemento generador de corriente (como por ejemplo una pila) que mantenga una diferencia de potencial estable entre dos puntos (borne positivo y borne negativo), la corriente seguirá circulando estable y la diferencia de potencial permanecerá hasta que se agote dicha fuente generadora de corriente, la diferencia de potencial entre bornes pase a cero, y por lo tanto deje de haber corriente eléctrica.

Resistencia eléctrica (Resistencia - R)
La resistencia eléctrica es la oposición que deben vencer los electrones para poder desplazarse a través de un conductor, es decir es la oposición que encuentra la corriente eléctrica en su paso por un conductor. La resistencia se suele representar por la letra ‘R’, y se mide en ohms (ohmios) que se representan a su vez con el símbolo (Ω).

Así podemos entender que un conductor eléctrico es un elemento (o cosa) que ofrece una baja resistencia al paso de la electricidad. En general los metales (cobre, hierro, oro, etc…) suelen ser buenos conductores, y con ellos se fabrican cables. El agua es también buen conductor. Por el contrario el plástico, la madera, el aire o tantos otros son malos conductores, ya que ofrecen una muy alta resistencia eléctrica (que podría tender al infinito).

Comprendiendo la ley de Ohm
Como puede intuirse la resistencia R es inversamente proporcional a la Intensidad I. A una mayor resistencia habrá una menor intensidad, y a una mayor intensidad, se encontrará una menor resistencia. Fijaros que en este supuesto el voltaje permanece invariable (siempre que haya un elemento generador eléctrico), es decir, tanto si la resistencia es infinita (y por lo tanto no hay ninguna intensidad –no hay corriente eléctrica-), como si la resistencia es cero (y por tanto hay corriente –flujo de electrones-), el voltaje permanece fijo.
Esto nos lleva a la ley de Ohm:
  •  que dice: V = I * R
  • pero también puede expresarse como: I = V / R
  • o como: R = V / I

Es decir, a mayor resistencia menor intensidad, a mayor intensidad menor resistencia. O lo que es lo mismo a igual resistencia pero mayor intensidad, significa que el voltaje entre los puntos (a un lado y al otro de la resistencia) es mayor, o que a la misma intensidad pero con una resistencia mayor significa que también el voltaje entre los dos puntos era mayor. La ley de Ohm es la base de toda la electrónica y se utilizará continuamente, de ahí a que sea muy necesario que estos conceptos estén muy claros.

El ejemplo de las bañeras de agua
Para ilustrar un poco todo lo anterior (y entenderme que es solo un ejemplo ilustrativo, pero no es científicamente equivalente), podéis imaginaros dos estanques de agua de las mismas dimensiones que están puestos uno al lado del otro al mismo nivel. Sin embargo uno tiene una masa de agua mucho mayor que el otro.

Podríamos (haciendo una serie de falacias argumentales) hacer una equivalencia imaginativa suponiendo que esta masa de agua es algo así como el potencial electrito que contiene la bañera. Las dos bañeras tienen diferente cantidad de agua, por lo tanto en nuestro ejemplo imaginativo es como si tuvieran diferente potencial eléctrico. Es decir, hay una diferencia (imaginativa) de potencial entre las dos.
Ahora suponemos que ponemos en la parte inferior de las bañeras un conducto o tubo de agua que las conecta. Está claro que la bañera con más carga de agua (eléctrica, en nuestra imaginación) transferirá parte de su carga a la bañera que tenga menos. Es decir, se producirá una corriente de agua (imagina corriente eléctrica) entre las dos bañeras. Esta corriente se seguirá produciendo hasta que las dos bañeras tengan la misma masa de agua, es decir, cuando la diferencia de masa (potencial eléctrico) sea cero. En ese momento dejara de haber flujo de corriente entre las dos. Por supuesto que si la bañera con más carga tuviera un grifo permanentemente abierto proporcionándole agua (es decir, un generador de corriente) el flujo seguiría produciéndose eternamente…

En este ejemplo el conductor (tubo de agua) tiene también una resistencia. Puede ser un tubo muy grueso y por lo tanto el intercambio de corriente se produce casi al instante, la resistencia es muy baja;  o un tubo finito lleno de piedras, arena y calamares en su tinta que dificulten el paso del agua. Aun así, si dicho paso es posible aunque sea gota a gota, el flujo de corriente seguirá produciéndose pero está claro que a menor intensidad. Hemos aumentado la resistencia, y por lo tanto ha bajado la intensidad.

Y cuando el cielo nos caiga sobre la tierra
Y ahora otro pequeño ejemplo gráfico para ilustrar todo esto.
.
De todos es sabido que el aire no es un buen conductor eléctrico (no te “picas” cuando pasas por al lado de un enchufe). Sin embargo es posible que en ciertas condiciones especiales, y tras una gran diferencia de potencial entre diferentes elementos (nubes con altas cargas electromagnéticas producidas por la acumulación de agua, corrientes de aire de diferentes temperaturas, y otros efectos atmosféricos) sean capaces de vencer la resistencia del aire al quedar este ionizado. Es entonces cuando vemos que toda la diferencia de potencial entre nubes, o entre estas y la tierra produce esas maravillas que son los rayos y que no dejan de ser una descarga eléctrica por un elemento (el aire) que debido a la ionización se ha convertido momentáneamente en un conductor de electricidad, siempre que hayan realmente diferencias de potenciales muy fuertes entre el origen (nubes) y el destino (otras nubes o la tierra).

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.

#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);   } }
Básicamente lo que hace el programa es:
  • 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.
A parte de lo que veis (el programa) esta lo que no veis: la librería "Servo.h" y lo que hay detrás "Servo.cpp" (que si podéis verlo si lo buscáis dentro de la instalación del software de Arduino) y el propio Arduino (que vale!, de verlo lo ves, pero como no te metas en los chips cuesta de pillar que hace y como exactamente... ;-)

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:
  • 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

martes, 28 de mayo de 2013

Recursos externos Lego WeDo

Y ya llego el día en que Lego WeDo se acabo para mi, que no para mi nene, claro. Se acabo quiero decir que como programador que soy creo que ya he superado todos los misterios necesarios para desarrollar aplicaciones (utilizando Scratch) que hagan uso de su motor, su sensor de proximidad y su sensor de inclinación (ver dos entradas anteriores). Misterio resuelto.

De ahí a mi pretensión real de construir un robot que someta, esclavice y aniquile a toda la humanidad ya solo quedan unos temillas mecánicos sin importancia por resolver. Cuestión de ir ensamblando piececitas lego...

Para tan glorioso logro, salvar los temas mecánicos que a mi particularmente no se me dan nada bien, he encontrado por ahí un conjunto de documentos PowerPoint (.ppt) y PDF que os pueden ser muy útiles para tomar ideas y así avanzaros a mi diabólica creación.

Aquí podéis descargar un didáctico documento PPT donde explica el uso de ruedas y ejes. A mi este documento es el que me ha parecido más básico y evidente de todos, y tampoco aporta nada especial a mi entender.

Esto otro en cambio explica el uso de palancas. Y para los que (como yo) no habían montado jamas ni la tapa de una caja de zapatos, aquí pueden empezar a encontrar alguna idea interesante que hacer con piezas lego wedo y sus engranajes.

Yendo un poco más allá en este otro vemos el uso muy didáctico de poleas, donde también muestra diversas formas de uso de las correas (vamos, las gomas de pollo amarillas que vienen con wedo).


Y también este específico sobre el uso de engranajes, que también me ha sido muy instructivo.


Y para finalizar tenemos el detalle de unos ejemplos prácticos, donde algunos son los que aparecen en el propio vídeo promocional de Lego Wedo:


Y sin con todo esto no tenéis suficiente y de verdad queréis estar preparados para un ataque robot, entonces tratar vosotros mismos de construir este impresionante Marine Helicopter.


Espero que todos estos recursos externos sean de vuestro interés, y del de vuestros peques.

viernes, 24 de mayo de 2013

Cochecito: el primer robot de verdad

Vale!. Si, es solo un cochecito en realidad, y bastante pero que muy bastante limitado. Sea como sea es programable, por lo que entiendo que podría entrar en la categoría de robot. No me quitéis mi ilusión, ¿eh?

Un cochecito robot hecho con las piezas Lego WeDo, y programado con Scratch.

El programa como se ve es bien simple, tras inicializar el motor entramos en un par de bucles al interior del cual se mueve el motor (y el coche) y se realizan pequeñas pausas. Del bucle interior solo se sale si el sensor detecta que el cochecito se acerca a un punto de colisión. En ese momento el coche se para, y vuelve a la marcha cuando desaparece el obstáculo.

Muy simple, pero perfectamente efectivo e ilustrativo de como funcionan algunos de los componentes principales de WeDo, es decir, el motor y el sensor de distancia.

A modo ilustrativo podéis ver alguna que otra imagen de como ha quedado este cochecito.

Ah, y lo siento por la parte trasera..., el paquete Lego WeDo básico solo trae dos ruedas... :-(
Para las traseras he tenido que hacer un apaño...

NOTA: Estoy enfrascado ahora en un nuevo cacharro WeDo, que es el manejo de un "avión" moviendo su hélice a un lado y a otro en función de la inclinación (usando el sensor de inclinación) de WeDo, pero parece que el HUB WeDo no soporta más de dos componentes conectados.

Esto lo digo porque al introducir el sensor de proximidad en el cacharro (Motor+Sensor inclinación+Sensor proximidad) empiezo a tener comportamientos no esperados. Vamos, que o me falla el motor o me falla el sensor de proximidad...
:-(.

¿Alguien de los numerosos seguidores de este blog podría constatar esto?. Gracias...

ACTUALIZACION: Comprobado!. El HUB Lego WeDo soporta un máximo de dos componentes conectados. He cambiado de posicion el sensor de distancia por el de inclinación, y ahora es la inclinación el que falla. A parte de que el motor no enciende. Una gran limitación a mi entender.

Tampoco no alcanzo a entender como no esta previsto esto, ya que aun cuando el HUB solo tiene dos conectores, el propio conector del motor tiene como una extensión que parece permitir que otros componentes se conecten a él como si se tratara de una extensión del HUB, tal como se ve en la imagen.

Pero no funciona...