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