En este tutorial veremos como hacer un control universal por infrarrojo, que tiene dos formas de control, una es a través de un teclado y la otra por medio de un módulo bluetooth. Como cerebro del proyecto utilizaremos un arduino nano.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Materiales
Un Arduino nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Pines hembra
Un zócalo para el arduino nano
Pines macho
Ocho pulsadores
Resistor 1 Kohm
Un transistor 2N3904
Un resistor de 180 ohm
Emisor infrarrojo
Módulo bluetooth HC-05
- Funciona como dispositivo maestro y esclavo bluetooth
- Configurable mediante comandos AT
- Bluetooth V2.0+EDR
- Frecuencia de operación: 2.4 GHz Banda ISM
- Modulación: GFSK (Gaussian Frequency Shift Keying)
- Potencia de transmisión: <=4dBm, Class 2
- Sensibilidad: <=-84dBm @ 0.1% BER
- Seguridad: Autenticación y encriptación
- Perfiles Bluetooth: Puerto serie bluetooth.
- Distancia de hasta 10 metros en condiciones óptimas
- Voltaje de Operación: 3.6 VDC a 6 VDC
- Consumo Corriente: 30 mA a 50mA
- Chip: BC417143
- Versión o firmware: 3.0-20170609
- Baudios por defecto: 38400
- Baudios soportados: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
- Interfaz: Serial TTL
- Antena: Integrada en el PCB
- Seguridad: Autenticación y encriptación (Contraseña por defecto: 0000 o 1234)
- Temperatura de trabajo (Max): 75°C
- Temperatura de trabajo (Min): -20°C
- Dimensiones: 4.4 x 1.6 x 0.7 cm
Pines hembra
PCB
Descarga el pcb aquí –> Gerber_PCB_control remoto infrarrojo
App inventor
Descargas app y archivo fuente –> archivos app inventor
Código de ejemplo emisor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
//En el pin número 3 debe ser conectado el emisor infrarrojo #include <IRremote.h>//Debemos incluir esta librería IRsend irsend; String cadena; int led13=13; void setup() { Serial.begin(9600);//Esta velocidad debe coincidir con la del módulo bluetooth pinMode(led13, OUTPUT);//Pin 13 como salida //Se configuran estos pines como entradas, se habilitan resistores de pullup pinMode(2, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); pinMode(11, INPUT_PULLUP); pinMode(12, INPUT_PULLUP); pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT_PULLUP); pinMode(A2, INPUT_PULLUP); pinMode(A3, INPUT_PULLUP); pinMode(A4, INPUT_PULLUP); pinMode(A5, INPUT_PULLUP); pinMode(A6, INPUT_PULLUP); pinMode(A7, INPUT_PULLUP); } void loop() { //Leemos lo que entra por el puerto serial y lo asignamos a la variable cadena if (Serial.available()) { cadena = String(""); while (Serial.available()) { cadena = cadena + char(Serial.read()); delay(1); } } //Leemos el estado de los pulsaodres int pul2 = digitalRead(2); int pul4 = digitalRead(4); int pul5 = digitalRead(5); int pul6 = digitalRead(6); int pul7 = digitalRead(7); int pul8 = digitalRead(8); int pul9 = digitalRead(9); int pul10 = digitalRead(10); int pul11 = digitalRead(11); int pul12 = digitalRead(12); int pulA0 = analogRead(A0); int pulA1 = digitalRead(A1); int pulA2 = digitalRead(A2); int pulA3 = digitalRead(A3); int pulA4 = digitalRead(A4); int pulA5 = digitalRead(A5); int pulA6 = analogRead(A6); int pulA7 = analogRead(A7); //Pin 2 if (pul2 == LOW || cadena == "A") {//Si hemos precionado el boton en el pin 2 o hemos recivido el caracter A x el puerto serie se cumple esta condición irsend.sendRC5(0x82E, 12);//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin 4 if (pul4 == LOW || cadena == "B") {//Si hemos precionado el boton en el pin 4 o hemos recivido el caracter B x el puerto serie se cumple esta condición irsend.sendRC5(0x1F, 12);//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin 5 if (pul5 == LOW || cadena == "C") {//Si hemos precionado el boton en el pin 5 o hemos recivido el caracter C x el puerto serie se cumple esta condición irsend.sendRC5(0x10, 12 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin6 if (pul6 == LOW || cadena == "D") {//Si hemos precionado el boton en el pin 6 o hemos recivido el caracter D x el puerto serie se cumple esta condición irsend.sendRC5(0x11, 12 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin7 if (pul7 == LOW || cadena == "E") {//Si hemos precionado el boton en el pin 7 o hemos recivido el caracter E x el puerto serie se cumple esta condición irsend.sendRC5(0x2F, 12 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin8 if (pul8 == LOW || cadena == "F") {//Si hemos precionado el boton en el pin 8 o hemos recivido el caracter F x el puerto serie se cumple esta condición irsend.sendRC5(0x30, 12 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin9 if (pul9 == LOW || cadena == "G") {//Si hemos precionado el boton en el pin 9 o hemos recivido el caracter G x el puerto serie se cumple esta condición irsend.sendRC5(0x31, 12 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin10 if (pul10 == LOW || cadena == "H") {//Si hemos precionado el boton en el pin 10 o hemos recivido el caracter H x el puerto serie se cumple esta condición irsend.sendRC5(0x33, 12 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin11 if (pul11 == LOW || cadena == "I") {//Si hemos precionado el boton en el pin 11 o hemos recivido el caracter I x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin12 if (pul12 == LOW || cadena == "J") {//Si hemos precionado el boton en el pin 12 o hemos recivido el caracter J x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A7 if (pulA7 == 0 || cadena == "K") {//Si hemos precionado el boton en el pin A7 o hemos recivido el caracter K x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A6 if (pulA6 == LOW || cadena == "L") {//Si hemos precionado el boton en el pin A6 o hemos recivido el caracter L x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A5 if (pulA5 == LOW || cadena == "M") {//Si hemos precionado el boton en el pin A5 o hemos recivido el caracter M x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A4 if (pulA4 == LOW || cadena == "N") {//Si hemos precionado el boton en el pin A4 o hemos recivido el caracter N x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A3 if (pulA3 == LOW || cadena == "O") {//Si hemos precionado el boton en el pin A3 o hemos recivido el caracter O x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A2 if (pulA2 == LOW || cadena == "P") {//Si hemos precionado el boton en el pin A2 o hemos recivido el caracter P x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A0 if (pulA0 == LOW || cadena == "Q") {//Si hemos precionado el boton en el pin A0 o hemos recivido el caracter Q x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } //Pin A1 if (pulA1 == LOW || cadena == "R") {//Si hemos precionado el boton en el pin A1 o hemos recivido el caracter R x el puerto serie se cumple esta condición irsend.sendRC6(13, 20 );//Enviamos este código por el emisor infrarrojo delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); cadena = ""; } } |
Código de ejemplo receptor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
//Más proyectos en www.rogerbit.com #include <IRremote.h> #define RECV_PIN 11 //indicamos el pin por el que recibimos los datos del //sensor TSOP1838 IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600);//Velocidad del puerto pinMode(3,OUTPUT); //Pin 10 como salida pinMode(4,OUTPUT); //Pin 9 como salida pinMode(5,OUTPUT); //Pin 9 como salida digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(4,LOW); irrecv.enableIRIn(); // Iniciamos la recepcion } void loop() { //Si tenemos datos de lectura debido a que se pulsa una tecla en el mando if (irrecv.decode(&results)) { //Mostramos por puerte serie dicho codigo en Hexadecimal(para depuracion) Serial.print("Codigo: 0x") ; Serial.println(results.value,HEX) ; ////////////////////////////////////////// if(results.value==0x82E||results.value==0x20)//Encendido { digitalWrite(3,HIGH); } if(results.value==0x1F||results.value==0x21)//Apagado { digitalWrite(3, LOW); } if(results.value==0x10||results.value==0x10)//Encendido { digitalWrite(4,HIGH); } if(results.value==0x11||results.value==0x11)//Apagado { digitalWrite(4,LOW); } if(results.value==0x2F||results.value==0x2F)//Encendido { digitalWrite(5,HIGH); } if(results.value==0x30||results.value==0x30)//Apagado { digitalWrite(5,LOW); } delay(50); //retardo de 50 ms para evitar que el codigo se lea dos veces //en una pulsacion irrecv.resume(); // Recibimos el siguiente valor del sensor } } |
VIDEOS RECOMENDADOS