banner

Sensor Infravermelho com ESP8266




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



O sensor infravermelho MLX90614 utilizado nesta montagem é, na verdade, uma espécie de filmadora.  Ele captura imagens via CCD (sigla, em inglês, para Charged Coupled Device), sistema muito parecido com o utilizado nas câmeras fotográficas digitais. Portanto, grava a quantidade de infravermelho que sai do objeto e, através dessa quantidade, calcula a temperatura, sendo bastante preciso.

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

Para utilizar o display Oled, adicione a seguinte biblioteca “Adafruit-GFX-Library-master”.
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

}
Arquivos para download:



2 comentários:

  1. Muito bom... tenho um arduino... vou colocar esta ideia para funcionar depois...

    ResponderExcluir
  2. Nã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?

    ResponderExcluir

Tecnologia do Blogger.