===== Introducción: =====
{{:arduino:arduinouno_r3_front_450px_1_.jpg?200|Módulo Arduino Uno R.3 elegido para el proyecto}} {{:arduino:arduinouno_r3_back_450px.jpg?200|Módulo Arduino Uno R.3 trasera}}
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 {{ :arduino:atmega168pinmap2_1_.png |http://arduino.cc/en/uploads/Hacking/Atmega168PinMap2.png}} 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: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 https://www.minitronica.com/como-grabar-el-bootloader-en-el-atmega328p/ 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/ Problema con **ATMEGA328P-U** Sko solución: Tras quemar el bootloader sin problemas, no funcionaba, fallo sync. Finalmente: Elegir "Arduino Nano" como placa y Atmega328P (old bootloader) como procesador. Aún no se porque, quizá porque reduce velocidad de programación. ===== 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 (Arduino1): ===== ==== Controlador. ==== {{:arduino:arduino1-tcl16sch.gif?direct|}} === Hadrware. === Display. Teclado. === Software. === El Modulo de control (Arduino1) enviará vía serie los comandos para controlar las salidas y monitorizar las entradas al módulo de programas (Arduino2). Para controlarlo se utilizará un programa que contenga las rutinas que se elegiran y ajustarán mediante el teclado y un sistema de menus en el display. [[programaArdu1|Programa Modulo de control]] [[bitacoraprog1|Bitacora de cambios en el Programa del Módulo de control]] [[instrucciones|Instrucciones de manejo del programa]] ===== Módulo de programas (Arduino2)===== 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. Es esquema del modulo 2 o "de control" es el siguiente: // // {{ :arduino:esquemaardu2.jpg?direct |}} Como se puede observar incluye una parte que interconecta con el módulo 1 y centraliza en este esquema los conectores externos que darán la comunicación de ambos módulos permitiendo con un conmutador interconectarlos entre ellos o liberarlos y conectar cada uno por separado a otra fuente de datos (PC u otros) para reprogramarlos o interactuar con ellos desde el exterior). Placa Arduino 2 o "de programas": {{ :arduino:placaardu2.jpg?direct |}} 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 ^|| ^ Modo de pines ^|||||| | |90 00 00 | all off| | Input |Output|Analog|PWM|Servo| |PD02|90 04 00|On P02| |F4 02 00|F4 02 01| | |F4 02 04|PD02| |PD03|90 08 00|On P03| |F4 03 00|F4 03 01| |F4 03 03|F4 03 04|PD03| |PD04|90 10 00|On P04| |F4 04 00|F4 04 01| | |F4 04 04|PD04| |PD05|90 20 00|On P05| |F4 05 00|F4 05 01| |F4 05 03|F4 05 04|PD05| |PD06|90 40 00|On P06| |F4 06 00|F4 06 01| |F4 06 03|F4 06 04|PD06| |PD07|90 00 01|On P07| |F4 07 00|F4 07 01| | |F4 07 04|PD07| |PD08|91 01 00|On P08| |F4 08 00|F4 08 01| | |F4 08 04|PD08| |PD09|91 02 00|On P09| |F4 09 00|F4 09 01| |F4 09 03|F4 09 04|PD09| |PD10|91 04 00|On P10| |F4 0A 00|F4 0A 01| |F4 10 03|F4 10 04|PD10| |PD11|91 08 00|On P11| |F4 0B 00|F4 0B 01| |F4 11 03|F4 11 04|PD11| |PD12|91 10 00|On P12| |F4 0C 00|F4 0C 01| | |F4 0C 04|PD12| |PD13|91 20 00|On P13| |F4 0D 00|F4 0D 01| | |F4 0D 04|PD13| |An0 |91 40 00|On P14| |F4 0E 00|F4 0E 01|F4 0E 02| |F4 0E 04|An0| |An1 |91 00 01|On P15| |F4 0F 00|F4 0F 01|F4 0F 02| |F4 0F 04|An1| |An2 |92 01 00|On P16| |F4 10 00|F4 10 01|F4 10 02| |F4 10 04|An2| |An3 |92 02 00|On P17| |F4 11 00|F4 11 01|F4 11 02| |F4 11 04|An3| |An4 |92 04 00|On P18| |F4 12 00|F4 12 01|F4 12 02| |F4 12 04|An4| |An5 |92 08 00|On P19| |F4 13 00|F4 13 01|F4 13 02| |F4 13 04|An5| |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| |Pxx=An2|E2 00 00|E2 7F 07| |E3 7F 00|127| |P11PWMval|EB 00 00| |Pxx=An3|E3 00 00|E3 7F 07| |E3 00 01|128| | | | |Pxx=An4|E4 00 00|E4 7F 07| |E3 7F 01|255| | | | |Pxx=An5|E5 00 00|E5 7F 07| http://blog.ardublock.com/ ===== Gastos de montaje: ===== [[gastoardu|Gastos de Montaje]]