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