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 (Encien de led) delay(100 0); // Pausa de 1000 milisegundos digitalWrite(led, LOW); // Salida en CERO lógico (Apaga led) delay(100 0); // Pausa de 1000 milisegundos }

Ejercicios Arduino

  • Upload
    editor

  • View
    31

  • Download
    0

Embed Size (px)

DESCRIPTION

arduino

Citation preview

Page 1: 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

}

Page 2: Ejercicios Arduino

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)

}

}

Page 3: Ejercicios Arduino

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

}

Page 4: Ejercicios Arduino

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}

Page 5: Ejercicios Arduino

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

}

}

}

Page 6: Ejercicios Arduino

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

Page 7: Ejercicios Arduino

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

}}

}

Page 8: Ejercicios Arduino

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)

{

Page 9: Ejercicios Arduino

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

} //----------------------------------------------------------

Page 10: Ejercicios Arduino

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}

}}

Page 11: Ejercicios Arduino

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

Page 12: Ejercicios Arduino

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

Page 13: Ejercicios Arduino

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)

Page 14: Ejercicios Arduino

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 

Page 15: Ejercicios Arduino

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");

Page 16: Ejercicios Arduino

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

Page 17: Ejercicios Arduino

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

}}

Page 18: Ejercicios Arduino

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+ 

Page 19: Ejercicios Arduino

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+

Page 20: Ejercicios Arduino

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

Page 21: Ejercicios Arduino

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}

}

Page 22: Ejercicios Arduino

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

}

}

Page 23: Ejercicios Arduino

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="";}

 //********************************************************************************************}

Page 24: Ejercicios Arduino

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

Page 25: Ejercicios Arduino

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() {

Page 26: Ejercicios Arduino

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

}

}