banner

Ir para o Forum

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:



Um comentário:

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

    ResponderExcluir

Tecnologia do Blogger.