{"id":1963,"date":"2020-07-17T00:06:18","date_gmt":"2020-07-17T00:06:18","guid":{"rendered":"http:\/\/robots-argentina.com.ar\/didactica\/?p=1963"},"modified":"2020-11-02T00:47:49","modified_gmt":"2020-11-02T00:47:49","slug":"control-de-reles-con-control-remoto-ir-domotica-3","status":"publish","type":"post","link":"https:\/\/robots-argentina.com.ar\/didactica\/control-de-reles-con-control-remoto-ir-domotica-3\/","title":{"rendered":"Control de rel\u00e9s con control remoto IR: Dom\u00f3tica (3)"},"content":{"rendered":"

En este ejemplo probamos el sistema de encendido de l\u00e1mparas y equipos el\u00e9ctricos conectados al voltaje de red manejado por un control remoto est\u00e1ndar (IR<\/strong> = Infrarrojo). Los comandaremos con teclas elegidas del control remoto, que primero identificaremos con un simple programa en Arduino.<\/p>\n

Si usted desea leer con m\u00e1s detalle sobre control remoto con infrarrojo desde Arduino, le recomendamos el art\u00edculo M\u00f3dulo transmisor de infrarrojo KY-005 (Kit de sensores Keyes 5)<\/a><\/strong> en nuestra p\u00e1gina.<\/p>\n

Para controlar artefactos con voltaje de red, usaremos las salidas normalmente abiertas de un m\u00f3dulo de rel\u00e9. Si no conoce los m\u00f3dulos de rel\u00e9 que son est\u00e1ndar en la l\u00ednea Arduino, recomendamos leer el art\u00edculo que inici\u00f3 esta serie M\u00f3dulos de rel\u00e9 y Arduino: Dom\u00f3tica (1)<\/a><\/strong>.<\/p>\n

Utilizamos el mismo circuito armado en el art\u00edculo anterior: Control con rel\u00e9s por interfaz serie: Dom\u00f3tica(2)<\/a><\/strong>. Le agregamos \u00fanicamente el sensor de recepci\u00f3n de infrarrojos, un sensor VS1838B<\/a><\/strong> proveniente de China, muy com\u00fan en los kits de Arduino y en el mercado.<\/p>\n

Se puede utilizar cualquier receptor de control remoto, incluso uno obtenido de desarme, si se tienen identificados sus pines de conexi\u00f3n.
\n
\"\"<\/a>
\nEl sensor no es un tan solo un fototransistor, posee un circuito integrado interno que filtra la se\u00f1al de 38 KHz que modula el haz de infrarrojo, y es la que contiene los comandos de control. La salida de se\u00f1al entrega una onda cuadrada de niveles TTL entre 0 y 5V. Existen modelos que entregan se\u00f1al a niveles de 0 a 3,3V.<\/p>\n

Es posible que usted encuentre el kit de la imagen que sigue en los sitios especializados, pero no es necesario. Alcanza con conectar el sensor al Arduino y utilizar un control remoto cualquiera de los que haya en su casa.
\n
\"\"<\/a>
\nEl sensor utilizado en este kit es, justamente, el VS1838B.
\n
\"\"<\/a><\/p>\n

\"\"<\/a>
\nLa que sigue es la manera m\u00e1s b\u00e1sica de conectarlo al Arduino, y es el circuito con el que comenzaremos a trabajar en las pruebas iniciales. La principal de ellas, obtener el listado de los datos que llegan al Arduino al presionar cada tecla.
\n
\"\"<\/a><\/p>\n

Advertencia: cuando realiza proyectos que est\u00e1n conectados a la red el\u00e9ctrica, realmente debe saber lo que est\u00e1 haciendo, de lo contrario, puede producirse un accidente. Este es un tema serio y queremos que est\u00e9 seguro. Si no est\u00e1 100% seguro de lo que va a hacer, por favor no toque nada.
\n\u00a1Preg\u00fantele a alguien que sepa!<\/center><\/strong><\/p><\/blockquote>\n

El siguiente programa utiliza la biblioteca IRemote<\/a><\/strong> (creada por >shirriff<\/a><\/strong>). Consiste de un ciclo continuo que espera a que llegue un comando de control remoto, y entonces lo muestra por el Monitor Serie.<\/p>\n

#include \r\n\r\nint pinEntrada = 11;\r\n\r\nIRrecv receptorIR(pinEntrada); \/\/ define el receptor y su entrada\r\n\r\ndecode_results resultados; \/\/ crea estructura de variables del receptor\r\n\r\nvoid setup()\r\n{\r\n  Serial.begin(9600); \/\/ ininia la interfaz serie\r\n  receptorIR.enableIRIn(); \/\/ inicia el receptor\r\n}\r\n\r\nvoid loop() {\r\n  if (receptorIR.decode(&resultados)) {\r\n    unsigned int valor = resultados.value;\r\n    Serial.println(valor);\r\n    \/\/ si desea hexadecimal use\r\n    \/\/ Serial.println(valor,HEX); \r\n    receptorIR.resume(); \/\/ a recibir el siguiente valor\r\n  }\r\n  delay(1000);\r\n}\r\n<\/pre>\n

Con este programa en el Arduino y la pantalla del monitor serie abierta, pulsar cada tecla del control remoto para conocer sus valores. Es conveniente escribir los valores en un TXT para utilizarlos cada vez que sea necesario. Una lista como la que sigue, que corresponde a un control remoto de Direct TV. Los valores est\u00e1n en decimal<\/strong>.<\/p>\n

48799: [guide]
\n 45244: [active]
\n 38057: [list]
\n 33026: [exit]
\n 57063: [back]
\n 4985: [menu]
\n 864: [info]
\n 64187: [rojo]
\n 14499: [verde]
\n 49424: [amar]
\n 59787: [azul]
\n 57375 63414: [vol+]
\n 53295 63414: [vol-]
\n 31762: [guion bl]
\n 16195: [enter]
\n 65001: [prev]
\n 61455: [mute]
\n 6654: [flecha adel]
\n 1579: [flecha atr\u00e1s]
\n 57094: [flecha derecha]
\n 38068: [flecha izquierda]
\n 22183: [select]
\n 32630: [1]
\n 23217: [2]
\n 28078: [3]
\n 59460: [4]
\n 44135: [5]
\n 37740: [6]
\n 54067: [7]
\n 11155: [8]
\n 45264: [9]
\n 29399: [0]
\n 26583 26583 39270 63414: [on]
\n 26583 26583 39270 63414: [off]
\n 32895 63414: [tv input]<\/code><\/p>\n

El control remoto del kit de sensor IR Keyes posee los siguientes valores en hexadecimal (puede diferir seg\u00fan el modelo):<\/p>\n

0xFFA25D: CH-
\n 0xFF629D: CH
\n 0xFFE21D: CH+
\n 0xFF22DD: PREV
\n 0xFF02FD: NEXT
\n 0xFFC23D: PLAY\/PAUSE
\n 0xFFE01F: VOL-
\n 0xFFA857: VOL+
\n 0xFF906F: EQ
\n 0xFF6897: 0
\n 0xFF9867: 100+
\n 0xFFB04F: 200+
\n 0xFF30CF: 1
\n 0xFF18E7: 2
\n 0xFF7A85: 3
\n 0xFF10EF: 4
\n 0xFF38C7: 5
\n 0xFF5AA5: 6
\n 0xFF42BD: 7
\n 0xFF4AB5: 8
\n 0xFF52AD: 9<\/code><\/p>\n

Circuito para estas pruebas<\/strong>
\n
\"\"<\/a>
\nNota: en este circuito se alimentan los led emisores de los optoacoples desde la misma fuente de los rel\u00e9s. Para separar totalmente los circuitos, quitar el jumper entre VCC y JD-VCC y alimentar VCC desde los 5V de la placa Arduino.<\/strong><\/font><\/p>\n

Criterio de control<\/strong><\/p>\n

En este primer experimento hemos elegido como comandos para encender y apagar las salidas un conjunto de letras a enviar por l\u00ednea serie. Para el rel\u00e9 1 enviamos la letra \u201cA\u201d para encender, y la letra \u201ca\u201d para apagar. El rel\u00e9 2 se enciende con la letra \u201cB\u201d y se apaga con la \u201cb\u201d. Y as\u00ed sucesivamente si hubiese m\u00e1s rel\u00e9s. Para apagar todo al mismo tiempo elegimos enviar un \u201c0\u201d (cero).<\/p>\n

La lista de comandos es como sigue: <\/p>\n

Bot\u00f3n 1<\/strong> \u2013 Activa el rel\u00e9 1 \/ Bot\u00f3n 2<\/strong> \u2013 Apaga el rel\u00e9 1
\nBot\u00f3n 3<\/strong> \u2013 Activa el rel\u00e9 2 \/ Bot\u00f3n 4<\/strong> \u2013 Apaga el rel\u00e9 2
\nBot\u00f3n 0<\/strong> \u2013 Apaga todos los rel\u00e9s<\/p>\n

Programa 1 para dos rel\u00e9s<\/strong><\/p>\n

Copie el siguiente c\u00f3digo en su IDE de Arduino y s\u00fabalo a su placa.<\/p>\n

Advertencia: no es conveniente cargar c\u00f3digo nuevo cuando su Arduino
\nest\u00e1 conectado al m\u00f3dulo de rel\u00e9s. Siempre quite la alimentaci\u00f3n de 5V a este m\u00f3dulo.<\/center><\/strong><\/p><\/blockquote>\n
\/* Para 2 rel\u00e9s *\/\r\n#include <IRremote.h>\r\nvoid controlEncendido(char val); \/\/ declarar rutina auxiliar\r\n#define encender LOW \/\/ definicion de valores para accionar reles\r\n#define apagar HIGH\r\nint rele1 = 2; \/\/ definicion de nombres de salidas\r\nint rele2 = 3;\r\nint RECV_PIN = 11; \/\/definir el pin de entrada en Arduino\r\nIRrecv irrecv(RECV_PIN);\r\ndecode_results resultado;\r\n\r\nvoid setup() {\r\npinMode(rele1,OUTPUT); \/\/ definir las salidas para reles\r\npinMode(rele2,OUTPUT);\r\nSerial.begin(9600); \/\/ iniciar comunicacion serie\r\nirrecv.enableIRIn(); \/\/ inicia la recepci\u00f3n\r\ndigitalWrite(rele1,apagar); \r\ndigitalWrite(rele2,apagar); \r\n}\r\n\r\nvoid loop() {\r\n\/**************************************************************************\/\r\nif (irrecv.decode(&resultado)) {\r\n    unsigned int valor = resultado.value;\r\n    switch(valor) {\r\n       case 32630: \/\/ 1\r\n            controlEncendido('A'); \/\/ codigo para encender rele 1 \r\n            break; \r\n       case 23217: \/\/ 2\r\n            controlEncendido('a'); \/\/ codigo para encender rele 1\r\n            break;\r\n       case 28078: \/\/ 3\r\n            controlEncendido('B'); \/\/ codigo para apagar rele 2\r\n            break;          \r\n       case 59460: \/\/ 4\r\n            controlEncendido('b'); \/\/ codigo para apagar rele 2\r\n            break;          \r\n       case 29399: \/\/ 0\r\n            controlEncendido('0'); \/\/ codigo para apagar todos\r\n            break;          \r\n      default:\r\n            Serial.println(valor); \/\/ imprime valor no usado\r\n            break;          \r\n      }\r\n    delay(150);\r\n     irrecv.resume(); \/\/ recibir el siguiente\r\n  }\r\n}\r\n\/**************************************************************************\/\r\n\r\n\/\/ rutina auxiliar\r\nvoid controlEncendido(char val) {\r\nswitch (val) {\r\n  case 'A':\r\n      digitalWrite(rele1,encender);\r\n      Serial.println(\"Encender rel\u00e9 1\");\r\n      break;\r\n  case 'a':\r\n      digitalWrite(rele1,apagar); \r\n      Serial.println(\"Apagar rel\u00e9 1\"); \r\n      break;\r\n  case 'B':\r\n      digitalWrite(rele2,encender);\r\n      Serial.println(\"Encender rel\u00e9 2\");\r\n      break;\r\n  case 'b':\r\n      digitalWrite(rele2,apagar); \r\n      Serial.println(\"Apagar rel\u00e9 2\"); \r\n       break;\r\n  case '0':\r\n       digitalWrite(rele1,apagar); \r\n       digitalWrite(rele2,apagar); \r\n       Serial.println(\"Todos Apagados\");\r\n   break;\r\n  default:\r\n   break;\r\n  }\r\n}\r\n<\/pre>\n

Programa 2<\/strong><\/p>\n

En esta modificaci\u00f3n de programa utilizamos una opci\u00f3n que nos permite usar una \u00fanica letra de comando para encender y apagar. El \u00abtruco\u00bb consiste en alternar el estado del rel\u00e9 de encendido a apagado en cada recepci\u00f3n de la letra, utilizando una operaci\u00f3n l\u00f3gica NOT<\/a><\/strong>, que se representa con el s\u00edmbolo !<\/strong>
\n


\n