Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Reloj Meteorológico Arduino en Tiempo Real: Pantalla OLED para Hora, Fecha y Temperatura

Componentes y Suministros

Componente Cantidad
Arduino UNO 1
RTC DS3231 (Adafruit) 1
Pantalla OLED (Digilent Pmod OLED / SSD1306) 1
Sensor de Temperatura LM35 (Texas Instruments) 1
Cables jumper (genéricos) 1
Protoboard (genérica) 1

Descripción del Proyecto

Vamos a hacer un reloj meteorológico Arduino que nos indicará la hora, fecha y temperatura. El sensor LM35 nos dará la temperatura, el DS3231 nos dará la fecha y la hora, y usaremos el OLED para mostrar la temperatura, fecha y hora.

Componentes Requeridos

Diagrama de Circuito

Primero, conecte el OLED con el Arduino. El OLED funciona con Arduino mediante comunicación SPI e I2C, pero lo hemos conectado usando SPI. Los pines SPI en Arduino son 8, 9, 10, 11 y 13. Las conexiones son:

Luego, conecte el módulo DS3231 con Arduino. Funciona mediante I2C. Los pines I2C en Arduino son SDA y SCL:

Finalmente, conecte el sensor LM35 con Arduino: pin izquierdo → 5V, pin central → A0, pin derecho → GND.

Puede encontrar un esquemático a tamaño completo aquí.

Explicación del Código

Primero, añadimos las librerías para el módulo DS3231 y el OLED. La librería Adafruit para OLED tiene más funciones que otras librerías para OLEDs.

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>

Definimos los pines de conexión. El DS3231 usa I2C (pines SDA/SCL). El OLED usa SPI, así que inicializamos pines 8, 9, 10, 11, 13. Luego inicializamos el pin del LM35 y otras variables.

DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;

En setup(), declaramos el pin del LM35 como entrada. Iniciamos comunicación con DS3231 y OLED.

pinMode(sensor_pin, INPUT);
rtc.begin();
display.begin(SSD1306_SWITCHCAPVCC);

Las líneas siguientes están comentadas pero si usa el DS3231 por primera vez y quiere configurar día, fecha y hora, descoméntelas y ajústelas.

// rtc.setDOW(WEDNESDAY); // Set Day-of-Week to SUNDAY
// rtc.setTime(19, 02, 0); // Set the time to 12:00:00 (24hr format)
// rtc.setDate(7, 12, 2017); // Set the date to June 6th, 2017

Imprimimos "Weather Clock" en el OLED por 5 segundos.

display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print(" Weather ");
display.setCursor(0,17);
display.print(" Clock ");
display.display();
delay(5000);

En loop(), leemos del LM35 y calculamos la temperatura. Obtenemos hora y fecha e imprimimos en el OLED.

output = analogRead(sensor_pin);
temp = (output * 500) / 1023;
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print(rtc.getTimeStr());
display.setTextSize(1);
display.setCursor(0,15);
display.print(rtc.getDateStr());
display.setTextSize(1);
display.setCursor(70,15);
display.print(rtc.getDOWStr());
display.setTextSize(1);
display.setCursor(20,25);
display.print("Temp: ");
display.print(temp);
display.print("C");
display.display();
delay(1000);

Código Arduino Completo

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>

DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;

void setup() {
  pinMode(sensor_pin, INPUT);
  rtc.begin();
  display.begin(SSD1306_SWITCHCAPVCC);
  // rtc.setDOW(WEDNESDAY);
  // rtc.setTime(19, 02, 0);
  // rtc.setDate(7, 12, 2017);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0,0);
  display.print(" Weather ");
  display.setCursor(0,17);
  display.print(" Clock ");
  display.display();
  delay(5000);
}

void loop() {
  output = analogRead(sensor_pin);
  temp = (output * 500) / 1023;
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(20,0);
  display.print(rtc.getTimeStr());
  display.setTextSize(1);
  display.setCursor(0,15);
  display.print(rtc.getDateStr());
  display.setTextSize(1);
  display.setCursor(70,15);
  display.print(rtc.getDOWStr());
  display.setTextSize(1);
  display.setCursor(20,25);
  display.print("Temp: ");
  display.print(temp);
  display.print("C");
  display.display();
  delay(1000);
}

Esquemáticos

Diagrama de conexiones disponible en el proyecto original.

Proceso de manufactura

  1. Construya Efectos de Audio Controlados por Sensores con el Kit Satellite CCRMA
  2. Construye un reloj Numitron retro con Arduino: Simple, fiable y eficiente energéticamente
  3. Construye un reloj en tiempo real con Arduino para horarios de oración islámica
  4. Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
  5. Reloj de Palabras de Precisión: Visualización del Tiempo en Palabras Minuto a Minuto
  6. Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
  7. Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
  8. Construye un Reloj Berlín con Arduino UNO – Reloj de Matriz LED DIY
  9. Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
  10. Reloj Digital TM1637 con Configuración de Hora y Alarma - Prototipo Arduino Nano
  11. Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO