Projeto 92 - Criando um relógio digital com OLED SSD1306, módulo DS3231 e Arduino

Básico - Projeto 92

Criando um relógio digital com Oled SSD1306 - bibliotecas Adafruit

Objetivo

O objetivo neste projeto é criar um relógio digital usando um display OLED junto com o Real Time Clock (RTC) DS3231. Utilizaremos display OLED 0.96″ I2C Azul Amarelo com controlador SSD1306 e comunicação via I2C. Para o controle do relógio vamos utilizar o  módulo RTC DS3231. Também exibiremos no display a temperatura ambiente, pois o módulo possui um sensor de temperatura com precisão de aproximadamente 3ºC. Para o display OLED vamos usar as bibliotecas Adafruit e para o módulo RTC a biblioteca DS3231.

Definições

Display OLED (Organic Light-Emitting Diode, ou Diodo Emissor de Luz Orgânico): Display gráfico com alto contraste, excelente nitidez, leve e muito econômico, pois como possui luz própria não precisa de backlight utilizado nas telas de LCD ou LED, por exemplo. Outra grande vantagem do display OLED é possibilidade de gerar imagens. Como desvantagens, o display possui uma vida útil menor (entre 10mil e 40mil horas de uso) e não deve ser utilizado em locais úmidos, pois a água danifica facilmente o componente. Para saber mais leia Projeto 90 - Como controlar um Display OLED SSD1306 com Arduino - biblioteca Adafruit. No tutorial você saberá como usar todos os recursos do display OLED SSD1306 via I2C.

Atenção: Não utilize o display em locais molhados ou úmidos, pois a água pode danificar o componente.

Módulo RTC DS3231 de alta precisão: O Real Time Clock (RTC) DS3231 é um relógio de tempo real de alta precisão e baixo consumo de energia. Em sua placa vem embutido um sensor de temperatura, um gravador de dados EPROM e um cristal oscilador para melhorar sua exatidão.

Observações sobre o módulo RTC DS3231:

1) Assim como o display OLED SSD1306 mencionado acima, o módulo RTC DS3231 utiliza também o protocolo de comunicação I2C. O I2C é um protocolo de baixa velocidade de comunicação criado pela Philips para comunicação entre placa mãe e dispositivos, Sistemas Embarcados e circuitos de celulares.

2) É capaz de fornecer informações como segundo, minutos, dia, data, mês e ano (de 2000 a 2099). Correções como meses com menos de 31 dias e anos bissextos são corrigidos automaticamente e pode operar tanto no formato 12 horas como 24 horas.

3) Em caso de falha de energia o DS3231 automaticamente aciona a bateria para evitar perda de dados.

4) Possui um sensor de temperatura com precisão de 3ºC.

Aplicação

Para fins didáticos e projetos onde é necessária a exibição de figuras plotadas a partir de uma imagem em bitmap (telas iniciais de logotipos de empresa e gráficos para exibir informações).

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Display OLED

Display OLED SSD1306

1 Tarzan Componentes Eletrônicos | Shield Arduino| Display Oled 1.3 Polegadas  Branco 125x64 I2c - R$ 51,90

 

– Tensão de operação: 3,3-5V
– Controlador: SSD1306
– Cor: Azul e Amarelo
– Comunicação: I2C
– Resolução: 128×64
– Dimensões: 30 x 27mm

Você também poderá utilizar na cor azul, branco ou colorido.

A comunicação poderá ser I2C ou SPI

Módulo RTC Módulo RTC DS3231 1

Módulo de alta precisão com comunicação I2C.

Tensão de operação: 3,3V - 5,0V

Chip de memória: AT24C32 de 32K bytes

Computa segundos, minutos, horas, dias da semana, dias do mês, meses e anos (de 2000 a 2099)

Consumo menor que 500nA no modo bateria

(datasheet)

Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo (display OLED com comunicação I2C). Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.


Atenção

1. Para a montagem do display OLED SSD1306 via protocolo I2C, verifique a "pinagem" do módulo com comunicação I2C:

 

Observações:

a. Em algumas marcas os pino Vcc e GND estão invertidos. Portanto, preste muita atenção antes de fazer a conexão com o Arduino.

b. Caso o utilize um display OLED por comunicação via serial SPI veja como é feita a conexão no Projeto 90 - Como controlar um Display OLED SSD1306 com Arduino - biblioteca Adafruit.

1.1. Faça a conexão dos pinos SCL e SDA com o Arduino da seguinte forma:

MICROCONTROLADOR SCL SDA
 Arduino Uno A5 A4
 Arduino Nano A5 A4
 Arduino Mega 21 20
 Leonardo/Micro 3 2

1.2. No nosso projeto utilizamos um display OLED SSD1306 I2C e Arduino Uno.

2. Utilizamos neste projeto o módulo RTC DS3231 que permite um controle  completo e preciso de tempo. Para conectar o módulo é necessário conhecer um pouco a estrutura do componente:

2.1. Observe na imagem acima que em uma extremidade do módulo existem 6 pinos de conexão, sendo:

2.1.1. Os pinos 1 e 2 se referem à alimentação 3.3V ou 5V (GND e Vcc).

2.1.2. Os pinos 3 e 4 devem ser utilizados para a comunicação I2C (SDA e SCL) e deverão estar conectados nos pinos analógicos A4 (SDA) e A5 (SCL) do Arduino Uno ou nos pinos A20 (SDA) e A21 (SCL) do Arduino Mega 2560, da mesma forma que o display OLED.  

2.1.2.1. Faça a conexão dos pinos SCL e SDA com o Arduino da seguinte forma:

MICROCONTROLADOR SCL SDA
 Arduino Uno A5 A4
 Arduino Nano A5 A4
 Arduino Mega 21 20
 Leonardo/Micro 3 2

2.1.3. 1.1 Os pinos 5 e 6 não são utilizados neste projeto, sendo que o pino 5 (SQW) é usado para disparo de alarmes e o pino 6 (32K) para saída de onda do cristal e é raramente utilizado

3. No nosso projeto utilizamos um display OLED SSD1306 I2C e o módulo RTC DS3232 conectados via comunicação I2C com o microcontrolador Arduino Uno. Veja abaixo como fizemos a conexão.

 

4. A montagem do nosso exemplo foi realizada em um protoboard com 400 pontos e com um display OLED SSD1306 com comunicação via protocolo I2C. Verifique sempre se o seu protoboard possui linhas de alimentação contínuas ou separadas.

Incluindo biblioteca DS3231 no IDE do Arduino

Para obtermos os valores de temperatura ambiente lidos no sensor de temperatura do RC DS3231 é necessário adicionarmos a biblioteca DS3231.h no IDE do Arduino. Para conhecer todos comandos da biblioteca veja Manual DS3231.h

  DOWNLOAD - DS3231.zip

Para saber detalhes desta biblioteca clique aqui.

Instalando a biblioteca pelo IDE do Arduino

Após fazer o download do arquivo DS3231.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Para conhecer outras bibliotecas para módulos veja a Coletânea de bibliotecas para módulos.

Incluindo as bibliotecas Adafruit SSD1306 e Adafruit GFX

Para utilizar o controlador SSD1306 vamos incluir a biblioteca Adafruit SSD1306. Esta biblioteca foi escrita para resolver a complexidade do controlador SSD1306, oferecendo comandos simples para facilitar o controle de operação do display OLED. Para obtermos uma experiência completa, precisamos instalar também a biblioteca Adafruit GFX para exibir elementos gráficos primitivos como pontos, linhas, círculos, retângulos, etc.

Instalação das bibliotecas

1. No IDE do Arduino, acesse a aba Sketch, selecione [Incluir Biblioteca] e depois [Gerenciar Bibliotecas...].


2. No campo de pesquisa digite ssd1306 adafruit. Localizada a biblioteca Adafruit SSD1306 clique no botão [Instalar].

 

3. Na janela "Dependencies for library Adafruit SSD1306..." clique no botão [Install all]. Desta forma, instalaremos as bibliotecas Adafruit SSD1306, Adafruit GFX library e Adafruit BusIO todas juntas automaticamente.

4. Após a instalação, observe que aparecerá a informação que as bibliotecas foram instaladas. (Lembre-se que precisaremos das bibliotecas Adafruit SSD1306 e Adafruit GFX Library para controlar nosso display OLED)>

Código do Projeto (Sketch)

1. Faça o download e abra o arquivo projeto92.ino no IDE do Arduino: DOWNLOAD - projeto92.ino

Observações:

a)  Ao utilizar o RTC pela primeira vez é necessário ajustar a hora e data com os valores atuais: retire as barras duplas das linhas 29, 30 e 31 para executar a função que vai ajustar a data e hora atual. do seu módulo.

b) Se você já utilizou o seu módulo RTC em qualquer outro projeto e já ajustou a hora e data, não precisará mais fazer este ajuste, a não ser que a hora exibida no display esteja desatualizada.

2. Se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************

     Projeto 92 - Relógio digital com display OLED e módulo RTC 
     Autor: Angelo Luis Ferreira
     Data: 12/01/2020
             http://squids.com.br/arduino

*******************************************************************************/
#include <DS3231.h> // biblioteca RTC
#include <SPI.h> // caso utilize comunicação SPI
#include <Wire.h> // biblioteca requerida para I2C
#include <Adafruit_GFX.h> // biblioteca OLED
#include <Adafruit_SSD1306.h> // biblioteca OLED

DS3231  rtc(SDA, SCL); // cria o objeto rtc

// configuração do display OLED
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
   Serial.begin(9600); // inicializa o monitor serial (usado para testes)
  
  rtc.begin(); // inicializa o RTC
  // **** Altere as linhas abaixo para ajustar a hora e data do RTC ********
  //rtc.setDOW(TUESDAY);       // Altere o dia da semana SUNDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY e SATURDAY
  //rtc.setTime(19, 36, 0);    // Altere o tempo: hora, minutos, segundos (formato de 24 horas)
  //rtc.setDate(24, 1, 2019);  // Dia, mês, Ano


  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicializa a comunicação I2C do OLED end 0X3C

  // Clear the buffer.
  display.clearDisplay();
  display.display();

  // teste RTC - exibir no monitor serial
  Serial.println(rtc.getDateStr()); 
  Serial.println(rtc.getDOWStr());
  Serial.print(rtc.getTemp());
  Serial.println(" ºC");
  Serial.print("Hora: ");
  Serial.print(rtc.getTimeStr());}

void loop() {
  // Display Text - Temperatura
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print(rtc.getTemp());
  display.print(" ");
  display.write(247);
  display.print("C");

  // Display Text - Dia da semana
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(74, 0);
  display.print(rtc.getDOWStr());

  // Desenha borda do relógio (com cantos arredondados)
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.drawRoundRect(0, 16, 128, 45, 8, WHITE);

  // Display Text - Dia do ano
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(32, 21);
  display.print(rtc.getDateStr());
  
  // Display Text - Hora
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(13, 37);
  display.print(rtc.getTimeStr());

  // exibe no display
  display.display();
  
  // limpa o display
  display.clearDisplay();
 }

Vídeo

Como o projeto deve funcionar

1. Ao iniciar o programa, você irá visualizar no display a temperatura, dia da semana em inglês, data e horário (hora, minutos e segundos).

2. Para alterar ajustar a hora e/ou a data do relógio, altere o programa do projeto sendo:

2.1. Retire as barras duplas de comentário das linhas 29, 30 e/ou 31 para executar a função que vai ajustar a data e hora do seu módulo.

2.2. Altere os valores desatualizados descritos no sketch.

Obs.: Somente altere os dados novamente no caso de precisar substituir a bateria do módulo, que deve durar aproximadamente 5 anos, ou se ocorrer alguma desatualização da hora ou data.

2.3. Após o ajuste para configurar a hora e data atuais, desligue o Arduino da fonte e altere novamente o sktech, inserindo as duas barras nas linhas de comando 66, 67 e/ou 68.

2.4.  Pronto, agora rode o programa novamente para visualizar a hora, data e temperatura ambiente atualizados. Se acabar a energia elétrica ou se você desligar o Arduino, a hora e data estarão sempre atualizadas graças a bateria que vem acoplada ao módulo RTC.

Desafios

Com base neste projeto, resolva o seguinte desafio:  Desafio 82

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores