RELOJ – TERMÓMETRO DIGITAL

Proyecto del grupo 2, compuesto por Beniamin Scrobota y Fátima Ezahra Smounat Mahidar. Presentamos nuestro proyecto “Reloj-termómetro digital” desarrollado en la asignatura de Diseño de Sistemas Empotrados del grado de Ingeniería de Computadores durante el curso 2021-2022.

Introducción

Nuestro proyecto consiste en un dispositivo que mediante el uso de distintos sensores nos ofrece información sobre la hora y fecha y sobre la temperatura, humedad y luminosidad de una habitación; todo esto en una matriz LED 8×32 que está funcionando ininterrumpidamente.

Componentes utilizados

ComponenteUnidadesPrecio total
Placa Arduino1
Protoboard1
Sensor de reloj DS130216.23€
Sensor de temperatura y humedad DHT1114.79€
Matriz LED 8×3219.90€
LDR10.40€
Cables20
Batería para sensor de reloj11.50€
Resistencias3
Pila 9V15.60€
Material para caja externa16€

Herramientas

Herramienta
Sierra de arco metálica
Papel de lija
Adhesivo para madera

Hardware

Los componentes principales que hemos utilizado son:

  • Sensor de reloj DS1302: es un dispositivo electrónico en forma de circuito integrado que mide y guarda la hora real.
  • LDR: también llamado fotorresistor, es un componente electrónico cuya resistencia se modifica en función de la luz que incide sobre él.
  • Sensor de temperatura y humedad DHT11: sensor digital consistentes en un sensor capacitivo de humedad y un termistor para medir el aire circundante.
  • Matriz LED 8×32: se trata de un dispositivo de visualización consistente en una matriz de puntos donde se puede visualizar texto apagando y encendiendo puntos específicos de la matriz.

Esquema del montaje

Tenemos el siguiente circuito el cual está alimentado por una pila de 9v conectada por su polo positivo al pin Vin de la placa Arduino y conectada por su polo negativo a la parte negativa de la protoboard. A continuación tenemos el sensor de humedad y temperatura, el cual está conectado a la parte positiva y negativa de la protoboard y también al pin D8 de la placa Arduino junto a dos resistencias. El sensor de reloj está conectado a la parte positiva mediante su pin 5V, a la parte negativa mediante el pin GND y a los pines D5, D4 y D3 mediante los pines CLK, DAT (I/O) y RST (CE). El LDR está conectado mediante una resistencia a los pines positivos y negativos de la protoboard, al igual que la matriz LED mediante sus pines VCC y GND, mientras que los pines DIN, CS y CLK están conectados a los pines D11, D10 y D13 respectivamente de la placa Arduino.

Montaje

1. Montaje del circuito
2. Circuito dentro de la caja externa
3. Montaje final

Código

// librerías utilizadas:
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <DHT.h>
#include <DS1302.h>
#include <EEPROM.h>

// Conexión de pines del modulo de reloj DS1302 a la placa arduino
//RST (CE) al pin 3 del arduino
//DAT (I/O) al pin 4 del arduino
//CLK (SCLK) al pin 5 del arduino

//inicializamos el modulo de reloj DS1302
DS1302 rtc(3, 4, 5);

//matriz led
//Vcc al positivo de la placa
//Gnd al negativo de la placa
//Din al pin 11 (Mosi)
//Cs al pin 10 (SS)
//Clk al pin 13 (Sck)

#define DHTPIN 8  // Definimos el pin digital donde se conecta el sensor DHT11
#define DHTTYPE DHT11  // Dependiendo del tipo de sensor

DHT dht(DHTPIN, DHTTYPE);  // Inicializamos el sensor DHT11

const int CS = 10; // pin cs del modulo reloj a la placa del arduino
const int numMatricesVertical = 1; // Cantidad de matices led vertical
const int numMatricesHorizontal = 4; // Cantidad de matices led
const int SensorLDR= 0; //pin  LDR a a0 de placa arduino
int valorLDR=0; //inicialiazamos la variable a 0 para posteriormente asignar otro valor

Max72xxPanel matriz = Max72xxPanel(CS, numMatricesHorizontal, numMatricesVertical);  // Configuración de la matriz

String mensajeTotal = ".. ";  //tu mensajeHora
String humedad = "  H=";
String mensajeHumedad = ".. ";
String porcentajeYTemperatura = " %  T=";
String mensajeTemperatura = ".. ";
String temperatura = ".C";
String despertador = "  DESPIERTA";
String dia = "  ..";
String mes = "..";
String anio = ".. ";
String barra = "/";
String espacio = "  ";


const int rapidez = 43; //constante que representa la velocidad del paso del mensaje
const int espacioEntreLetras = 1; // Constante para calcular el espacio entre las letras
const int ancho = 5 + espacioEntreLetras; // cantitad de pixeles por cada letra escrita

byte value; // Variable de tipo byte para lectura y escritura de la memoria rom eproom del real time clock
Time t; // Variable para el tiempo 

void setup() {
  
  matriz.setIntensity(0); //configuramos el brillo de las matrices led

  /*configuramos la posición de las letras y número 
  que se mostrarán en cada una de las cuatro matrices*/
  matriz.setPosition(0, 0, 0); 
  matriz.setPosition(1, 1, 0); 
  matriz.setPosition(2, 2, 0); 
  matriz.setPosition(3, 3, 0); 

  /*configuramos el tipo de rotación de las letras y número 
  //que se mostrarán en cada una de las cuatro matrices*/
  matriz.setRotation(0, 1);   
  matriz.setRotation(1, 1);    
  matriz.setRotation(2, 1);    
  matriz.setRotation(3, 1);   

  rtc.halt(false);  // Habilita el reloj
  rtc.writeProtect(false);  // Deshabilita protección contra escritura

  value = EEPROM.read(20);  //leemos de la memoria rom eproom
  if (value = ! 1) {
    rtc.setDOW(FRIDAY);        // configuramos del día
    rtc.setTime(22, 33, 0);     // configuramos de la hora
    rtc.setDate(14, 12, 2021);   // configuramos de la fecha
    EEPROM.write(20, 1); // escribimos en la memoria rom eproom 
  }
  dht.begin();  //Iniciamos el sensor del real time clock

}

void loop() {
  
  t = rtc.getTime();  //metemos el valor de la hora que conseguimos con getTime() en la variable t
  valorLDR = analogRead(SensorLDR); //metemos el valor de la luminusidad en la variable valorLDR

  //En caso de oscuridad la intensidad descenderá a 0 y en caso de luminusidad, la intensidad subirá a valor 15
  if(valorLDR<50){
    matriz.setIntensity(0);
  }else{
   matriz.setIntensity(15);
  }

  // Leemos la temperatura en grados centígrados captada por el sensor de temp-hum
  int tem = dht.readTemperature();
  // Leemos la humedad captada por el sensor de temp-hum
  int h = dht.readHumidity();
  //leemos el dia
  int d = t.date;
  //leemos el mes
  int m  =t.mon;
  //leemos el año
  int a = t.year;

  /*guardamos las lectura de los valores anteriores en las variables de tipo String declaradas
  para obtener una cadena*/
  mensajeHumedad = h;  
  mensajeTemperatura = tem;  
  dia = d;
  mes = m;
  anio = a;

  //mostramos los mensajes en forma de scroll uniendo todos los strings que queremos mostrar y dependiendo de la hora te sale un mensaje u otro 
  if(t.hour == 7){
    mensajeTotal = rtc.getTimeStr() +espacio+ dia +barra + mes +barra+ anio +  humedad + mensajeHumedad + porcentajeYTemperatura + mensajeTemperatura + temperatura + despertador; 
  }else{
    mensajeTotal = rtc.getTimeStr() +espacio+ dia +barra+ mes + barra+anio + humedad + mensajeHumedad + porcentajeYTemperatura + mensajeTemperatura + temperatura ;  
  }

  //con este for repetimos el proceso de escritura de la cadena de caracteres de manera correcta en la matriz led 
  for (int i = 0; i < ancho * mensajeTotal.length() + matriz.width() - 1 - espacioEntreLetras; i++) {
    matriz.fillScreen(LOW);

    int letra = i / ancho;
    int x = (matriz.width() - 1) - i % ancho;
    int y = (matriz.height() - 8) / 2; //centrar el texto de manera vertical 

    while (x + ancho - espacioEntreLetras >= 0 && letra >= 0) {
      if (letra < mensajeTotal.length()) {
        matriz.drawChar(x, y, mensajeTotal[letra], HIGH, LOW, 1);
      }
      letra--;
      x = x - ancho;
    }
    matriz.write(); //Enviamos los datos para mostrarlos en la matriz.
    delay(rapidez); 
  }
}

Vídeo

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *