Termômetro digital

Termômetro digital

Neste post será mostrado o projeto de um termômetro digital utilizando o sensor de temperatura DS1820, um dispay TFT colorido para exibir os valores da leitura do sensor, e o Arduino UNO.

O display TFT pode ser facilmente encontrado para venda na internet, o modelo utilizado aqui é o display TFT com 1.44′, mas podem ser utilizados outros modelos de tamanhos diferentes utilizando o mesmo código como base para o desenvolvimento.

Diagrama esquemático do termômetro digital

Abaixo é apresentado o diagrama esquemático do circuito.

O display possui um resistor de 100 ohms para o LED que permiti ligar diretamente na alimentação de 3,3V, mas é importante observar se o display possui o resistor para limitar a corrente antes de ligar o LED, e se atentar se a ligação está sendo feito em 3,3 V ou em 5V.

Outro detalhe importante é que o sensor de temperatura DS1820 precisa de um resistor de pullup para o sinal de dados, caso não seja adicionado o resistor o circuito não vai funcionar.

Código do termômetro digital

Abaixo é disponibilizado o código para ser utilizado no Arduino Uno.

/*
 * Definições do sensor DS1820
 */
#include <OneWire.h> 
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

/*
 * Definições do display
 */
#include <SPI.h>
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#define TFT_CS     3
#define TFT_RST    4  
#define TFT_DC     5
#define TFT_SDA    6
#define TFT_SCK    7  


Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_SDA, TFT_SCK, TFT_RST); // Instância do objeto tipo Adafruit_ST7735 que recebe como argumentos os pinos de controle do display tft

float temp = 0;

void setup() {
  tft.initR(INITR_BLACKTAB);
  tft.fillScreen(ST7735_BLACK);
  tft.setTextColor (ST7735_WHITE);
  tft.fillRect(0, 0, 128, 128, ST7735_RED); // Fundo
  tft.setCursor (105, 30);
  tft.setTextSize (2);
  tft.print ("C");
  tft.setCursor (10, 100);

  sensors.begin(); 
}

void loop() {
  sensors.requestTemperatures(); //Manda comando para o sensor
  temp = sensors.getTempCByIndex(0); // Lê a temperatura

  tft.fillRect(25, 25, 75, 30, ST7735_RED); // Parte do texto
  tft.fillRect(temp, 60, (120 - temp), 25, ST7735_GREEN);
  tft.fillRect(10, 60, temp, 25, ST7735_BLUE); // Barra
  tft.setCursor (30, 30);
  tft.setTextSize (2);
  tft.print (temp);
   
  delay (200);
}

O display TFT utiliza um controlador ST7735, e sem fazer nenhum alteração no código da biblioteca utilizada, algumas cores podem não corresponder, como por exemplo a cor de fundo que foi selecionado como BLACK pelo comando tft.fillScreen(ST7735_BLACK); mas na verdade é apresentado como BLUE.

Para que o termômetro digital funcione, é muito importante ter as bibliotecas instaladas na IDE do Ardiuno para o que o circuito funcione corretamente. Também é possível usar outros terminais para comunicação com o display, e com o sensor, tudo depende da aplicação.

Abaixo é mostrado o funcionamento do circuito:

E abaixo segue link das bibliotecas utilizadas no projeto.

https://github.com/PaulStoffregen/OneWire

https://github.com/milesburton/Arduino-Temperature-Control-Library

https://github.com/adafruit/Adafruit-GFX-Library

https://github.com/adafruit/Adafruit-ST7735-Library