Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Problema
1. Se desea implementar un control de sensores de entorno
2. En un display de 16x2 se muestra un menú de 3 opciones:
a. Opcion1: Distancia
b. Opcion2: Temp Ds18B
c. Opcion3: Humedad relativa
3. Habrá 3 pulsadores uno para cada opción, cuando se pulse uno de ellos, el display en
la primera línea cambiará y mostrará lo q se medirá (DISTANCIA, TEMPERAT,
HUMEDAD), y en la segunda línea la medición realizada.
4. Habrá un cuarto pulsador que terminará el programa, y sacará un mensaje en display
sobre FIN DE PROGRAMA, luego de lo cual ningún otro pulsador funcionará
Solución
Fritzing
Código Arduino
#include <OneWire.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#include <NewPing.h>
#include <DallasTemperature.h>
OneWire ourWire(2); //Se establece el pin 2 como bus OneWire
DallasTemperature sensors(&ourWire); //Se declara una variable u objeto para nuestro
sensor
//Inicializamos el display con los pines de interfaz
LiquidCrystal lcd(7, 8, 9, 10, 5, 6);
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in
centimeters). Maximum sensor distance is rated at 400-500cm.
#define DHTPIN 3 //Seleccionamos el pin en el que se conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino
para comunicarse con el sensor
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of
pins and maximum distance.
//NewPing sonar(3, 4, 400); // NewPing setup of pins and maximum distance.
//int estado;
String impresion;
//int nada;
int botonDist = A5;
int botonTem = A4;
int botonHum = 4;
int botonFin = 13;
int estado;
int valor;
boolean verificar = true;
long t,h;
void setup() {
delay(1000);
//Hacemos la inicializacion del display
// En la configuracion le decimos que cuenta con 16 columnas y 2 filas
lcd.begin(16, 2);
sensors.begin(); //Se inicia el sensor
//Imprimimos un mensaje en el Display, se imprime en la
//primer columna, primer renglon
lcd.print("Menu Principal");
estado=2;
impresion = String();
dht.begin(); //Se inicia el sensor
pinMode(botonDist, INPUT);
pinMode(botonTem, INPUT);
pinMode(botonHum, INPUT);
pinMode(botonFin, INPUT);
estado=0;
valor=0;
}
void loop() {
unsigned int uS;
if (digitalRead(botonDist))
{
if(verificar==true)
{
estado=2;
}
delay(1000);
}
if (digitalRead(botonTem))
{
if(verificar==true)
{
estado=1;
}
delay(1000);
}
if (digitalRead(botonHum))
{
if(verificar==true)
{
estado=3;
}
delay(1000);
}
if (digitalRead(botonFin))
{
if(valor==1)
{
estado=0;
verificar=true;
valor=0;
}else
{
valor=1;
verificar=false;
estado=4;
}
delay(1000);
}
if(estado==4)
{
lcd.setCursor(0,0);
lcd.print("FIN DE");
lcd.setCursor(0,1);
lcd.print("PROGRAMA");
delay(2000);
//Borramos el display
lcd.clear();
}
if(estado==0)
{
lcd.setCursor(0,0);
lcd.print("MENU DE OPCIONES");
//Movemos el cursor para escribir en la primer columna, segundo renglon
lcd.setCursor(0, 1);
lcd.print("1. Distancia");
delay(2000);
//Borramos toda la informacion que contiene el display
lcd.clear();
//Ponemos el cursor en la primer columna primer renglon
lcd.setCursor(0,0);
lcd.print("2. Temperatura");
//Movemos el cursor para escribir en la primer columna, segundo renglon
lcd.setCursor(0, 1);
lcd.print("3. Humedad");
delay(2000);
//Borramos el display
lcd.clear();
}
if(estado==1)
{
sensors.requestTemperatures(); //Se envía el comando para leer la temperatura
float temp= sensors.getTempCByIndex(0); //Se obtiene la temperatura en ºC
lcd.setCursor(0,0);
lcd.print("Temperatura es");
//Movemos el cursor para escribir en la primer columna, segundo rengl
impresion=String(temp);
impresion=impresion+" c";
lcd.setCursor(0, 1);
lcd.print(impresion);
delay(1000);
lcd.clear();
}
if (estado==2)
{
lcd.setCursor(0,0);
lcd.print("Distancia es");
lcd.setCursor(0,1);
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
int nada=sonar.convert_cm(uS);
impresion=String(nada);
//String str = String();
//String imprimir=sonar.convert_cm(uS);
lcd.print(impresion+ " cm");
//lcd.print(sonar.convert_cm(uS));
delay(1000); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the
shortest delay between pings.
lcd.clear();
}
if(estado==3)
{
h = dht.readHumidity(); //Se lee la humedad
t = dht.readTemperature(); //Se lee la temperatura
lcd.setCursor(0,0);
lcd.print("Temperatura: ");
lcd.setCursor(13,0);
lcd.print(t);
lcd.setCursor(0,1);
lcd.print("Humedad: ");
lcd.setCursor(9,1);
lcd.print(h);
delay(1000);
}
}
Evidencias