Nosso objetivo desta vez é
criar um programa que fará a leitura da temperatura ambiente e de qualquer
objeto que apontarmos o nosso sensor. Para tal, utilizaremos nesse projeto um
nodeMCU ESP8266, um sensor infravermelho MLX90614 e um display OLED 96”, que
exibirá os dados da temperatura.
WiFi ESP8266 NodeMcu ESP-12E
Sensor Infravermelho
Display Oled
Montagem
Em um esquema bem simples deixei
uma tabela para facilitar a visualização.
ESP8266 OLED
D5 SCL
D7 SDA
D3 RES
D4 DC
D8 CS
3,3v VCC
GND GND
MLX90614
D1 SCL
D2 SDA
3,3v VCC
GND GND
Bibliotecas
Basta acessar “Sketch >>
Incluir Bibliotecas >> Gerenciar Bibliotecas...”
Ainda, adicione também a
seguinte biblioteca “Adafruit Unified Sensor”.
Os links para download das
bibliotecas estão no PDF, disponível logo abaixo.
Adicione as seguintes bibliotecas:
Descompacte
o arquivo e cole na pasta de bibliotecas da IDE do arduino.
C:/Program
Files (x86)/Arduino/libraries
Código fonte
Começamos definindo as bibliotecas
e constantes que utilizaremos durante nosso código.
#include < Wire.h > //Biblioteca para I2C #include < SparkFunMLX90614.h > //Biblioteca para comunicação com o sensor #include < Adafruit_GFX.h > //Biblioteca para propriedades gráficas #include < Adafruit_SSD1331.h > //Biblioteca para comunicação com dipsplay OLED // pinagem para o NodeMCU ESP8266 #define sclk D5 #define mosi D7 #define cs D8 #define rst D3 #define dc D4 // definição das cores que serão utilizadas #define BLACK 0x0000 #define WHITE 0xFFFF //definição da coordenada onde escreveremos cada um dos dados #define POS_X_AMBIENTE 2 #define POS_Y_AMBIENTE 35 #define POS_X_OBJETO 2 #define POS_Y_OBJETO 55 #define POS_X_TITULO 10 #define POS_Y_TITULO 4 // construtor do objeto para comunicar com o display OLED Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, mosi, sclk, rst); //objeto responsável pela comunicação com o sensor infravermelho IRTherm sensor; //variáveis que armazenarão o valor das temperaturas lidas float tempAmbiente; float tempObjeto;
SETUP
Na função setup(),
vamos inicializar nosso objeto de comunicação com o sensor assim como o objeto
de comunicação com o display. A seguir faremos algumas configurações de cada um
deles.
void setup()
{
//Inicializa sensor de temperatura infravermelho
sensor.begin();
//Seleciona temperatura em Celsius
sensor.setUnit(TEMP_C);//podemos ainda utilizar TEMP_F para Fahrenheit //ou TEMP_K para Kelvin
//inicializa o objeto para comunicarmos com o display OLED
display.begin();
//pinta a tela toda de preto
display.fillScreen(BLACK);
//configura o tamnaho do texto que escreveremos em tela
display.setTextSize(0);
//configura a cor branca para o texto
display.setTextColor(WHITE);
//os comandos abaixo posicionam o cursor no (x,y) desejado para a seguir escrevermos em tela
display.setCursor(POS_X_TITULO, POS_Y_TITULO);
display.print("TEMPERATURA");
display.setCursor(POS_X_TITULO+20, POS_Y_TITULO+15);
display.print("(");
display.print((char)247); //símbolo de graus
display.print("C)");
display.setCursor(POS_X_AMBIENTE, POS_Y_AMBIENTE);
display.print("AMB:"); //AMBIENTE
display.setCursor(POS_X_OBJETO, POS_Y_OBJETO);
display.print("OBJ:"); //OBJETO
}
Loop
Na função loop(), vamos
fazer a leitura dos dados do sensor e em seguida mostrar eles no display OLED.
//chamamos o método "read" do sensor para realizar a leitura da temperatura
//read retornará 1 caso consiga realizar a leitura, ou 0 caso contrário
if (sensor.read())
{
//recupera a leitura da temperatura do ambiente
tempAmbiente = sensor.ambient();
//recupera a leitura da temperatura do objeto apontado pelo sensor
tempObjeto = sensor.object();
//limpa a área onde colocamos o valor da temperatura do ambiente e do objeto
display.fillRect(POS_X_AMBIENTE+35, POS_Y_AMBIENTE, 35, 10, BLACK);
display.fillRect(POS_X_OBJETO+35, POS_Y_OBJETO, 35, 10, BLACK);
//posiciona o cursor e escreve a temperatura ambiente
display.setCursor(POS_X_AMBIENTE+35, POS_Y_AMBIENTE);
display.print(tempAmbiente);
display.print((char)247); //simbolo de graus
//posiciona o cursor e escreve a temperatura do objeto que o sensor está apontando
display.setCursor(POS_X_OBJETO+35, POS_Y_OBJETO);
display.print(tempObjeto);
display.print((char)247); //simbolo de graus
}
delay(1000); //intervalo de 1 segundo para a próxima leitura
}









3 Comentários
Muito bom... tenho um arduino... vou colocar esta ideia para funcionar depois...
ResponderExcluirNão deu certo! No programa você não informa os pinos de leitura do sensor, só do display! Não utilizei o display pois não tenho. COnfigurei para fazer a leitura pelo monitor mas não aparece nada pois ele não entra no "if" de leitura e não imprime nada ... Como faço?
ResponderExcluirSe puede realizar con una pantalla oled SSD1306
ResponderExcluir