¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Introducción:
<html><center></html>
<html></center></html>
Los módulos arduino están basados en microcontroladores económicos que con pocos componentes adicionales permiten obtener un buen número de entradas y salidas digitales y analógicas controlables por un programa que se aloje en el propio micocontrolador o desde un ordenador o tablet al que se pueden conectar por puerto serie ya sea por los estandard rs232, usb, bluetooth o incluso ahora hay módulos wifi o ethernet.
Esto hace que integrar el arduino en el proyecto lo haga sencillo, económico y versatil. Arduino tiene además la ventaja de que está basado en la filosofía de código abierto, así hay montones de desarrollos basados en él disponibles de forma gratuita pudiendo acceder desde los esquemas de los módulos hasta los programas realizados para su control.
Amplia información se puede encontrar en la página del proyecto traducida también en gran parte al español: http://www.arduino.cc/es/
En nuestro caso, para el display vamos a usar el arduino de forma invariable y siempre con el mismo uso, programa y cableado, por ello no necesitamos toda la placa, sino que nos vale con el micro con el mínimo de componentes siguiendo los pasos de este enlace:
Arduino sólo con el atmega: http://arduino.cc/es/Main/Standalone#.Uy8bnvl5Mzc
Tras contemplar varias opciones lo mas practico, economico y funcional, usando sólo el atmega con el minimo de componentes es utilizar 2 controladores para manejar el equipo. Uno de ellos se encargará de la interfaz con el usuario, controlará el display, el teclado de control y llevará la programación del menu de control pasándole unicamente cuando el usuario seleccione un programa la orden al segundo atmega que será el que almacene todos los programas con las funciones que prestara el entrenador.
Manual de programación de Arduino en español: arduino_programing_notebook_es.pdf
Montajes y prácticas con arduino: http://unicarlos.com/pezazul/index.php
Montajes y muchos detalles: http://tallerarduino.wordpress.com/
Freaduino: Clon mas barato y potente de arduino. http://www.elecfreaks.com/store/freaduino-uno-rev12-p-414.html
Mas montajes e información en base a arduino: http://fritzing.org/home/
Mas montajes e información: http://www.arduteka.com/
Ehternet para arduino http://tecnotinker.blogspot.com.es/2012/07/uso-del-modulo-ethernet-enc28j60-con.html
Programar un arduino a través de otro: http://www.instructables.com/id/Arduino-Examples-2-Use-an-Arduino-as-a-FTDI-Progr/?lang=es
Conversor serie paralelo 16b con 2x 74hc595: http://arduino.cc/es/Tutorial/ShiftOut#.UzgAkKh_tBM
Contador binario: https://zbutton.wordpress.com/2010/02/07/construyendo-un-contador-binario-con-arduino/
Esquema de bloques:
Para controlar las funciones del entrenador vamos a usar 2 microcontroladores Arduino. No la placa completa pues al ir en un entrono fijo no necesitamos la placa que rodea al microcontrolador atmega y lo convierte en todo terreno.
Vamos a necesitar 2 pues vamos a poner un display grafico al que para dar estabilidad y suavidad pondremos con interface paralelo. Para ello necesitamos practicamente todas las salidas del controlador. La opción tomada para solventar esto y que el programa de control necesita mas memoria de la disponible en 1 controlador ponemos 2.
Se comunicaran entre ello por un puerto serie y se divide la programación en las rutinas de control grafico, sistema de menús y control del teclado y las comunicaciones (si se ponen con el PC) en el primer Arduino que vamos a llamar “De control”.
El segundo llevará la programación que controlará directamente las entradas y salidas accesibles al usuario y las funciones que se puedan realizar con ellas. Esta programación responderá a las instrucciones que le entrarán por puerto serie procedente de lo pedido por el usuario desde el primer Arduino.
Módulo de control:
Controlador.
Hadrware.
Display.
Teclado.
Software.
Módulo de programas
El circuito va a ser un arduino básico, es decir, el atmega con los componentes mínimos son sus entradas/salidas conectadas a los pines del entrenador menos los correspondientes a la comunicación serie que estarán conectados al modulo 1 y dispondran de una entrada adicional para ser controlado por puerto serie desde un PC.
Programa Arduino 2: Hay una librería estandarizada “Firmata” https://github.com/firmata/protocol que va incluso incluida en el ide de arduino aunque hay versiones mas actualizadas.
La idea de esta librería es que convierte al arduino en esclavo que sólo envía y transmite la información de sus pines hay librerías para utilizarlo desde numerosos entornos (como javascript, php o una aplicacion para Chrome: https://chrome.google.com/webstore/detail/arduino-firmata-controlle/ekimfiajefhjfmojhkgjmpinaainoale )ya hechas
Y lo mas interesante es que hay un entorno de simulación: http://myopenlab.de/startseite.html de codigo abierto y que permite a través de esta librería utilizar el arduino para que sus programas y simulaciones interactuen con el exterior.
La pega es que los códigos que hay que utilizar para enviar y recibir la información son puros byte hexadecimal. Por ello puede ser necesario tener la tabla de codigos ascii correspondiente. en el windows 7 en españa parece que responde a http://es.wikipedia.org/wiki/Windows-1252.
Digital Output | |||||||||||||
90 00 00 | all off | ||||||||||||
PD2 | 90 04 00 | On P02 | F4 02 00 | P02in | F4 02 01 | P02out | F4 02 04 | P02Servo | |||||
PD3 | 90 08 00 | On P03 | F4 03 00 | P03in | F4 03 01 | P03out | F4 03 03 | P03PWM | F4 03 04 | P03Servo | |||
PD4 | 90 10 00 | On P04 | F4 04 00 | P04in | F4 04 01 | P04out | F4 04 04 | P04Servo |
PD5 90 20 00 On P05 F4 05 00 P05in F4 05 01 P05out F4 05 03 P05PWM F4 05 04 P05Servo PD6 90 40 00 On P06 F4 06 00 P06in F4 06 01 P06out F4 06 03 P06PWM F4 06 04 P06Servo PD7 90 00 01 On P07 F4 07 00 P07in F4 07 01 P07out F4 07 04 P07Servo PD8 91 01 00 On P08 F4 08 00 P08in F4 08 01 P08out F4 08 04 P08Servo PD9 91 02 00 On P09 F4 09 00 P09in F4 09 01 P09out F4 09 03 P09PWM F4 09 04 P09Servo PD10 91 04 00 On P10 F4 0A 00 P10in F4 0A 01 P10out F4 10 03 P10PWM F4 10 04 P10Servo PD11 91 08 00 On P11 F4 0B 00 P11in F4 0B 01 P11out F4 11 03 P11PWM F4 11 04 P11Servo PD12 91 10 00 On P12 F4 0C 00 P12in F4 0C 01 P12out F4 0C 04 P12Servo PD13 91 20 00 On P13 F4 0D 00 P13in F4 0D 01 P13out F4 0D 04 P13Servo An0 91 40 00 On P14 F4 0E 00 P14in F4 0E 01 P14out F4 0E 02 P14An F4 0E 04 P14Servo An1 91 00 01 On P15 F4 0F 00 P15in F4 0F 01 P15out F4 0F 02 P15An F4 0F 04 P15Servo An2 92 01 00 On P16 F4 10 00 P16in F4 10 01 P16out F4 10 02 P16An F4 10 04 P16Servo An3 92 02 00 On P17 F4 11 00 P17in F4 11 01 P17out F4 11 02 P17An F4 11 04 P17Servo An4 92 04 00 On P18 F4 12 00 P18in F4 12 01 P18out F4 12 02 P18An F4 12 04 P18Servo An5 92 08 00 On P19 F4 13 00 P19in F4 13 01 P19out F4 13 02 P19An F4 13 04 P19Servo
90 0C 00 Pin2+pin3 --> Suma hex de bytes Byte2 tiene menos peso q byte3 Byte3 solo 0 ó 1 P03PWMval Analog response E3 00 00 0 P05PWMval E5 00 00 P14=An0 E0 00 00 E0 7F 07 E3 01 00 1 P09PWMval E9 00 00 P15=An1 E1 00 00 E1 7F 07 E3 02 00 2 P10PWMval EA 00 00 E3 7F 00 127 P11PWMval EB 00 00 E3 00 01 128 E3 7F 01 255