Mostrando entradas con la etiqueta Modelismo. Mostrar todas las entradas
Mostrando entradas con la etiqueta Modelismo. Mostrar todas las entradas

jueves, 16 de julio de 2026

DCCpp Animations Controller, dale vida a tu maqueta!

DCCpp LMD Animation Controller Web

¿Qué es DCCpp Animations Controller?

Muy buenas a todos y todas!

DCCpp Animations Controller es una aplicación web que te permite controlar automáticamente las animaciones de tu maqueta de ferrocarril como luces, desvíos, fuentes, servos, etc.

Según un ciclo día/noche, configurable con parámetros personalizados, la duración del día completo o el retardo.



La web se conecta directamente a tu Arduino por USB o Bluetooth mediante Web Serial API y envía comandos DCCpp de forma automática e inteligente.

¡¡¡Sin necesidad de complicados programas para configurar accesorios o desvíos!!!

✅ DCCpp Animations Controller es ideal para:

  • Encender farolas al anochecer y apagarlas al amanecer.

  • Activar animaciones o desvíos solo durante el día.

  • Controlar luces de edificios, paso a nivel, etc.

  • Simular el comportamiento real de una maqueta.

🚀 Modo de uso

Conexión del hardware

Para utilizar el sistema automatizado de luces y accesorios solo necesitamos:

  • Central DCC Conectada por puerto serie o Bluetooth.

  • Navegador Chrome, Edge o Brave (Web Serial API).

Acceso a la web

DCCpp Animations Controller

DCCpp Animations Controller

Lógica para simulación 🌞día y 🌙noche


Ciclo completo = 8 minutos (ejemplo)
├── DÍA (4 minutos)   → Se ENCIENDEN animaciones de DÍA
│                       Se APAGAN animaciones de NOCHE
|
└── NOCHE (4 minutos) → Se ENCIENDEN animaciones de NOCHE
                        Se APAGAN animaciones de DÍA

Primeros pasos

  • 1. 🔌 Conectar → Selecciona el puerto COM de tu Arduino.

    DCCpp LMD Animation Web

  • 2. ➕ Añadir animaciones → Define qué y cuándo se activa.

  • 3. 🌙 Configurar ciclo → Duración del día/noche y retardos.

  • 4. ▶️ Dejarlo funcionar → Las animaciones se activan solas.


Funciones principales

  • Ciclo (minutos):
    Duración total de día + noche Min: 1 Max: 60 (ej: 8 min = 4 día + 4 noche).

  • Retardo (segundos):
    Retraso aleatorio máximo al encender/apagar Min: 0 Max: 300 simulando imprecisión real en el encendido/apagado.

  • Barra de progreso:
    Muestra el avance del ciclo actual.

  • Próxima animación:
    Indica cuál será la siguiente en ejecutarse.


Panel de animaciones

Panel de animaciones día y noche para DCCpp LMD

Botones del panel de animaciones:

  • ➕ Nueva animación:
    Situado en la parte izquierda, crea una nueva animación. Ver añadir animaciones.

  • 📋 Ver comandos:
    Muestra información sobre los comandos más comunes.

  • 💾 Exportar JSON:
    Guarda todas tus animaciones y configuración en un archivo formato JSON.

  • 📂 Importar JSON:
    Carga una configuración en formato JSON guardada previamente.

  • 🗑️ Limpiar:
    Elimina todas las animaciones.

Botones de cada animación

  • ✅ | ⭕: Activa | Desactiva animación

  • ✏️ Editar: Modifica la animación

  • 🗑️ Eliminar: Borra la animación

  • 🔘 Test: Envía el comando manualmente (prueba)


➕ Añadir animaciones

DCCpp Animations Controller

Es hora de crear nuestra primera animación como pueden ser las farolas de una plaza que se encenderán al empezar la noche y definidas en la central con el com la ID 15

  • Nombre:
    Identificador de la animación "Farolas plaza"

  • Momento:
    ¿Día o Noche? Noche.

  • Tipo:
    LUCES | EFECTOS | SEMAFORO | COMANDO.
    Seleccionamos LUCES.

  • Comando base:
    Comando T15 sin el 1 o 0 final.


Comunicación Serial

DCCpp Animations Controller monitor serial

Para la comunicación de la central podremos usar las conexiones seriales que tengamos disponibles en la central. Generalmente el puerto USB al que conectamos la central.

Pero Animations Controller también puede hacer uso de la comunicación bluetooth en el caso de que tengamos un módulo HC-06 y un adaptador bluetooth instalado en el ordenador.

En el caso de usar la comunicación bluetooth también podremos gestionar los comandos desde un teléfono móvil.

  • 🔗 Conectar:
    Abre una ventana para seleccionar el puerto COM o tty al que esta conectada la central DCCpp.

  • ⛔ Desconectar:
    Cierra la comunicación con la central.

  • 📤 Enviar:
    Envía le comando escrito de manera manual.

  • 🧹 Limpiar:
    Limpia el monitor de respuestas.

  • Comando manual:
    Envía cualquier comando DCCpp ejem: t1 4 80 1.

  • Monitor de respuestas:
    Muestra las respuestas seriales que proporciona la central DCCpp indicando también la hora.


Log de Transiciones

Log de transiciones DCCpp Animations Controller

En el Log de Transiciones tendremos la información interna del programa como el momento del día en el que estamos, cuando se encenderán o apagarán o apagarán entre otros datos.


Conversor de direcciones DCC

Conversor de IDs DCCpp Animations Controller

Recomendaciones Para el usuario

  • Usa Chrome o Edge, Firefox necesita el plugin externo WebSerial for Firefox.

  • Empareja primero los dispositivos Bluetooth (si usas conexión inalámbrica).

  • Prueba cada animación con el botón 🔘 antes de dejarlo automático.

  • Configura retardos largos (30-60s) para simular cambios graduales.

  • Exporta tu configuración como respaldo.


❓ Preguntas frecuentes

¿Sirve cualquier central DCC?

- Si, cualquier central DCCpp incluidas la DCC++ original o las más punteras como DCCex


¿Puedo usar Bluetooth en lugar de USB?

- , empareja tu ESP32 o HC-05 con el ordenador y aparecerá en el selector de puertos.


¿Puedo usar Firefox?

Si pero... Firefox no soporta Web Serial API, necesita el plugin WebSerial for Firefox.


¿Puedo cambiar el ciclo mientras funciona?

- , solo cambia los minutos y pulsa "Actualizar". Las animaciones se reprogramarán.


¿Qué pasa si pierdo la conexión?

- El programa sigue ejecutándose localmente en tu navegador. Al reconectar, seguirá enviando comandos.


¿Puedo usar el móvil?

- , pero... Android necesita Chrome y emparejar Bluetooth desde ajustes del sistema primero. pero la interfaz no esta adaptada para estos dispositivos.


🔗 Enlace:

🌐 Acceso a la web: https://dccppanimations.infotronikblog.com

Otros proyectos con para la central DCCpp LMD:

Saludos a todos y todas!!!

miércoles, 18 de diciembre de 2024

La maqueta de Infotronikblog: Central DCC para trenes con Arduino

Muy Buenas Arduineros y Arduineras!!!

Hace ya un tiempo, cuando empecé a programar, descubrí uno de los programas que más alegrías me ha dado desde que me dedico a esto. La central DCC++...

Hoy traigo al blog lamaquetade.infotronikblog.com una web dedicada al modelismo ferroviario y a la central DCC creada con Arduino.

Aunque no solo esta dedicada a la electrónica sino que también podemos encontrar trucos para la decoración de maquetas como un aplicador de césped electroestático o software dedicado al modelismo ferroviario como Rocrail o JMRI

Aunque el mayor premio se lo llevan la librería para el control de trenes DCC llamada DCCpp LMD y el software para Android con el que controlar esta y otras centrales DCC llamado DCCpp Android Cab.

Veamos algo más sobre este software:

La librería DCCpp LMD

DCCpp LMD es una librería que incluye todo lo necesario para montar una central DCC (Digital Command control) desde las funciones básicas hasta tener pantalla, comunicación Bluetooth y Wifi.

Características principales:

  • Flexibilidad: La central DCCpp LMD es altamente configurable, lo que permite adaptarla a las necesidades específicas de cada maqueta. Puedes personalizar la configuración de las locomotoras, los accesorios, sensores y los diferentes aspectos de las operaciones de tu trenes.

  • Escalabilidad: DCCpp LMD cuenta con una amplia variedad de módulos y accesorios disponibles, como módulos S88 para detectar la ocupación de vías, módulos de radiofrecuencia para control remoto y mucho más. Esto te permite ampliar las funcionalidades de tu maqueta según tus necesidades.

  • Autonomía: Aunque la comunicación serial es su base, la central DCCpp LMD puede operar de manera autónoma gracias a la adición de una pantalla OLED, un teclado y un encoder rotatorio. Esto te permite controlar tus trenes directamente desde la central sin necesidad de una ordenador o teléfono inteligente.

  • Comunicación serial: Al comunicarse a través de serial facilita su integración con otros dispositivos y sistemas. Esto te permite conectar la central a un ordenador, un Arduino o cualquier otro dispositivo con capacidad serial.

  • Automatización: La DCCpp LMD se puede programar para realizar secuencias de comandos automáticas, como la simulación de horarios de trenes o la activación de señales.

Y estas son las opciones principales que nos ofrece la central DCCpp LMD con respecto a las locomotoras:

  • Direcciones de locomotoras de 2 y 4 bytes.
  • Velocidad de 128 pasos.
  • Programación en pista principal.
  • Control simultaneo de múltiples locomotoras.
  • Control de todas las funciones de cabina F0-F28.
  • Activación y apagado de todas las direcciones de accesorios 0-2048.
  • Programación en vía de programación.
  • Pantalla Oled 128*64 I2c.
  • Puertos seriales extras.

Ahora que ya hemos visto sus características y funciones principales...

¿Porqué existe DCCpp LMD y porqué la uso?

La central DCC+ Base Station creada por Gregg E. Berman hace ya más de 9 años, revoluciono de una manera económica y sencilla el uso de las locomotoras que tienen incorporado un decodificador DCC.

Estas centrales de tipo comercial, por lo general, tienen un coste elevado que añadido al coste de los decodificadores no hacía que fuera un entretenimiento asequible al bolsillo de cualquier aficionado.

Después de la central DCC++ Base Station todo eso cambio. Era relativamente sencillo conseguir una placa Arduino UNO y un MotorShield, podías encontrar los dos componentes en paginas webs por menos de 10€.

Visto esto y con mi consabida afición a los trenes en miniatura, ya sabes.. - ¿que hay mejor que un tren? - Dos trenes. decidí hacerme con todas las piezas y montar este cacharro y ver si daba lo que prometía... y vaya si lo hizo!!! Locomotoras y accesorios funcionaban al 100%, incluso se le podía añadir un sensor de consumo para prevenir cortocircuitos

No pude resistir el conocer a fondo como funcionaba, cuales eran sus entresijos, como recibía los datos con la comunicación serial y los distribuía entre las diferentes funciones así que termine empapándome de todo lo relacionado con esta central.


Finalmente llego a mi navegador de la mano de LocoDuino el mismo programa, pero en formato librería y paso a llamarse DCCpp. Nunca había tocado una librería... fue otro retro más que tenia que resolver.

Después de un tiempo había añadido la pantalla Oled y el uso de los demás puertos seriales que tiene disponibles la placa Arduino MEGA. Por que si, para esta central, la placa que mejor se adapta tanto a el hardware como al software es la  placa Arduino MEGA. Sobre el 2020 la librería DCCpp dejo de actualizarse siendo su última versión la número 1.4.2. Una autentica pena la verdad.

Después de esto o incluso mientras otras centrales DCC surgieron de esta idea, la más destacada ahora mismo es la DCCEX. La rama americana de esta central. Ahí me perdí...

DCCEX es un proyecto enorme en el que contribuyen muchas personas con mucho código que, si bien cubren las necesidades de muchos otros usuarios, para mi eran excesivas. Realmente no necesitaba tanto.

Volví a mi proyecto de la librería DCCpp modificada y pase a llamarla DCCpp LMD. La librería desde la que parte el proyecto, la V1.4.2, ya tiene todas las funciones que necesito, además de ser compatible con el software de gestión de trenes.

Partiendo de esa base, fui añadiendo diferentes funciones y funcionalidades, mejorando el código en la medida de lo posible y adaptándola a mi maqueta.

Puedo programar secuencias de eventos, monitorear el consumo de corriente en tiempo real, detección con diferentes tipos de sensores, comunicación Bluetooth y wifi. Esto añadido al programa Rocrail, hace que me pueda pasar tardes enteras "jugando" con los trenes que tienen instalado un decodificador DCC,. Por desgracia no todas mis pequeñas cuentan con uno de estos decodificadores.

Si te gustan los trenes el modelismo y el sistema DCC y quieres descubrir como Arduino es capaz de adaptarse a cualquier entorno visita Lamaquetade.infotronikblog.com

Espero que te guste el contenido sobre Arduino y trenes y sobre todo que os guste la web, Saludos y felices fiestas!!!

miércoles, 9 de octubre de 2024

Barco RC Zhong Shan Gunship: Montaje, pintura y puesta a punto

Muy buenas a todos marineros y marineras!!

Ya sabéis que nos encantan los vehículos RC, generalmente son vehículos terrestres Pero el verano pasado decidí comprar un kit para un barco, y mirando por mi web chinesca de confianza encontré este modelo de plástico para montar: Zhongshan Gunboat

una de las cosas que más me llamo la atención es que estaba medio preparado con un motor.

Como no entiendo de barcos, me dije, pues este mismo, y esto es lo que pasó...

Pero antes, un poco de la historia sobre el barco Zhongshan Gunboat:

Según wikipedia este barco cañonero de 65,8 metros de longitud y 8,8 metros de manga, pertenecía a la Marina China y fue construido en Japón en 1913 e irónicamente hundido por esta misma armada japonesa durante un bombardeo en la segunda guerra Sino-Japonesa (1937-1945) en el rio Yangtze el 24 de octubre de 1938.

En 1986, cuando decidieron recuperar los restos del naufragio, recuperación que se llevo a cabo en 1997, 59 años después de su hundimiento. En 2001 recuero su apariencia de 1925 pero decidieron conservar daños sufridos durante su hundimiento-

El Zhongshan restaurado ahora se encuentra en el Museo de Buques de Guerra Zhongshan en Wuhan.

Fin de un poquito de historia :)

No soy experto en montar maquetas de barcos ni en barcos en general, asi que primero mis disculpas a los que si por que me imagino que no estaré usando las palabras técnicas del mundillo. Y casi con seguridad podría decir que es la primera maqueta de plástico que monto.

¿La experiencia? Ha sido entretenida y sobre todo montar el Zhong Shan Gunboat ha sido muy divertido.

Para montar el kit de plastico he utilizado las siguientes herramientas:

  • Cuter
  • Lima
  • Alicates de corte
  • Taladro manual
  • Vaselina o grasa
  • Pinturas en spray

Como el motor ya viene prácticamente montado, solo lo he desmontado para aplicar un poco de grasa en los piñones interiores. Y la primera parte que he mecanizado es el timón.

 

Para poner el timón primero he cortado la parte que va en el interior de barco, después con una broca de 1.5mm he agrandado el agujero para poder introducir un tornillo de 35mm. En la parte superior he puesto el enganche que conectará con el servo que mueve el timón.

Antes de poner el timón en su posición definitiva hay que aplicar grasa en todo el tornillo hasta que todo el hueco quede estanco. Esto evitará que el agua pueda introducirse en el interior del barco.

Para colocar las helices primero tenemos que quitar los 4 tornillos que sujetan el motor, de esta manera se trabaja con mayor comodidad.

Después hay que introducir la vaselina en los tubos (¿bocinas?) antes de meter los ejes donde colocaremos las helices. Como los tubos son algo pequeños, apliqué la vaselina, primero calentando un poco al baó maría y aplicandola con una jeringa.

Al empujar, tiene que salir parte de esta vaselina hasta que salga el eje. Con esto, igual que con el timón, evitamos que el agua se filtre al interior de la embarcación.

Con esto hecho, poniendo el receptor para la radio Taranis y un par de ajustes rápidos, ya estaba preparado su primera prueba de navegación.





Una vez termine de probar que todo funcionaba correctamente desmonte la electrónica y pase al segundo paso, pintar.

Pintar no es algo que se me de especialmente bien, aún así primero pinte todo de negro, para darle opacidad al platico, esto es por que el plástico es bastante fno y la otra pintura al ser gris, no creo que sea capaz de no dejar pasar la luz del ESC o del receptor desde el interior y es algo que no me gusta.

Para el casco he usado color rojo claro para la parte inferior y el gris oscuro para la parte que va sobre el agua. Si bien hay una franja blanca, ya me había quedado bien el corte de rojo a gris y no quise arriesgar

Para el puente he usado una especie de marrón y el mismo gris oscuro que he usado en el casco. Al ser escala 1/150 me ha venido vien para ponerle un personaje en el puente como timonel.

Electrónica y reglaje:


Para la electrónica he probado varias emisoras. Primero probé con la radio "Taranis" pero hay un fallo que no supe arreglar y es que al desconectar la radio, el servo se pone en una posición que hace que el timón estuviera forzado.

Imagino que no le he dedicado el suficiente tiempo a esta radio, por que no lo logre quitar. Curiosamente también me pasa con otros receptores de la misma marca.

En la prueba con GT5 la cosa mejoró notablemente. Ahora el servo siempre esta en su sitio.

  • Receptor: FS2A AFHDS 2A de 4 canales

  • ESC: Genérico motor escobillas

  • Baterías: 2 x 18650

  • Motor: Genérico 130

  • Servo: Servo 9G genérico

Recuerda que puedes hacer tus propios packs de baterías 2S en este enlace.

 

Una vez que ponemos las baterías el barco pierde estabilidad así que probé a poner más peso en la parte posterior. En total se han añadido 30g extra que sumados a los 110g de la batería, 10g del servo y 20g del ESC hacen un total de 170g.

Como primera experiencia de navegación ha sido bastante fácil de poner en marcha e incluso de subsanar pequeños errores que han ido surgiendo durante el montaje y pruebas.


 

ARRR!!! Marineros!!!! Si esta entrada gusta, compraré otro diferente para montar y compartir mis experiencias. 

Espero que para el próximo consiga hacer funcionar la emisora "Taranis" y probamos. Además si encuentro el fallo comento como corregirlo.

Saludos a todos y todas!!!

Fuentes:

Wikipedia: Chinese gunboat Zhongshan


miércoles, 28 de agosto de 2024

RC Engine Sound ESP32 para ManKat: Sonido realista y luces para camiones RC

Rc Engine Sound
Rc Engine Sound
Una de las cosas que más realismo le da a un coche R/C de este tipo (camiones) es que puedan configurar de una manera sencilla y que que suene... que suene de verdad...

Si bien hay muchos "emuladores de sonido" para coches y camiones R/C. Aunque uno que alguno modelos sean asequibles para el bolsillo, parece que estemos en un juego de coches de los 80's en un 386...

Los modelos más caros suelen tener un buen sonido, pero suelen rondar los 50€~60€. Y pueden sonar bien, pero no tienen la cantidad de accesorios que incluye el repositorio del que vamos a tratar.


Empecemos!!!

Pues bien, navegando por GitHub encontré un proyecto llamado Rc_Engine_Sound_ESP32 de TheDIYGuy999, no solo cumple con las expectativas de sonido, Además también incluye todos los controles para luces como intermitencias o luces de freno y varios accesorios como 5ª rueda y el cabestrante.



Amplificador PAM8403
PAM8403

En el apartado de sonido lo mejor que tiene esta amplificado con el módulo basado en el chipset PAM8403 altavoces de hasta 3W que dispone de dos canales de audio y hace que no tenga que parar un sonido para reproducir otro.

Y la verdad es que suena muy bien, tanto en potencia como en calidad. Se pueden usar 2 altavoces pueden usar cualquier potencia siempre que no supere los 3W.

En mi caso use unos altavoces de algún pequeño equipo para móviles que tenía por casa.

Además incluye una gran cantidad de sonidos para motores de muchos vehículos diferentes. En mi caso uso la motorización del MAN KAT y las luces como intermitencias y frenos.

Una cosa que me gusto mucho es que con un motor se puede hacer que simule la vibración del motor.

También puede simular el panel de control con un pequeño OLED de 80*160 al que se le puede cambiar la apariencia y personalizar a nuestro gusto.

Cuenta con compatibilidad para señales PWM, PPM, SBUS e IBUS.

viernes, 1 de diciembre de 2017

Arduino: Coche RC Maisto Drift XboxRC24

Buenas a todos los Arduineros y Arduineras!!

Ahora le toca el paso a los coches RC!!! Estos son los que siempre ha sido mi preferencia en cuanto a radio control. Y ahora voy a ver que tal le sienta a Arduino el control de este tipo de vehículos. En principio con todo lo visto en el blog sobre los módulos de comunicación nRF2401 podríais montar uno sin ningún tipo de problemas.

En los archivos para la descarga incluyo también el del mando de Xbox modificado ya que también esta modificado para soportar nuevas funciones y ajustes que voy incluyendo poco a poco.

Bueno para este proyecto voy a utilizar la misma plantilla del archivo .ino que use con el tanque RC.

Esto me obliga también ha hacer cambios en casi todo lo que tengo así que iré publicando los archivos cuando crea que la versión esta lista.

La base de este proyecto es un coche RC que me cayo en mis manos hace años y haremos que vuelva a andar como el primer día... o mejor ;)

Arduino Maisto Monster Drift Arduino Maisto Monster Drift

Se llama Maisto Monster Drift y ya le hice unas modificaciones anteriormente, bueno viendo la fecha... hacer bastante tiempo.

Lo primero que había que modificar era la dirección. Así que lo primero que tenemos que hacer es quitar la electrónica original para dar cabida al servo, al Arduino NANO y al driver L293.

Del integrado L923 solo usaremos la mitad del chip ya que solo tenemos que alimentar uno de los motores.


Arduino Maisto Monster Drift
Quitar la parte superior

Arduino Maisto Monster Drift
Electrónica que tenemos que no vamos a usar


Arduino Maisto Monster Drift
Maisto Monster Drift sin electrónica

lunes, 13 de noviembre de 2017

Arduino Ejemplos: Control de tanque RC con L293, DHT11 y NRF2401 (Parte 2)

Buenas a todos ya esta listo el programa para sus primeras pruebas.

El Programa esta dividido de dos partes, el archivo "XboxRC24_Receptor_Tanque" y el archivo "NRF2401Receptor". Este ultimo sera común a partir de ahora que lo use en mis proyectos sin que sufra muchas modificaciones, es la mejor manera de "reciclar" código.

Explicare ese código mas detalladamente en una próxima entrada, tanto la del receptor como la del emisor.

Como ya explique su construcción y diagrama de conexiones en Arduino: driver L293, DHT11 y nRF2401 (parte 1) voy a poner directamente el código:


Código XboxRC24_Receptor_Tanque.ino


#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <DHT.h>

RF24 radio(9, 10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

typedef struct {
  int dec  = 0; //T1
  int ace  = 0; //T2
  int RXdata = 0; // Eje RX
  int RYdata = 0; // Eje RY
  int LXdata = 0; // Eje LX
  int LYdata = 0; // Eje LY
  int ButA = 0; //Boton A
  int ButB = 0; //Boton B
  int ButX = 0; //Boton X
  int ButY = 0; //Boton Y
  int Butb = 0; //Boton Back
  int ButS = 0; //Boton Start
}
dataReceive;
dataReceive dataR;

typedef struct {
  int dataS0  = 0; //dato 0
  int dataS1  = 0; //dato 1
  int dataS2  = 0; // dado 2
  int dataS3  = 0; // dato 3
  int dataS4  = 0; // dato 5
}
dataSend;
dataSend dataS;

// Pin digital donde se conectamos el sensor.
#define DHTPIN 8
//Definimos el tipo de sensor (DHT11, DHT22).
#define DHTTYPE DHT11
//Iniciamos el sensor DHT11.
DHT dht(DHTPIN, DHTTYPE);

int motor11 = 4; //
int motor12 = 5; // salidas para el L293N
int motor21 = 6; //
int motor22 = 7; //
int enable1 = 3; // incluidos el enable
//int claxon =  10; //
int luces = 14;
int estado;
int flag = 0;
int estadoStop = 0;
int acc = 0;

void setup()
{
  //Configuramos los pines de salida:
  pinMode(motor11, OUTPUT);
  pinMode(motor12, OUTPUT);
  pinMode(enable1, OUTPUT);
  pinMode(motor21, OUTPUT);
  pinMode(motor22, OUTPUT);
  pinMode(luces, OUTPUT);
  digitalWrite (luces, HIGH);
  delay (3000);
  digitalWrite (luces, LOW);
  dht.begin();
  Serial.begin(9600);  //Comunicacion serial para el monitor serial
  radio.begin();
  radio.setRetries(15, 15);
  radio.startListening();
  radio.openWritingPipe(pipes[1]);
  radio.openReadingPipe(1, pipes[0]);
}

void loop()
{
  receiver();
  botones();
  conversion();
  flag = 0;
  
  /////////////////////////////////////////////
  if (estado == 0 || estadoStop == 1) { // PARADO
    digitalWrite(motor11, LOW);
    digitalWrite(motor12, LOW);
    digitalWrite(motor21, LOW);
    digitalWrite(motor22, LOW);
    if (flag == 0) {
      Serial.println("STOP!");
      flag = 1;
    }
    estadoStop = 0;
  } else if (estado == 1) {  // AVANCE:
    analogWrite(enable1, acc);
    digitalWrite(motor11, HIGH);
    digitalWrite(motor12, LOW);
    digitalWrite(motor21, HIGH);
    digitalWrite(motor22, LOW);
    if (flag == 0) {
      Serial.println("Avance!!!");
      flag = 1;
    }
  } else if (estado == 2) {  // REVERSA
    analogWrite(enable1, acc);
    digitalWrite(motor11, LOW);
    digitalWrite(motor12, HIGH);
    digitalWrite(motor21, LOW);
    digitalWrite(motor22, HIGH);
    if (flag == 0) {
      Serial.println("REVERSA!!!");
      flag = 1;
    }
  } else if (estado == 3) {  // IZQUIERDA
    analogWrite(enable1, acc);
    digitalWrite(motor11, LOW);
    digitalWrite(motor12, HIGH);
    digitalWrite(motor21, HIGH);
    digitalWrite(motor22, LOW);
    if (flag == 0) {
      Serial.println("GIRA IZQUIERDA");
      flag = 1;
    }
  } else if (estado == 4) { // DERECHA
    analogWrite(enable1, acc);
    digitalWrite(motor11, HIGH);
    digitalWrite(motor12, LOW);
    digitalWrite(motor21, LOW);
    digitalWrite(motor22, HIGH);
    if (flag == 0) {
      Serial.println("GIRA DERECHA");
      flag = 1;
    }
  } 
  static unsigned long lastTrigger; //Limpia la pantalla cada 500ms
  if (millis() - lastTrigger >= 2000) {
    lastTrigger = millis();
    dht11Read();
  }
}

void conversion()
{
  acc = map(dataR.ace, 0, 100, 0, 254);
  acc = constrain (acc, 0 , 240);

  if (dataR.RYdata == dataR.RXdata) estado = 0;
  else if ((dataR.RYdata > 50) && (dataR.RXdata <= 50)) estado = 1; //AVANCE
  else if ((dataR.RYdata < 50) && (dataR.RXdata >= 50)) estado = 2; //REVERSA
  else if ((dataR.RXdata > 50) && (dataR.RYdata <= 50)) estado = 3; //DERECHA
  else if ((dataR.RXdata < 50) && (dataR.RYdata >= 50)) estado = 4; //IZQUIERDA
}
void botones()
{
  if (dataR.ButA == 0) digitalWrite(luces, HIGH);
  else digitalWrite (luces, LOW);
}

void dht11Read()
{
  float h = dht.readHumidity();// Lee la humedad relativa.
  float t = dht.readTemperature();// Lee la temperatura en ºC (por defecto).
  if (isnan(h) || isnan(t)) {
    Serial.println("Error obteniendo los datos del sensor DHT11");
    return;   //Si tiene error vuelve a leer el sensor
  }
  float hic = dht.computeHeatIndex(t, h, false);  //Calcula el índice de calor en ºC
  dataS.dataS1 = t;
  dataS.dataS2 = h;
  dataS.dataS3 = hic;
  Serial.println();
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.println(" ºC");
  Serial.print("Humedad: ");
  Serial.print(h);
  Serial.println(" %");
  Serial.print("Indice de calor: ");
  Serial.print(hic);
  Serial.println(" ºC");
}



Código NRF2401Receptor.ino


void receiver()
{
  if ( radio.available() )  // Si hay datos disponibles
  {
    bool done = false;
    while (!done)        // Espera aqui hasta recibir algo
    {
      done = radio.read( &dataR, sizeof(dataR));
      //receiverDebug();
    }
    
    radio.stopListening();  // Dejamos d escuchar para poder hablar
    
    radio.write( &dataS, sizeof(dataS));
    Serial.println("Enviando Respuesta");
    radio.startListening();    // Volvemos a la escucha para recibir mas paquetes
    //sendDebug();
  }
}

void receiverDebug()
{
  Serial.println("Dato Recibido =");
  Serial.print("Canal 0 = ");
  Serial.println(dataR.dec);
  Serial.print("Canal 1 = ");
  Serial.println(dataR.ace);
  Serial.print("Canal 2 = ");
  Serial.println(dataR.RXdata);
  Serial.print("Canal 3 = ");
  Serial.println(dataR.RYdata);
  Serial.print("Canal 4 = ");
  Serial.println(dataR.LXdata);
  Serial.print("Canal 5 = ");
  Serial.println(dataR.LYdata);
  Serial.print("Canal 6 = ");
  Serial.println(dataR.ButA);
}

void sendDebug()
{
    Serial.println(dataS.dataS0);
    Serial.println(dataS.dataS1);
    Serial.println(dataS.dataS2);
    Serial.println(dataS.dataS3);
    Serial.println(dataS.dataS4);
}


Salida serial de XboxRC24:


Monitor Serial XboxRC24

Si te interesa la comunicación puedes revisar otras entradas relacionadas con el módulo nRF2401:


Muchas Gracias a todos, Si tenéis cualquier duda hacédmelo saber en la caja de comentarios, Saludos!!!

viernes, 10 de noviembre de 2017

Arduino Ejemplos: Mando RC XboxRC24 con NRF24L01 – Software y pestañas (Parte 2)

Buenas a todos y todas Ardublogeros!!!

La primera versión del software ya esta lista así que en esta entrada voy a explicar el código ya que esta vez he optado por estructurar el software por pestañas como vimos en la entrada anterior: Ejemplos Arduino: Trabajando con pestañas en el Sketch.

Es algo que ya había visto en algún proyecto y no le había hecho mucho caso, pero en programas donde hay muchas lineas y funciones se ha convertido en algo fundamental para poder organizar el programa.

Otra de las ventajas es que podemos reutilizar el código para otros proyectos solo importando el *.ino y añadiéndolo al proyecto.


Estructura de archivos

XboxRC24 Transmitter esta estructurado en 8 pestañas y son las siguientes:

  1. Transmisor_XboxRC.ino
  2. Calibracion.ino
  3. Caracteres.ino
  4. Comunicacion.ino
  5. LCD.ino
  6. Memoria.ino
  7. Menu.ino
  8. Modo_tanque.ino

viernes, 3 de noviembre de 2017

Arduino Ejemplos: Mando RC XboxRC24 con NRF24L01 – Transmisor (Parte 1)

Buenas a todos y todas los fanáticos y fanáticas de Arduino!!!

Desde siempre me ha gustado el radio control, coches, aviones, barcos... todo lo que se pueda controlar remotamente, simplemente me encanta.

Arduino ha hecho un gran trabajo con esto, ha puesto a disposición del consumidor muchos módulos con un coste realmente bajo y un efectividad realmente alta.

Ya no solo por que puedas construir tu propio emisor/receptor (como va a ser este caso) si no por la cantidad de información que puedes enviar y recibir (Temperatura, GPS, imagen, etc..)

Después de estar hablando con un amigo bastante "gamer" y fan de Xbox de siempre, me recomendó que si hacia algo así lo hiciera con un mando de Xbox, sobre todo por los gatillos y la comodidad de agarre.

Aunque como todos sabemos esto es muy subjetivo, no quiero crear un debate sobre que mando de video consola es mejor o peor.

En resumen, elegí este mando por los consejos de mi amigo y por el tamaño del mismo, en el se pueden meter todas las piezas, aunque lamentablemente la batería que tendrá que quedarse fuera.


¿Que vamos a utilizar?





Esquema RCXbox LCD Infotronikblog
Esquema RCXbox LCD

miércoles, 13 de noviembre de 2013

Paso a nivel con sensores infrarrojos 38KHz para maquetas de trenes

Muy buenas a todos y todas!!


Primero vimos como hacer un paso a nivel con un 555, un generador de 38Khz con 555 y los receptores infrarrojos de 38Khz, ahora toca unir todos los elementos y hacer un paso a nivel controlado por sensores de infrarrojos.

La teoría es sencilla, cuando el tren pasa, corta la barrera infrarroja y hace que encienda el 555 del paso a nivel.

No la alimenta directamente, si no que el sensor hace pasar la corriente hacia un condensador de 220uF conectado a una resistencia de 33Kohm. La resistencia activa la base del transistor BC547.

Con esto conseguiremos un retardo de unos 10 seg en este tiempo al tren le dará tiempo de sobra para poder pasar por el siguiente detector.


Esquema de las conexiones:

Conexión de los sensores infrarrojos


Receptor camuflado



 
Emisor infrarrojo


Una vez que esta todo montado, solo queda camuflar los receptores y los transmisores puedes ponerlos dentro de alguna edificación que no se vea mucho, pero siempre en linea el uno con el otro como se puede ver en la siguiente foto:


Linea de visión del Receptor - Emisor


Después de probar varios sistemas de infrarrojos, he de decir que este ha sido el que más me ha gustado. Con los demás que tengo instalados siempre he tenido problemas con la luz ambiente, pero con este sistema no me ha dado ningún problema. Así que ahora toca cambiar los demás receptores y tirar una linea para los emisores por toda la maqueta.




Un Saludo a todos!!!