¿Qué modelo Arduino elegir para nuestro proyecto CAO?
Nuestro proyecto CAO no será una solución cerrada. Dependiendo de lo que pretendas hacer dependerá lo que necesites comprar. Vamos a explicar cuales son las principales diferencias entre los diferentes modelos de placas que podrían llegar a interesarnos para CAO.
Los cuatro modelos que más nos pueden interesan serán: Arduino Diecimila, Arduino Duemilanove, Arduino Mega128 y Arduino Mega256. Están basados respectivamente en cuatro chips diferentes: Atmega168, Atmega 328, Atmega1280 y Atmega2560 Las características comunes de todos estos microcontroladores son:
- Voltaje operativo: 5v
- Voltaje de entrada recomendado: Entre 7 y 12V
- Votaje de entrada límite: Entre 6 y 20v
- Intensidad de corriente: 40mA
- Frecuencia de reloj: 16 Mhz
Las diferencias entre ellos son:
Atmega168 | Atmega328 | Atmega1280 | Atmega2560 | |
---|---|---|---|---|
Pines de entrada y salida digital | 14 (6 PWM) | 14 (6 PWM) | 54 (14 PWM) | 54 (15 PWM) |
Pines de entrada analógica | 6 | 6 | 16 | 16 |
Memoria Flash | 16KB (2KB para el bootloader) | 32KB (2KB para el bootloader) | 128KB (4KB para el bootloader) | 256KB (8KB para el bootloader) |
SRAM | 1 KB | 2 KB | 8 KB | 8 KB |
EEPROM | 512 bytes | 1 KB | 4 KB | 4 KB |
Para la fase de crear un prototipo hemos elegido el modelo Arduino Mega256 (chip Atmega2560). No hay una razón concreta para esta elección. Simplemente no conozco aún con exactitud lo que voy a necesitar y elegí el modelo más completo. Cuesta algo menos del doble que un Duemilanove que podría ser más que suficiente para una gran cantidad de proyectos.
Mientras no se diga otra cosa trabajaremos procurando mantener una compatibilidad del 100% con Arduino Duemilanove. Es decir, siempre que sea posible evitaremos usar las características superiores del Arduino Mega, también usaremos los pines comunes de forma que se respete la compatibilidad con los modelos de la gama inferior.
Empezando a usar Arduino desde Ubuntu Linux:
- Busca dentro de tu repositorio de programas de Ubuntu e instala la aplicación Arduino IDE. Es un entorno de programación para Arduino. Incluye un interfaz de edición de programas y un compliador. También permite enviar el programa ya compilado a Arduino por el puerto USB.
- Enchufa tu Arduino a un puerto USB de tu ordenador.
- Arranca la aplicación Arduino IDE.
- Indica cual es el modelo de tu placa. (Desde el menú: Board).
- Establece el puerto serie de Arduino (Desde el menú: SerialPort).
- Carga el programa de ejemplo Blink. (Desde el menú: File -> Examples -> Basic -> Bink).
- Deberá aparecer el código fuente de la aplicación. Observamos que este sencillo ejemplo usa para la salida el pin 13. Algunos modelos de placas como Mega incluyen ya un LED conectado a ese pin. (En caso de que tu placa no tenga ese Led, conecta un Led al Pin 13 a través de una resistencia de 220 ohms según se indica aquí).
- Hacemos ahora Upload (->) para cargar la memoria de Arduino con este ejemplo. Si tenemos una placa Mega un par de Leds conectados a la línea del puerto serie parpadearán indicando que hay flujo de datos. Finalizada la carga el programa se empezará a ejecutar haciendo parpadear el Led conectado al Pin 13. ¡¡Tu placa funciona!!
Puedes desenchufar el puerto USB y con ello se apaga Arduino, pero al volverlo a enchufar seguirá funcionando el programa por seguir en memoria. En realidad, una vez cargado, Arduino solo necesitará la alimentación eléctrica para funcionar.
Prueba a hacer algunos cambios de tiempos en el programa para ver que sucede. Después de cada cambio en el código deberás hacer Upload.
Hay que explicar que para lo único que nos sirve en este momento a nosotros este programita Blink, es para verificar que todo funciona correctamente.
La forma de programar el bucle loop(), que acabamos de ver en Blink, introduce retrasos importantes en el mismo. Eso no resulta importante en esta prueba, pero si que lo es para el desarrollo de aplicaciones más sofisticadas.
Cuando necesitemos que Arduino realice varias tareas simultáneamente, tendremos que implementar el código de forma que el bucle loop() llame siempre a funciones de tareas que sean muy rápidas, para que así entre todas ellas, se repartan secuencialmente unas rodajas de tiempo suficientemente finas como para poder simular que todas ellas funcionan concurrentemente. Esto lo simularemos en nuestro próximo ejercicio con Arduino donde usaremos varios Leds y usaremos una placa de prototipos con algunos componentes electrónicos. Con ello realizaremos un primer montaje que nos permitirá avanzar en el diseño de CAO.
Con esta práctica se puede decir que ya has empezado a hacer cosillas con Arduino. Es bueno experimentar con él para ir aprendiendo. Hay muchas prácticas sencillas publicadas.
Usando el editor vim con el IDE de Arduino:
Eso que sigue es totalmente opcional: Si no usas vim sáltate este apartado, porque no te va interesar.
El IDE de arduino es muy intuitivo y muy fácil de usar, pero su editor, comparado con otros editores clásicos de programación, es bastante menos productivo. Una persona que domine el editor vim puede sacarle una productividad bastante mayor. Si ese es tu caso configura el IDE de arduino para que use un editor externo. Para ello (Desde el menú: File -> Preferences -> (marca) Use external editor). Si no lo haces así, las modificaciones que hagas con vim no se verán reflejadas en el fuente contenido en el IDE y estarás compilando una y otra vez el mismo fuente.
Luego introduce los siguientes comandos:
$ mkdir -p ~/.vim/syntax
$ wget http://www.vim.org/scripts/download_script.php?src_id=14412 -O ~/.vim/syntax/arduino.vim
$ wget http://sindormir.net/~syvic/arduino/.vimrc -O ~/.vimrc
¡Ojo!, el último comando machacará tu fichero de configuración del vim, si es que tenías alguno.
Cuando entres en vim tendrás que hacer:
:set syntax=arduino
Con esto se habilita el reconocimiento de la sintaxis en vim.
Para que el IDE tome los cambios que hagas en vim, deberás de salvar en vim y luego leer en el IDE usando el botón de verificar sintaxis. Yo uso una ventana de vim en un terminal virtual y otra ventana para el IDE Arduino en otro terminal virtual. No es lo ideal pero funciona razonablemente bien.
El IDE de Arduino te permite activar un monitor serie, (Desde el menú: Tools -> Serial Monitor), en una ventanita. Esto habilita un interfaz de entrada salida serie con Arduino. Se puede usar por ejemplo, para escuchar al Arduino mientras está ejecutando el programa, y así comprobar las trazas de depuración de código intercaladas en el mismo. Esto se hace enviando los datos de traza por el puerto serie a través del mismo conector USB que usamos para cargar el programa.
A continuación un ejemplo de traza:
void setup(){
Serial.begin(9600);
Serial.println(«Estamos haciendo setup()»);
delay(5000);// esperar 5 segundos antes de continuar
}
Programación:
Arduino usa una variante de C, pero esta variante no es ni más ni menos amigable que el propio lenguaje C. Este es un lenguaje cercano a la máquina y no tanto al usuario, está orientado a la obtención de un código muy eficiente. Incluye algunas facilidades especiales que permiten un nivel de acercamiento importante al lenguaje del microprocesador.
El lenguaje de Arduino soporta las construcciones de ANSI C y algunas de C++. Véase Referencia de lenguaje (extensión).
No es un lenguaje fácil. Un buen programador de C acostumbra a tener muy en cuenta lo que se corresponde con punteros y direcciones de memoria. Ello ayuda a interpretar las sorpresas misteriosas que ocurren cuando se comenten errores y así poder diagnosticar los fallos de programación para poder depurar el programa. En resumen, C proporciona mucha potencia, pero es una potencia diabólica.
Si te gustan los peces y programas bien en C, te vas a sentir como pez en el agua con este proyecto. En caso contrario, no te desanimes, pide ayuda.
Enlaces para documentarse:
Para poder documentarte sobre cualquier necesidad, te propongo una serie de links que considero de especial utilidad:
- Arduino programing notebook en castellano PDF)
- Dispones en castellano de esta página oficial que tiene una gran cantidad de enlaces por categorías. Úsala como punto en entrada para buscar documentación oficial.
- Fundamentos: http://arduino.cc/es/Tutorial/Foundations
- Ejemplos: http://arduino.cc/es/Tutorial/HomePage
- Video Tutorial Arduino: Primeros pasos (Parte 1/2)
- Video Tutorial Arduino: Primeros pasos (Parte 2/2)
Cabe la posibilidad de que esto te interese, pero que te sientas intimidado de alguna forma por tu presunta falta de preparación técnica, pero a mí no me importa que preguntes aunque sea por simple curiosidad. Con lo que aquí publico considero factible realizar algunos automatismos muy simples que no necesitarían de grandes dispendios de conocimientos técnicos ni de un alto presupuesto. Este es un proyecto muy abierto que admite muchos subproyectos para solucionar problemas no muy complicados.
Nosotros vamos a ser ambiciosos en este proyecto, pero puede que lo que alguien necesite sea mucho más sencillo de lo que aquí pretendemos hacer. Muchas veces lo que se busca es la solución a un problema acuariófilo muy concreto y eso generalmente puede resultar bastante más fácil y económico de conseguir. Para automatismos simples no se requerriría ni un modelo Mega para Arduino, ni adquirir un Raspberry Pi, ni interfaz Web. Estoy pensando por ejemplo en cosas como un controlador de cambios parciales de agua o una iluminación crepuscular para la cría de cíclidos, etc. Te sorprendería saber lo fácil que es hacer ciertas cosas y lo barato que resulta.
Si te pica la curiosidad, tú haz la pregunta, de lo contrario el no ya lo tienes. No pierdes nada al preguntar, pero para que tu pregunta sea útil a otros, hazlo aquí usando los comentarios. Cualquier muestra de interés por el proyecto será muy de agradecer.
David
Buenos días,
Muy interesante tu experimento y sorprende que un experto en biología marina sepa tanto de electrónica y programación (o que un programador sepa tanto de biología). Está claro que el mundo futuro pertenecerá a los multidisciplinares.
Estoy en un momento de descubrimiento de la arquitectura Arduino y Raspberry y mi duda respecto tu proyecto radica en si se pueden hacer uso de sondas y detectores comerciales de forma sencilla. La interacción entre los dos módulos parece relativamente sencilla (aunque se me escapa el tratamiento de los datos serie por usb). Lo que no soy capaz de intuir por falta de conocimiento es si los sensores comerciales pueden usarse dentro de este sistema de hardware y software abierto.
Seguiré leyendo tus progresos con gran interés. Un saludo.
Antonio Castro
En mi juventud cachareé bastante con la electrónica. Hice biológicas, e informática. Hay cosas que no se olvidan. La acuariofilia es bastante multidisciplinar, también la practico desde joven.
Gracias por preguntar y dar vida a este proyecto con un poquito de interactividad. Tu curiosidad tiene una facil respuesta. Arduino es tan flexible que es capaz de usar una alta variedad de sensores. El secreto está en la programación posterior. Acabo de comprarme un par de resistencias NTC de 10K. Ahora no recuerdo cuanto me han costado porque son muy baratas, creo que no llegan al euro. El caso es que cuando la monte en el sistema solo tendré que calibrarla. Ya se facilitan funciones de interpolación para eso.
El USB se usará como puerto serie para intercambiar mensajes de información o para intercambiar comandos. Iré poco a poco. Espero poder dedicar algo de tiempo este fin de semana a esto.
Si tienes curiosidad o interés por algún caso práctico concreto puedes plantearlo. Me gustan los retos.
Un cordial saludo.