domingo, 20 de febrero de 2022

ESP32 - Repetidor códigos IR

  Página principal

ESP32
Repetidor códigos IR

DISEÑO Y CONSTRUCCIÓN DE UN SISTEMA
 TRANSMISOR – RECEPTOR POR BLUETOOTH PARA ENVIAR RÁFAGAS IR (INFRARROJO)
Y CONTROLAR DISPOSITIVOS EN ESPACIOS SEPARADOS


Alfredo Segura, Mexico febrero de 2022


Seguramente algunos de nosotros hemos tenido la necesidad de controlar nuestro Decoder de TV que se ha colocado en la sala de estar, en donde está nuestra TV principal. Si deseamos tener otro Decoder en nuestra habitación, tendremos que pagar una renta mensual  adicional. Y si aún queremos otro más en la habitación de los chicos, pues la renta mensual sube, debido a que ciertas empresas de cable, cobran en base al número de televisores (y Decoders) que se requieran en una  residencia habitacional.



Para el momento de dejar la sala de estar e ir a mi habitación, para seguir viendo la TV, cómodamente desde la cama, he diseñado un dispositivo que capta las ráfagas de IR (infrarrojo) del Control Remoto (Mando) del Decoder, el cual he llevado conmigo a la habitación. Este dispositivo usa un ESP32-WROOT-32, trabajando con BluetoohSerial (BLE) y al cual he conectado un sensor de ráfaga IR (VR-38).



Las ráfagas se pueden detectar haciendo uso de la librería IRrecv.h, la cual está incluida en la librería IRremoteESP8266 que se puede descargar desde github para Linux o Windows:

https://github.com/crankyoldgit/IRremoteESP8266

La librería está muy completa, ya que tiene detectores para protocolos básicos como NEC, RC5, RC6, JVC y su gran número adicionales, que se detectan en forma automática. Incluso se pueden determinar, el tipo de protocolo, el valor recibido CMD, la dirección ADDRESS y otros.

Una vez detectado el código de mi Control Remoto (Mando a distancia) por el ESP32, un simple comando se usa para transmitirlo por Bluetooh a otro dispositivo, que también he diseñado y fabricado, que es el Receptor Rx, igual con un ESP32. Este simple comando es:

SerialBT.write(comando);

Volviendo la mirada al Receptor de Bluetooth, éste genera los pulsos de acuerdo al protocolo NEC (que es mi caso) de acuerdo al comando recibido.

Para simplificar todo el proceso en este Receptor he hecho una tabla en la que se observa que todos los comandos del Control Remoto (Mando) tienen exactamente la misma ADDRESS y solo cambia el CMD (comando):



TECLA
ADDR _HIGH
ADDR_LOW
CMD
#CMD
1
64
64
1
254
2
64
64
2
253
3
64
64
3
252
4
64
64
4
251
5
64
64
5
250
6
64
64
6
249
7
64
64
7
248
8
64
64
8
247
9
64
64
9
246
0
64
64
0
255
CH +
64
64
31
224
CH -
64
64
30
225
VOL +
64
64
21
234
VOL -
64
64
28
227
TODAS
64
64
X
Y

Así que en el Receptor solamente puse atención en el dato de “comando” CMD y mediante un tramo de código, fui asignando el comando completo que debía enviarse a un PIN seleccionado del ESP32, que funge como emisor de IR, y esa señal se envía a un transistor NPN como buffer que proporciona señal a un LED emisor Infrarrojo:

switch (comando.toInt()) {
      case 127:     // 1
        hexcomando = 0x0202807F;
        break;
      case 191:     // 2
        hexcomando = 0x020240BF;
        break;
      case 63:     // 3
        hexcomando = 0x0202C03F;
        break;
      case 223:     // 4
        hexcomando = 0x020220DF;
        break;
      case 95:     // 5
        hexcomando = 0x0202A05F;
        break;
….
}


irtrans.sendNEC(hexcomando);        // Este simple comando genera ráfaga para un LED-IR

Se anexan los programas tanto de transmisor en ambiente de Arduino:
ESP32_DecoderTVTx.ino
ESP32_DecoderTVRx.ino

Una vez probados ambos dispositivos (Tx y Rx), se diseñan las tablillas PCB donde serán montados los ESP32 y todos sus componentes, que realmente son muy pocos.

En las fotografías que se anexan, se muestran las tablillas sin montar en sus respectivas cajas, de tal manera que se puedan ver los detalles de su construcción.

Se anexan también los diseños PCB para ambos dispositivos.












Y así, finalmente me he podido llevar virtualmente el Decoder a mi recámara en donde con el mismo Control Remoto (Mando), puedo cambiar de canal, poner MUTE, subir volumen, etcétera.
El diseño se pone a la disposición de los entusiastas electrónicos para que lo repliquen, lo mejoren, y lo disfruten.

PROGRAMAS

Saludos.
Alfredo Segura
Mexico febrero de 2022



Bibliografía:

viernes, 11 de febrero de 2022

Arduino - Pulsos reloj analógico - Duración batería entre 2 y 3 meses

  Página principal

Arduino
Pulsos reloj analógico
Duración batería entre 2 y 3 meses

Como había prometido en mi anterior montaje, he aumentado la autonomía de la batería a 2 o 3 meses.
Lo primero es montar el ATMEGA328 solo, sin ningún componente externo.

Para reducir el consumo de mi reloj, se utilizara la técnica de hacer dormir el ATMEGA328 cuando no se necesite.
Este modo se llama SLEEP_MODE_PWR_DOWN, el oscilador externo se para.
Se despierta 4 veces por segundo para leer si cambian los segundos en el DS1302.
Para despertar el ATMEGA328 utilizo el
Watchdog(perro guardián).
Para reducir aún mas el consumo, deshabilito el convertidor A/D
Todo esto lo explico con detalle en el artículo  ardurab.html y ardurab.html

La alimentación se realiza mediante una batería 16850 de 3.7 V.
El consumo del circuito varía entre 0,2 mA micro dormido, y 2 mA cuando el procesador se despierta.
Cuando los segundos cambian y se necesita generar un pulso de 31mS, el consumo del circuito llega a 3mA.

Considerando una media de entre 1 y 1.5 mA de consumo, y con una
batería 16850 de 3.7 V  2000mA. la autonomía teórica es de entre 83 y 55 días.


Todos los cálculos son teóricos, no he esperado 2 meses para ver la duración de la batería.
Los cálculos dependen de la calidad de la batería 16850,
las baterías se autodescargan con el tiempo.
Espero que este montaje os haya parecido interesante.

PROGRAMAS

Saludos.
Juan Galaz



Bibliografía:
artime.html
arduds.html
ardurab.html
arduraa.html

jueves, 10 de febrero de 2022

Arduino - Pulsos reloj analógico

Página principal
Arduino
Pulsos reloj analógico

He realizado muchos relojes con el arduino, utilizando interrupciones internas, con el chip DS1302, e incluso utilizando delay, este último muy inexacto.
El otro día compré en un rastrillo un reloj analógico (de agujas), no funcionaba, era para experimentación.
Me encontré que tenía dos bobinas, una para segundos y otra para minutos (minutos/10).

Por lo cual debemos generar un pulso para los segundos, y otro pulso cada 10 segundos para los minutos.
Investigue de como funcionaban este tipo de relojes y que tipo de pulsos debía crear para mover las agujas.






Son pulsos de 31mS cada segundo.
Los pulsos deben ser positivos  y negativos alternativamente.

El primer circuito utiliza interrupciones internas que se generan cada segundo.

(16MHZ/1024)/15625= 1Hz

  TCCR1A=0;
  TCCR1B=0;
  OCR1A=15624;
  TCCR1B |= (1<<WGM12);   //  0 1 0 0 CTC OCR1A Immediate MAX
  TCCR1B |= (1<<CS10);    // clk I/O /1024 (From prescaler)
  TCCR1B |= (1<<CS12);
  TIMSK1=(1<<OCIE1A);     // Timer/Counter1, Output Compare A Match Interrupt Enable


 
Este circuito funciona bastante bien, pero con el paso de los días se adelanta o se retrasa algún segundo.


Está claro que para que sea bastante mas exacto debemos emplear un chip especial , el DS1302.
Este chip sirve para mantener la hora y la fecha, incluso con una pequeña batería de botón puede mantener la hora, aunque para este circuito no sea necesario, solo se emplea para generar los pulsos de reloj.

Al utilizar un cristal de 32768 Hz especial para relojes, la exactitud es la del cristal de cuarzo, bastante exacto.




Debido a que no tiene ajuste manual para las agujas, he añadido un pulsador para mover las agujas rápido.

La alimentación se realiza mediante una batería 16850 de 3.7 V.
El consumo del circuito con un arduino nano es de 14 mA, por lo cual la autonomía con este tipo de batería es de 6 días.

Espero que este montaje os haya parecido interesante.
En un próximo montaje explicaré como conseguir que la batería pueda llegar a durar alrededor de 3 meses. ;)

PROGRAMAS

Saludos.
Juan Galaz



Bibliografía:
artime.html
arduds.html
ardurab.html
arduraa.html