Escritorio Inteligente
Antonio Aguilar Gómez G-IC
David Coronado Testa DG-II+IC
Juan José Villanueva Molina DG-II+IC
Índice
1.- Introducción
2.- Implementacióm
3.- Pasos
4.- Materiales
5.- Coste
6.- Problemas encontrados y soluciones
7.- Código
8.- Funcionamiento
9.- Casos de uso
Introducción
En el mundo actual, la tecnología desempeña un papel fundamental en la mejora de la calidad de vida y la optimización de actividades cotidianas. Este proyecto propone el desarrollo de un escritorio inteligente, que controla mediante una plataforma Arduino, mejorar la experiencia de estudio o trabajo mediante funciones de automatización y control ambiental.
El escritorio está equipado con un sistema de sensores y actuadores que lo convierten en una herramienta interactiva y funcional.Tiene un medidor de temperatura y humedad el cual calcula las condiciones ambientales en tiempo real, activando un calefactor o un ventilador según sea necesario para mantener un entorno adecuado para el estudio.Cuenta con un controlador de la iluminación, consiste en un flexo que, gracias a un fotorresistor, detecta niveles bajos de luz y se enciende automáticamente, asegurando una iluminación adecuada para el trabajo o el estudio. Contiene un LCD que muestra el tiempo acumulado dedicado al estudio o trabajo, ayudando a los usuarios a gestionar sus actividades y descansos. Además este va equipado con un sistema de altavoces que motiva al alumno a seguir estudiando o por el contrario recomienda tomar un pequeño descanso y al cabo de un determinado tiempo vuelve a recomendar volver al trabajo.
Implementación
La implementación que hemos usado ha sido en el lenguaje de Arduino. Este código ha sido subido a una placa Arduino Uno. Primero hemos hecho cada sensor individualmente y haciendo pruebas unitarias.
Comenzamos con el flexo ya que nos parecía lo más fácil, además de que ya hicimos algo similar en la práctica obligatoria previamente realizada. El código consiste en establecer un umbral de luminosidad y compararlo con el valor que nos devuelve el fotorresistor. Si este valor está por debajo encenderá el flexo para iluminar.
Seguimos probando con el sensor de humedad y temperatura, al igual que el flexo, establecimos unos umbrales en los cuales se actúa de una forma u otra. Si se superan se activa el ventilador y si el valor está por debajo se enciende el calefactor.
A continuación probamos el LCD junto con los altavoces. Para los altavoces grabamos unas pistas de audio en formato mp3 y los guardamos en una tarjeta SD. Estas pistas se activan según el tiempo que se lleve estudiando. En el LCD hacemos un cronómetro que muestra el tiempo que llevas desde que empiezas.
Al terminar todas las partes individualmente y comprobar que funcionaban correctamente, procedimos a unir todo el código y comprobar su funcionamiento junto.
Pasos
Primero tuvimos una lluvia de ideas para saber qué proyecto queríamos hacer. Como estábamos de exámenes se nos ocurrió una especie de escritorio que crease las condiciones ideales para el estudio. Primero diseñamos un boceto con la colocación de las piezas y sus medidas aproximadas. Una vez preparado el boceto del diseño,como he explicado antes, empezamos con la implementación del código. Cuando ya tuvimos todo el código junto pasamos a su colocación. Preparamos una tabla de madera para que encajasen a la perfección las piezas y se puedan pasar los cables de las zonas de control a las zonas de actuación.
Materiales
- Placa Arduino (kit).
- Cables 6 metros en total (kit + reutilizados).
- 3 Protoboards (kit + reutilizados).
- 4 Led Blancos (kit).
- Sensor de humedad y temperatura (kit).
- Resistencias de diversos valores no inferiores a 1kΩ y que pueden variar en función de la potencia deseada(kit + reutilizados).
- Potenciometro de 10 k Ω colocado en un valor intermedio, es decir unos 5k Ω.
- Cinta de doble cara(reutilizado).
- Fotorresistor (kit).
- LCD (kit).
- Lector SD (comprado).
- Altavoces (comprado).
- Ventilador (reutilizado).
- Placa calefactora (comprado).
- Tabla de madera (reutilizado).
- Estructura de flexo (comprado).
Coste
Muchos de los materiales que hemos utilizado han sido reutilizados ya sea del kit proporcionado o de material que teníamos por casa. Los únicos componentes que hemos tenido que comprar han sido los siguientes:
- 9,99€ Kit lector tarjeta microSD y altavoces de 2W
- 6,69€ Placa calefactora
- 6,99€ Estructura lámpara IKEA
- TOTAL 23,67€
Problemas encontrados y soluciones
De los principales problemas que nos hemos encontrado ha sido el material entregado por la asignatura, muchos sensores no funcionaban y había piezas que no estaban en la caja.
Con el flexo no tuvimos ningún problema más allá de que probamos tres fotorresistores y dos leds ya que no funcionaban. Con el sensor de temperatura si que tuvimos problemas ya que no sabíamos si no funcionaba correctamente o si estabas implementándolo mal. Hicimos varias pruebas y pedimos a otros grupos que no utilizaban el sensor que nos lo prestaran. Uno de esos sensores ya nos funcionaba bien aunque a veces hacía mediciones que no encajaban con la realidad. Esto lo solucionamos haciendo un delay en las mediciones. A la hora de activar el calefactor cuando el umbral quedaba por encima de la medición del sensor este requería de mucho voltaje. por lo que tuvimos que añadir una pila con un transistor para que no comprometa la funcionalidad de los demás sistemas. El ventilador funcionaba a la perfección. Con los altavoces tuvimos problemas con las pistas de audio ya que necesitaban un formato específico de mp3 que al principio no teníamos. También tuvimos que ajustar el volumen haciendo pruebas de sonido. El LCD nos dió problemas ya que al principio no mostraba nada. Implementamos un potenciómetro y ya mostraba rectángulos blancos. Implementamos el cronómetro y había un problema cuando llegaba al minuto y seguía contando los segundos. Estuvimos probando varios códigos diferentes hasta que dimos con la solución. Después de conseguir que todos los códigos funcionen individualmente procedimos a juntarlos. Al principio no funcionaba nada pero al reordenar el código conseguimos que funcionase todo a la perfección. Uno de los problemas que apareció unos dias despues de que todo el código funcionara eran los altavoces, estos hacian cortocircuito al encender el proyecto. Lo solucionamos aislando con celo. Los problemas con el hardware eran mayoritariamente la longitud de los cables. Simplemente los alargamos hasta las medidas requeridas.
Código
//LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Configuración pines LCD (RS, E, D4, D5, D6, D7).
//SENSOR DHT
#include «DHT.h»
#define DHTPIN 12 // Pin para comunicar datos del sensor DHT.
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define Calefactor 13 //Pin para activar o desactivar el calefactor.
#define ventilador 11 //Pin para activar o desactivar el ventilador.
//ALTAVOZ
#include «Arduino.h» // Incluye la biblioteca base de Arduino.
#include «DFRobotDFPlayerMini.h» // Incluye la biblioteca para el módulo DFPlayer Mini.
#include <SoftwareSerial.h> // Incluye la biblioteca para crear puertos seriales software.
SoftwareSerial Serial1(2,3); // Crea un puerto serial usando los pines 2 (RX) y 3 (TX).
DFRobotDFPlayerMini myDFPlayer; // Crea un objeto para controlar el DFPlayer Mini.
//LED
const int ldrPin = A0; // Pin del LDR
const int ledPin = 10; // Pin del LED
int ldrValue = 0; // Variable para almacenar el valor del LDR
const int threshold = 500; // Umbral para detectar poca luz
void setup() {
Serial.begin(9600); // Inicia la comunicación serial en el puerto USB a 9600 bps.
//ALTAVOZ
Serial1.begin(9600); // Inicia la comunicación serial en el puerto Serial1 a 9600 bps.
myDFPlayer.begin(Serial1); // Inicia el DFPlayer Mini en el puerto Serial1.
myDFPlayer.volume(15); // Establece el volumen a 15.
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL); // Establece el ecualizador a normal.
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); // Selecciona la tarjeta SD como dispositivo de salida.
//LCD
lcd.begin(16, 2); // Pantalla de 16×2 caracteres
lcd.print(«Llevas estudiado»);
//LED
pinMode(ledPin, OUTPUT); // Configurar el LED como salida
//SENSOR DHT
dht.begin(); // Iniciamos el dht
pinMode (Calefactor,OUTPUT);
pinMode (ventilador,OUTPUT);
}
void loop() {
//COMIENZO LCD
//Calcular el tiempo transcurrido:
unsigned long elapsedTime = millis();
unsigned long seconds = elapsedTime / 1000;
unsigned long minutes = seconds / 60;
unsigned long hours = minutes / 60;
seconds = seconds % 60;
minutes = minutes % 60;
//Mostrar el tiempo en la LCD:
lcd.setCursor(0, 1);
if (hours < 10) lcd.print(«0»);
lcd.print(hours);
lcd.print(«:»);
if (minutes < 10) lcd.print(«0»);
lcd.print(minutes);
lcd.print(«:»);
if (seconds < 10) lcd.print(«0»);
lcd.print(seconds);
//ALTAVOZ
if (seconds == 10 ){
myDFPlayer.playFolder(1, 1); // Reproduce el primer archivo en el primer folder.
//Serial.println(«Reproduciendo pista 1»); // Imprime un mensaje en el monitor serial.
}
if (seconds == 20 ) {
myDFPlayer.playFolder(1, 2); // Reproduce el segundo archivo en el primer folder.
//Serial.println(«Reproduciendo pista 2»); // Imprime un mensaje en el monitor serial.
}
if (seconds == 30 ){
myDFPlayer.playFolder(1, 3); // Reproduce el tercer archivo en el primer folder.
//Serial.println(«Reproduciendo pista 3»); // Imprime un mensaje en el monitor serial.
}
//LED
ldrValue = analogRead(ldrPin); // Leer el valor del LDR
//Serial.println(ldrValue); // Imprimir el valor (opcional para depuración)
// Si el valor del LDR es menor al umbral, encender el LED
if (ldrValue < threshold) {
digitalWrite(ledPin, HIGH); // Enciende el LED
} else {
digitalWrite(ledPin, LOW); // Apaga el LED
}
//SENSOR DHT
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
if (isnan(temperatura) || isnan(humedad)) {
Serial.println(«Failed to read from DHT11 sensor!»);
return;
}
if (seconds==15) {
Serial.print(«Temperatura: «);
Serial.print(temperatura);
Serial.println(» °C»);
Serial.print(«Humedad: «);
Serial.print(humedad);
Serial.println(» %»);
}
if (temperatura < 5){
digitalWrite (Calefactor,HIGH);
digitalWrite (ventilador,LOW);
}
else if (temperatura > 10){
digitalWrite(Calefactor,LOW);
digitalWrite (ventilador, HIGH);
}
else {
digitalWrite (Calefactor,LOW);
digitalWrite (ventilador,LOW);
}
}
Funcionamiento
Casos de uso
Tiene métodos para ajustar la temperatura tanto aumentar como disminuir según lo que detecta el sensor. Esto activa un calefactor o un ventilador. Además tiene un sensor de luminosidad que enciende un flexo. También tiene unos altavoces que motivan al alumno a seguir estudiando. Posee una pantalla LCD que muestra el tiempo que lleva estudiado. Este escritorio inteligente es para aprovechar al máximo el tiempo de estudio y sacar el máximo rendimiento posible a las horas dedicadas al estudio. En general las partes del proyecto son bastante individuales y se basan en el principio de reacción frente a las señales de los sensores.