Hace bastante que no publicaba nada sobre mi proyecto CAO (Controlador de Acuario por Ordenador) y alguno podría pensar que he dejado de trabajar en ello. No es eso. Lo que ha ocurrido es que a partir de cierto momento he visto como de dirigía a toda velocidad hacia un obstáculo considerable.
Yo estoy desarroyando CAO para el Arduino Mega 2560 y en este momento tengo escritas unas 5000 líneas de código repartidas en 16 módulos. He intentado recortar memoria por todos los rincones de mi código, pero he llegado a un punto donde mi código se come toda la memoria del Arduino Mega 2560. Ya dije que era un proyecto ambicioso.
El caso es que llevo tiempo contemplando la necesidad de migrar a un sistema más potente. Arduino Mega 2560 es la versión más potente de Arduino dentro de los procesadores de 8 bits, así que estuve mirando las características de Arduino DUE, de Arduino Galileo, de ChipKIT, y de Espardino, todos ellos de 32 bits. Os resumo brevemente mis impresiones.
Características de Arduino DUE (el arduino de 32 bits de Arduino):
- Microcontrolador AT91SAM3X8E
- Operating Voltage 3.3V
- Input Voltage (recommended) 7-12V
- Input Voltage (limits) 6-16V
- Digital I/O Pins 54 (of which 12 provide PWM output)
- Analog Input Pins 12
- Analog Outputs Pins 2 (DAC)
- Total DC Output Current on all I/O lines 130 mA
- DC Current for 3.3V Pin 800 mA
- DC Current for 5V Pin 800 mA
- Flash Memory 512 KB all available for the user applications
- SRAM 96 KB (two banks: 64KB and 32KB)
- Clock Speed 84 MHz
La principal desventaja consiste en los problemas de incompatibilidad hardware (usa 3.3v en E/S) y software de los que hablaremos luego, pero en su favor, Arduino DUE tiene algo muy importante. Tiene detrás a toda la comunidad Arduino. Por ello los principales inconvenientes se irán solucionando con casi total seguridad en un plazo razonable de tiempo.
Para más información en http://arduino.cc/en/Main/arduinoBoardDue
Características de Intel Galileo (el arduino de Intel):
Tiene muchas cosas realmente interesantes. Tiene a Intel detrás. Admite voltajes de E/S tanto de 3.3 voltios como de 5 voltios. Usa una CPU SoC Quark X1000 que es un procesador Pentium de 32 bits, con núcleo único, funciona con frecuencias de hasta 400 MHz. Incluye S.O. Linux en la tarjeta. Incluye un reloj de tiempo real, y más cosas interesantes, pero está limitado en el número de E/S respecto a Arduino Mega 2560. Han potenciado el aspecto de conectividad a Internet, cosa que yo contemplaba realizar con Raspberry Pi.
La idea de tener integrados en una misma placa el controlador de Arduino y el servidor de Internet no me parece una ventaja para mi proyecto. CAO tiene que controlar un sistema de mantenimiento de la vida de mis mascotas. Por ello me gusta más la idea de que sean dos sistema independientes y que el Arduino pueda funcionar, llegado el caso, con el servidor de Internet totalmente caído.
Para más información en http://arduino.cc/en/ArduinoCertified/IntelGalileo
Características de ChipKIT (El arduino de Microchip):
Tiene varios modelos y creo que fue el primer arduino de 32 bits de la mano del procesador PIC32 de MIPs, pero la ventaja de ser el único arduino de 32 bits durante algún tiempo ya pasó y no ha conseguido una cuota de mercado que pueda preocupar a Arduino DUE que llega con una comunidad de usuarios muy grande detrás. ChipKIT presenta similares problemas de compatibilidad software y hardware que Arduino DUE, por lo cual el soporte de una buena comunidad de usuarios, es un factor a tener muy en cuenta.
Para más información: http://www.microchip.com/pagehandler/en-us/family/32bit/
Características de Espardino:
- Bootloader USB integrado (8kb) por lo que no es necesario ningún programador externo
- Zócalo para tarjeta de memoria microSD listo para ser utilizado o almacenar datos de programa.
- Cristal de cuarzo de 12 Mhz
- Regulador de 5V integrado (Pines tolerantes a 5V)
- Cristal RTC integrado (32.768KHz)
- Conector USB micro-b
- Incluye 3 leds de estado
- Botón de Reset
- Entorno de desarrollo fácil basado en GCC4
- Conjunto de librería de desarrollo para FAT16/32, COM virtual, PWM, A/D, I2C, SPI etc
- Conectores de expansión 2 x 2.54mmcon acceso a todas las patillas del procesador
- Dimensiones: 53 x 34.5mm
La principal pega de Espardino para el proyecto CAO es que el software de desarrollo viene solo para Windows y así no me apetece ni probarlo.
Para más información en: http://projects.nbee.es/display/ESP/Home
Apostando por Arduino DUE:
Estoy considerando seriamente pasarme del Arduino Mega 2560 al Arduino DUE.
De hecho, ya me he comprado uno y he empezado a hacer algunas pruebecitas.
La incompatibilidad hardware viene principalmente por los voltajes de operación en E/S. Me afectará a placas que compré para el Arduino Mega 2560 y que ahora resultarán incompatibles con riesgo incluso de averiar la placa de Arduino DUE si intento usarlas. Existen soluciones para eso, incluso existen chips capaces de traducir los voltajes entre 3.3v y 5v de forma bidireccional, pero eso supone hardware adicional y yo espero que alguien saque un escudo (schield) que realice todas esas funciones para compatibilizar el hardware de Arduino DUE con Arduino Mega y evitarme así un montón de trabajo. Me temo que habrá que esperar para eso.
Respecto a la incompatibilidad software hay que recordar que en Arduinos de 8 bits hay librerías de bajo nivel específicas de AVR y que dejarán de funcionar. Muchas de ellas se sustituiran por las versiones ARM (bibliotecas SAM) correspondientes. Para programar código portable para ambas plataformas seguramente habrá que usar directivas de complilación del tipo:
#ifndef __AVR__
// Código específico para AVR8
// …
#endif
#ifdef _SAM3XA_
// Código específico para DUE SAM3XA
// …
#endif
El problema insoluble se puede presentar cuando un fabricante publique sus librerías de bajo nivel e incluya solo alguna de las dos plataformas.
Arduino Due no tiene EEPROM:
El Arduino PH Shield de Dormant Labs guardaba la calibración en la EEPROM, y necesita trabajar a 5V. Yo los parámetros de CAO los guardaba en EEPROM y ahora no se puede. Usar memoria flash sería una solución gracias al segundo puerto USB, pero aparte de que afectaría a la lógica de mi actual programa, las librerías actuales no son capaces de escribir en flash. Solo leen.
Voy de sorpresa en sorpresa.
Un vistazo general al recorrido de Arduino y su paso a los 32 bits:
La plataforma de 8 bits nació muy enfocada a usuarios no excesivamente técnicos, muchas decisiones se tomaron para simplificar al máximo el uso de Arduino. Sin duda eso fue un gran acierto que tiene que ver con el nivel de éxito alcanzado por este proyecto totalmente abierto.
Con Arduino DUE de 32 bits se está pensando en un hardware capaz de dar soluciones a proyectos cada vez más serios. Se va asumir que para iniciarse con Arduino la gente continuará usando las plataformas Arduino de 8 bits.
A mí el paso a Arduino DUE probablemente me va a suponer un retraso importante, pero no me queda más remedio si quiero construir un controlador como el que tenía pensado. A cambio voy a aprender mucho más.
Creo que el proyecto CAO podría tener dos versiones bastante diferentes donde la versión más sencilla sí que podría funcionar con Arduino Mega. La parte de conexión a Internet sería el sacrificio más importante en la versión sencilla. Trabajar primero en la versión sencilla me podría dar tiempo para que Arduino DUE madure. En este momento el IDE de Arduino DUE es una versión Beta y seguiré probando cosillas, pero con calma.
De momento, no publicaré apenas código porque, por cada tres pasos que avanzo luego retrocedo dos y no es cuestión de presentar las cosas así. Intentaré completar una versión simplificada de CAO y entonces publicaré el código.
El resumen de las características de las dos placas con las que seguramente tendré que trabajar para mi proyecto es la siguiente:
Modelo |
||
Microcontrolador |
||
Voltaje de operación en E/S |
5V |
3.3V |
Voltaje de entrada (valores recomendados) |
7-12V |
7-12V |
Voltaje de entrada (valores limites) |
6-20V |
6-20V |
Pines E/S digitales |
54 |
54 |
Pines de salidas digitales PWM |
15 |
12 |
Pines de entradas analógicas |
16 |
12 |
Pines de salidas analógicas |
2 (DAC) |
|
Corriente total de salida para todos los pines de E/S |
40 mA |
130 mA |
Máxima corriente para el pin 3.3v |
50 mA |
800 mA |
Máxima corriente para el pin 5V |
800 mA |
|
Memoria Flash |
256 KB – 8 KB para bootloader |
512 KB disponibles |
Memoria SRAM |
8 KB |
96 KB |
Memoria EEPROM |
4 KB |
¡NO DISPONIBLE! |
Velocidad del reloj del procesador |
16 MHz |
84 MHz |
Tipo de USB |
Estándar |
Mini |
Pese a que han tardado bastante en sacar este producto hay una ruptura de la compatibilidad importante en varios aspectos fundamentales. Confío que entre todos los que estamos apostando por Arduino Due, seamos capaces de ir aportando granitos de arena para encontrar las mejores soluciones a los desafíos planteados.
Juan
Hola. Llevo tiempo siguiendo tu blog y por él me decidí a hacer yo algo parecido.
Como soy analista-programador, desde el principio planteé las cosas de un modo un tanto diferente.
Tengo 2 acuarios (de 150 y 20 l, en estos momentos las luces de ambos están conectadas entre sí) y pensando en comprar uno marino dentro de un tiempo.
Para la gestión web y gestión completa del acuario acabo de comprar (y recibí el jueves) una Rapsberry Pi B.
Mi intención es que «los Arduino que instale» sólo se ocupen de las entradas y salidas (lo cual no les consume mucha memoria). Toda la gestión completa la llevará la RPi comunicándose por serie «con los Arduino» que haga falta.
El motivo de esto es porque hay 16 metros eléctricos de distancia entre ambos acuarios y tirar una manguera de 20 hilos entre ambos no es buena opción.
Lo mejor para mi es situar un Arduino junto al de 150 y otro para el de 20 y el marino que estarán en el mismo mueble.
Creo que si tu proyecto va a crecer mucho, tal y como dices y tal y como te estoy siguiendo, deberías replantear lo de RPi.
Siento no haber leido esta entrada un poco antes.
Saludos
Juan
Aclaraciones: Ya tengo una manguera de 8 hilos entre ambos acuarios (instalada hace varios meses). No es plan instalar otra manguera ni cambiarla, de ahí que haya decidido que se comuniquen por un cable serie (USB), de paso, desde la Raspberry Pi alimento al Arduino Mega (que es el que actualmente ya he comprado).
Pretendo controlar tanto el acuario como las luces del comedor y de casualidad, la mayor parte de las luces del comedor tienen el interruptor junto al acuario de 150l.
Antonio Castro
En mi primera versión lo tenía planteado como tú. Instalé Raspbian y programé en Python un programa para intercambiar programas con el Arduino. El protocolo de comunicaciones me consumía mucha memoria y me decanté por la solución actual. Continuo con todo ello en mente aunque voy despacio. No suelo hablar de lo que tengo proyectado porque desde que empiezas a idear una solución hasta que esta se convierte en una realidad puede pasar mucho tiempo y el planteamiento puede variar mucho.
Puedes usar los Arduinos como simples gestores de entradas salidas o como algo más. Las implicaciones en el diseño de todo el sistema son enormes y en especial en el diseño del protocolo de comunicaciones.
Si has echado un vistazo a mi código y a mi libro seguramente habrás localizado partes del código reutilizables para tu proyecto. Puedes tomar lo que te apetezca, el diseño modular te facilitará bastante esa tarea, pero me encantaría saber de tus progresos.
Antonio Castro
Cada solución tiene su precio. Una de las cosas que yo he buscado es que toda la automatización del acuario descanse sobre un sistema Arduino muy fiable.
El Raspberry Pi necesita un S.O. (generalmente Linux). Esto supone varias capas de software. Por ejemplo, los programas son ficheros que se ejecutan y estos son gestionados por un sistema de ficheros muy complejo. Las posibilidades de cuelgue por causas difíciles de preveer se multiplican.
Además mencionas que el Raspberry se conectará a Internet para dar servicio al interfaz del usuario. Yo también quiero hacer eso, pero quiero que si algún capullo logra crakear mi sistema no pueda matar todos mis peces. Inicialmente pensé dar la responsabilidad del control del sistema al Raspberry, pero ahora pienso que puesto que el Arduino tendrá la responsabilidad de gestionar entradas y salidas, debería ser capaz de funcionar incluso con el Rasbery caido.
Tampoco me gusta mucho la idea de atarme demasiado a Raspberry.
Un sistema de soporte vital no debería colgarse nunca y creo que para eso un sistema Arduino con un programa en una zona de memoria reservada para ello, ofrece una mayor seguridad que un sistema con un S.O. que atiende a demasiadas cosas.
En Arduino incluso se puede implementar un sistema de perro guardian. Un chequeo que ha de hacerse regularmente y que en caso de fallar se interpretará como cuelgue y que forzará el reset del sistema.
Lo que tu pretendes es una solución que yo consideré inicialmente. No digo que sea mal. Me parece más fácil de implementar. Yo estoy bastante atascado por los problemas de incompatibilidad de Arduino DUE, voy despacio.
En cualquier caso sea cual sea el camino que decidas tomar para el diseño me encantará compartir contigo tus inquietudes.
Ivan
¿Habeis considerado el Arduino Yun para vuestros proyectos? Resolveria el problema de cableado porque lo podriais situar cerca de los acuarios gracias a su conectividad Wifi e integraria el servidor Web en su parte linux. El problema es la memoria Flash para la parte Arduino que es solo de 32kb.
http://arduino.cc/en/Main/ArduinoBoardYun
Un saludo.
Antonio Castro
Yo necesisto un sistema que no se pueda colgar. Que el sistema sea único no es una ventaja. La parte que se conecta a Internet hay que asumir que será vulnerable. La parte que automatiza el funcionamiento del acuario ha de ser un autómata que se recupere de cualquier situación. Por otro lado la parte de Arduino me ha superado los 256kb de ram del Arduino Mega 2560.
Haré una primera versión para Arduino Mega sin capacidad de control remoto. Se manejará a través de un sistema de menús. Necesito tiempo para solucionar el paso al Arduino DUE de 32 bits.
Luis
Bárbaro con tu código de 5000 lineas, para controlar una pecera. No podrías contar un poco lo que estas haciendo, que me parece excesiva la cantidad de código que estas tratando de manejar, a lo mejor te falta optimizar el código y generar por allí alguna librería para funciones repetitivas.
Juan
Por accidente, quemé el USB del Arduino Mega y de la Rpi.
Me dejaron una Cubietruck y me puse a probar con ella.
Hace un año, cuando escribí, tenía 1 acuario tropical de 160l y otro de 20l.
Ahora mismo tengo esos dos y además, 1 marino de 160l, dos minis de 6 y 1.4l
Añadí 3 nuevas mangueras de 26, 26 y 16 cables a diferentes sitios de la casa.
Sólo hay un Arduino Mega 2560 que debe controlar todo eso conectado por USB a la Cubietruck. Ya está en funcionamiento el controlador del Marino, con 6 juegos de luces diferentes, control de mareas, control de temperatura y en breve, control del nivel del sump. También en breve, habrá 5 juegos de luces diferentes para el de tropical de 160 y dos juegos para el de 20.
También controlará una serie de luces del comedor, es cuestión de días.
El Arduino tiene una programación estándar y parametrizada, de manera que es independiente de la Cubie. De momento, el Arduino envía todos los movimientos que hace a la Cubie y ésta los procesa. De momento, sólo tengo procesada la información de que el calentador del marino está 6 horas al día encendido, el resto apagado, con un gradiente de temperatura de tan sólo medio grado.
El programa de comunicaciones de la Cubie con el Ardu corre en una sesión activa VNC del Cubie, con suficiente resolución para poder acceder desde el móvil.
Más adelante, este mismo programa (el que corre en VNC de la Cubie) será capaz de encender y apagar otras cosas (ahora está preparado pero por un motivo técnico sólo obedece 1 de cada 10 órdenes XD) y además, podría cambiar el horario de encendido/apagado del propio Ardu, sin tener que reprogramarlo ni subir ningún nuevo script.
Juan
Se me olvidaba: hay 33 relés (10 para 220V y el resto para 12V), 4 sondas de temperatura y 1 ó 2 de nivel (en realidad, sólo me es necesario un control de nivel en el sump del marino debido al exceso de evaporación).
PD: Aprovechando que Valladolid pasa por el Pisuerga (o algo así), también se controlan ya las luces del Recibidor XD (todas las luces del marino apagadas => luz piloto del recibidor encendida).
Miguel Angel
Si tiene un bus i2c o twi por lo tanto se puede colocar un lcd, una memoria i2c del modelo 24lc1026 o 24lc1025 de 1mb pero ese modelo de ci es de 8 bits, creo que e sisten de 32bits, por esa parte tiene solución está claro que hay que re escribir todo el código hay que pensar que el due es el Ferrari de los arduinos. Al mega también se puede poner una 24lc1026, me queda por confirmar si hay en el mercado controladores i2c de luz led variables o pwm. Y animo con el proyecto que no decaiga
Saludos
Alba Salvá
Hola Antonio.
Ya sé que este proyecto es antiguo, pero te quiero ofrecer una solución al tema de la EPROM. En varios proyectos usaba la EPROM para el almacenamiento de parámetros, y muchos se modificaban en tiempo real, todo funcionaba bien hasta que la Eprom empezó a darme problemas.
Encontré unos módulos de memoria FRAM, son muy baratos y se direccionan por I2C, y aunque la capacidad no es excesiva 32 Kbytes (en realidad 265 Kbits), es más que suficiente para mis proyectos.
Tiene la ventaja de que se puede leer y escribir millones de veces, y la integridad de los datos permanece durante muchísimo más tiempo si se queda sin alimentación.
Además, es más rápida que la EPROM normal (a pesar de la comunicación I2C), lo cual permite la obtención del dato de forma casi instantánea.
Te recomiendo que pruebes uno para el DUE, te vas a sorprender. Y lo bueno es que trabaja a 5 y 3.3V (De hecho los uso con el ESP32 que trabaja a 3.3V de I/O.
Un saludo.
Alba
Antonio Castro
Gracias, no lo conocía, pero en realidad las memórias EPROM nunca me han dado problemas ya que hago un uso muy escaso de ellas.
Para mí han sido muy útiles. Guardo datos de configuración que en la práctica he mantenido durante años sin necesidad de modificar.
He tenido que simplificar mis actividades y hace más de un año que no cojo el soldador. Mis últimos proyectos fueron cositas sencillas.
La dedicación a mi salud incluye ahora la práctica del ajedrez.