miércoles, 29 de diciembre de 2010

Un poco de privacidad

Siempre me ha sorprendido la falta de cortinas en centro Europa. Desde mi mirada latina, el poder asomarse a la vida privada del ciudadano holandés, sueco o alemán, con tan solo pasearse por la calle, resulta extremadamente inquietante. Dicen que es por su cultura calvinista, no sé, el caso es que no me gustaría vivir en un primer piso en esos países...
El caso es que el bueno de Niklas Roy, supongo que harto de esta situación, ha dado un primer paso para solucionarlo, aunque la cortina se le quedó algo pequeña:





Más información sobre cómo hizo el proyecto aquí.


Hasta pronto.

domingo, 26 de diciembre de 2010

Arduino AREF

La tensión de referencia del convertidor analógico del micro de Arduino recibe el nombre, poco original, de AREF. En la siguiente dirección web hay un tutorial que explica con detalle las características de esta tensión y cual es su influencia en la conversión Analogica Digital. El didáctico link es
http://tronixstuff.wordpress.com/2010/12/07/tutorial-arduino-and-the-aref-pin/

Hasta la próxima.

viernes, 10 de diciembre de 2010

Camera Axe 3.0

Como amante de la fotografía me alegra ver que hay desarrollos de HW libre acerca de esta temática.
El proyecto Camera Axe 3.0 es un equipo para accionar el disparo de la cámara al recibir una señal de un sensor. El tipo de sensor puede ser de presencia, de sonido, o de luz.
El resultado es una herramienta que permite controlar con más precisión el instante de disparo y que permite hacer fotos del tipo:

miércoles, 8 de diciembre de 2010

Arduino Ethernet shield oficial

El shield de Ethernet "oficial" de Arduino, está basado en el chip W5100 de WizNet que es un controlador de Ethernet.


Algunos puntos generales de funcionalidad:
  • W5100 Tiene todo el stack IP y puede hacer TCP o UDP para hasta cuatro sockets simultáneos.
  • El shield tiene seis LEDs para debugar la conexión.
  • Se puede programar con la librería estándar de Ethernet que se encuentra en la web de Arduino.
  • Tiene un pulsador para el reset. Este resetea el shield y también Arduino.
  • Este shield tiene populado un conector para insertar una memoria microSD. Esta memoria puede servir para guardar ficheros que podremos visualizar a través del navegador, cuando configuremos el equipo como un sencillo servidor web. Hay un tutorial de Adafruit que explica cómo visualizar los ficheros que hay en la memoria SD: http://www.ladyada.net/learn/arduino/ethfiles.html
Entrando en más detalle sobre el hardware del shield:
  • El bus SPI se comparte entre el controlador de Ethernet y la memoria SD. Se dispone de dos señales de chip select, una para Ethernet (SS) y otra para la memoria microSD (SD_CS). Según dispongamos de estos chip selects, el SPI tendrá una u otra función.
  • La señal de chip select de Ethernet, SS, tiene lógica negada, es decir a nivel 0 se activa el chip select del SPI. Así mismo el integrado W5100 tiene un pin de enable del SPI (SEN), que tiene lógica positiva, así que este enable se controla negando el chip select, es decir SEN = /SS. El propósito de esta conexión es deshabilitar el envio de mensajes a través del SPI por parte de W5100 en caso que se esté comunicando con la memoria microSD, para evitar conflicto en el bus SPI. Curiosamente, para hacer la negación del esta señal se utiliza un integrado 74LVC14D (seis inversores con trigger de schmitt) que se podrían haber sustituido, a mi entender, por un sencillo transistor.
  • A pesar de estar alimentado W5100 a 3.3V, las señales del SPI vienen directamente de la placa Arduino, y por tanto son de 5V. Esto es así, porque W5100 permite hasta 5.5V de tensión de entrada en sus pines.
  • El integrado STM812 es un circuito de reset que tiene como función activar el reset del W5100 (/RESET) cuando la tensión de alimentación baja por debajo de 1V. También hace la función de eliminar el bounce del pulsador de reset, y de prolongar la señal de reset al alimentar el equipo.
  • Se dispone de una conexión típica desde un phyter de Ethernet al conector RJ45. Con los dos pares de señales diferenciales de comunicación, para transmisión y recepción, y la etapa de resistencias y condensadores de adaptación. Algunos conectores RJ45 disponen de dos LEDs de indicación. A pesar que el RJ45 proporcionado en el shield no dispone de esos LEDs, sí que hay dos señales de control, son la señal de presencia de link (LINKLED), que se queda fija cuando hay un link correcto y es pulsante durante el proceso de transmisión o recepción. La segunda señal de control de led es la de indicación de velocidad (SPD), esta señal se activa cuando el link es de 100Mbps. Ambas señales tienen lógica negativa.
  • El conector RJ45 de Pulse, tiene el trafo de adaptación incorporado en su interior. La referencia de Pulse es, al menos en mi shield, J0012D21NL.
  • Hay un puente de soldadura, que si se suelda,  lleva la señal de interrupción de W5100 (/INT) a Arduino a través del pin PD2. Esta señal de interrupción se activa en caso que se requiera la atención del micro, es decir, en caso de conexión, desconexión, recepción de datos o timeout. Es una señal de lógica negada. Se desactiva la interrupción accediendo a registros internos (IR o Sn_IR). Esta señal de interrupción no está soportada por la librería estándar de programación (http://arduino.cc/en/Reference/Ethernet)
  • La alimentacion del tanto el integrado de Ethernet como del a memoria microSD se hace a 3.3V. Ya que la tensión 3.3V propia de Arduino no puede proporcionar potencia suficiente (la razón la podeís encontrar en un post anterior), se tiene que convertir los 5V a 3.3V, en este caso, con un regulador lineal. Recordar que la corriente máxima que se dispone a 5V para el shield es 150mA (siendo conservadores). El regulador lineal utilizado en este shield es el MC33269ST-3.3 de ON Semiconductors. La tensión de entrada al regulador es de 5V, la de salida es de 3.3V, por tanto hay un dropout de 1.7V. La potencia máxima de disipación viene fijada por el plano de radiador que se le haya puesto al regulador. En este shield, se le ha limitado a 6mm en el peor caso (de hecho el plano se extiende con unas vías de una forma algo extraña). Con estas dimensiones, consultando el datasheet se ve que la máxima potencia de disipación es de 0.83W, que junto con el dropout, nos da una corriente de 480mA. Es suficiente para poder suministrar la potencia requerida, y está muy cerca de la máxima corriente que se puede suministrar cuando se alimenta por USB (500mA).
  •  En el shield, por defecto se proporciona un zócalo para insertar una memoria microSD. También sería posible, quitando ese zócalo, soldar otro para una memoria SD. La comunicación con ambas memorias es a través del bus SPI, tal como comenté anteriormente, con el chip select SD_CS. Para adaptar las señales del SPI que vienen del Arduino a 5V, a 3.3V, se utilizan divisores de tensión. En cuanto a la memoria SD, tiene dos señales adicionales de control que la microSD no  tiene, son la señal de detección DETECT y la señal de protección contra escritura WP. Se puede fijar la protección contra escritura con un puente de soldadura.
  • Existe un LED, L, que está conectado con la señal de clock del SPI, de forma que cuando hay comunicación a través el bus, es LED parpadea.
En futuros posts hablaré de la funcionalidad de este shield.

Hasta pronto.

sábado, 6 de noviembre de 2010

Meteotek 08

Hará ya un año que supe del lanzamiento de un globo de alta altitud por parte de unos estudiantes de la Bisbal de l´Empordà, Girona.
Al proyecto, que formaba parte de sus estudios, le llamaron Meteotek08.
El maravilloso resultado lo podéis ver aquí:
http://www.flickr.com/photos/meteotek08

La memoria del proyecto en castellano se puede encontrar en:
http://www.teslabs.com/meteotek08/fitxers/docs/meteotek08_castella.pdf
No tiene desperdicio.

El micro es un Atmega1281, ¿no se podría hacer algo similar con un Arduino?.

Se nota que se lo pasaron bien desarrollando el sistema, afrontando los problemas con nuevas ideas, superándose a sí mismos. Como en aquel poema de Cavafis:
Cuando emprendas tu viaje hacia Ítaca
debes rogar que el viaje sea largo,
lleno de peripecias, lleno de experiencias.
No has de temer ni a los lestrigones ni a los cíclopes,
ni la cólera del airado Posidón.
Nunca tales monstruos hallarás en tu ruta
si tu pensamiento es elevado, si una exquisita
emoción penetra en tu alma y en tu cuerpo.
El largo viaje, lleno de altos y bajos, es lo que justifica afrontar nuevos retos cada día. No es la gratificación, que a veces no llega, sino el aprendizaje y las vivencias del camino.

Hasta pronto.

viernes, 5 de noviembre de 2010

mbed. NXP

El intento de NXP y de ARM para no perder el paso en el mundo del prototipaje y del hardware libre, es la plataforma mbed.
La plataforma mbed consta de un módulo y un software online de compilación. Algunas de las características del módulo:
- Dispone de un micro LPC1768. ARM Cortex-M3 a  96MHz, 512KB FLASH, 64KB RAM.
- El micro dispone MAC Ethernet, en el módulo mbed hay un Phyter, así que sólo tenemos que conectar el módulo al RJ45 (y programarlo) para acceder a internet.
- USB Device and Host, CAN, SPI, I2C y otras I/O.
- USB built-in
- Se puede alimentar a través del USB o a través de alimentación externa

Un diagrama de bloques suministrado por la web de mbed:


El pin out del módulo:


Un vídeo de demostración sobre cómo se realiza la conexión a internet:
Quizás lo más novedoso, y lo que hay que tener en cuenta para el futuro, es que el compilador está en la web. Es un compilador online, de forma que no tenemos que preocuparnos por el sistema operativo que estemos corriendo, ni tenemos que instalarnos una aplicación. Es la llegada del cloud computing al mundo del prototipaje hardware. No creo que tarden en haber imitadores.
Las limitaciones de este cloud computing son claras, no se puede debugar con el JTAG, con breakpoints, accediendo a registros... no es el sustituto de un entorno profesional de desarrollo. Se trata de un entorno para poner en marcha a nivel básico el módulo sin demasiadas complicaciones.

Al igual que otros módulos de prototipaje que existen en el mercado y que empiezan a asomar la cabeza (Netduino), este módulo es mucho más potente que Arduino. Es más potente y más caro. A diferencia de Arduino no es un equipo autónomo, necesitamos una placa de prototipaje para disfrutar de sus posibilidades, lo que no deja de ser, en algunas ocasiones, un problema.

En mis primeros años como ingeniero, me tocó redactar las instrucciones de montaje de un equipo de test. Un compañero senior me dio una pauta sencilla, esas instrucciones de montaje debían estar escritas de forma que su hijo de cuatro años pudiera seguirlas. Lo cierto es que siempre he intentado seguir esa pauta cuando me he vuelto a encontrar en las circunstancia de tener que escribir un documento técnico. Lo que nunca había visto antes es una demostración empírica:

Hasta pronto.

miércoles, 3 de noviembre de 2010

Ardulab

Complubot, del que ya hablamos en anteriores posts, ha desarrollado una herramienta didáctica, para controlar el Arduino. Se trata del Ardulab.
Con esta herramienta, diseñada con herramientas de LabView, se puede controlar visualmente los pines del Arduino, de forma que el usuario pueda controlar los pines sin necesidad de programar.
Los siguientes vídeos son tutoriales sobre Ardulab:



martes, 2 de noviembre de 2010

ArduSoccerBot

Complubot es el grupo de alumnos del aula de robótica del instituto Miguel Hernández de Alcalá de Henares. El grupo está guiado por el tutor Eduardo Gallego.
Su herramienta didáctica básica es el ArduSoccerBot, un robot construido con Arduino.
Entre los logros de este grupo de estudiantes es ganar diversos eventos de Robot soccer internacionales. Un ejemplo:

El propio Eduardo explica en un post en el blog de Arduino, cómo están construidos estos robots:
Desde hace unos dos años estos robots usan Arduino (cuatro procesadores cada uno de ellos). Antes usaban uno o dos procesadores mucho más potentes, pero para ellos (que tienen menos de 19 años para poder participar en esta competición) es mucho más sencillo dividir el "problema" en tareas independientes que ejecuta separadamente cada uno de los procesadores. Lo que se llama un sistema distribuido.
En la versión actual ambos robots llevan programas muy similares aunque uno desempeña el roll de delantero y otro de portero. Usan lo que llamamos "ejecución orientada al comportamiento" donde cada uno de los robots adopta una actitud diferente en función de la información que recibe de los sensores: 24 sensores para localizar la pelota, 2 sensores adicionales para saber si está muy cerca, 4 sensores de US para determinar su posición en el campo, una brújula electrónica, cuatro sensores de luz en el suelo para detectar las líneas del campo.
Como en cualquier otra materia, la mejor forma de enseñar es divirtiendo, compartiendo el entusiasmo, que es un virus que se contagia.
Los robots son una gran herramienta para enseñar electrónica a los jóvenes, permitiéndoles que aprendan jugando.

Hasta pronto.

domingo, 31 de octubre de 2010

Arduino Ethernet Shields. Opciones.

Existen diferentes alternativas para conectar Arduino a internet a través de Ethernet. Voy a hablar de las que conocemos e intentaremos hacer un análisis de cada una de ellas, para saber sus ventajas y sus inconvenientes.

En realidad se trata de un PCB donde insertar el módulo Ethernet. El módulo tienes que comprarlo aparte. Los módulos recomendados por Adafruit son XPort, XPort Direct, XPort Direct+ o WIZnet 811MJ.

En los siguientes posts hablaremos de algunas de las características de los módulos. Interemos hacer una comparativa entre ellos, teniendo en cuenta su funcionalidad, las librerías de programación disponibles, las posibilidades de prototipaje que disponen y finalmente, el coste del shield.
Hasta pronto.

sábado, 30 de octubre de 2010

Dyson. El arte de la ingeniería.

James Dyson, ingeniero, inventor, creador de la fabulosa aspiradora Dyson, dió una conferencia en el MIT hará unos años. La conferencia tuvo como título "el Arte de la ingeniería".
Algunas de los interesantes puntos que trató Dyson en la conferencia:

Inspiración vs transpiración
En la conferencia Dyson dio una lección de entusiasmo inspirador. Explicó que hizo 5100 prototipos de su aspiradora antes de darla por buena, y decidir comercializarla. A diferencia de lo que suelen decir los gurús de los negocios burbuja, Dyson esperó a tener un producto suficientemente validado para sacarlo al mercado. Entendía que debía, si quería tener éxito, tener un producto fiable. No quería precipitarse, su apuesta era a largo plazo. Si hubiera sacado un producto deficiente, no hubiera tenido futuro dentro de un mercado competitivo.

Calidad vs precio
Otro punto interesante de la conferencia, en la que Dyson insistió repetidamente, fue el hecho que su aspiradora, a pesar de ser mucho más cara que las de la competencia, se había hecho con el 25% del mercado norteamericano. La conclusión a la que él llegaba, era que si el producto tenía suficiente calidad a nivel de ingeniería, si era diferente y claramente mejor, el consumidor estaba dispuesto a gastarse más dinero por el producto. Dyson no entraba en la guerra de precios, entraba en la guerra de la calidad y el diseño.

Patente vs invención
Cuando su revolucionaria aspiradora comenzó a tener éxito, Dyson comprobó que algunas empresas de la competencia decidieron copiar su invento. Se enfrentó a ellas con un largo y carísimo pleito por los derechos de las patentes.
James Dyson se lamenta que sólo si dispones de mucho dinero, puedes costearte el precio de las patentes y puedes tener la espalda cubierta contra copias. El enorme precio de las patentes no puede permitírselo pequeños inventores y al final, la patente resulta una medida contra la iniciativa particular del individuo frente a las poderosas y ricas compañias.
Compara los derechos de propiedad intelectual de un escritor o de un músico, derechos para toda la vida, con la falta de derechos de un ingeniero. Si el ingeniero quiere tener ese derecho tiene que pagar por ellos una suma muy alta y es sólo válida por un corto periodo de tiempo. Ambas creaciones son para James Dyson equivalentes, y tendrían que tener una consideración similar. ¡Un brindis por James!.

Occidente vs Oriente
A la pregunta de uno de los asistentes, James se muestra escéptico sobre el futuro de la ingeniería en los países de occidente (Europa, EUA,...). Países como China o India, centros de producción, son también ahora países que generan muchos más ingenieros que occidente. Las fábricas se han trasladado a esos países, y también lo está haciendo el diseño. Es posible, comenta, que la historia cambien en el futuro y lo que antes era barato para producir, deje de serlo, y pudiera abrirse las puertas para que las fábricas volvieran a los países occidentales. Pero para entonces, ¿quién se acordará en esos países de cómo se hacían las cosas?.

viernes, 29 de octubre de 2010

Tricóptero con Arduino. Shrediquette DLXm.

En el famoso blog de W. Thielicke podemos encontrar las instrucciones para el montaje de un Tricoptero con Arduino.

Ya que una imagen vale más que mil palabras, allí va un video de presentación:


En el blog encontrareís más fotos, videos...

Hasta pronto.

jueves, 21 de octubre de 2010

Freetronics.TwentyTen

La empresa australiana Freetronics sacó al mercado una alternativa al Arduino Duemilanove, el TwentyTen.
Nos es una réplica exacta, añaden algunas nuevas características y algunas mejoras con respecto a su original, por ejemplo:
  • sustituye el conector USB tipo B por uno mini USB para evitar posibles cortocircuitos con los shields,
  • hace la señal de recepción del puerto serie más inmune con respecto a las interferencias electromagnéticas. Parece ser que el Arduino Duemilanove podían verse afectado por el ruido EMC, lo que era especialmente crítico durante la grabación del micro,
  • se añade un área de prototipaje,
  • ...
Los creadores de Freetronics no son unos desconocidos, son los autores de un famoso libro sobre Arduino, "Practical Arduino".
Hasta pronto.

miércoles, 20 de octubre de 2010

Arduino Tutorial. Hardware. Alimentación por USB.

A diferencia de la alimentación por el conector externo, que hemos tratado en anteriores posts, la alimentación por el puerto USB no está regulada dentro del Arduino. La tensión de 5V que alimenta la electrónica interna, viene directamente del conector USB.

En el esquemático vemos representada la alimentación de 5V que viene del conector USB (X4) con la net USBVCC:

Arduino Duemilanove detecta si alimentamos la placa desde el conector USB de forma automática, no hace falta configurarlo a través de un jumper. Voy a explicar cómo se consigue esto en Arduino Duemilanove.
Esa tensión de USBVCC se lleva al drenador de un transistor MOSFET tipo P, cuya base está controlada por el siguiente circuito:

El transistor MOSFET (NDT2955) conducirá, dejando pasar la corriente de alimentación del conector USB a la alimentación del circuito (+5V), si la base del transistor (GATE_CMD) está a masa (GND o 0V). ¿Cuándo ocurre eso?.

Vemos que IC5A es un circuito comparador. Está comparando la mitad de la tensión de alimentación proveniente del conector de alimentación externa (VIN) con 3.3V. Si la tensión en el terminal positivo del operacional es mayor que la del negativo, tendremos a la salida del comparador la tensión positiva de alimentación del operacional (aunque no lo indique el esquemático, esta tensión es de +5V), en caso contrario, tendremos GND.

Si no hay alimentación externa VIN, la tensión CMP será GND (gracias al pulldown R11), y por tanto a la salida de IC5A tendremos GND. El circuito conIC5B es un (prescindible) seguidor de tensión, a su salida tenemos la misma tensión que a la salida de IC5A, por tanto la tensión GATE_CMD será también GND. De esta forma el transistor MOSFET conducirá y se alimentará la placa a través del USB.

Si existe alimentación externa VIN mayor que 7V, a través del conector de alimentación, tendremos una tensión superior a 3.3V en CMP, tendremos tensión positiva en la salida de IC5A y por tanto tendremos también tensión positiva en la base del transistor NDT2955. Eso significa que el transistor estará abierto, y +5V vendrá de la salida del regulador lineal IC4, tal como comentamos en anteriores posts.

Es importante remarcar un punto que nos quedó pendiente de matizar en posts anteriores y que en este se ha explicado de una forma, quizás, demasiado implícita. La tensión mínima externa (no USB) es de 7V, porque para detectar la fuente de alimentación (USB o externa) se compara VIN/2 con 3.3V. Por tanto, para que se detecte que efectivamente se está alimentando Arduino desde una fuente externa, ésta tiene que ser superior a 7V.

La especificación de los puertos USB marcan que tienen que dar 5V, con una limitación de corriente de 500mA. Es decir, la salida del USB del ordenador, si cumple la especificación, ha de estar protegida contra sobrecorrientes de 500mA. En el Arduino se añade una sobreprotección, utilizando un polyfuse resetable adicional de 500mA sobre esa tensión. Así que la máxima corriente que podemos conseguir del USB de forma estable será, en todo caso, de 500mA.
Hay una característica que hay que considerar acerca de los polyfuses reseteables, son lentos. El tiempo que tardan en abrir el circuito está relacionado con la corriente que circula. Si la sobrecorriente es ligeramente superior al límite, en nuestro caso 500mA, puede tardar hasta un segundo en abrirse. Esto puede ser un problema en algunos casos, porque puede dañarse la electrónica antes de ser protegida por el polyfuse.
Hasta pronto.

martes, 19 de octubre de 2010

Arduino Shield. Eagle.

Para todo aquel que quiera diseñarse su propia placa para conectar sobre el Arduino (también llamada Shield), aquí va un tutorial muy interesante:

http://aaroneiche.com/2010/06/24/a-beginners-guide-to-making-an-arduino-shield-pcb/

Utiliza el software Eagle, que es el más utilizado en el diseño de esquemas y PCBs del mundo open hardware.

La empresa originaria de Eagle, Cadsoft, fue adquirida en el 2009 por Farnell. Con esto Farnell, intentó contrarestar la ventaja comercial que Sparkfun estaba consiguiendo, al proporcionar gratuitamente las librerias de componentes de su catálogo para Eagle. Los aficinados compraban los componentes en Sparkfun porque podían diseñar sus circuitos con las librerias y con Eagle, ambos gratuitos.
Actualmente Farnell proporciona Eagle a través de su foro element-14

Hasta pronto.

lunes, 18 de octubre de 2010

Drumbeat. Barcelona.

Desde el próximo 3 al 5 de noviembre, tendrá lugar en Barcelona el evento Drumbeat.
Bajo el lema "Drumbeat Learning, Freedom and the Web Festiva", tendrán lugar ponencias, presentaciones, demos, sobre la enseñaza universal y gratuita a través de la web.
El sueño: desinstitucionalizar la educación a través de una web abierta, romper la barrera "tecnológica" entre el usuario y la creación en internet, utilizar open source (software y hardware) como herramientas de enseñanza, ...

Una cita ineludible.

Hasta pronto.

domingo, 17 de octubre de 2010

Arduino Tutorial. Hardware. Alimentación externa. Limitaciones 3.3V.

En el anterior post hablamos de la fuente interna de 5V del Arduino Duemilanove. En este post describiremos el origen y la limitación de la fuente de 3.3V.

Los 3.3V que se llevan al conector de alimentación POWER para los shield, provienen de un regulador lineal LDO (Low Drop Out regulador), incluido dentro del integrado conversor serie a USB, el FT232RL de la empresa FTDI.

La corriente máxima, según el datasheet del fabricante, para estos 3.3V es de 50mA.

Hasta pronto.

sábado, 16 de octubre de 2010

Arduino Tutorial. Hardware. Alimentación externa. Limitaciones 5V.

Cuando se alimenta Arduino a través del conector de alimentación externa (no USB), y queremos conectarle una placa encima (comúnmente llamada Shield) para controlarla a través del Arduino, hay que tener en cuenta las limitaciones en corriente del regulador lineal de 5V.
Las tensiones internas de alimentación se llevan a la placa superior a través del conector POWER:
Como expliqué en el anterior post, la tensión de 5V viene del regulador lineal MC33269D-5.0 de ON Semiconductor.
Recordad que los reguladores lineales, disipan la potencia consumida en la regulación en forma de calor. Para comprobar hasta qué corriente podemos suministrar al shield a través de los 5V, tenemos que consultar el datasheet del regulador, y comprobar la potencia máxima que puede disipar.
La potencia que disipa el regulador es la diferencia de tensión que hay entre su entrada y su salida (llamada tensión de dropout), por la corriente a la salida. En el caso de Arduino Duemilanove, hay un diodo de protección de polaridad en el conector cuya caída de tensión también hay que considerar (estimo que es de 0,7V), así que la diferencia de tensión de dropout es:
Vregulador_in = VPOWERIN-Vdiodo

Vdropout = Vregulador_in - Vregulador_out

El consumo en corriente de la placa en modo estable depende, evidentemente del programa que tengamos corriendo en el microcontrolador, del número de pines activos como salidas, ... Considero, como aproximación, que es de 50mA.

La potencia que disipa por defecto, en su modo estático, el regulador sería:

Pdisipada_regulador = dVregulador * Iout

Considerando que alimentamos a 12V (VPOWERIN), la potencia disipada será:

Pdisipada = (12 - 0,7 - 5) * 0,05 = 315 mW
El regulador MC33269D-5.0 que viene montado por defecto en el Arduino Duemilanove tiene el encapsulado DPAK. Esto tiene su importancia, porque según el encapsulado, así será su capacidad de disipación de calor y por tanto su capacidad de proporcionar más o menos corriente a la salida.
En el datasheet del regulador encontramos la gráfica que relaciona la resistencia térmica, con la máxima potencia que se puede disipar y el cobre del PCB que sirve de disipador de calor:
En el Arduino, el cobre que hay bajo el regulador es la mínima área posible, señalada en la figura como Minimum Size Pad. Esto significa que la máxima potencia que puede disipar el regulador a 50ºC es de 1.5W, con una resistencia térmica de unos 68ºC/W.
Es decir, que la máxima corriente que podríamos tener con 6.3V de dropout, para no dañar el regulador, sería de 1.5W / 6.3V = 238mA.
No deberíamos pasar de 200 mA de consumo estable para no sobrecalentarlo.
Si estimamos que la placa, por sí sola, consume alrededor de 50mA, tenemos aproximadamente 150mA disponibles para:
  • alimentar el shield,
  • alimentar las salidas del microcontrolador que van al shield.
Si necesitamos suministrar más de 150mA al shield:
  • añadimos un disipador sobre el regulador (nunca sobreestimar el efecto del heatsink),
  • disminuimos la tensión de alimentación por debajo de 12V,
  • reducimos el consumo de las salidas,...

En el datasheet se dice que el regulador tiene un circuito de limitación térmica interna que deshabilita la salida a 170ºC, pero que nunca esta protección puede ser considerada como un disipador (o heatsink). No se tiene que considerar como variable en nuestro diseño.

En resumen, antes de decidirnos a alimentar el shield a través del Arduino, tenemos que saber qué consumo le estaremos exigiendo. Si es superior a 150mA en los 5V, tenemos que plantearnos la opción de utilizar otra fuente auxiliar para alimentar el shield (baterias, otra conexión de alimentación externa (ojo con las masas),...) o reducir el consumo.

También hay que considerar que en todo momento he hablado de consumo estable. El regulador es capaz de disipar más potencia de la especificada si sólo tiene picos de corriente puntuales.

En el caso de alimentación por el puerto de USB la situación es diferente, hay que tener otras consideraciones que trataremos en otros futuros post.

Hasta pronto.

viernes, 15 de octubre de 2010

Opening Hardware. NYC.

Los gurus neoyorquinos del hardware libre se reunieron el 17 de Marzo del 2010 en un centro de investigación artística (?) llamado Eyebeam.

Estuvieron hablando allí de lo divino y lo humano, incluso sobre patentes (!). También aprovecharon para alimentar su ego y lo grabaron todo en vídeo:

http://eyebeam.org/projects/opening-hardware

A este bloguero, seguro servidor, ser eminentemente pragmático, todo le suena a charlatanería. ¿Por qué perder el tiempo en palabras?, ¿por qué es tan importante definir lo que uno hace?. Y sobretodo, ¿qué hace un grupo de gente que trabaja sobre hardware libre hablando de patentes?. Dicen que lo hacen por nosotros, para evitar que venga otro y lo comercialice ...
Para los tuaregs, la distancia entre la verdad y la mentira es de cuatro dedos, la distancia que van de la oreja al ojo, y mi ojo por ahora ve a algunos de los que hay allí hablando de $:

jueves, 14 de octubre de 2010

Arduino. Disparador programado.

A los que nos gusta la fotografía, y aspiramos a hacer algo que vaya más allá de la fotocopia con flash, encontramos en Arduino la posibilidad de hacer algunas cosas interesantes, como, por ejemplo, un disparado cada cierto lapsus de tiempo.
El proyecto lo podemos encontrar en:

http://www.practicalarduino.com/projects/time-lapse-camera-controller

El resultado:



Hasta pronto

miércoles, 13 de octubre de 2010

Arduino tutorial. Hardware. Alimentación externa.

En los siguientes post voy a tratar el hardware del Arduino Duemilanove.
El primer punto a tratar es la etapa de alimentación del Arduino. Puede ser alimentado por dos fuentes:
  • Conector USB
  • Conector de alimentación externa (no USB).
La alimentación por fuente de alimentación externa (no USB) tiene un margen de 7V a 12V. El límite mínimo 7V viene fijado por la forma en que Arduino detecta si la placa se alimenta a través de la alimentación externa, o a través del USB. La tensión máxima, 12 V, viene fijada por la máxima potencia que puede disipar el regulador lineal MC33269D-5.0 (IC4) que proporciona los 5V cuando la placa se alimenta a través de alimentación externa (no USB).

La tensión máxima de entrada teórica es de 20V, viene especificada en el datasheet del regulador lineal, y la tensión mínima teórica es 6V, viene del dropout del regulador, que es 1V. Es decir, la tensión de caída entre la entrada y la salida del regulador es de 1V, por tanto, para tener 5V a la salida, en la entrada tiene que haber, al menos, 6V.

La siguiente figura es el la parte del esquemático del Arduino Duemilanove que describe la alimentación por el conector:

Vemos que la net de alimentación es VIN, y la tensión de alimentación interna del circuito es +5V. En la siguiente foto se señala la parte de la placa que corresponde con el circuito:


Entre los dos terminales señalados en la imagen debemos 5V incluso si alimentamos a través del USB.

En el siguiente post describiré la limitaciones en corriente de las fuentes internas de 5V y de 3.3V, y se describirá con más detalle las razones por las que el margen de tensión de alimentación va de 7V a 12V.

Hasta pronto.

martes, 12 de octubre de 2010

Arduino tutorial. Hardware. Asignacion de pines.

En el ejemplo de nuestro tutorial, el programa más sencillo, Blink, que consiste en apagar y encender un LED cada segundo, habreís podido observar que la instrucción de asignación de pines utilizada, configuraba el pin 13 como output, con la siguiente instrucción en la función setup:
pinMode(13,OUTPUT);
Si observaís el esquemático de Arduino Duemilanove, observareís que el pin 13 del microcontrolador no corresponde con el pin que controla el LED que nosotros esperamos encender. Esto es porque no hay una correspondencia entre el numero del pin "físico" y la asignación que el software del IDE hace de cada pin.

El mapeado de los pines que hace el software, lo podemos ver en la siguiente figura:

De esta forma, cuando asignamos la I/O 13 como salida, en realidad estamos configurando el pin 19 (PB5) del microcontrolador, como salida. Esto hay que tenerlo en cuenta para interpretar correctamente el esquemático de Arduino. Cosa que haremos en próximos posts.

Hasta pronto.

lunes, 11 de octubre de 2010

Arduino tutorial. Manos a la obra. Hello World y trazas por el puerto serie.

Siguiendo las instrucciones de los posts anterior de este tutorial de Arduino, tenemos que haber grabado el sketch Blink en nuestro Arduino.
Sabemos que el programa tiene que hacer que el LED conectado en el pin 13, un LED soldado, tiene que iluminarse cada segundo, en una secuencia infinita. Así que la forma más fácil de comprobar que el programa se ha grabado en la placa y es está ejecutando, sólo tenemos que mirar como efectivamente el LED se enciende y se apaga cada segundo.

También podemos hacer otra aproximación diferente, que nos será útil en el futuro. Vamos a utilizar la posibilidad de trazar mensajes a través del puerto USB. Es el mismo que hemos utilizado para cargar la aplicación en la placa. Para poder ver la los mensajes desde el programa, tenemos que habilitar el Serial Monitor:

Se abre entonces una nueva ventana, el Serial Monitor, donde saldrán los mensajes que nos envie nuestro Arduino a través del puerto USB:

A los mensajes por el puerto serie enviados desde el programa se les llama “trazas del programa”. Las llamaremos así a partir de ahora.
Para hacer uso de este Serial Monitor tenemos que añadir instrucciones en el programa. Son instrucciones dedicadas a configurar el puerto serie, primero, y sacar el mensaje por el puerto.
Las instrucciones son:

  • serial.begin(velocidad_comunicación);
    Dentro de la función setup tenemos que poner una esta instrucción de configuración del puerto serie. La velocidad de comunicación típica es 9600 bps.
  • serial.println(valor_a_imprimir);
    Se puede poner, tanto en la función de setup, la traza se sacará por el puerto una sola vez; o por la función loop para trazar cada ejecución de esa función indefinidamente
    Después de ejecutar el println hay que introducir un delay para asegurarnos que se ha ejecutado completamente esa instrucción. Por ejemplo delay(100);

Las trazas son una herramienta muy potente para depurar programas sencillos. A nivel los programas se depuran mediante herramientas más sofisticadas con las que se pueden tener acceso a los registros internos del microcontrolador.
Añadiendo estas trazas podemos asegurarnos que se ha cargado nuestro programa dentro de Arduino. El programa Blink modificado queda:

void setup() {
// initialize the digital pin as an output:
pinMode(13, OUTPUT);
Serial.begin(9600); //abre el puerto serie
//para enviar al PC
//info a 9600 bps
Serial.println("Tutorial Arduino. Blink"); //imprime por el puerto serie
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
Añadiendo estas dos lineas de comandos, habilitamos el Serial Monitor y al ejecutar el programa por primera vez obtenemos la siguiente traza:
Como podeís ver en el programa, esta traza solo sale una vez, ya que la instrucción println sólo está en la función setup, que sólo se ejecuta la inicializarse Arduino.

Hasta pronto.

sábado, 9 de octubre de 2010

El estado de Arduino

Una conferencia del "amo" de Arduino, Massimo Banzi, que explica la historia, presente y el futuro de Arduino. Nos habla sobretodo sobre el nuevo modelo, Arduino UNO:


Temas interesantes:

  • El equipo de Arduino está profesionalizado. Los comentarios de Massimo sobre los detalles de producción, certificación CE, ... demuestran la intención de salir del mundo geek y adentrarse en otros terrenos más provechosos económicamente, como utilizar Arduino dentro de equipos comercializables.
  • En Arduino UNO, se sustituye el driver serie-USB de FTDI, un clásico entre los clásicos, por uno de Atmel. Supongo que Atmel les debe haber hecho una oferta que no han podido rechazar a nivel de precio. Así que finalmente podemos decir que Arduino es una placa de desarrollo de Atmel. Ojo, eso no es ni bueno ni malo, es lo que es.
  • Están trabajando en un nuevo modelo de Arduino con un interfaz no de USB, sino de Ethernet, utilizando PoE, power over Ethernet. Es decir, Arduino se alimentará a través de routers que dispongan de PoE. Es la búsqueda del santo grial del avatar. Ese dispositivo conectado al a red, autónomo, programable desde cualquier parte del mundo.

Arduino tutorial. Manos a la obra. Configuración del IDE

La configuración básica del IDE consta de dos pasos:
  • Seleccionar la placa Arduino con la que queremos comunicarnos. Esto se hace con el siguiente menú:
  • Instalación del driver del puerto serie USB.
    Cuando conectamos por primera vez la placa Arduino en nuestro ordenador, nos pide la instalación del driver del interfaz FT232R USB UART. Este el integrado de FTDI que convierte la UART del micro de Atmel, el Atmega328 en nuestro caso, en un bus USB.
    La forma de instalar este driver lo puedes encontrar en la web oficial de Arduino (http://arduino.cc/es/Guide/HomePage):

En Windows XP, se abrirá el diálogo de instalación de Nuevo Harware:
Cuando te pregunten: ¿Puede Windows conectarse a Windows Update para buscar el software? selecciona No, no esta vez. Haz click en Siguiente. Selecciona Instalar desde una lista o localización específica (Avanzado) haz click en Siguiente. Asegurate que Buscar los mejores drivers en estas localizaciones esté seleccionado; deselecciona Buscar en medios removibles; selecciona Incluye esta localización en la búsqueda y navega al directorio drivers/FTDI USB Drivers dentro de la carpeta de Arduino que has descomprimido previamente. (La versión más reciente de los drivers se puede encontrar en la página web del fabricante delchip FTDI.) Haz click en Siguiente. El asistente de instalación buscará los drivers y te anunciará que encontró un "USB Serial Converter" (se traduce por Conversor USB-Serie). Haz click en Finalizar. El asistente de instalación de hardware volverá a iniciarse. Repite los mismos pasos que antes y selecciona la misma carpeta de instalación de los drivers. Esta vez el sistema encontrará un "USB Serial Port" (o Puerto USB-Serie). Puedes comprobar que los drivers se han instalado correctamente abriendo la carpeta del Administrador del Dispositivos, en el grupo Dispositivos del panel de control del sistema. Busca "USB Serial Port" (o Puerto USB-Serie)en la sección de puertos; esa es tu placa Arduino.

  • Selección del puerto de comunicación.

jueves, 7 de octubre de 2010

Open Hardware Summit. Adafruit.

Amena presentación de Limor Fried (Adafruid) en el Open Hardware Summit. Explica por qué trabaja con el hardware libre:

martes, 5 de octubre de 2010

Arquitectura de Sistemas

Me gustaría hablar, aunque sólo sea por encima, de la ingeniería de sistemas.
Es de perogrullo, pero la diferencia entre el éxito y el fracaso en el diseño de un equipo electrónico, está, en muchas ocasiones, en el diseño de su arquitectura de sistema.
Enseñar ingeniería de sistemas debe resulta complejo, sospecho porque no se calcula con números, no hay leyes exactas, se trata de un arte más que una ciencia. Un arte que se gana con la experiencia, fundamentalmente heurístico, empírico.
En un libro se atreven a poner los cuatro principios heurísticos más famosos en la ingeniería de sistemas. Allá van por orden decreciente de popularidad:
  1. No asumas que la declaración inicial del problema es necesariamente la mejor, o incluso la correcta.
  2. Al particionar, elige elementos que sean lo más independientes posibles; es decir, elementos con una baja complejidad externa, y con una alta complejidad interna.
  3. Simplificar. Simplificar. Simplificar.
  4. Construye y mantén opciones tanto como sea posible en el diseño e implementación de un sistema complejo. Las necesitaras.

Espero que os sean útiles.

Volveré sobre este tema en el futuro.

Hasta pronto.

Freescale 2010

Freescale, uno de los mayores fabricantes de microcontroladores, ha sacado durante 2009-2010 algunas familias de productos que son interesantes porque, a mi entender, muestran tendencias en el diseño electrónico:
  • Dentro de su vasto catálogo, que va desde microcontroladores de 8 bits a 32 bits, Freescale sacó en el 2009 una familia escalable de 8 a 32 bits. Es la familia Flexis.
    Supongamos que hacemos un diseño modesto con un microcontrolador de 8 bits, y descubrimos que nuestro diseño de sistema resulta finalmente un desastre, y que ese microcontrolador no alcanza las prestaciones que el sistema realmente requiere. Pues bien, podemos cambiar ese micro de 8 bits por otro de 32 bits pin a pin compatible, y aprovecharnos de las capacidades de computación de este nuevo microcontrolador.
  • A finales del 2010, ante la sorpresa de muchos, Freescale ha sacado uno de los primeros micros Cortex-M4. Es la familia Kinetics. Con esta familia, ante la inminente salida al mercado de un micro Cortex-M4 de NXP, intentan adelantarse a la competencia. Vale la pena, el primero se puede comer la ración más grande del pastel.
    El Cortex-M4, a diferencia del Cortex-M3, incorpora un core de DSP, de forma que lo convierte en una alternativa para pequeñas aplicaciones de audio, e incluso, de control de motores.
    Parecería que Freescale se aleja del Coldfire, como si hubieran tomado conciencia que el mercado va hacia los microcontroladores ARM Cortex, y que cada vez más clientes exigen trabajar sólo con esos núcleos.
    Quizás algunos clientes programan con librerías compatibles con ARM y no quieren saber nada de migraciones a Coldfire. El esfuerzo de desarrollo del firmware condiciona la selección del microcontrolador, y lo hace por encima de las prestaciones, los periféricos, que son muy similares entre la mayoría de los fabricantes.
    Para los fabricantes, conseguir proporcionar herramientas que faciliten la programación es vital, porque fideliza al cliente. Freescale proporciona el sistema operativo MQX gratuitamente, buscando esa ventaja en el mercado. ¿Por qué te vas a gastar dinero en un sistema operativo si ellos te lo dan gratis?, además te lo dan con un entorno de desarrollo Eclipse, para hacértelo aún más fácil si cabe.
    El precio ha dejado de ser un factor determinante. La gama baja de Kinetics, la K10, en su modelo más sencillo, no llega a 1 dollar de coste para 10K unidades. El hardware es barato. El coste en horas del programador es lo más caro, quizás lo más complejo, y por tanto, lo más arriesgado.
  • El Tower System de Freescale es una estructura de PCBs que constituyen una placa de evaluación hecha a piezas, ampliable y barata. A partir de la placa CPU, podemos ir conectando en la estructura tower las placas con las que podemos evaluar los periféricos. Hay un foro, towergeek, que trabaja con este entorno, los esquemas están disponibles, hay gente que está generando placas de ampliación siguiendo la filosofía del hardware libre... ¿os suena?.

Hasta pronto

Arduino tutorial. Manos a la obra. Ejecución del programa ejemplo.

Disponemos del IDE instalado, tenemos el programa ejemplo en nuestra pantalla, y sabemos lo que esperamos del programa: encenderá y apagará cada segundo el LED conectado al pin 13.
Hemos conectado nuestro Arduino al ordenador a través del cable USB tipo A a tipo B, o para más puristas, un cable que conecte el USB Host, nuestro ordenador personal, con el USB device de nuestro querido Arduino Duemilanove.
Pues bien, debemos tener en pantalla lo siguiente:
Los siguientes pasos son:
  1. Compilar el programa, es decir, traducir el programa en C en un fichero que sea comprensible para el microcontrolador que hay en el Arduino. Durante la compilación se nos indicarán los posibles errores de sintaxis del programa. Recalco lo de sintaxis, el compilador no va a indicarte que la funcionalidad que has programado no coincide con lo que tú querías. El día en que un compilador sea capaz de leer en la mente del programador, se abrirán las puertas del cielo. Lo único que nuestro modesto compilador nos indicará será si hemos incumplido alguna de la reglas básicas de la programación en C. Se irá corrigiendo los errores que vayan apareciendo. Forma parte de lo que en algunos lugares veréis que se denomina "debugar" el programa. Finalmente ejecutaremos una compilación en la que no hay errores. Nuestro programa está listo.
  2. Cargar el programa compilado en la placa Arduino.
  3. Comprobar que el programa hace aquello que esperamos que haga. Seguiremos debugando el programa a nivel funcional.

Veamos en más detalle cómo se hace lo explicado anteriormente.

Compilar

Al pulsar el botón superior izquierda, indicado con un círculo rojo en la figura superior, se verifica el programa, es decir, se compila el programa. Seleccionamos ese botón, esperamos unos segundos, y vemos lo que ocurre:

Vemos que nos sale un mensaje de error, NO os preocupéis, este error de compilación ha ocurrido después de que yo haya hecho trampa. Se trata de mostraros lo que ocurre cuando realmente ocurre un error en el programa. En nuestro caso, lo que he hecho es quitar el punto y coma que hay en la linea del setup. Esta modificación no le ha gustado al compilado y ha mostrado un mensaje de error: “expected ';' before “)” token. Este mensaje nos indica que nos hacía falta cerrar la linea de instrucción con un punto y coma.
Dejamos el programa tal como estaba inicialmente, con el punto y coma en su sitio y volvemos a ejecutar el compilador con el programa ya corregido. El resultado esta vez es:

Upload

No hay mensaje de error esta vez. Ya tenemos el programa listo para ser “transportado” a nuestra placa. Para ello, seleccionamos la opción Upload:

Cuando pulsamos en esta opción, estamos grabando el programa en la placa. Lo siguiente es comprobar que el programa hace lo que esperamos. Lo comprobaremos en el próximo post.

No hay tiempo que perder.

Hasta pronto.

domingo, 3 de octubre de 2010

Arduino tutorial. Manos a la obra. Ejemplo básico.

Las promesas son deudas y se había hecho una en este blog: un tutorial sobre Arduino.
No hay escusas. No hay tiempo que perder.

El objetivo de este capítulo es ponernos en marcha. Ejecutar nuestro primer programa. En puntos posteriores habrá tiempo para entrar en detalles sobre el software y hardware de Arduino, pero creo, que para empezar, lo mejor es ver como efectivamente nuestro Arduino funciona correctamente. Instalaremos el IDE y ejecutaremos un programa sencillo. Eso nos mostrara cómo de fácil es comenzar a obtener resultados.

Instalación del IDE
Arduino es un dispositivo vivo, que se a menudo se actualiza con nuevas versiones de Software y Hardware. Con la sana intención de hacer un tutorial que no caduque a las dos días, lo mejor que podéis hacer para arrancar Arduino es seguir las instrucciones que proporciona la website del proyecto Arduino (http://arduino.cc/en/Guide/HomePage). Visitando esa web encontrareis los últimos ficheros disponibles y las instrucciones de instalación de Arduino.

Considerando que habéis seguido las instrucciones de instalación correctamente, deberéis disponer del sistema de desarrollo instalado.
Recomendación: crear un link al escritorio con el ejecutable de Arduino para poder acceder al ejecutable directamente.

Sketches
Sketch es el nombre que se le ha dado a los programas que ejecutamos en Arduino.
Con el IDE se nos proporcionan algunos sketches de ejemplo, son muy útiles para introducirnos en el mundo Arduino.
Recuerda que los programas, o sketches, de Arduino están escritos en lenguaje C. Libros de referencia básicos de lenguaje C son:

  • "The C Programming Language". Kernighan y Ritchie. Este es el libro clásico entre los clásicos.

  • "C in Nutshell". Prinz y Crawford.

Los sketches tienen la misma estructura básica, requieren, al menos, de dos funciones:

  • setup. En esta función se configura la placa, se asignan las funcionalidades a los distintas entradas/saliadas, inicializa la comunicación serie. Sólo es ejecutada una vez. Siempre tiene que estar esta función en el programa. Incluso si no ponemos nada en la función setup, tiene que estar presente.
  • Loop. Aquí se escribe el programa que se ejecutara en un bucle (loop), secuencialmente, sin interrupción.
    void setup()
    {
    declaración;
    }
    void loop()
    {
    declaración;
    }
    type NombreFunción (parametros)
    {
    declaración;
    }

Pueden crearse multitud de funciones adidicionales que se son llamadas desde loop. A medida que el programa vaya cogiendo complejidad, para hacerlo ininteligible, más fácil de mantener, esta división en funciones simples del programa, se convierte en un requerimiento necesario para poder trabajar con el programa. Divide la complejidad y venceras.

Seguidamente ponemos uno de los exemplos proporcionados por el IDE de Arduino. Veremos en él las partes que hemos mencionado anteriormente y añadiremos algunos detalles. Trabajaremos con el sketch Examples -> Basics -> Blink:


/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
void setup() {
// initialize the digital pin as an output:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}

Este sencillo ejemplo nos ayudará a identificar las distintas partes de las que está compuesto un programa.

Comentarios
Como veis, inicialemente tenemos una lineas que nos describen el programa, su funcionalidad. Cuando querramos comentar varias lineas, de forma que el compilador no entienda esas lineas como comandos, tenemos que acotarlas de la siguiente forma:
/*
comentarios
*/
Existe otra forma de comentar una sola lineas, se trata de utilizar dos contrabarras:
\\comentarios
La diferencia entre los dos métodos, tal como he comentado, es que una sirve para varias lineas y la segunda solo para una linea.
En todo caso, comentar el programa es excelente hábito. A veces, incluso a nivel profesional, se nos olvida comentar el programa. Al cabo de unas pocas lineas, el trabajo se transforma en un ente opaco, marronuzco, hasta poder convertirse en una pesadilla para cualquiera que se enfrente a él. Por tanto, desde el principio tenedlo claro, hay que comentar todo lo que hagamos, incluso lo más trivial. En el futuro, seguro que lo agradeceremos.
En el caso de nuestro ejemplo, los comentarios describen la funcionalidad del programa, activar y desactivar un pin de salida cada segundo, a ese pin hay conectado un LED en la placa de Arduino.

Setup
Esta es la función en la que configuramos la funcionalidad de los distintos pines. Más adelante explicare qué posibilidades de configuración hay en esta función, cuántos pines tenemos y cómo se pueden configurar. Por ahora, lo único que nos interesa es que:
esta función es obligatoria en todos los programas
sirve para configurar los pines del microcontrolador
la instrucción que se utiliza para configurar la mayoría de los pines es pinMode (pin, mode). Donde pin es el numero del pin que queremos configurar y el mode, es donde ponemos si queremos que sea un pin de entrada (INPUT) o de salida (OUTPUT).
En el ejemplo que estamos analizando, se configura el pin 13 como pin de salida.

Loop
Esta es la función donde alojamos las funcionalidad. Como todo los programas embebidos, es un programa que se ejecuta secuencialmente e indefinidamente. Es un bucle de instrucciones que constituye la funcionalidad de nuestra placa.
Es aquí donde tenemos que ser creativos y con las herramientas que nos da el idioma de programción C, tenemos que idear el programa que implemente la funcionalidad deseada. Ese es el juego, ese es el reto.
En nuestro ejemplo se activa el pin 13 mediante la instrucción digitalWrite (pin,valor). Donde pin es el numero del pin cuyo estado queremos cambiar. Debe ser un pin previamente configurado en la función setup. Y valor, puede ser, en este caso de señal digital, nivel alto (1 lógico o HIGH), o nivel bajo (0 lógico o LOW).
De forma que el programa ejemplo lo que hace es activar el pin 13, ponerlo a nivel alto, encendiendo el LED, espera 1 segundo y pone el pin a nivel bajo, apagando el LED. Al estar dentro de la función de loop, esta sucesión de instrucciones se ejecutan en un bucle (loop).

Proximamente más. Produndizaremos en cómo ejecutar el programa ejemplo.

Hasta pronto.

martes, 24 de agosto de 2010

Arduino Tutorial. Introducción.

Massimo Banzi, uno de los creadores de Arduino, lo definió en su libro “Getting started with Arduino” como:
“una plataforma de programación física de código abierto, basado en una placa de
entradas/salidas (I/O) y un ambiente de desarrollo que implementa el lenguaje Processing. Arduino puede utilizarse para
desarrollar objetos autónomos interactivos, o se puede conectar al software de
tu ordenador”

Arduino viene a ser la conjunción de tres cosas:

  • Hardware, cuyo diseño (esquemático, lista de material, gerbers) están colgados en la web;
  • software, un entorno de desarrollo de código libre, también gratuito;
  • y una comunidad que trabaja diseñando nuevas y originales aplicaciones cada día.

Detrás de Arduino hay una forma de trabajar, de enfocar la electrónica desde un punto de vista práctico. En inglés hay un término que Manzi utiliza para definir la filosofía que hay tras Arduino, el término es tinkering: disfrutar experimentando con máquinas.

Pero no todo el mundo tiene el conocimiento para experimentar con máquinas, ser creativos con ellas. ¿No todo el mundo? La ambición de Arduino y de su plataforma de programación es hacerlo accesible que cualquiera pueda utilizarlo con éxito.

Arduino, con su sencillez, incita a experimentar sin un objetivo claro, por el gusto de hacer prototipos, de ser creativo. Gracias a eso, Arduino ha sido adoptado por ámbitos ajenos a la electrónica, como ninguna plataforma de este tipo lo había sido antes. Hay ejemplos de aplicaciones de lo más variadas. Sólo la imaginación, y las propias limitaciones de la placa, ponen límites.

¿Qué necesitamos para empezar a trabajar con Arduino?:

  1. Un poco de paciencia.
    No hay que frustrarse a los primeros contratiempos. Sólo se requiere un corto periodo de aprendizaje para conseguir resultados.
  2. Un ordenador personal, con Windows, Mac OS o Linux.
  3. Instalarte el entorno de desarrollo de Arduino.
    Normalmente se hace referencia a los entornos de desarrollo con las siglas inglesas IDE, así lo denominaré durante el resto del tutorial.
    El IDE de Arduino se puede bajar gratuitamente desde:
    http://arduino.cc/es/Main/Software
    Por supuesto, tienes que bajarte el adecuado al sistema operativo de tu ordenador personal.
  4. Un cable USB de tipo A a tipo B.
    Es el típico cable que se utilizas para conectarte a una impresora desde tu ordenador personal.
  5. Una placa Arduino.
    Para este tutorial utilizaremos siempre la placa Duemilanove.
    Puedes consultar las distintas placas Arduino en:
    http://arduino.cc/es/Main/Hardware

Y estas son todas las piezas del juego. Al menos las piezas fundamentales, ya veremos que para ampliar las posibilidades de la placa, podemos añadir componentes que controlaremos a través del microcontrolador del Arduino.

En este tutorial, iniciaré una explicación sobre cómo empezar a trabajar, y qué posibilidades de ampliación tenemos. Añadiré componentes externos para ilustrar algunas de las posibilidades que existen, y explicaré las placas de ampliación, conocidas como shields, más extendidas entre los aficionados.

Algunos ejemplos de shields son:

  • Ethernet shield. Para conectar Arduino a Ethernet.

  • Xbee shield. Para aplicaciones inalámbricas con Zigbee.

  • Input shield. Para implementar un joystick.

Aquí va unos links a añadir a favoritos, directorio Arduino, para aprender y estar a la última en diseños:

En cuanto a bibliografía, algunos libros sobre Arduino:

En el siguiente capítulo del tutorial nos pondremos manos a la obra con Arduino. Nos aseguraremos que tenemos todo en marcha para empezar a hacer nuestros propios diseños.

Hasta pronto.

martes, 17 de agosto de 2010

Tutorial Arduino

Anunciamos un tutorial sobre Arduino.
Se ha escrito mucho sobre Arduino, seguramente en este mismo instante hay varios centenares de personas escribiendo un nuevo tutorial o desarrollando una nueva aplicación, así que resultaría demasiado pedante por mi parte pensar que puedo escribir algo original. No os prometo nada.
Este será un tutorial con la única ambición de ser riguroso.
La estructura del tutorial será la siguiente:

1. Introducción
2. Manos a la obra
3. Programación
4. Hardware
5. Desarrollo de Proyectos

Por supuesto me reservo la libertad de ir cambiando el índice a medida que vaya desarrollando el tutorial ;-)

Hasta pronto.

domingo, 15 de agosto de 2010

Proyecto Tuva. Feynman

De vez en cuando, a alguno de los multimillonarios se les ocurre invertir el dinero en algo que vale la pena.

Al bueno de Gates se le ha ocurrido invertir en acercar la física a todo el mundo a través de lo que denominan el proyecto Tuva. No se me ocurre una forma mejor de hacerlo. Pero, ¿por qué Tuva?, ¿de dónde viene ese nombre?

Tuva es el lugar misterioso, el anhelo de aventuras de uno de los mejores divulgadores de la física, Richard Feynman. Una región remota de la antigua URSS que Feynman deseaba visitar, atraído por la leyenda, y especialmente por su música, su canto gutural.



Desgraciadamente, un físico nuclear de su envergadura, premio Nobel de física, norteamericano, no tenía nada fácil el acceso a la URSS durante la guerra fría. Finalmente, por una broma del destino, sólo recibió el permiso de visita por parte del gobierno soviético unos días después de su muerte.

El proyecto Tuva publica en Internet las conferencias de física que Feynman impartió en la universidad de Cornell, dentro de un ciclo llamadas Messeger Lectures.

Sólo puedo recomendar a todos lo que no hayan tenido la oportunidad de escuchar a Feynman, de leer sus libros, que no pierdan más el tiempo y se acerquen a la web del proyecto Tuva o a la librería más cercana. Sus libros no dejan de reeditarse. Descubrirán el entusiasmo de un genio que intentaba acercar generosamente la física a todo el mundo de una forma divertida y accesible.

Hasta pronto.

Netduino

Las grandes empresas, incluso la más grande , se han dado cuenta del potencial de Arduino y se han puesto manos a la obra.
Los de Redmon han decidido que no quieren correr el riesgo de quedarse fuera de juego y han desarrollado una plataforma donde sus productos se utilicen a la fuerza.

¿Qué es eso de poder trabajar con Linux? Vamos a hacer un producto que sea mucho más potente que Arduino y démosle a los desarrolladores un entorno de desarrollo gratuito para que se salte la chispa…

Ahí está Netduino, compatible con Arduino Shields -las placas de ampliación conectables a los zócalos de Arduino-.



La capacidad el Netduino es mucho mayor que la de Arduino, con un microcontrolador AT91SAM7x de Atmel, un ARM7 a 48MHz. Es mucho más potente que el micro ATMEGA del Arduino convencional.

Dos consideraciones:
- Algo se mueve. Las grandes corporaciones se han dado cuenta y no quieren perder el paso.
- La imaginación del usuario va más allá de las posibilidades del Arduino, cada vez habrá más necesidad capacidad de procesado, y Netduino busca suplantar a Arduino en esas aplicaciones.

Por otra parte, Netduino no tiene aparentemente ese tufo a DIY (Do it yourself). Arduino tiene el micro conectado al zócalo, y en caso de hacer un corto, pues ala, a cambiar el micro y tan amigos. Netduino es más ambicioso y eso tiene el peligro de tirar hacia a atrás a aquellos que no quieren complicarse demasiado la vida. Habrá que mirarse con más detalle el entorno de desarrollo para ver hasta qué nivel de “usabilidad” se ha llegado.

El tiempo, y la inversión que los de Redmon le tengan reservado, dictarán el futuro de Netduino.

Hasta pronto.