Arduino

Arduino es una plataforma electrónica de código abierto basada en hardware y software fácil de usar. Puede decirle a su placa qué hacer enviando un conjunto de instrucciones al microcontrolador de la placa. Para hacerlo, utiliza el lenguaje de programación Arduino y el software Arduino (IDE). El software (Arduino IDE) hace que sea fácil escribir código (lenguaje C) y subirlo a la placa Arduino.

Los diseños de las placas Arduino usan diversos microcontroladores y microprocesadores. Generalmente el hardware consiste de un microcontrolador Atmel AVR, conectado bajo la configuración de "sistema mínimo" sobre una placa de circuito impreso a la que se le pueden conectar placas de expansión (shields) a través de la disposición de los puertos de entrada y salida presentes en la placa seleccionada.




Aqui encontrareis los montajes que he realizado con el Arduino:

Lenguaje de Programacion ArduinoDiferentes montajes para aprender a programar en Arduino en formato libro:
Luces de obras
Luces edificios aleatorias
Placa giratoria por segmento y sonido
Plataforma deslizante
Boton pulsador de accion
Reloj-pantalla anden
Tren lanzadera analogico
Paso a nivel DCC
TCO con S88
Decodificador de accesorios multiusos
Mando Xpressnet para panel
Lanzador de rutas Xpressnet
Megafonia para la maqueta
Decodificador DCC para señales RENFE
Control de funicular
LocoSpeedMedidor de velocidad de trenes a escala



Esta pequeña guía práctica surge como un hilo sobre "Nociones básicas para programar en C del Arduino o entender los listados", en el foro CTMS (Control Tren Modelo por Software). Se ha trasladado aquí el contenido de ese hilo en forma de libro pensando en los aficionados al modelismo ferroviario que desean acercarse a la programación de Arduino para aplicarlo en sus maquetas.

Este es un libro de iniciación al lenguaje de programación Arduino en el que en cada capitulo se avanza un poco mas en el conocimiento del lenguaje con ejemplos aplicados al modelismo ferroviario.

Lenguaje de programación Arduino
Castellano Lenguaje_de_programación_Arduino.pdf



Contenido



Lenguaje de programación Arduino


1. Nociones básicas

Nociones básicas del lenguaje Arduino. Funciones básicas del skecth: setup() y loop()


2. Ejemplo clásico: Blink

El ejemplo clasico de parpadeo de un LED usando el Arduino. Control de un pin como salida y pausas.


3. Otro ejemplo simple

Control de un LED al pulsar un boton. Lecura de un pin de entrada digital.

4. Ejemplo simple para la maqueta. Luces obras

Luces intermitentes para señalizar obras en la maqueta. El bucle for()


5. Librerías incluidas en Arduino IDE

Control de la posicion de un servo desde un potenciometro. Entradas analogicas y libreria Servo.h


6. Otras librerías

Sencillo sketch de decodificador de accesorios DCC de una salida. El Gestor de librerías.


7. Otras temporizaciones: Luces de edificio aleatorias

Luces aleatorias para animar edificios. Numeros aleatorios y millis()


8. Librerías incompatibles: Placa giratoria por segmento y sonido

Placa giratoria de segmento accionada por servo con sonido real (archivo .wav) almacenado en una tarjeta SD. Uso de switch()-case


9. Uso de 'shields': Plataforma deslizante con motor paso a paso

Control de una plataforma deslizante de 5 salidas con motor paso a paso. Con deteccion de final de carrera para un posicionamiento preciso. Shields de motores y uso de struct{} y while()


10. Los Strings: Botón Pulsador de Acción

Pulsador de accion que permite controlar hasta 3 servos y 10 salidas segun una secuencia programada. La secuencia se escribe en un String como sencillas ordenes (mover servo, encender, apagar, pausa, bucle). Strings y librerias en .zip


11. Comunicaciones (Serie e I2C): Reloj-Pantalla de andén

Pantalla para anden con control por el puerto serie. Tambien muestra la hora real y la temperatura. Usa una pantalla OLED de 0.96" (128x32 pixels) y un chip de reloj DS3231. El operador ternario y uso de Serial y otras librerias.


12. Bits y PWM: Tren lanzadera analógico

Tren lanzadera (ida y vuelta) en analogico por PWM con aceleracion y frenado usando solo la Arduino Motor Shield. Salidas analogicas (PWM) y registros del Arduino.


13. De la idea al programa: Paso a nivel DCC

Decodificador DCC para paso a nivel con servo, luces de carretera y luz para el maquinista. Programacion top-down y libreria NmraDcc.h


14. Bits problemáticos: Bits serie y retroseñalización S88

Interfaz a ordenador con protocolo P50 para lectura de retromodulos S88. Registros de desplazamiento y uso de Serial con datos binarios.


15. Memoria EEPROM: Decodificador de accesorios multiusos

Decodificador DCC de accesorios configurable desde el puerto serie. Puede controlar 14 salidas como tipo fijo, intermitente, pulso o servo. Uso de la EEPROM y formateado de textos.


16. Interrupciones: Mando XpressNet para panel

Sencillo mando para control de locomotoras con conexion Xpressnet, encoder rotatorio y display de 4 digitos. Uso de la libreria XpressNet.h, las interrupciones y union{}


17. Gestor de tarjetas y colas: Lanzador de rutas XpressNet

TCO Xpressnet de hasta 56 teclas y con asignacion por puerto serie de desvios o rutas para cada tecla. Usa un Arduino Pro Micro. Uso de otros tipos de Arduino con el Gestor de tarjetas y las colas FIFO.


18. Sketch en varios archivos: Megafonía para la maqueta

Decodificador DCC para megafonia y sonido ambiente de la maqueta con el DFPlayer. Reproduce hasta 144 archivos .wav y .mp3 desde la tarjeta SD con solo 16 direcciones de accesorios. Preprocesamiento y prototipado de funciones del compilador de Arduino.


19. Crear librería: Decodificador DCC para señales RENFE

Creacion y uso de una libreria que muestre varios aspectos en una o varias señales de varias luces acorde con el Reglamento General de Circulación de RENFE. Creacion de librerias propias, paso de parametros por valor y por referencia.


20. Maquina de estados: Control de un funicular

Automatismo para el funicular BRAWA (Standseilbahn 6410) instalado en un modulo con pùlsador para accionar por el publico. Programacion de una maquina de estados finitos (FSM).


Anexo I. Referencia al Lenguaje


Anexo II. Librerías







LocoSpeed es un medidor de velocidad de trenes a escala (Z, N, TT, H0 y 0) realizado con Arduino Uno o Arduino Nano, una pantalla OLED 0.96" SSD1306 y dos detectores infrarrojos.

Junto a Jos€p Callarisa hemos mejorado el diseño inicial de Jörg Kießling en N-modellbahn y la versión posterior de MarkusNTrains MarkusNTrains.

Speedometro (Medida de velocidad):

Se muestra la velocidad a escala, el contador de pasadas en ambos sentidos, la longitud del tren, el tiempo de vuelta y longitud recorrida estimada.


Dial

Se muestra un dial analógico con la velocidad y sentido además de la longitud del tren.


Crono

Pensado para el rodaje de locomotoras en el que se muestra el tiempo total de rodaje, además del numero de vueltas y los tiempos parciales en ambos sentidos.


Radar

La opción radar permite establecer una velocidad límite en que si es superada por el tren detectado activa una salida durante dos segundos o bien, un pito.


Salida Serie (Modo Texto o CSV)

La salida serie (9600 baudios) permite leer en el Monitor Serie (o similar: Putty, Terminal,...) los datos de la detección. Puede elegirse entre un modo Texto y un modo CSV para poder crear un archivo .csv copiando los datos del Monitor Serie en el bloc de notas, guardarlos como locospeed.csv y luego cargarlo en Excel.


Configuracion

Si al conectar la alimentación al Arduino (o resetearlo) están ambos detectores ocupados (detectan un obstáculo) se entra en modo de configuración.
Cuando salga 'SET SCALE' quitad el obstáculo de ambos detectores y luego obstaculizar solo uno para ir recorriendo las diferentes opciones de escala (Z, N, TT, H0 o 0) o modo de visualización, cuando se seleccione la que os interese quitad el obstáculo y unos segundos más tarde se inicializará normalmente en el modo escogido.





El diseño 3D del porta LEDs es de Jos€p para que el infrarrojo tenga un mejor enfoque. Si lo usáis imprimidlo en un color oscuro, yo al principio lo hice en blanco y se transparentaba al infrarrojo por lo que siempre veía ocupado.


Descarga el programa y el manual aqui

Otro diseño para medir la velocidad pero instalado en un vagón y usando un ESP8266 con WiFi es el PacoWagon





Esta es una conferencia divulgativa de digital que presente en la jornada técnica 2019 de la FCAF (Federació Catalana d'Amics del Ferrocarril) sobre el Arduino y su uso con DCC:

Arduino y DCC
Castellano Arduino_y_DCC_2019.pdf
Catala Arduino_i_DCC_2019.pdf





Con el entorno Arduino IDE tambien se pueden programar otras placas como las dotadas con el chip WiFi ESP8266:

PacoWagonVagón de medición de velocidad y distancia recorrida e inclinación para trenes a escala
PacoWagonDisplayDisplay WiFi para PacoWagon y los Fast Clock MRclock y JMRI