Exibição de temperatura OLED do Arduino com relógio em tempo real
Componentes e suprimentos
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 |
Sobre este projeto
Vamos fazer um relógio meteorológico Arduino que nos dirá a hora, a data e a 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
Os componentes necessários para este projeto são os seguintes
- Arduino
- DS3231 (módulo de relógio em tempo real)
- Tela OLED (um SSD1306 foi usado aqui)
- SSD1306.pdf
- Lm35
- Fios de conexão
- Placa de ensaio
Diagrama de circuito
Em primeiro lugar, conecte o OLED ao Arduino. O OLED funciona com o Arduino por meio da comunicação SPI e também da comunicação I2C, mas nós o conectamos usando a comunicação SPI. Os pinos SPI no Arduino são os pinos 8, 9, 10, 11 e 13. As conexões do OLED com o Arduino são as seguintes:
- Conecte o CS do OLED ao pino 10 do Arduino.
- Conecte o DC do OLED ao pino 9 do Arduino.
- Conecte o RES do OLED ao pino 8 do Arduino.
- Conecte D1 do OLED ao pino 11 do Arduino.
- Conecte D0 do OLED ao pino 13 do Arduino.
- Conecte o VCC do OLED ao pino 5V do Arduino.
- Conecte o GND do OLED ao pino GND do Arduino.
Depois disso, conecte o módulo DS3231 ao Arduino. O módulo DS3231 funciona com o Arduino por meio de comunicação I2C. Os pinos para comunicação I2C no Arduino são SDA e SCL. Conecte o módulo DS3231 ao Arduino da seguinte maneira:
- Conecte o GND do DS3231 ao pino GND do Arduino.
- Conecte o VCC do DS3231 ao pino 5V do Arduino.
- Conecte o SDA do OLED ao A4 no Arduino.
- Conecte o SCL no OLED ao pino A5 no Arduino.
No final, conecte o sensor LM35 ao Arduino. Conecte o pino esquerdo do LM35 a 5 V no Arduino, o pino do meio no A0 no Arduino e o pino esquerdo no aterramento no Arduino.

Você pode encontrar um esquema em tamanho real aqui
Explicação do código
Em primeiro lugar, adicionamos as bibliotecas do módulo DS3231 e do OLED. A biblioteca Adafruit para OLED tem mais funções em comparação com outras bibliotecas usadas para OLEDs.
#include #include
A seguir, definimos os pinos onde conectamos o módulo DS3231 e o OLED. O módulo DS3231 funciona com o Arduino por meio da comunicação I2C, portanto, usamos os pinos SDA e SCL do Arduino. O OLED funciona com o Arduino por meio de comunicação SPI. Portanto, inicializamos os pinos 8, 9, 10, 11, 13 que são para as comunicações SPI. Depois disso, 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 Visor Adafruit_SSD1306 (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); const int sensor_pin =A0; float temp; saída flutuante;
Na função de configuração, declaramos o pino do sensor LM35 como entrada porque o Arduino pegará a entrada do sensor. Em seguida, demos o comando ao DS3231 e ao OLED para iniciar a comunicação com o Arduino.
pinMode (sensor_pin, INPUT); rtc.begin (); display.begin (SSD1306_SWITCHCAPVCC);
As linhas abaixo são comentadas no código, mas se você estiver usando o módulo DS3231 pela primeira vez e quiser definir o dia, a data e a hora, descomente essas linhas e defina-as.
//rtc.setDOW(WEDNESDAY); // Defina o dia da semana como DOMINGO //rtc.setTime(19, 02, 0); // Defina a hora para 12:00:00 (formato de 24 horas) //rtc.setDate(7, 12, 2017); // Defina a data para 6 de junho de 2017
Em seguida, imprimimos o “relógio do tempo” no OLED por 5 segundos.
display.clearDisplay (); display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0,0); display.print ("Tempo"); display.setCursor (0,17); display.print ("Relógio"); display.display (); atraso (5000);
Na função de loop, lemos no LM35 e calculamos a temperatura. Em seguida, obtemos a hora e a data e imprimimos no OLED.
output =analogRead (sensor_pin); temp =(saída * 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 ());
Código Arduino completo
#include #include DS3231 rtc (SDA, SCL); # define OLED_MOSI 11 # define OLED_CLK 13 # define OLED_DC 9 # define OLED_CS 10 # define OLED_RESET 8Adafruit_SSD1306 display (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET),; const int sensor_pin =A0; temperatura flutuante; saída flutuante; configuração void () {pinMode (sensor_pin, INPUT); rtc.begin (); display.begin (SSD1306_SWITCHCAPVCC); //rtc.setDOW(WEDNESDAY); // Defina o dia da semana como DOMINGO //rtc.setTime(19, 02, 0); // Defina a hora para 12:00:00 (formato de 24 horas) //rtc.setDate(7, 12, 2017); // Defina a data para 6 de junho de 2017 display.clearDisplay (); display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0,0); display.print ("Tempo"); display.setCursor (0,17); display.print ("Relógio"); display.display (); atraso (5000);} void loop () {output =analogRead (sensor_pin); temp =(saída * 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 (); atraso (1000);}
Código
- Snippet de código 4
- Snippet de código # 5
- Snippet de código # 6
Snippet de código # 4 Texto simples
display.clearDisplay (); display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0,0); display.print ("Tempo"); display.setCursor (0,17); display.print ("Relógio"); display.display (); atraso (5000);
Snippet de código # 5 Texto simples
saída=analogRead (sensor_pin); temp =(saída * 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 ());
Snippet de código # 6 Texto simples
#include #include DS3231 rtc (SDA, SCL); # define OLED_MOSI 11 # define OLED_CLK 13 # define OLED_DC 9 # define OLED_CS 10 # define OLED_RESET 8Adafruit_SSD1306 display (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, constD_C sensor_pin =A0; temperatura flutuante; saída flutuante; configuração void () {pinMode (sensor_pin, INPUT); rtc.begin (); display.begin (SSD1306_SWITCHCAPVCC); //rtc.setDOW(WEDNESDAY); // Defina o dia da semana como DOMINGO //rtc.setTime(19, 02, 0); // Defina a hora para 12:00:00 (formato de 24 horas) //rtc.setDate(7, 12, 2017); // Defina a data para 6 de junho de 2017 display.clearDisplay (); display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0,0); display.print ("Tempo"); display.setCursor (0,17); display.print ("Relógio"); display.display (); atraso (5000);} void loop () {output =analogRead (sensor_pin); temp =(saída * 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 (); atraso (1000);}
Esquemas

Processo de manufatura
- Controle de um efeito com sensores reais
- DIY mais simples relógio IV9 Numitron com Arduino
- Relógio Arduino com horas de oração islâmica
- Jogo Arduino Pong - Tela OLED
- Word Clock com resolução de minutos em palavras
- Relógio mestre
- Arduino Temp. Monitor e relógio em tempo real com tela 3.2
- Relógio de Berlim
- Brincando com Nextion Display
- Despertador simples com DS1302 RTC