Está en la página 1de 26

Sistemas Digitales

EJERCICIOS NIVEL I

EJERCICIO 1.
Programa que enciende y apaga un led conectado al pin 13 con una pausa de 1000
milisegundos.

PROGRAMA
int led = 13;

// Declara 'led' como variable entera de 16 bits

void setup()
{
pinMode(led, OUTPUT);
}
void loop()
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}

// Configuracin de pines y otros

Ing. Flavio Condor De La Cruz

// Configura pin 'led' como salida


// Bucle
// Salida en UNO lgico (Enciende led)
// Pausa de 1000 milisegundos
// Salida en CERO lgico (Apaga led)
// Pausa de 1000 milisegundos

Sistemas Digitales

EJERCICIO 2.
Programa que hace oscilar un led conectado al pin 13, solo si se mantiene
presionado un pulsador conectado al pin 5.

PROGRAMA
void setup()
{
pinMode(13,OUTPUT);
pinMode(5,INPUT);
}

// Configuracin

void loop()
{
if(digitalRead(5)==LOW)
{
digitalWrite(13,HIGH);
delay(300);
digitalWrite(13,LOW);
delay(300);
}
else
{
digitalWrite(13,LOW);
}
}

// Bucle

Ing. Flavio Condor De La Cruz

// Configura pin 13 como salida


// Configura pin 5 como entrada

// Lee pin 5, si esta oprimido el pulsador, ejecuta las sentencias


// Salida en UNO lgico
// Pausa de 300 milisegundos
// Salida en CERO lgico
// Pausa de 300 milisegundos
//Si no est oprimido ejecuta estas sentencias y no las anteriores
//Salida a CERO lgico (Apag led)

Sistemas Digitales

EJERCICIO 3.
Programa que enciende 3 leds en forma secuencial cada 200ms. Los leds se
conectan a los pines 6,7 y 8.

PROGRAMA
int led1=6;
int led2=7;
int led3=8;

// Declara variables como nmeros 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

Sistemas Digitales

EJERCICIO 4.
Programa que lee un voltaje analgico por el pin A2 y hace oscilar un led con una
pausa igual al valor del conversor analgico digital. (de 0 a 1023)

PROGRAMA
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);
}

// Salida a UNO logico


// pausa de 'adc' milisegundos
// Salida a CERO logico
// pausa de 'adc' milisegundos

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

Sistemas Digitales

EJERCICIO 5.
Programa que cuenta las veces que
se presiona un pulsador conectado al
pin 7 y dicha cuenta se visualiza en el
terminal virtual. Cada vez que se
presiona el pulsador se enciende un
led indicador conectado al pin 13.

PROGRAMA
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.


// Configuracin
// 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

Sistemas Digitales

EJERCICIO 6.
Programa que lee el voltaje analgico que entra por el pin A5 y lo visualiza en el
monitor serial cada 300ms.

Lectura de voltaje analgico


Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85

PROGRAMA
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 analgico");
//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 analgico digital o ADC
// Conversin a voltaje 0.00488759=5/1023
// Mensaje
// Visualiza en monitor serial el voltaje
// Pausa de 300ms

Sistemas Digitales

EJERCICIO 7.
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.

PROGRAMA
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

//Operacin NOT
//Se queda aqu hasta que suelte el pulsador

Ing. Flavio Condor De La Cruz

Sistemas Digitales

EJERCICIO 8.
Programa que permite encender y apagar 2 leds mediante dos pulsadores en forma
independiente, adems se muestra un led indicador que oscila.

PROGRAMA
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

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

Sistemas Digitales

EJERCICIO 9.
Programa que enciende y paga un led conectado al pin 13, mediante mensajes
enviados por el monitor serial.

PROGRAMA
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 informacin
{
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 carcter por carcter
}

Ing. Flavio Condor De La Cruz

10

Sistemas Digitales

EJERCICIOS NIVEL II
EJERCICIO 10.
Lectura analgica y visualizacin en LCD
Programa que visualiza en un LCD la tensin proveniente de un potencimetro y su
respectivo valor entero (ADC). Se utiliza el pin A0.

Pantalla de Cristal Liquido


1

16

Descripcin de los pines del LCD


Pin LCD
1 VSS

Descripcin
Ground

VDD

+5V

VO

Conecte un potencimetro para ajustar el contraste

4
5

RS
R/W

Register Select
Read/Write

Clock Enable

D0

Data Bit 0

D1

Data Bit 1

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 (+)
16 BLK (-)

Ing. Flavio Condor De La Cruz

Backlight Anode ( +5V )


Backlight Cathode (Ground)

11

Sistemas Digitales

Lectura analgica y visualizacin en LCD

PROGRAMA: Lectura analgica y visualizacin en LCD


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup( )
{
lcd.begin(16, 2);
}
int adc;
float voltaje;

//Librera 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 analgico digital en el LCD
delay(50);
//Pausa de 50ms
}

Ing. Flavio Condor De La Cruz

12

Sistemas Digitales

EJERCICIO 11.
Medidor de Temperatura con LM35 y LCD
Programa que muestra la temperatura del ambiente en un LCD utilizando en sensor
LM35. Se utiliza el pin A0.

LM35. Es un sensor de temperatura con una precisin calibrada de 1C. Su rango de medicin
abarca desde -55C hasta 150C. La salida es lineal y cada grado centgrado equivale a 10mV es
decir su resolucin es 10mV/C.
Sus caractersticas ms relevantes son:

Esta calibrado directamente en grados Celsius.


La tensin de salida es proporcional a la temperatura.
Opera entre 4 y 30 volts de alimentacin.
Baja impedancia de salida.
Baja corriente de alimentacin (60uA).
Bajo costo.

El LM35 no requiere de circuitos adicionales para calibrarlo externamente.


La baja impedancia de salida, su salida lineal y su precisa calibracin hace posible que este
integrado sea instalado fcilmente en un circuito de control.
Debido a su baja corriente de alimentacin se produce un efecto de auto calentamiento muy
reducido.
Se encuentra en diferentes tipos de encapsulado, el ms comn 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

Medidor de Temperatura con LM35 y LCD

PROGRAMA: Medidor de Temperatura con LM35 y LCD


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup( )
{
lcd.begin(16, 2);
}
int adc;
float temp;

// Librera 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 analgico digital en LCD
delay(50);
// Pausa de 50ms
}

Ing. Flavio Condor De La Cruz

14

Sistemas Digitales

EJERCICIO 12.
Control de 4 cargas con una sola entrada
Programa que utiliza una sola entrada para controlar 4 salidas digitales.
Pin A0 es la entrada y los pines 6, 7, 8 y 9 las salidas digitales.

PROGRAMA: Control de 4 cargas con una sola entrada


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Libreria del LCD


//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

EJERCICIOS NIVEL III


EJERCICIO 13.
Transmisin y recepcin de temperatura por Radio frecuencia ( RF )
Programa que permite enviar en valor de la temperatura del LM35 en forma
inalmbrica a un receptor donde es visualizado en un LCD y en el Monitor de
Arduino. Usa como A0 como entrada analgica.

Mdulo Transceptor inalmbrico de RF nRF24L01+ 2.4GHz


El mdulo inalmbrico 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 fcilmente comunicar dos tarjetas Arduino y crear
aplicaciones impresionantes.

Caractersticas:

Banda ISM de 2.4GHz de operacin mundial


Hasta una velocidad de datos de 2Mbps
Operacin a muy baja potencia
11.3mA TX a 0dBm de potencia de salida
12.3mA RX a una velocidad de datos de 2Mbps
Comunicacin SPI (Interfaz de perifricos serie)
900nA estando apagado
22A en espera-I
Regulador de voltaje en chip
Voltaje de alimentacin de 1.9 a 3.6V
ShockBurst Mejorado
Manejo de paquetes automtico
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:

Perifricos inalmbricos 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 electrnica de consumo
Automatizacin 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

TRANSMISOR RF ( TX )

RECEPTOR RF ( RX )

CONEXIN DEL TRANSCEPTOR nRF24L01+

Ing. Flavio Condor De La Cruz

19

Sistemas Digitales

PROGRAMA: Transmisin y recepcin de temperatura RF

TRANSMISOR

//********************************************************************************************
//TRANSMISOR
//Perimite enviar datos a otro terminal (LM35)
//utilizando el Arduino UNO R3 y el nRF24L01+
//********************************************************************************************
#include <SPI.h>//Libreria para comunicar Arduino con el TX-RX
#include <nRF24L01p.h>//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 Comunicacin SPI con Dispositivo nRF24L01+
SPI.setBitOrder(MSBFIRST);
//Configura orden de los bits
transmitter.channel(92);
//Canal de transmisin
transmitter.RXaddress("oveja");
//Direccin 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

PROGRAMA: Transmisin y recepcin de temperatura va RF

RECEPTOR

//*******************************************************************************************
//RECEPTOR
//Permite recibir datos de otro terminal
//utilizando el Arduino UNO R3 y el nRF24L01+
//*******************************************************************************************
#include <SPI.h>
//Libreria para comunicar Arduino con el TX-RX
#include <nRF24L01p.h> //Libreria para el TX-RX
nRF24L01p transmitter(7,8); //asignar pines (CSN,CE)
#include <LiquidCrystal.h> //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( ){
//********************************************************************************************
//Cdigo 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

EJERCICIO 14.
Chat bidireccional (Full Duplex)
Programa que permite conversar (Chatear) con otra persona en forma inalmbrica
utilizando el monitor del Arduino y 2 mdulos nRF24L01+
PROGRAMA: Chat Bidireccional
//********************************************************************************************
//Permite chatear en con otro terminal
//utilizando el Arduino UNO R3 y el nRF24L01+
//Grabar este cdigo en ambos dispositivos
//********************************************************************************************
#include <SPI.h>
//Libreria para comunicar Arduino con el TX-RX
#include <nRF24L01p.h>
//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 Comunicacin 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 instruccin
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

EJERCICIO 15.
CONTROL DE CARGA POR RAYOS INFRAROJOS (IR)
Programa que controla el encendido y apagado de 3 leds a travs de luz infrarroja y
un mdulo sensor Infrarrojo.
Mdulo Receptor IR TSOP4838
Es un sensor de infrarrojos empleado para
recibir las seales infrarrojas de los mandos a
distancia empleados normalmente en los
electrodomsticos. El sensor tiene un su interior
un circuito amplificador y un oscilador a 38 Khz
que permiten la recepcin de las seales
incluso en presencia de fuentes de luz intensas.
Este sensor se conecta a un microcontrolador
permitiendo recibir las seales de control de la mayora de los mandos a distancias y
hacer mediante software que el circuito ejecute diferentes instrucciones en funcin de
las rdenes recibidas.
Caractersticas

Fuente de voltaje de 2.5v a 5.5v


Fotodetector y amplificador en un solo chip
Bajo consumo de corriente
Filtro interno para Modulacin por impulsos codificado
Blindaje contra ruido electromagntico
Inmune a la luz visible

Diagrama de Bloques

Ing. Flavio Condor De La Cruz

24

Sistemas Digitales

Sensores similares

PROGRAMA: Control de carga por IR


//***********************************************************************
// Receptor IR
// Programa que recibe la seal infrarroja de un Control remoto
// Para detectar la seal infrarroja utiliza un mdulo receptor IR
// que puede ser el TSOP4838 o similar.
//***********************************************************************
#include <IRremote.h>
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 seal 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

También podría gustarte