Ejercicios Arduino
description
Transcript of Ejercicios Arduino
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 1/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 1
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() // Configuración de pines y otros{
pinMode(led, OUTPUT); // Configura pin 'led' como salida
}
void loop() // Bucle{
digitalWrite(led, HIGH); // Salida en UNO lógico (Enciende led)
delay(1000); // Pausa de 1000 milisegundos
digitalWrite(led, LOW); // Salida en CERO lógico (Apaga led)
delay(1000); // Pausa de 1000 milisegundos
}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 2/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 2
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() // Configuración
{
pinMode(13,OUTPUT); // Configura pin 13 como salidapinMode(5,INPUT); // Configura pin 5 como entrada
}
void loop() // Bucle
{
if(digitalRead(5)==LOW) // Lee pin 5, si esta oprimido el pulsador, ejecuta las sentencias
{
digitalWrite(13,HIGH); // Salida en UNO lógico
delay(300); // Pausa de 300 milisegundos
digitalWrite(13,LOW); // Salida en CERO lógico
delay(300); // Pausa de 300 milisegundos
}
else //Si no está oprimido ejecuta estas sentencias y no las anteriores
{
digitalWrite(13,LOW); //Salida a CERO lógico (Apag led)
}
}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 3/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 3
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; // Declara variables como números enteros de 16 bits
int led2=7;
int led3=8;
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);
}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 4/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 4
EJERCICIO 4.
Programa que lee un voltaje analógico por el pin A2 y hace oscilar un led con una
pausa igual al valor del conversor analógico digital. (de 0 a 1023)
PROGRAMA
int adc; // Declara variablesint led=13;
void setup() // Configura pines{pinMode(13,OUTPUT); // Configura Pin 13 como salida}
void loop() // Repeticion{adc=analogRead(A2); // Lee voltaje del pin A2 y lo convierte en
// un numero entero de 0 a 1023
digitalWrite(led,HIGH); // Salida a UNO logicodelay(adc); // pausa de 'adc' milisegundosdigitalWrite(led,LOW); // Salida a CERO logicodelay(adc); // pausa de 'adc' milisegundos}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 5/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 5
EJERCICIO 5.
Programa que cuenta las veces quese presiona un pulsador conectado alpin 7 y dicha cuenta se visualiza en elterminal virtual. Cada vez que sepresiona el pulsador se enciende unled indicador conectado al pin 13.
PROGRAMA
int conteo=0; // Declara variable e inicializa en valor igual a cero.
void setup() // Configuración
{
pinMode(13,OUTPUT); // Pin 13 como salida
pinMode(7,INPUT); // Pin 7 como entrada
Serial.begin(9600); // Abre puerto serial y fija velocidad
Serial.println("Presione el Pulsador"); //Mensaje para el usuario
}
void loop() // Bucle
{
if(digitalRead(7)==LOW) // Lee pin 7 (con rebotes)
{
delay(80); // Espera 80ms para eliminar rebotes
if(digitalRead(7)==LOW) // Vuelve a leer pin 7 sin rebotes
{conteo=conteo+1; // Incrementa en uno la variable conteo
digitalWrite(13,HIGH); // Enciende led indicador
Serial.println(conteo); // Muestra resultado en monitor serial
delay(100); // Pausa de 300ms para visualizar el conteo
while(digitalRead(7)==LOW){} // Espera a que deje de oprimir el pulsador
digitalWrite(13,LOW); // Apaga led indicador
}
}
}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 6/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 6
EJERCICIO 6.
Programa que lee el voltaje analógico que entra por el pin A5 y lo visualiza en el
monitor serial cada 300ms.
PROGRAMA
int adc; // Variable entera de 16 bits
float vol; // 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); // Convierte voltaje a numero entero de 0 a 1023
// Esto lo hace el convertidor analógico digital o ADC
vol=adc*0.00488759; // Conversión a voltaje 0.00488759=5/1023
Serial.print("Voltaje= "); // Mensaje
Serial.println(vol); // Visualiza en monitor serial el voltaje
delay(300); // Pausa de 300ms
}
Lectura de voltaje analógico
Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85
Voltaje= 3.85
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 7/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 7
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); //Espera 100ms hasta que no haiga rebotes
if(digitalRead(5)==0){
if(digitalRead(5)==LOW){estado=!estado; //Operación NOTdigitalWrite(4,estado);}
while(digitalRead(5)==LOW){} //Se queda aquí hasta que suelte el pulsador
}}
}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 8/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 8
EJERCICIO 8.
Programa que permite encender y apagar 2 leds mediante dos pulsadores en forma
independiente, además 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 2digitalWrite(4,HIGH); //Activa resistencia interna del pin 4}
unsigned long tactual; //Declaracion de variablesunsigned long ttranscurrido;boolean estado=false;
void loop(){ //----------------------------------------------------------- //Interruptor 1 //-----------------------------------------------------------
if(digitalRead(2)==LOW)
{delay(50);if(digitalRead(2)==LOW)
{
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 9/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 9
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;}
} //----------------------------------------------------------
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 10/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 10
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 información
{caracter=Serial.read(); //Almacena el mensaje en incomming caracter por caracterif(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}
}}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 11/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 11
EJERCICIOS NIVEL II
EJERCICIO 10.
Lectura analógica y visualización en LCD
Programa que visualiza en un LCD la tensión proveniente de un potenciómetro y su
respectivo valor entero (ADC). Se utiliza el pin A0.
Pantalla de Cristal Liquido
Descripción de los pines del LCD
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)
1 16
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 12/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 12
PROGRAMA: Lectura analógica y visualización en LCD
#include <LiquidCrystal.h> //Librería del LCDLiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura pines de LCD
void setup( ){lcd.begin(16, 2); // Configura tipo de LCD}int adc; // Variable de 16 bitsfloat voltaje; // 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 0lcd.print("Volt= "); //Imprime texto en el LCDlcd.setCursor(5,0); //Ubica cursor en la columna 5 y fila 0lcd.print(voltaje); //Muestra en LCD el voltajelcd.setCursor(0,1); //Ubica cursor en la columna 0 y fila 1lcd.print("adc= "); //Imprime texto en el LCDlcd.setCursor(4,1); //Ubica cursor en la columna 4 y fila 1lcd.print(" "); //Imprime 4 espacios en blanco para borrar LCDlcd.setCursor(4,1); //Ubica cursor en la columna 4 y fila 1lcd.print(adc); //Muestra valor del convertidor analógico digital en el LCD
delay(50); //Pausa de 50ms}
Lectura analógica y visualización en L D
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 13/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 13
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 elpin A0
.
LM35. Es un sensor de temperatura con una precisión calibrada de 1ºC. Su rango de mediciónabarca desde -55°C hasta 150°C. La salida es lineal y cada grado centígrado equivale a 10mV esdecir 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 esteintegrado 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 portransistores de baja potencia.
Otros integrados similares son:
LM34 (10mV/°F) LM335 (10mV/°K) DS1820 (Salida Digital serial)
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 14/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 14
PROGRAMA: Medidor de Temperatura con LM35 y LCD
#include <LiquidCrystal.h> // Librería del LCDLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Configura pines de LCD
void setup( )
{lcd.begin(16, 2); // Configura tipo de LCD}int adc; // Variable de 16 bitsfloat temp; // Variable con decimales
void loop( ){analogReference(INTERNAL); //Toma voltaje interno de 1.1voltios como referenciaadc=analogRead(A0); //Lee voltaje y lo convierte a numero entero de 0 a 1023float 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 0lcd.print("Temp= "); // Imprime texto en el LCDlcd.setCursor(5,0); // Ubica cursor en la columna 5 y fila 0lcd.print(temp); // Muestra en LCD la temperaturalcd.setCursor(0,1); // Ubica cursor en la columna 0 y fila 1lcd.print("adc= "); // Imprime texto en el LCDlcd.setCursor(4,1); // Ubica cursor en la columna 4 y fila 1lcd.print(" "); // Imprime 4 espacios en blanco para borrar LCDlcd.setCursor(4,1); // Ubica cursor en la columna 4 y fila 1lcd.print(adc); // Muestra valor del convertidor analógico digital en LCDdelay(50); // Pausa de 50ms
}
Medidor de Temperatura con LM35 y LCD
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 15/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 15
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 lospines 6, 7, 8 y 9
las salidas digitales.
PROGRAMA: Control de 4 cargas con una sola entrada
#include <LiquidCrystal.h> //Libreria del LCDLiquidCrystal 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 LCDlcd.print(" Sistema Activo ");delay(1000);lcd.setCursor(0,0);lcd.print(" "); //16 espacios en blancolcd.setCursor(0,0);lcd.print("L1:OFF");lcd.setCursor(8,0);
lcd.print("L2:OFF");lcd.setCursor(0,1);lcd.print("L3:OFF");
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 16/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 16
lcd.setCursor(8,1);lcd.print("L4:OFF");}int adc; //Variable de 16 bitsfloat 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 "); //Dejar 1 espacio al final
}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 "); //Dejar 1 espacio al final}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 "); //Dejar 1 espacio al final}else{lcd.setCursor(3,1);lcd.print("OFF");}delay(200);}
if(adc>1017){digitalWrite(6,!digitalRead(6));
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 17/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 17
lcd.setCursor(8,1);lcd.print("L4:");if(digitalRead(6)==HIGH){lcd.setCursor(11,1);lcd.print("ON "); //Dejar 1 espacio al final}
else{lcd.setCursor(11,1);lcd.print("OFF");}
delay(200);}
}}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 18/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 18
EJERCICIOS NIVEL III
EJERCICIO 13.
Transmisión y recepción de temperatura por Radio frecuencia RF )
Programa que permite enviar en valor de la temperatura del LM35 en forma
inalámbrica a un receptor donde es visualizado en un LCD y en el Monitor de
Arduino. Usa como A0 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
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
Transceptor nRF24L01+
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 19/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 19
TRANSMISOR RF TX )
RECEPTOR RF RX )
CONEXIÓN DEL TRANSCEPTOR nRF24L01+
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 20/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 20
PROGRAMA:
Transmisión y recepción 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-RXnRF24L01p 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 bitstransmitter.channel(92); //Canal de transmisióntransmitter.RXaddress("oveja"); //Dirección RX a TXtransmitter.TXaddress("sapo"); //Direccion TX a RXtransmitter.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);}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 21/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 21
PROGRAMA:
Transmisión y recepción de temperatura vía 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-RXnRF24L01p transmitter(7,8); //asignar pines (CSN,CE)#include <LiquidCrystal.h> //Libreria para el LCDLiquidCrystal 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 bitstransmitter.channel(92); //Canal de transmisiontransmitter.RXaddress("oveja"); //Direcion RX a TXtransmitter.TXaddress("sapo"); //Direccion TX a RXtransmitter.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 datostransmitter.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 localSerial.print(temp_c); //Muestra en el monitor serial local los datosSerial.println(" oC");
dato_recibido=0; //Recetea variable}
}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 22/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 22
EJERCICIO 14.
Chat bidireccional Full Duplex)
Programa que permite conversar (Chatear) con otra persona en forma inalámbrica
utilizando el monitor del Arduino y 2 módulos nRF24L01+
PROGRAMA:
Chat Bidireccional
//******************************************************************************************** //Permite chatear en con otro terminal //utilizando el Arduino UNO R3 y el nRF24L01+ //Grabar este código 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-ARDUINOSPI.begin(); //Inicia Comunicación SPI con Dispositivo nRF24L01+
SPI.setBitOrder(MSBFIRST); //Configura orden de los bitstransmitter.channel(90); //Canal de transmisiontransmitter.RXaddress("oveja"); //Direcion RX a TXtransmitter.TXaddress("sapo"); //Direccion TX a RXtransmitter.init(); //Activa Dispositivo nRF24L01+
Serial.println("Hola soy el otro TX-RX"); //Visualiza texto en Monitor arduino}
String mensaje; // Variable mensaje como stringString PRXsays; // 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 caracterif(incomming=='\n'){ //verifica si has presionado tecla entertransmitter.txPL(mensaje); //carga mensaje completotransmitter.send(SLOW); //Envia el mensaje completo al receptorSerial.print("Eviaste: ");Serial.println(mensaje); //Muestra en tu monitor el Mensaje que enviastemensaje=""; //Borra variable mensaje
}else{mensaje=mensaje+incomming; // Se forma el mensaje completo caracter por caracter
}
}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 23/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 23
//******************************************************************************************** //Codigo para Recibir mensaje del otro dispositivo //********************************************************************************************
//verifica si ha llegado datos(caracteres)del otro transmisorif(transmitter.available( )){ //Si hay datos en el buffer de entrada ejecuta la instruccióntransmitter.read( ); // Lee byte por byte
transmitter.rxPL(PRXsays); //carga datos que ingresaron en PRXsaysSerial.print("Te envio: "); //Muestra texto en monitor localSerial.print(PRXsays); //Muestra en el monitor serial local los datosSerial.println();PRXsays="";}
//********************************************************************************************}
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 24/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 24
EJERCICIO 15.
CONTROL DE CARGA POR RAYOS INFRAROJOS IR)
Programa que controla el encendido y apagado de 3 leds a través de luz infrarroja y
un módulo sensor Infrarrojo.Módulo Receptor IR TSOP4838
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.
Características
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
Diagrama de Bloques
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 25/26
Sistemas Digitales
Ing. Flavio Condor De La Cruz 25
Sensores similares
PROGRAMA:
Control de carga por IR
//*********************************************************************** // 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 <IRremote.h>
int RECV_PIN = 3; // pin de entrada para modulo TSOP4838int led1 = 2; // pines de salidaint led2 = 4;int led3 = 7;
#define code1 4335 // codigo 1 recibido de Control Remoto#define code2 36975 // codigo 2 recibido de Control Remoto
#define code3 20655 // codigo 3 recibido de Control Remoto
IRrecv irrecv(RECV_PIN);decode_results results;
void setup(){Serial.begin(9600); // comunicacion con el monitor de arduinoirrecv.enableIRIn(); // Iniciamos recepcionpinMode(led1, OUTPUT); //Configuramos pinespinMode(led2, OUTPUT);pinMode(led3, OUTPUT);
}
void loop() {
7/17/2019 Ejercicios Arduino
http://slidepdf.com/reader/full/ejercicios-arduino 26/26
Sistemas Digitales
if (irrecv.decode(&results)) // Verifica si hay señal IR{
unsigned int valor = results.value; //Almecena codigo en valorswitch(valor){
case code1:
digitalWrite(led1,!digitalRead(led1)); //Invierte estado de la salida 1break;case code2:digitalWrite(led2,!digitalRead(led2)); //Invierte estado de la salida 2break;case code3:digitalWrite(led3,!digitalRead(led3)); //Invierte estado de la salida 3break;
}Serial.println(valor); // Muestra codigo en monitor de arduinoirrecv.resume(); // Inicia nueva recepcion
}
}