Безконтактний датчик температури MLX90614 - Як підключити - AVR - Проекти на мікроконтролерах AVR

Нарешті придбав у свої руки один цікавий датчик-пірометр MLX90614. Це інфрачервоний датчик, що дозволяє визначати температуру безконтактним способом. Такий датчик дозволяє практично вмить зчитувати температуру тіла, вимірюючи інфрачервоне випромінювання об'єкта. Зараз познайомимося з ним ближче та розберемо роботу в Bascom-AVR.
Спочатку розберемося з тим, які модифікації датчика існують. По-перше, вони різняться за напругою живлення, бувають 3-х та 5-и вольтові версії.
По-друге, різняться кількістю сенсорів усередині датчика: бувають з одним сенсором і двома:

Також є версія датчика, в якій два сенсори, але показання з них підсумовуються та усереднюються. Саме такий датчик і потрапив до мене.
Третя відмінність у вугіллі огляду. Бувають, як на зображенні вище, з відкритим вікном, у яких кут огляду прагне до 180°. А є версії із зменшеним до 35°, 10° та 5° кутом. Я придбав датчик з кутом огляду 10°, але як виявилося нічого хитрого там немає, просто на корпус датчика запресована чорна трубка, що обрізає частину огляду. Тому можна брати відкриті датчики, вони дешевші, і вже самим приклеїти трубочку. Але цікавіше було б додати пару лінз, тільки знайти такі, щоб пропускали інфрачервоне випромінювання, напевно, буде не просто.
Усі датчики підключаються за стандартним інтерфейсом I2C. Розпинування з боку ніжок.

До речі, про вимірювані температури. Межа температур для вимірюваного об'єкта становить -70÷380°C, а для самого датчика -40÷125°C.
Дані в датчику зберігаються в сирому вигляді і займають два байти, тому для переведення їх у градуси Цельсія необхідно перетворення: поділити значення на 50 і потім відняти з результату 273,15. Ще потрібно враховувати однуособливість - датчик спочатку відправляє молодший байт, та був старший. Тому отримані дані перед перетворенням доводиться "перевертати".
Наприклад зібрав схему на микроконтроллере ATmega8, показання виводитимуться на ЖК дисплей. Датчик у мене приїхав у п'ятивольтовій версії, тому жодних перетворювачів між ним та схемою не потрібно. Тільки підтяжка резисторами до плюсу згідно зі стандартом протоколу I2C

Програма в Bascom-AVR:
$regfile= "m8def.dat"$crystal= 8000000
'конфігурація дисплеяConfigLcd= 16 * 2ConfigLcdpin = Pin, Rs = Portb. 5, E = Portb. 4, Db4 = Portb. 3, Db5 = Portb. 2, Db6 = Portb. 1, Db7 = Portb. 0
'підключення датчикаConfigScl = Portc . 0ConfigSda = Portc. 1
DimValueAsByte'приймається байтDimTempAsSingle'температураDimTempwordAsWord'допоміжна зміннаDimIrtempAsString* 8 'температура об'єктаDimSenstempAsString* 8 'температура датчикаDimCmdAsByte'команди для датчика
ClsLocate1 , 1Lcd"To"; Irtemp; "°C" 'виводимо температуру об'єктаLowerlineLcd"Ts"; Senstemp; "°C" 'виводимо температуру датчика
'підпрограма опитування датчика Read_mlx :
I2crbyteValue ,Ack'приймаємо другий байт Tempword = TempwordOrValue 'складаємо два байти
I2cstop'закінчення опитування датчика
RotateTempword ,Left, 8' міняємо місцями два байти в змінній
Temp = Tempword *0. 02 'перетворення даних у температуру поЦельсію Temp = Temp - 273 . 15
Програма виводить на екран дві температури. У верхньому рядку температуру об'єкта, що вимірювається, в нижній - температуру самого датчика.
Фото з експериментів. Температура гарячого чайника

чайник тільки скипів, але температура пластикового корпусу вище 80 не піднімалася.
температура в морозилці

А ось цікава картинка з даташиту, що показує похибку датчика в залежності від зовнішніх факторів. To - вимірювана температура об'єкта, Ta - температура навколишнього середовища

У ході тестування помітив одну особливість, для більш точного вимірювання температури датчик потрібно підносити якомога ближче, щоб об'єкт перекривав весь кут огляду датчика. Загалом, датчик цікавий, мені сподобався. А ось цікавий проект із цим датчиком https://geektimes.ru/post/257850/
Датчик купувавтут, хоча дешевше можна купити осьтут