Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Mecanismo medidor de
iluminación, radiación y
CO2
Integrantes:
- Pérez Contreras Carlos Giovanni
- Reyes Avelino Uzzyel Samael
- Reyes Tablas Matsuri Romario
- Salgado Morales Aldo
- Bello Estrada Oscar Daniel
- Vara Espinoza Cristopher Aleksei
Mecatrónica 4-E
Introducción y Objetivo
El proyecto a desarrollar se basa en un dispositivo portátil y maniobrable que sea
capaz de medir y mostrar información acerca de la iluminación, el CO2 del
ambiente, y que mida la radiación, utilizando múltiples sensores programados por
medio de Arduino, todo aquello se desea reunir en un aparato que contengan una
pantalla LCD donde se despliegue la información de las variables que requieran
medir, contando también con un menú selector el cual, el usuario pueda elegir
entre los tipos de variables que se integren al mecanismo y poder almacenar estos
datos por medio de una memoria SD. Se implementan sensores específicos que
detecten y manden la medición de dichas variables, y la fuente de alimentación
para los módulos y el programador. El propósito del desarrollo del proyecto es
tener un mejor control en el ambiente o de un determinado lugar, en este caso,
sobre un invernadero, donde el dispositivo actuará sobre el ambiente de este,
captando la iluminación, la calidad del aire a la que las plantas se exponen y la
radiación expuesta a estas. De esta manera se obtendrá conocimiento acerca de
la medición de ciertas variables utilizando lenguaje de programación y conocer las
especificaciones para cada medidor de variable.
Este documento dará a conocer al usuario los diferentes componentes que este
mecanismo contiene, así como las conexiones de cada uno en la tarjeta
programable Arduino, los costos de cada material y la programación llevada a
cabo para la captación y registro de datos.
Planeación
Materiales y costos.
Material Costo
Modulo BH1750 $63.00 pesos
- Rohm Semiconductor.
- Voltaje de operación: 5 V
- Corriente de operación: 150mA
- Detección de: Amoníaco (NH3), Óxidos de nitrógeno (NOx), Alcohol, Sulfuros,
Benceno (C6H6), Monóxido de carbono (CO) y humo.
- Sensibilidad:
- 10 – 300 ppm Amoníaco (NH3) y Alcohol.
- 10 – 1000 ppm Benceno.
- Consumo de potencia calorífica ≤ 800mW
- Temperatura de operación: -20°C~70°C
- Humedad de operación: <95%RH
- Tamaño: 32mm x 22mm x 24mm.
- Peso: 8 g
Especificaciones técnicas:
Luminosidad.
El sensor de luminosidad a utilizar se trata del BH1750, su ventaja está en que
por su propia cuenta nos entrega una, medida fija en lux, gracias a esto podemos
realizar una rápida interpretación de los datos arrojados por el dispositivo.
PPFD∗HORAS∗3 ´ 600
x=
1 ´ 000 ´ 000
Radiación UV.
La radiación UV es la medida de radiación fuera del espectro visible, esta es una
parte importante para los procesos energéticos y morfogénicos en las plantas.
La correcta cantidad de radiación UV es importante ya que en cantidades mínimas
o excedidas esta puede matar a las plantas, por suerte su interpretación es
bastante sencilla pues contamos con tablas y valores que nos indica la media de
valores de la escala típica de la radiación UV y, gracias a estas, podremos
interpretarlas en el sensor, a esto se le conoce como factor UV y para calcularlo es
necesario conocer la altura al nivel del mar del sitio donde te encuentras y la
cantidad de nubes del cielo.
Parte del proceso, fue establecer los pines para cada modulo utilizado y el material
externo para maniobrar dentro del sistema a implementar para la selección de la
variable a medir, a continuación, se muestra una serie de tablas mostrando cada
componente con su pin asignado del Arduino.
PIN VCC 5V
PIN VCC 5V
Código de programación
// Bibliotecas de control
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f, 16, 2);
#include <BH1750.h>
#include <SD.h>
#include <SPI.h>
#include <Wire.h>
// Declaramos componentes
BH1750 sensor;
File file;
String texto = "*";
int interfas;
int menu = 0;
int save = 0;
int saveA = 0;
int Up = A1;
int Dwn = A2;
int Select = A0;
int UV = 0;
int indice_uv = 0;
int chip = 0;
int sensorValue;
//Retorno
void(*resetSoftware)(void) = 0;
//inicia el setup
void setup() {
// control basico del dispositivo
lcd.init();
lcd.backlight();
SD.begin();
Wire.begin();
sensor.begin();
// presentación
lcd.setCursor(0, 0);{
lcd.print("Selecciona el");
}
lcd.setCursor(0, 1);
lcd.print("tipo de lectura");
// inicio del modulo SD
while(!Serial){
;
}
lcd.setCursor(0, 0);
if(!SD.begin()){
lcd.setCursor(0, 1);
lcd.print("Fallo");
return;
}
lcd.setCursor(0, 1);
lcd.print("Listo");
File dataFile = SD.open("datalog.txt", FILE_WRITE); //nombre del archivo SD
dataFile.print("Datos del dispositivo:\n");
dataFile.close();
SD.remove("Analog.txt");
lcd.clear();
//////////////////////////////////
delay(2000);
lcd.clear();
}
//inicio dle loop
void loop() {
interfas:
while(true){
//control del menu
if(digitalRead(Up)){
menu++;
if(menu >= 4){
menu = 4;
}
delay(300);
}
if(digitalRead(Dwn)){
menu--;
if(menu <= 0){
menu = 0;
}
delay(300);
}
if(digitalRead(Select)){
lcd.clear();
delay(300);
break;
}
switch (menu){
// interfas del menu
case 0:
lcd.setCursor(0,0);
lcd.print("1 - Luz < ");
lcd.setCursor(0,1);
lcd.print("2 - Rad. UV ");
break;
case 1:
lcd.setCursor(0,0);
lcd.print("1 - Luz ");
lcd.setCursor(0,1);
lcd.print("2 - Rad. UV < ");
break;
case 2:
lcd.setCursor(0,0);
lcd.print("3 - CO2 < ");
lcd.setCursor(0,1);
lcd.print("4 - Save ");
break;
case 3:
lcd.setCursor(0,0);
lcd.print("3 - CO2 ");
lcd.setCursor(0,1);
lcd.print("4 - Save < ");
break;
}
}
switch (menu){
case 0:
while(true){
//control del modulo de lux
unsigned int lux = sensor.readLightLevel();
lcd.setCursor(0,0);
lcd.print("Luz:");
lcd.setCursor(4,0);
lcd.print(lux);
lcd.setCursor(13,0);
lcd.print(" lx");
delay(500);
if(digitalRead(Select)){
resetSoftware();
break;
}
}
break;
case 1:
while(true){
//control del modulo UV
UV = analogRead(A15);
delay(700);
lcd.setCursor(0,0);
lcd.print("Indice UV:");
lcd.setCursor(10,0);
lcd.print(indice_uv);
lcd.setCursor(13,0);
lcd.print("nm");
if(digitalRead(Select)){
resetSoftware();
break;
}
}
break;
case 2:
while(true){
//control del modulo CO2
lcd.clear();
sensorValue = analogRead(14);
lcd.setCursor(0,0);
lcd.print("CO2:");
lcd.setCursor(4,0);
lcd.print(sensorValue, DEC);
lcd.setCursor(13,0);
lcd.print("ppM");
delay(1000);
if(digitalRead(Select)){
resetSoftware();
break;
}
}
break;
//GUARDAR
case 3:
while(true){
//control del modulo SD para este reproducimos todas las lecturas al
mismo tiempo
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Saving Data...");
lcd.setCursor(0,1);
lcd.print("2.Seg = 1.Dato");
sensorValue = digitalRead(lux);
Serial.print("Luxes: ");
Serial.print(lux);
Serial.print(" lx");
dataString += String(lux);
//////////////////////////////////
UV = analogRead(A15);
Serial.print("Indice UV:");
Serial.print(indice_uv);
Serial.print("nm");
dataStringC += String(indice_uv);
///////////////////////////////////
sensorValue = analogRead(14);
Serial.print("CO2:");
Serial.print(sensorValue, DEC);
Serial.print(" ppM");
//codigo del guardado, solo se activa si tienes la SD conectada
dataStringB += String(sensorValue, DEC);
if(dataFile){
}
else{
Serial.print("Error");
}
delay(2000);
///////////////////////////////////////////////
if(digitalRead(Select)){
resetSoftware();
break;
}
}
break;
}
}