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 }
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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}
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
} //---------------------------------------------------------- //Funcion creada por usurio.Hace una pausa en milisegundos //----------------------------------------------------------
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
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
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)
#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
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.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
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
//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);}
/ /******************************************************************************************* //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
Serial.print("Temp recibida: "); //Muestra texto en monitor localSerial.print(temp_c); //Muestra en el monitor serial local los datosSerial.println(" oC");
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
//******************************************************************************************** //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="";}
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
//*********************************************************************** // 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.
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