sobota, 20 kwietnia
Shadow

Arduino – Czujnik IR GY-906 czyli termometr na podczerwień

Czujniki temperatury w obecnych czasach (epidemia Covid) stały się niezbędne niemal w każdej firmie.

W tym wpisie wykorzystany zostanie moduł GY-906 wraz z czujnikiem IR MLX90614. Wynik pomiaru zostanie wyświetlony na LCD OLED SSD1306 128X64 0,96 cala. Wykorzystuje te moduły tylko ze względu na komunikację I2C co ogranicza do minimum ilość kablologii oraz skraca do minimum kod programu.

GY-906 czujnik temperatóry IR

Kod programu nie odkrywa jakiejś tam ameryki, wykorzystane są w nim ogólnie dostępne biblioteki:

  • biblioteka Adafruit_MLX90614.h odpowiada za obsługę czujnika temperatury MLX90614,
  • biblioteka Adafruit_GFX.h odpowiada za obsługę grafiki wyświetlanej na SSD1306,
  • biblioteka Adafruit_SSD1306.h dodaje nam obsługę wyświetlacza SSD1306,
  • biblioteka FreeMonoBold18pt7b.h dodaje nam czcionkę a czemu nie 😉

Potrzebne komponenty:

  • Arduino mini pro lub odpowiednik
  • wyświetlacz LCD OLED SSD1306
  • moduł czujnika IR GY-906 (MLX90614)

Schemat połączeń:

czujnik IR GY-906 arduino

Kod programu:

#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMonoBold18pt7b.h>
Adafruit_SSD1306 display(128, 64);
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
int temp;
int ledPin = 20;

void setup()
{
delay(100);
pinMode(ledPin, OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
mlx.begin();
}

void loop()
{
digitalWrite(ledPin, HIGH);
temp++;
if(temp > 43)
{
temp = 0;
}

temp = mlx.readObjectTempC();

display.clearDisplay();

// Print text:
display.setFont();
display.setCursor(45,10); // (x,y)
display.println("TEMPERATURA");

// Print temperature
char string[10];

dtostrf(temp, 3, 0, string);

display.setFont(&FreeMonoBold18pt7b);
display.setCursor(20,50);
display.println(string);
display.setCursor(90,50);
display.println("C");
display.setCursor(77,32);
display.println(".");

display.fillCircle(18, 55, 7, WHITE);

display.drawRoundRect(16, 3, 5, 49, 2, WHITE);

for (int i = 6; i<=45; i=i+3){
display.drawLine(21, i, 22, i, WHITE);
}

//Draw temperature
temp = temp*0.43;
display.drawLine(18, 46, 18, 46-temp, WHITE);

display.display();
}

5/5 - (2 ocena/y)

2 Comments

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.