Sei sulla pagina 1di 11

Mltiples

sensores y
visualizacin
de sus datos
en una
pantalla LCD
16x2

Trabajo desarrollado en el
simulador 123d.circuits.io y puesto
en marcha en Arduino UNO R3.

Sandoval Zea Abel Ernesto


Rubio Gordillo Wilder
Santamara Alvarado Julio Cesar

1. Objetivo del proyecto:


Utilizar mltiples sensores para:

Medir el nivel de luz ambiental utilizando un fotoresistor LDR.


Tambin mostrar si est muy oscuro, oscuro, brillante y muy
luminoso. Vamos a medir el nivel de luz en valores luz y en
porcentajes (%). De un total de 1023 nmeros enteros, 0
representa el 0 % y 1023 representa el 100%.

Medir distancias utilizando el sensor ultrasnico HC-SR04. El


sensor consigue todo enviando un ultrasonido (inaudible
para el odo humano por su alta frecuencia) a travs de uno
de la pareja de cilindros que compone el sensor (un
transductor) y espera a que dicho sonido rebote sobre un
objeto y vuelva, retorno captado por el otro cilindro.
Este sensor en concreto tiene un rango de distancias
sensible entre 3cm y 3m con una precisin de 3mm.

Medir la temperatura y humedad utilizando el sensor de


temperatura y humedad DHT11 o DHT22.

Y todos los datos obtenidos de los sensores vamos a


mostrarlos en una pantalla LCD 16X2.

2. Teora:
Cmo funciona un fotoresistor LDR?
Matemticamente, la relacin entre la iluminancia
resistencia de una LDR sigue una funcin potencial.

la

Siendo R0 la resistencia a una intensidad I0, ambas conocidas.


La constante gamma es la pendiente de la grfica logartmica, o
la prdida de resistencia por dcada. Su valor tpicamente 0.5 a
0.8.
Estos valores pueden ser obtenidos del datasheet del
componente. Por ejemplo, para la familia GL55 de fotoresistores
son los siguientes:

Mode
lo

GL55
16
GL55
28
GL55
37-1
GL55
37-2
GL55
39
GL55
49

Volta

Temperat

je

ura

(V)

(C)

Pico
espect
ral
(nm)

Resiste
ncia
oscurid
ad
(K)

Resiste

Tiemp

ncia
luz

Gam

brillant

ma

o
respue
sta
(ms)

(K)

150

-30+70

540

5-10

500

0.5

30

150

-30+70

540

10-20

1000

0.6

25

150

-30+70

540

20-30

2000

0.6

25

150

-30+70

540

30-50

3000

0.7

25

150

-30+70

540

50-100

5000

0.8

25

150

-30+70

540

100-200

10000

0.9

25

Sin embargo, siempre existirn pequeas variaciones entre


dispositivos, incluso dentro de la misma familia, debidos a la
fabricacin del componente.

El comportamiento potencial hace que estas pequeas


diferencias supongan grandes variaciones en la medicin, por lo
que no es posible, en general, emplear estos valores de forma
absoluta sin un proceso de calibracin.

Qu recibimos en el sensor de ultrasonido?


El tiempo que transcurre entre el envo y la recepcin del
ultrasonido.
Cmo vamos a traducir dicho tiempo en distancia?
Aprovechando que la velocidad de dicho ultrasonido en el aire
es de valor 340 m/s, o 0,034 cm/microseg (ya que trabajaremos
con centmetros y microsegundos). Para calcular la distancia,
recordaremos que v=d/t (definicin de velocidad: distancia
recorrida en un determinado tiempo).
De la frmula anterior despejamos d, obteniendo d=vt, siendo
v la constante anteriormente citada y t el valor devuelto por el
sensor a la placa Arduino.
Tambin habr que dividir el resultado entre 2 dado que el
tiempo recibido es el tiempo de ida y vuelta.
Para qu sirven los sensores de temperatura y
humedad DHT11 y DHT22?
El DHT11 y DHT22 son sensores que proporciona una salida de
datos digital. Entre sus ventajas podemos mencionar el bajo
coste y el despliegue de datos digitales. Esto supone una gran
ventaja frente a los sensores del tipo anlogo, como el LM335
por ejemplo, en los cuales las fluctuaciones en el voltaje alteran
la lectura de datos.
Entre las desventajas pues, el DHT11 solo lee enteros, no
podemos leer temperaturas con decimales por lo que tenemos
que pensarlo muy bien a la hora de utilizar este sensor para
trabajos en los que se requieran lecturas precisas de
temperatura y/o humedad. En fin, vamos a lo que vamos. Para
poder leer datos desde este sensor de una forma sencilla
necesitamos descargar una librera que ha sido escrita para
este propsito.

3. Cdigo utilizado:
#include <LiquidCrystal.h>
LiquidCrystal lcd(11, 10, 5, 4, 3, 2);

#include "DHT.h" //cargamos la librera DHT


#define DHTPIN 2 //Seleccionamos el pin en el que se //conectar el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que ser usada por
Arduino para comunicarse con el sensor

// cara sonriente
byte newChar6[8] = {
B00000,
B01010,
B01010,
B01010,
B00000,
B10001,
B01110,
B00000
};

//Varibles para LDR


const long A = 1000;
const int B = 15;

//Resistencia en oscuridad KO
//Resistencia a la luz (10 Lux) KO

const int Rc = 10;

//Resistencia calibracion KO

//Variables leds
const int led1= 6;
const int led2=7;
const int led3=8;
const int led4=9;

//Estas son las variables para el sensor ultrasnico


long distancia;
long tiempo;

void setup() {
Serial.begin(9600);
dht.begin(); //Se inicia el sensor
lcd.createChar(5, newChar6);
lcd.begin(16, 2);
lcd.print("Iniciando");
delay(500);
lcd.print(".");
delay(500);
lcd.print(".");
delay(500);
lcd.print(".");
delay(500);
lcd.print(".");
delay(500);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("BIENVENIDO A");
delay(1000);
lcd.setCursor(4, 1);

lcd.print("ROBOTICA");
delay(1000);
lcd.clear();
lcd.setCursor(7, 0);
lcd.write(5); // Dibuja la cara sonriente
delay(1000);

pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(13, OUTPUT); /*activacin del pin 9 como salida: para el pulso
ultrasnico*/
pinMode(12, INPUT); /*activacin del pin 8 como entrada: tiempo del
rebote del ultrasonido*/
}

void loop(){

lcd.clear();
lcd.setCursor(5, 0);
lcd.print("MENU:");
lcd.setCursor(0, 1);
lcd.print("1.LUZ");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("2.DISTANCIA");
lcd.setCursor(0, 1);
lcd.print("3.TEMPERATURA");
delay(2000);

if (Serial.available() > 0){


char serVal = Serial.read();
int c = 1;
if (serVal == '1'){
while(c < 20){
//El siguiente cdigo proporciona una lectura del nivel de iluminacin
recibido. Observar que los clculos se realizan con aritmtica de enteros,
evitando emplear nmeros de coma flotante, dado que ralentizan mucho la
ejecucin del cdigo.

int sensorValue = analogRead(A0);

//ilum = ((long)(1024-V)*A*10)/((long)B*Rc*V);
nivel de iluminacin recibida

// Formula utilizada para

int level = ((long)sensorValue*A*10)/((long)B*Rc*(1024-sensorValue));

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nivel: ");
lcd.print(level);
lcd.print(" Lux");
lcd.setCursor(0, 1);

if ((level >= 0) && (level <= 5))


{
lcd.print("Muy oscuro");
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
else if ((level > 5) && (level <= 10))
{

lcd.print("Oscuro");
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
else if ((level > 10) && (level <= 50))
{
lcd.print("Brillante");
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
digitalWrite(led4,LOW);
}
else
{
lcd.print("Muy brillante");
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
digitalWrite(led4,HIGH);
}
delay(500);
c = c + 1;
}
}
else if (serVal == '2'){
while(c < 20){
lcd.clear();
digitalWrite(13,LOW); /* Por cuestin de estabilizacin del sensor*/
delayMicroseconds(5);
digitalWrite(13, HIGH); /* envo del pulso ultrasnico*/

delayMicroseconds(10);
tiempo=pulseIn(12, HIGH); /* Funcin para medir la longitud del pulso
entrante. Mide el tiempo que transcurrido entre el envo
del pulso ultrasnico y cuando el sensor recibe el rebote, es decir: desde
que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia= int(0.017*tiempo); /*frmula para calcular la distancia
obteniendo un valor entero*/
/*Monitorizacin en centmetros por el monitor serial*/
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.setCursor(4, 1);
lcd.print(distancia);
lcd.println(" cm ");
delay(500);
c = c + 1;
}
}
else if (serVal == '3'){
while(c < 20){
float h = dht.readHumidity(); //Se lee la humedad
float t = dht.readTemperature(); //Se lee la temperatura
//Se imprimen las variables
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.println(h);
lcd.setCursor(0, 1);
lcd.print("Humed: ");
lcd.println(h);
delay(500);
c = c + 1;
}

4. Diagr
ama
en el

simulador:
5. Link del simulador para revisin:
https://circuits.io/circuits/2415994-multisensor-ypantalla-lcd-16x2-robotica/

Potrebbero piacerti anche