MLX90614 - датчик температуры, измеряет температуру объекта бесконтактным способом и температуру окружающей среды на кристалле датчика. Интерфейс I2C/PWM.

Датчик MLX90614 может измерять температуру на кристалле датчика в пределах -40°C...+125 ̊C и температуру объекта бесконтактным способом в пределах -70°C...+380 ̊C с точностью 0.02°C. Для этого используется 17-битный АЦП.

Датчик может быть перепрограммирован для непрерывного измерения температуры с передачей показаний в виде ШИМ сигнала. В режиме ШИМ (PWM) в диапазоне температур -20...120 ̊C, достигается точность показаний 0.14 ̊C за счёт применения 10-битного PWM таймера-счётчика.

На принципиальной электрической схеме, см. рис. 1, два устройства с интерфейсом I2C (Датчик температуры MLX90614 и дисплей SSD1306) подключены к микроконтроллеру ATMega 328. Резисторы R1 и R2 подтягивающие.

Рис. 1. Принципиальная электрическая схема термометра.

#include <Adafruit_GFX.h>               // Библиотека для работы с дисплеем
#include <Adafruit_SSD1306.h>           // Библиотека дисплея SSD_1306
#define OLED_RESET 7
#include <Wire.h>                       // Библиотека для работы по протоколу I2C
#include <Adafruit_MLX90614.h>          // Библиотека термометра MLX90614

Adafruit_MLX90614 mlx = Adafruit_MLX90614(); // Создаём объект датчик температуры mlx
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET); // создаём объект "дисплей"

void setup() {
  mlx.begin();  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C адрес 0x3C
  display.setRotation(0);                    // поворот дисплея
  display.fillScreen(1);                     // заливка дисплея цветом
  display.setTextSize(5);                    // размер шрифта
  display.setTextColor(0, 1);                // цвет текста, и фона
  display.setCursor(0, 0);                   // позиция курсора X,Y
  display.display();                         // вывод на экран
}

void loop() {
  int t = mlx.readObjectTempC() * 10 + 34;  // Округляем и корректируем показания температуры бесконтактного датчика
  if (t < 320) {
    t = mlx.readAmbientTempC() *10;         // Округляем показания температуры датчика температуры корпуса микросхемы
  }
  display.setCursor(6, 16);
  display.print (t/10);
  display.print (".");
  display.print (t%10);
  display.display();
  delay(500);
}

Рис. 2. Листинг программы термометра, измеряющего температуру воздуха и бесконтактно температуру тела человека.

Скетч использует 14246 байт (46%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 341 байт (16%) динамической памяти, оставляя 1707 байт для локальных переменных. Максимум: 2048 байт.