Descrición:
Nesta sección imos comunicarnos coa nosa placa Arduíno a través dun mando e un receptor de infrevermellos (IR). Lograremos acender e apagar LEDs premendo nas teclas do mando. Despois podes adaptar os programas para actuar sobre outros elementos do teu proxecto (motores, servos, displays, etc.)
Imos utilizar o mando que aparece na imaxe, pero tamén poderiamos facer probas cun mando da televisión dos que temos por casa. Nese caso previamente debemos identificar o código que envía cada tecla e facer o programa en función do mesmo.
Montaxe:
Segundo o teu modelo de receptor IR, debes identificar os pins VCC, GND e sinal. Se os conectas mal podes estragar o teu receptor e xa non conseguirás nada. Consulta o datasheet.
O sinal do receptor IR debe conectarse nunha entrada dixital. Imos conectalo no pin 3. Tamén imos engadir dous LEDs con resistencias de 220Ω.
Programas:
O primeiro que debemos facer é instalar unha librería que me permita empregar un mando. Eu usei a librería IRremote que vén neste enlace de GitHub.
1. Códigos
Este programa ímolo utilizar para ver o código que emite cada tecla en hexadecimal. Abre a consola, preme en cada unha das teclas e copia o resultado para poder programar despois en función deses valores.
#include <IRremoteInt.h> #include <IRremote.h> int RECV_PIN = 3; // Pin que recibe o sinal IR IRrecv irrecv(RECV_PIN); decode_results results; // Configuración: void setup() { Serial.begin(9600); // Comunicación serie while(!Serial); irrecv.enableIRIn(); // Comunicación IR } // Programa: void loop() { if (irrecv.decode(&results)){ // Se hai sinal no receptor Serial.println(results.value, HEX); // imprime o valor en hexadecimal irrecv.resume(); // Prepárase para recibir o seguinte valor } delay(10); } /* Resultados obtidos: 0 FD30CF 1 FD08F7 2 FD8877 3 FD48B7 4 FD28D7 5 FDA857 6 FD6897 7 FD18E7 8 FD9867 9 FD58A7 */
2. Leds
Imos acender e apagar un leds premendo nas teclas do mando. Modifica os valores hexadecimais segundo o teu mando e as teclas que desexes utilizar para o control.
#include <IRremoteInt.h> #include <IRremote.h> int led1=13; int led2=12; int RECV_PIN = 3; // Pin que recibe o sinal IR IRrecv irrecv(RECV_PIN); decode_results results; // Configuración void setup() { Serial.begin(9600); // Comunicación serie while(!Serial); irrecv.enableIRIn(); // Comunicación IR pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); } // Programa void loop() { results.value=0; if (irrecv.decode(&results)){ Serial.println(results.value, HEX); // imprime o valor en hexadecimal irrecv.resume(); if(results.value == 0xFD08F7){ // tecla 1 acender Led1 digitalWrite(led1,HIGH); Serial.println(results.value, HEX); } if(results.value == 0xFD28D7){ // tecla 4 apagar Led1 digitalWrite(led1,LOW); Serial.println(results.value, HEX); } if(results.value == 0xFD8877){ // tecla 2 acender Led2 digitalWrite(led2,HIGH); Serial.println(results.value, HEX); } if(results.value == 0xFDA857){ // tecla 5 apagar Led2 digitalWrite(led2,LOW); Serial.println(results.value, HEX); } if(results.value == 0xFD30CF){ // tecla 0 apagar todos digitalWrite(led1,LOW); digitalWrite(led2,LOW); Serial.println(results.value, HEX); } delay(200); irrecv.resume(); } }
Propostas:
- Mando da tele: Proba descubrir o código de varias teclas do mando da túa tele, equipo de música, etc.
- Control: Fai que premendo teclas do mando se executen diversos programas dos que xa tes feitos. Por exemplo, tecla1:escintileo, tecla2: melodía, tecla3:coche fantástico, tecla4: xiro dun motor cara á esquerda, tecla5: xiro cara á dereita, tecla6: parada, ou o que se che ocorra. Define funcións para cada un dos programas.
- Ascensor: Para o proxecto dun ascensor de 3 pisos, utiliza un mando para introducir o piso ao que desexas ir.