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.