Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Relógio Meteorológico Arduino em Tempo Real: Display OLED para Hora, Data e Temperatura

Componentes e Materiais

Arduino UNO × 1
RTC Adafruit DS3231 × 1
Pmod OLED Digilent × 1
Sensor de Temperatura LM35 (Texas Instruments) × 1
Jumpers (genéricos) × 1
Protoboard (genérica) × 1

Sobre o Projeto

Vamos fazer um relógio meteorológico Arduino que nos dirá a hora, data e temperatura. O sensor LM35 nos dará a temperatura, o DS3231 nos dirá a data e a hora, e usaremos o OLED para exibir a temperatura, data e hora.

Componentes Necessários

lm35.pdf

Diagrama de Circuito

Primeiro, conecte o OLED ao Arduino. O OLED funciona com o Arduino através de comunicação SPI e I2C, mas conectamos usando comunicação SPI. Os pinos SPI no Arduino são 8, 9, 10, 11 e 13. As conexões do OLED com o Arduino são:

Depois, conecte o módulo DS3231 ao Arduino. O módulo DS3231 funciona com o Arduino através de comunicação I2C. Os pinos para I2C no Arduino são SDA e SCL. Conecte o módulo DS3231 ao Arduino assim:

Por fim, conecte o sensor LM35 ao Arduino. Conecte o pino esquerdo do LM35 ao 5V no Arduino, o pino do meio ao A0 no Arduino e o pino esquerdo ao terra no Arduino.

Relógio Meteorológico Arduino em Tempo Real: Display OLED para Hora, Data e Temperatura

Você pode encontrar um esquemático em tamanho real aqui

Explicação do Código

Primeiro, adicionamos as bibliotecas para o módulo DS3231 e o OLED. A biblioteca Adafruit para o OLED tem mais funções comparada a outras bibliotecas usadas para OLEDs.

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

Em seguida, definimos os pinos onde conectamos o módulo DS3231 e o OLED. O módulo DS3231 funciona com o Arduino através de comunicação I2C, então usamos os pinos SDA e SCL do Arduino. O OLED funciona com o Arduino através de comunicação SPI. Portanto, inicializamos os pinos 8, 9, 10, 11, 13 que são para comunicações SPI. Depois, inicializamos o pino do sensor LM35 e outras variáveis.

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;

Na função setup, declaramos o pino do sensor LM35 como entrada porque o Arduino lerá a entrada do sensor. Então demos o comando para DS3231 e OLED começarem a comunicar com o Arduino.

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

As linhas abaixo estão comentadas no código, mas se você estiver usando o módulo DS3231 pela primeira vez e quiser definir o dia, data e hora, descomente estas linhas e defina.

// rtc.setDOW(WEDNESDAY); // Definir Dia-da-Semana para QUARTA-FEIRA
// rtc.setTime(19, 02, 0); // Definir hora para 19:02:00 (formato 24h)
// rtc.setDate(7, 12, 2017); // Definir data para 7 de dezembro de 2017

Então imprimimos "weather clock" no 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);

Na função loop, lemos do LM35 e calculamos a temperatura. Então obtemos a hora e data e imprimimos no 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 <DS3231.h>
#include <Adafruit_SSD1306.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); // Definir Dia-da-Semana para QUARTA-FEIRA
  // rtc.setTime(19, 02, 0); // Definir hora para 19:02:00 (formato 24h)
  // rtc.setDate(7, 12, 2017); // Definir data para 7 de dezembro de 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);
}

Código

Trecho de Código #4

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);

Trecho de Código #5

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());

Trecho de Código #6 (Código Completo)

#include <DS3231.h>
#include <Adafruit_SSD1306.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); // 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
  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

Relógio Meteorológico Arduino em Tempo Real: Display OLED para Hora, Data e Temperatura

Processo de manufatura

  1. Crie Efeitos de Áudio Controlados por Sensores com o Kit Satellite CCRMA
  2. Construa um Relógio Retrô Numitron com Arduino: Simples, Confiável e Eficiente
  3. Relógio em Tempo Real com Arduino para Horários de Oração Islâmica
  4. Construa o Clássico Jogo Pong no Arduino UNO com Display OLED – Tutorial Passo a Passo
  5. Relógio de Palavras de Precisão: Exibição de Tempo em Palavras com Resolução de Minuto
  6. Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
  7. Monitor de Temperatura e Relógio Tempo Real com Arduino Due e Display TFT 3.2"
  8. Construa um Relógio de Berlim com Arduino UNO – Relógio DIY de Matriz LED
  9. Projeto HMI Interativo com Nextion, Arduino Mega e Sensores
  10. Construa um Relógio Despertador Confiável com RTC DS1302 e Arduino UNO