Sistemas Digitales
Programa que enciende y apaga un led conectado al milisegundos.
con una pausa de 1000
int led = 13;
// Declara 'led' como variable entera de 16 bits
void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(1000); delay(100 0); digitalWrite(led, LOW); delay(1000); delay(100 0); }
// Configuración Configuració n de pines y otros
Ing. Flavio Condor De La Cruz
// Configura pin 'led' como salida // Bucle // Salida en UNO lógico (Enciende (Enciende led) // Pausa de 1000 milisegundos // Salida en CERO lógico (Apaga led) // Pausa de 1000 milisegundos
1
Sistemas Digitales
Programa que hace oscilar un led conectado al presionado un pulsador conectado al .
void setup() { pinMode(13,OUTPUT); pinMode(13,OUT PUT); pinMode(5,INPUT); pinMode(5,I NPUT); }
// Configuración Configuració n
void loop() { if(digitalRead(5)==LOW) if(digitalRead(5)==LOW) { digitalWrite(13,HIGH); digitalWrite(13,HIGH); delay(300); delay(300) ; digitalWrite(13,LOW); digitalWrite(13,LOW); delay(300); delay(300) ; } else { digitalWrite(13,LOW); digitalWrite(13,LOW); } }
// Bucle
Ing. Flavio Condor De La Cruz
, solo si se mantiene
// Configura pin 13 como salida // Configura pin 5 como entrada
// Lee Lee pin pin 5, si esta esta oprimido el pulsador, pulsador, ejecuta las sentencias sentencias // Salida en UNO lógico // Pausa de 300 milisegundos // Salida en CERO lógico // Pausa de 300 milisegundos //Si no está oprimido ejecuta estas sentencias y no las anteriores //Salida a CERO lógico (Apag led)
2
Sistemas Digitales
Programa que enciende 3 leds en forma secuencial cada 200ms. Los leds se conectan a los .
int led1=6; int led2=7; int led3=8;
// Declara variables como números enteros de 16 bits
void setup() // Configura pines como E/S { pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); } void loop() // Repeticion { digitalWrite(led1,HIGH); digitalWrite(led2,LOW); digitalWrite(led3,LOW); delay(200); digitalWrite(led1,LOW); digitalWrite(led2,HIGH); digitalWrite(led3,LOW); delay(200); digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,HIGH); delay(200); }
Ing. Flavio Condor De La Cruz
3
Sistemas Digitales
Programa que lee un voltaje analógico por el pin y hace oscilar un led con una pausa igual al valor del conversor analógico digital. (de 0 a 1023)
int adc; int led=13;
// Declara variables
void setup() { pinMode(13,OUTPUT); }
// Configura pines
void loop() { adc=analogRead(A2);
// Repeticion
digitalWrite(led,HIGH); delay(adc); digitalWrite(led,LOW); delay(adc); }
Ing. Flavio Condor De La Cruz
// Configura Pin 13 como salida
// Lee voltaje del pin A2 y lo convierte en // un numero entero de 0 a 1023 // Salida a UNO logico // pausa de 'adc' milisegundos // Salida a CERO logico // pausa de 'adc' milisegundos
4
Sistemas Digitales
Programa que cuenta las veces que se presiona un pulsador conectado al y dicha cuenta se visualiza en el . Cada vez que se presiona el pulsador se enciende un led indicador conectado al
int conteo=0; void setup() { pinMode(13,OUTPUT); pinMode(7,INPUT); Serial.begin(9600); Serial.println("Presione el Pulsador"); } void loop() { if(digitalRead(7)==LOW) { delay(80); if(digitalRead(7)==LOW) { conteo=conteo+1; digitalWrite(13,HIGH); Serial.println(conteo); delay(100); while(digitalRead(7)==LOW){} digitalWrite(13,LOW); } } }
Ing. Flavio Condor De La Cruz
// Declara variable e inicializa en valor igual a cero. // Configuración // Pin 13 como salida // Pin 7 como entrada // Abre puerto serial y fija velocidad //Mensaje para el usuario
// Bucle // Lee pin 7 (con rebotes) // Espera 80ms para eliminar rebotes // Vuelve a leer pin 7 sin rebotes // Incrementa en uno la variable conteo // Enciende led indicador // Muestra resultado en monitor serial // Pausa de 300ms para visualizar el conteo // Espera a que deje de oprimir el pulsador // Apaga led indicador
5
Sistemas Digitales
Programa que lee el voltaje analógico que entra por el pin monitor serial cada
y lo visualiza en el
Lectura de voltaje analógico Voltaje= 3.85 Voltaje= 3.85 Voltaje= 3.85 Voltaje= 3.85 Voltaje= 3.85
Voltaje= 3.85
int adc; float vol;
// Variable entera de 16 bits // Variable coma flotante
void setup() { Serial.begin(9600); // Abre puerto serial y fija velocidad a 9600 Baudios Serial.println("Lectura de voltaje analógico"); //Mensaje para el usuario } void loop() { adc=analogRead(A5); vol=adc*0.00488759; Serial.print("Voltaje= "); Serial.println(vol); delay(300); }
Ing. Flavio Condor De La Cruz
// Convierte voltaje a numero entero de 0 a 1023 // Esto lo hace el convertidor analógico digital o ADC // Conversión a voltaje 0.00488759=5/1023 // Mensaje // Visualiza en monitor serial el voltaje // Pausa de 300ms
6
Sistemas Digitales
Programa que enciende y apaga un led con un solo pulsador (Interruptor digital). El pulsador se conecta al pin 5 y el led al pin 4.
int estado=0; void setup() { pinMode(4,OUTPUT); pinMode(5,INPUT); } void loop() { if(digitalRead(5)==0) { delay(100); if(digitalRead(5)==0) { if(digitalRead(5)==LOW) { estado=!estado; digitalWrite(4,estado); } while(digitalRead(5)==LOW){}
//Espera 100ms hasta que no haiga rebotes
//Operación NOT
//Se queda aquí hasta que suelte el pulsador
} } }
Ing. Flavio Condor De La Cruz
7
Sistemas Digitales
Programa que permite encender y apagar 2 leds mediante dos pulsadores en forma independiente, además se muestra un led indicador que oscila.
void setup() { pinMode(12,OUTPUT); pinMode(10,OUTPUT); pinMode(4,INPUT); pinMode(2,INPUT); pinMode(8,OUTPUT); digitalWrite(2,HIGH); //Activa resistencia interna del pin 2 digitalWrite(4,HIGH); //Activa resistencia interna del pin 4 } unsigned long tactual; //Declaracion de variables unsigned long ttranscurrido; boolean estado=false; void loop() { //---------------------------------------------------------- //Interruptor 1 //----------------------------------------------------------if(digitalRead(2)==LOW) { delay(50); if(digitalRead(2)==LOW) { Ing. Flavio Condor De La Cruz
8
Sistemas Digitales
digitalWrite(12,!digitalRead(12)); } while(digitalRead(2)==LOW){} } //---------------------------------------------------------- //Interruptor 2 //----------------------------------------------------------if(digitalRead(4)==LOW) { delay(50); if(digitalRead(4)==LOW) { digitalWrite(10,!digitalRead(10)); } while(digitalRead(4)==LOW){} } //---------------------------------------------------------- //Hace oscilar el led cada 600ms //----------------------------------------------------------if(pausa(600)==HIGH) { digitalWrite(8,!digitalRead(8)); } } //--------------------------------------------------------- //Funcion creada por usurio.Hace una pausa en milisegundos //---------------------------------------------------------boolean pausa(unsigned long tiempo_ms) { tactual=millis(); if((tactual-ttranscurrido)>tiempo_ms) { estado=true; ttranscurrido=tactual; return estado; } } //----------------------------------------------------------
Ing. Flavio Condor De La Cruz
9
Sistemas Digitales
Programa que enciende y paga un led conectado al enviados por el monitor serial.
, mediante mensajes
String orden; char caracter; int pin=13; void setup() { pinMode(pin,OUTPUT); Serial.begin(9600); Serial.println("Para Activar la salida escriba: on"); Serial.println("Para Desactivar la salida escriba: off"); } void loop(){ //orden=""; delay(50); if(Serial.available()) //verifica si PC a enviado a arduino información { caracter=Serial.read(); //Almacena el mensaje en incomming caracter por caracter if(caracter=='\n') //verifica si has presionado tecla enter { if(orden=="on"){ digitalWrite(pin,HIGH); Serial.println("Salida Activada"); } if(orden=="off"){ digitalWrite(pin,LOW); Serial.println("Salida Desactivada"); } if((orden!="on")&&(orden!="off")){ Serial.println("Codigo incorrecto"); } orden=""; } else { orden=orden+caracter; // Se forma el mensaje completo carácter por carácter } } }
Ing. Flavio Condor De La Cruz
10
Sistemas Digitales
Programa que visualiza en un LCD la tensión proveniente de un potenciómetro y su respectivo valor entero (ADC). Se utiliza el .
1
16
Pin LCD
Descripción
1
VSS
Ground
2
VDD
+5V
3
VO
Conecte un potenciómetro para ajustar el contraste
4
RS
Register Select
5
R/W
Read/Write
6
E
Clock Enable
7
D0
Data Bit 0
8
D1
Data Bit 1
9
D2
Data Bit 2
10
D3
Data Bit 3
11
D4
Data Bit 4
12
D5
Data Bit 5
13
D6
Data Bit 6
14
D7
Data Bit 7
15 BLA (+)
Backlight Anode ( +5V )
16 BLK (-)
Backlight Cathode (Ground)
Ing. Flavio Condor De La Cruz
11
Sistemas Digitales
#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup( ) { lcd.begin(16, 2); } int adc; float voltaje;
//Librería del LCD //Configura pines de LCD
// Configura tipo de LCD // Variable de 16 bits // Variable con decimales
void loop( ) { adc=analogRead(A0); //lee voltaje y lo convierte a numero entero de 0 a 1023 float voltaje=(0.004887586)*adc; // Transforma 0-1023 a 0-5V (0.00488=5/1023) lcd.setCursor(0,0); //Ubica cursor en la columna 0 y fila 0 lcd.print("Volt= "); //Imprime texto en el LCD lcd.setCursor(5,0); //Ubica cursor en la columna 5 y fila 0 lcd.print(voltaje); //Muestra en LCD el voltaje lcd.setCursor(0,1); //Ubica cursor en la columna 0 y fila 1 lcd.print("adc= "); //Imprime texto en el LCD lcd.setCursor(4,1); //Ubica cursor en la columna 4 y fila 1 lcd.print(" "); //Imprime 4 espacios en blanco para borrar LCD lcd.setCursor(4,1); //Ubica cursor en la columna 4 y fila 1 lcd.print(adc); //Muestra valor del convertidor analógico digital en el LCD delay(50); //Pausa de 50ms }
Ing. Flavio Condor De La Cruz
12
Sistemas Digitales
Programa que muestra la temperatura del ambiente en un LCD utilizando en sensor LM35. Se utiliza el .
LM35. Es un sensor de temperatura con una precisión calibrada de 1ºC. Su rango de medición abarca desde -55°C hasta 150°C. La salida es lineal y cada grado centígrado equivale a 10mV es decir su resolución es 10mV/°C. Sus características más relevantes son:
Esta calibrado directamente en grados Celsius. La tensión de salida es proporcional a la temperatura. Opera entre 4 y 30 volts de alimentación. Baja impedancia de salida. Baja corriente de alimentación (60uA). Bajo costo.
El LM35 no requiere de circuitos adicionales para calibrarlo externamente. La baja impedancia de salida, su salida lineal y su precisa calibración hace posible que este integrado sea instalado fácilmente en un circuito de control. Debido a su baja corriente de alimentación se produce un efecto de auto calentamiento muy reducido. Se encuentra en diferentes tipos de encapsulado, el más común es el TO-92, utilizada por transistores de baja potencia. Otros integrados similares son:
LM34 (10mV/°F) LM335 (10mV/°K) DS1820 (Salida Digital serial)
Ing. Flavio Condor De La Cruz
13
Sistemas Digitales
#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup( ) { lcd.begin(16, 2); } int adc; float temp;
// Librería del LCD // Configura pines de LCD
// Configura tipo de LCD // Variable de 16 bits // Variable con decimales
void loop( ) { analogReference(INTERNAL); //Toma voltaje interno de 1.1voltios como referencia adc=analogRead(A0); //Lee voltaje y lo convierte a numero entero de 0 a 1023 float temp=(0.107526881)*adc; // Transforma 0-1023 en grados Celsius(0.10752..=1.1*100/1023) lcd.setCursor(0,0); // Ubica cursor en la columna 0 y fila 0 lcd.print("Temp= "); // Imprime texto en el LCD lcd.setCursor(5,0); // Ubica cursor en la columna 5 y fila 0 lcd.print(temp); // Muestra en LCD la temperatura lcd.setCursor(0,1); // Ubica cursor en la columna 0 y fila 1 lcd.print("adc= "); // Imprime texto en el LCD lcd.setCursor(4,1); // Ubica cursor en la columna 4 y fila 1 lcd.print(" "); // Imprime 4 espacios en blanco para borrar LCD lcd.setCursor(4,1); // Ubica cursor en la columna 4 y fila 1 lcd.print(adc); // Muestra valor del convertidor analógico digital en LCD delay(50); // Pausa de 50ms }
Ing. Flavio Condor De La Cruz
14
Sistemas Digitales
Programa que utiliza una sola entrada para controlar 4 salidas digitales. es la entrada y los las salidas digitales.
#include //Libreria del LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura pines de LCD void setup( ) { pinMode(9,OUTPUT); pinMode(8,OUTPUT); pinMode(7,OUTPUT); pinMode(6,OUTPUT); lcd.begin(16,2); //Configura tipo de LCD lcd.print(" Sistema Activo "); delay(1000); lcd.setCursor(0,0); lcd.print(" "); //16 espacios en blanco lcd.setCursor(0,0); lcd.print("L1:OFF"); lcd.setCursor(8,0); lcd.print("L2:OFF"); lcd.setCursor(0,1); lcd.print("L3:OFF");
Ing. Flavio Condor De La Cruz
15
Sistemas Digitales
lcd.setCursor(8,1); lcd.print("L4:OFF"); } int adc; //Variable de 16 bits float temp; //Variable con decimales void loop( ) { adc=analogRead(A0); if(adc>210) { if(adc>251 && adc<261){ digitalWrite(9,!digitalRead(9)); lcd.setCursor(0,0); lcd.print("L1:"); if(digitalRead(9)==HIGH){ lcd.setCursor(3,0); lcd.print("ON "); } else{ lcd.setCursor(3,0); lcd.print("OFF"); } delay(200); } if(adc>339 && adc<346){ digitalWrite(8,!digitalRead(8)); lcd.setCursor(8,0); lcd.print("L2:"); if(digitalRead(8)==HIGH){ lcd.setCursor(11,0); lcd.print("ON "); } else{ lcd.setCursor(11,0); lcd.print("OFF"); } delay(200); } if(adc>506 && adc<518){ digitalWrite(7,!digitalRead(7)); lcd.setCursor(0,1); lcd.print("L3:"); if(digitalRead(7)==HIGH){ lcd.setCursor(3,1); lcd.print("ON "); } else{ lcd.setCursor(3,1); lcd.print("OFF"); } delay(200); } if(adc>1017){ digitalWrite(6,!digitalRead(6)); Ing. Flavio Condor De La Cruz
//Dejar 1 espacio al final
//Dejar 1 espacio al final
//Dejar 1 espacio al final
16
Sistemas Digitales
lcd.setCursor(8,1); lcd.print("L4:"); if(digitalRead(6)==HIGH){ lcd.setCursor(11,1); lcd.print("ON "); } else{ lcd.setCursor(11,1); lcd.print("OFF"); }
//Dejar 1 espacio al final
delay(200); } } }
Ing. Flavio Condor De La Cruz
17
Sistemas Digitales
Programa que permite enviar en valor de la temperatura del en forma inalámbrica a un receptor donde es visualizado en un LCD y en el Monitor de Arduino. Usa como como entrada analógica.
Módulo Transceptor inalámbrico de RF nRF24L01+ 2.4GHz El módulo inalámbrico nRF24L01 está basado en el transceptor nRF24L01+ de Nordic Semiconductor y es completamente compatible con Arudino. Este transceptor opera en la banda de 2.4GHz. Con el nRF24L01 puedes fácilmente comunicar dos tarjetas Arduino y crear aplicaciones impresionantes.
Características:
Banda ISM de 2.4GHz de operación mundial Hasta una velocidad de datos de 2Mbps Operación a muy baja potencia 11.3mA TX a 0dBm de potencia de salida 12.3mA RX a una velocidad de datos de 2Mbps Comunicación SPI (Interfaz de periféricos serie) 900nA estando apagado 22μA en espera-I Regulador de voltaje en chip Voltaje de alimentación de 1.9 a 3.6V ShockBurst™ Mejorado Manejo de paquetes automático Auto packet transaction handling 6 data pipe MultiCeiver Compatible con nRF2401A, 02, E1 y E2 Bajo costo ±60ppm cristal 16MHz Entradas tolerantes a 5V 20-pin compacto 4x4mm paquete QFN Distancia de alcance de 70~100mts en espacio abierto
Transceptor nRF24L01+
Aplicaciones:
Periféricos inalámbricos de PC Mouse, teclados y mandos a distancia Controles remoto Advanced Media Center Auriculares VoIP Control de juegos y juguetes Relojes y sensores deportivos Mandos a distancia RF para la electrónica de consumo Automatización comercial y del hogar Redes de sensores que operan a muy baja potencia Sistemas de seguimiento de activos
Ing. Flavio Condor De La Cruz
18
Sistemas Digitales
CONEXIÓN DEL TRANSCEPTOR nRF24L01+
Ing. Flavio Condor De La Cruz
19
Sistemas Digitales
//******************************************************************************************** //TRANSMISOR //Perimite enviar datos a otro terminal (LM35) //utilizando el Arduino UNO R3 y el nRF24L01+ //******************************************************************************************** #include //Libreria para comunicar Arduino con el TX-RX #include //Libreria para el TX-RX nRF24L01p transmitter(7,8);//asignar pines (CSN,CE) //******************************************************************************************** void setup( ) { pinMode(3,OUTPUT); Serial.begin(115200); //Fija velocidad de comunicacion PC-ARDUINO SPI.begin(); //Inicia Comunicación SPI con Dispositivo nRF24L01+ SPI.setBitOrder(MSBFIRST); //Configura orden de los bits transmitter.channel(92); //Canal de transmisión transmitter.RXaddress("oveja"); //Dirección RX a TX transmitter.TXaddress("sapo"); //Direccion TX a RX transmitter.init(); //Activa Dispositivo nRF24L01+ Serial.println("TRANSMISOR"); //Visualiza texto en Monitor arduino } int dato_a_enviar=0; int dato_recibido=0; int tempLM35; float temp_tx; unsigned long tiempoactual=0; unsigned long tiempoprevio=0;
void loop( ) { //******************************************************************************************** //Codigo para leer valor entero del LM35 y lo envia al receptor //******************************************************************************************** analogReference(INTERNAL); tempLM35=analogRead(A0); transmitter.txPL(tempLM35); transmitter.send(SLOW); tiempoprevio=tiempoactual; Serial.print("Temp enviada: "); temp_tx=tempLM35*0.107526881; Serial.print(temp_tx); Serial.println(" oC"); delay(300); }
Ing. Flavio Condor De La Cruz
20
Sistemas Digitales
/ /*******************************************************************************************
//RECEPTOR //Permite recibir datos de otro terminal //utilizando el Arduino UNO R3 y el nRF24L01+ //******************************************************************************************* #include //Libreria para comunicar Arduino con el TX-RX #include //Libreria para el TX-RX nRF24L01p transmitter(7,8); //asignar pines (CSN,CE) #include //Libreria para el LCD LiquidCrystal lcd(10, 9, 5, 4, 3, 2);//pines para LCD //******************************************************************************************* void setup( ){ pinMode(3,OUTPUT); Serial.begin(115200); //Fija velocidad de comunicacion PC-ARDUINO SPI.begin(); //Inicia Comunicacion SPI con Dispositivo nRF24L01+ SPI.setBitOrder(MSBFIRST); //Configura orden de los bits transmitter.channel(92); //Canal de transmision transmitter.RXaddress("oveja"); //Direcion RX a TX transmitter.TXaddress("sapo"); //Direccion TX a RX transmitter.init(); //Activa Dispositivo nRF24L01+ Serial.println("RECEPTOR"); //Visualiza texto en Monitor arduino } int dato_recibido=0; unsigned long tiempoactual=0; unsigned long tiempoprevio=0; float temp_c; void loop( ){ //******************************************************************************************** //Código para Recibir datos del otro dispositivo //******************************************************************************************** if(transmitter.available()){ //verifica si ha llegado datos del otro transmisor transmitter.read(); //Lee todos los datos transmitter.rxPL(dato_recibido); //carga datos que ingresaron en dato_recibido lcd.setCursor(0,1); lcd.print("Temp: "); lcd.setCursor(5,1); temp_c=0.107526881*dato_recibido; lcd.print(temp_c,2); delay(1); Serial.print("Temp recibida: "); //Muestra texto en monitor local Serial.print(temp_c); //Muestra en el monitor serial local los datos Serial.println(" oC"); dato_recibido=0; }
//Recetea variable
}
Ing. Flavio Condor De La Cruz
21
Sistemas Digitales
Programa que permite conversar (Chatear) con otra persona en forma inalámbrica utilizando el monitor del Arduino y 2 módulos nRF24L01+
//******************************************************************************************** //Permite chatear en con otro terminal //utilizando el Arduino UNO R3 y el nRF24L01+ //Grabar este código en ambos dispositivos //******************************************************************************************** #include //Libreria para comunicar Arduino con el TX-RX #include //Libreria para el TX-RX nRF24L01p transmitter(7,8); //asignar pines (CSN,CE) //******************************************************************************************** void setup( ){ delay(150); Serial.begin(115200); //Fija velocidad de comunicacion PC-ARDUINO SPI.begin(); //Inicia Comunicación SPI con Dispositivo nRF24L01+ SPI.setBitOrder(MSBFIRST); //Configura orden de los bits transmitter.channel(90); //Canal de transmision transmitter.RXaddress("oveja"); //Direcion RX a TX transmitter.TXaddress("sapo"); //Direccion TX a RX transmitter.init(); //Activa Dispositivo nRF24L01+ Serial.println("Hola soy el otro TX-RX"); //Visualiza texto en Monitor arduino } String mensaje; String PRXsays;
// Variable mensaje como string // Variable PRXsays como string
void loop( ){ //******************************************************************************************** //Codigo para Transmitir Mensaje //******************************************************************************************** if(Serial.available( )>0){ //verifica si hay mensaje que enviar char incomming=Serial.read(); //Almacena el mensaje en incomming caracter por caracter if(incomming=='\n'){ //verifica si has presionado tecla enter transmitter.txPL(mensaje); //carga mensaje completo transmitter.send(SLOW); //Envia el mensaje completo al receptor Serial.print("Eviaste: "); Serial.println(mensaje); //Muestra en tu monitor el Mensaje que enviaste mensaje=""; //Borra variable mensaje } else{ mensaje=mensaje+incomming; // Se forma el mensaje completo caracter por caracter } }
Ing. Flavio Condor De La Cruz
22
Sistemas Digitales
//******************************************************************************************** //Codigo para Recibir mensaje del otro dispositivo //******************************************************************************************** //verifica si ha llegado datos(caracteres)del otro transmisor if(transmitter.available( )){ //Si hay datos en el buffer de entrada ejecuta la instrucción transmitter.read( ); // Lee byte por byte transmitter.rxPL(PRXsays); //carga datos que ingresaron en PRXsays Serial.print("Te envio: "); //Muestra texto en monitor local Serial.print(PRXsays); //Muestra en el monitor serial local los datos Serial.println(); PRXsays=""; } //******************************************************************************************** }
Ing. Flavio Condor De La Cruz
23
Sistemas Digitales
Programa que controla el encendido y apagado de 3 leds a través de luz infrarroja y un módulo sensor Infrarrojo.
Es un sensor de infrarrojos empleado para recibir las señales infrarrojas de los mandos a distancia empleados normalmente en los electrodomésticos. El sensor tiene un su interior un circuito amplificador y un oscilador a 38 Khz que permiten la recepción de las señales incluso en presencia de fuentes de luz intensas. Este sensor se conecta a un microcontrolador permitiendo recibir las señales de control de la mayoría de los mandos a distancias y hacer mediante software que el circuito ejecute diferentes instrucciones en función de las órdenes recibidas.
Fuente de voltaje de 2.5v a 5.5v Fotodetector y amplificador en un solo chip Bajo consumo de corriente Filtro interno para Modulación por impulsos codificado Blindaje contra ruido electromagnético Inmune a la luz visible
Ing. Flavio Condor De La Cruz
24
Sistemas Digitales
//*********************************************************************** // Receptor IR // Programa que recibe la señal infrarroja de un Control remoto // Para detectar la señal infrarroja utiliza un módulo receptor IR // que puede ser el TSOP4838 o similar. //*********************************************************************** #include int RECV_PIN = 3; int led1 = 2; int led2 = 4; int led3 = 7;
// pin de entrada para modulo TSOP4838 // pines de salida
#define code1 4335 #define code2 36975 #define code3 20655
// codigo 1 recibido de Control Remoto // codigo 2 recibido de Control Remoto // codigo 3 recibido de Control Remoto
IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); }
// comunicacion con el monitor de arduino // Iniciamos recepcion //Configuramos pines
void loop() {
Ing. Flavio Condor De La Cruz
25
Sistemas Digitales
if (irrecv.decode(&results)) // Verifica si hay señal IR { unsigned int valor = results.value; //Almecena codigo en valor switch(valor) { case code1: digitalWrite(led1,!digitalRead(led1)); //Invierte estado de la salida 1 break; case code2: digitalWrite(led2,!digitalRead(led2)); //Invierte estado de la salida 2 break; case code3: digitalWrite(led3,!digitalRead(led3)); //Invierte estado de la salida 3 break; } Serial.println(valor); // Muestra codigo en monitor de arduino irrecv.resume(); // Inicia nueva recepcion } }
Ing. Flavio Condor De La Cruz
26