Главная » Статьи » Как подключить

Бесконтактный датчик температуры MLX90614

 Наконец-то заполучил в свои руки один интересный датчик-пирометр MLX90614. Это инфракрасный датчик, позволяющий определять температуру бесконтактным методом. Такой датчик позволяет практически моментально считывать температуру тела, измеряя инфракрасное излучение объекта. Сейчас познакомимся с ним поближе и разберем работу в Bascom-AVR.

 Для начала разберемся с тем, какие модификации датчика существуют. Во-первых, они различаются по напряжению питания, бывают 3-х и 5-и вольтовые версии.

 Во-вторых, различаются количеством сенсоров внутри датчика: бывают с одним сенсором и двумя:

 

 Также есть версия датчика, в которой два сенсора, но показания с них суммируются и усредняются. Именно такой датчик и попал ко мне.

 Третье различие в угле обзора. Бывают, как на картинке выше, с открытым окном, у которых угол обзора стремится к 180°. А есть версии с уменьшенным до 35°, 10° и 5° углом. Я приобрел датчик с углом обзора 10°, но как оказалось ничего хитрого там нет,  просто на корпус датчика запрессована черная трубка, обрезающая часть обзора. Поэтому можно брать открытые датчики, они дешевле, и уже самим приклеить трубочку.  Но интересней было бы добавить пару линз, только найти такие, чтобы пропускали инфракрасное излучение наверно будет не просто.

 Все датчики подключаются по стандартному интерфейсу I2C.  Распиновка со стороны ножек.

   

 На шине I2C датчик имеет настраиваемый адрес, по умолчанию отзывается на &hB4 (&b10110100) Для считывания температуры измеряемого объекта нужно обратится по адресу &h07 (&b00000111) для первого сенсора, и &h08 (&b00001000) для второго (если датчик имеет два отдельных сенсора).

 Для моего варианта, в котором два сенсора объединены, показания считываются только с первого сенсора.  Также датчик может измерить собственную температуру, ее значение хранится по адресу &h06 (&b00000110)

  К слову об измеряемых температурах. Предел температур для измеряемого объекта составляет -70÷380 °C, а для самого датчика -40÷125°C.

 Данные в датчике хранятся в сыром виде и занимают два байта, поэтому для перевода их в градусы Цельсия необходимо преобразование: поделить значение на 50 и затем вычесть из результата 273,15. Еще нужно учитывать одну особенность - датчик сперва отправляет младший байт, а затем старший. Поэтому полученные данные перед преобразованием приходится "переворачивать".

 Для примера собрал схему на микроконтроллере ATmega8, показания будут выводиться на жк дисплей. Датчик у меня приехал в пятивольтовой версии, поэтому никаких преобразователей между ним и схемой не нужно.  Только подтяжка резисторами к плюсу согласно стандарту протокола I2C

 

Программа в Bascom-AVR:

$regfile = "m8def.dat"
$crystal = 8000000


'конфигурация дисплея
Config Lcd = 16 * 2
Config Lcdpin=Pin, Rs=Portb.5, E=Portb.4, Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0

'подключение датчика
Config Scl = Portc.0
Config Sda = Portc.1

I2cinit

Dim Value As Byte                           'принимаемый байт
Dim Temp As Single                          'температура
Dim Tempword As Word                        'вспомогательная переменная
Dim Irtemp As String * 8                    'температура объекта
Dim Senstemp As String * 8                  'температура датчика
Dim Cmd As Byte                             'команды для датчика

Cls
Cursor Off


Do

 Cmd = &B00000111                           'адрес чтения температуры объекта
 Gosub Read_mlx                             'опрашиваем датчик
 Irtemp = Fusing(temp , "##.##")

 Cmd = &B00000110                           'адрес чтения температуры датчика
 Gosub Read_mlx                             'опрашиваем датчик
 Senstemp = Fusing(temp , "##.##")

 Cls
 Locate 1 , 1
 Lcd "To " ; Irtemp ; "°C"                  'выводим температуру объекта
 Lowerline
 Lcd "Ts " ; Senstemp ; "°C"                'выводим температуру датчика

 Waitms 500

Loop


'подпрограмма опроса датчика
Read_mlx:

 I2cstart
 I2cwbyte &B10110100                        'отправляем адрес датчика
 I2cwbyte Cmd                               'отправляем команду с адресом

 I2cstart
 I2cwbyte &B10110101                        'отправляем адрес датчика с битом чтения
 I2crbyte Value , Ack                       'принимаем первый байт
 Tempword = Value
 Shift Tempword , Left , 8

 I2crbyte Value , Ack                       'принимаем второй байт
 Tempword = Tempword Or Value               'складываем два байта

 I2cstop                                    'окончание опроса датчика

 Rotate Tempword , Left , 8                 'меняем местами два байта в переменной

 Temp = Tempword * 0.02                     'преобразование данных в температуру по Цельсию
 Temp = Temp - 273.15

Return

 

 Программа выводит на дисплей две температуры. В верхней строке температуру измеряемого объекта, в нижней - температуру самого датчика.

Фото с экспериментов. Температура горячего чайника

чайник только вскипел, но температура пластикового корпуса выше 80 не поднималась.

температура в морозилке

 

 

 А вот интересная картинка из даташита, показывающая погрешность датчика в зависимости от внешних факторов. 
To - измеряемая температура объекта, Ta - температура окружающей среды

 В ходе тестирования заметил одну особенность,  для более точного измерения температуры, датчик нужно подносить как можно ближе, чтобы объект перекрывал весь угол обзора датчика. В общем датчик интересный, мне понравился. А вот интересный проект с этим датчиком https://geektimes.ru/post/257850/

 

Исходник и прошивка

Документация на датчик MLX90614

Датчик покупал здесь, хотя дешевле можно купить вот тут

 

Категория: Как подключить | Добавлено: 18.06.2016
Просмотров: 10982 | Комментарии: 32 | Теги: измерения, MLX90614 | Рейтинг: 4.9/9
Всего комментариев: 321 2 »
32 TSL   (12.11.2017 10:07)
alex182, убрал галку и всё тоже-самое. Куплю другую мегу. Подозреваю что они глючные. Обе с одной партии.

31 TSL   (06.11.2017 19:56)
Хорошо, буду пробовать. Сейчас у меня два дня выходных. После отпишусь.

30 alex182   (06.11.2017 18:55)
TSL Фьюзы не правильно стоят сними галку с SUT1

29 TSL   (06.11.2017 17:00)
Заменил дисплей. При замене проверил каждое соединение на соответствие схемы. Всё равно не работает. На видио ниже видно, что при отключении сигнальных проводов с датчика мельтешение знаков на экране пропадает. Значить с датчика сигнал идёт. А проц не отображает этот сигнал правильно. К видио прицепил и картинку фьюзов.
ВИДИО. http://radikal.ru/video/IV9oX8pHmfA
ФЬЮЗЫ. http://s019.radikal.ru/i636/1711/b0/95358a354775.jpg
Програмирую в AVRDUDESHELL

28 alex182   (05.11.2017 19:00)
TSL по схеме правильно подключили.
контрастность крутили.

27 TSL   (04.11.2017 12:44)
Залил обновлённую прошиву. Не работает. Но квадратики исчезли.
Видио http://radikal.ru/video/SCH9A7ktffx

0  
26 exersizze   (04.11.2017 10:41)
Исправил

25 TSL   (03.11.2017 19:31)
Увы, я оказывается вхожу в группу пользователей, которым запрещено совершать данное действие. Как быть?
НаписАл админу.

24 TSL   (03.11.2017 18:20)
Мегу после прошивки вставлял в панельку на плате термометра. Плату смотрел на просвет, замыканий вроде не было. Сегодня при тестировании меандра отпаял вывод индикатора. Думал может коротыш в онном. Завтра цэшкой ещё проверю замыкание данного порта на массу. Может что-то не узрел, когда смотрел на просвет.
HEX можно кинуть на почту atomix3@mail.ru
Заранее благодарю. Отпишусь о результате.

23 alex182   (03.11.2017 17:48)
пиши адрес куда скинуть адрес в личку

22 alex182   (03.11.2017 17:43)
да и ещё микроконтроллер кода прошили прошивкой меандра выпаивали с палаты или проверяли на месте если на плате то может быть короткое или обрыв дорожки

21 TSL   (03.11.2017 17:34)
Конечно, alex182, буду очень благодарен. Иначе сам я не справлюсь. Для меня это тёмный лес.

20 alex182   (03.11.2017 17:17)
TSL значит порт микроконтроллера нерабочий
если нужно могу кинуть в личку исправленный HEX под ваш микроконтроллер

19 TSL   (03.11.2017 12:03)
Зашил прогу меандра. Светодиоды не впаивал а посмотрел осциллографом. На всех портах присутствуют импульсы, кроме PB4 (вывод 18 меги в DIP корпусе).

0  
18 exersizze   (02.11.2017 20:53)
Bascom-AVR версии не ниже 1.11.9.8
Если менять в программе подключение датчика, то и не забудьте подключить датчик к соответствующим ножкам микроконтроллера. Но проблему с отображением на дисплее переподключение датчика не решит.

17 TSL   (02.11.2017 16:55)
Упс, exersizze, в статье не обнаружил имя автора. Очень приятно.
Скомпилировать мне? Ну чтож, учиться никогда не поздно. Буду пробовать. Благодарю.
Тестовую прогу меандра попробую зашить.

alex182, я так понял, что в исходнике надо заменить данные строки? И в какой программе это всё делается?

16 alex182   (01.11.2017 10:28)
код рабочий 100% но может не работать из за вот этих строк в самом верху
'подключение датчика
Config Scl = Portc.0
Config Sda = Portc.1
замените на
'подключение датчика
Config Scl = Portc.5
Config Sda = Portc.4

0  
15 exersizze   (31.10.2017 20:35)
TSL, эмм, так, а кто тогда по вашему вам на вопросы отвечает если не автор?
Можете скомпилировать код со страницы самостоятельно, раз сомневаетесь в работоспособности хекса.
Еще для пробы загрузите код по ссылке ниже, он выводит меандр на Port B.0 - B.5, подключите заместо дисплея светодиоды и смотрите как мигает

avrproject.ru/public/test_mega8.hex

14 TSL   (28.10.2017 12:44)
Подцепил другую мегу, и опять тоже-самое. Походу здесь не рабочая прошивка. С портов меги нет никаких импульсов на индикатор. Практически везде высокий уровень 5 вольт.
Питание меги и индикатора в норме. Индикатор подцеплен согласно схеме. Проверил стопятьсот раз. Услышать бы автора, но он видимо здесь не появлялся давно. В исходниках и програмировании я полный ноль, поэтому для меня этот проект закрыт.....

0  
13 exersizze   (18.10.2017 22:47)
а с обратной стороны, подключение дисплея не видно.

12 TSL   (18.10.2017 09:57)
Кинул фото на сюда http://s41.radikal.ru/i093/1710/0b/6064b20c764a.jpg
Прошил другой проц. Такая же ситуация. Осциллографом проверил сигналы на портах меги.
Никаких сигналов нет. Возможно процы битые, если прошива нормальная. Или я что-то не так делаю. Фьюзы LOW-C4 HIGH-99. Попробую прошить мегу в корпусе TQFP. Есть такая у меня. Отпишусь.

11 TSL   (17.10.2017 18:07)
Хорошо, завтра сфоткаю. Кину на хостинг или на тот-же сайт Паяльник.

0  
10 exersizze   (17.10.2017 12:36)
Вроде верно, я тоже использовал мегу в дип корпусе (а схема для tqfp, да)
Скиньте фото того что у вас получилось.

9 TSL   (16.10.2017 18:25)
exersizze спасибо что вы хоть отвечаете. Создал тему на Паяльнике, но пока там тишина. По поводу индикатора, подключал согласно схеме автора. Хотя, завтра ещё проверю. Мегу применил в корпусе DIP соответственно переподключил ноги согласно шиту по корпусу TQFP. У меня получилось по питанию "плюс" ноги 7 и 20 по "минусу" 8 и 22. На индикатор идут порты PB0-PB5 соответственно ноги 14-19.

0  
8 exersizze   (16.10.2017 10:37)
TSL, причина скорее всего в неправильном подключении дисплея, фьюзы обычно не мешают его работе.

7 TSL   (01.10.2017 17:19)
Собрал значить я данный термометр, но на экране ЖК тёмные прямоугольники. Регулировка контрасности ничего не дала. Мега прошилась без каких-либо ошибок. Пробовал менять фьюзы, тоже не помогло. Подцепил другой индикатор-такая же ситуация. Подскажите в какую сторону дальше рыть. Или может возможно не рабочий сам датчик. Очень уж нужен данный девайс для калибровки. Выручайте.

+1  
6 exersizze   (24.09.2017 15:48)
CKSEL=0100, SUT=00

5 TSL   (21.09.2017 08:10)
Подскажите пжл. фьюзы для меги8 данного проекта. Боюсь залочить данный проц.

+1  
4 exersizze   (02.07.2017 18:04)
Да, заработает. Только программу перекомпилировать под 328 камень.

3 TSL   (22.06.2017 12:08)
Приветствую. Как я понял, собираем по схеме выше, и всё должно работать.
Тогда подскажите фьюзы какие ставить? И можно ли применить mega 328?
Спасибо.

1-30 31-32
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://jlcpcb.com/

авторизация
Логин:
Пароль:
Комментарии
Подключение матричной клавиатуры 4х4 к микроконтроллеру
01.12.2017 - Kasym:
Нашел интересный косяк: если к переменной string*5 добавлять string*1 много раз,...
Организуем программный USB в Bascom-AVR на примере USB-вольтметра. Часть 3
30.11.2017 - Zimakos:
Сталкнулся с проблемой при компилляции на Bascom 2.0.7.8
а именно:
...
RF модули HC-12 с UART интерфейсом
25.11.2017 - ELK:
Кто-нибудь может подсказать как отправляется AT команда? Нужно поочередно отправ...
Направлятор
23.11.2017 - milcin68:
И снова здравствуйте)))
Сегодня вновь все повторилось как в #60 посте неи...
Направлятор
22.11.2017 - milcin68:
беру свои слова назад, я ничего не понимаю
прошил снова обновленную проши...
Направлятор
22.11.2017 - milcin68:
отвечу сам себе,
26 pin надо подтягивать к питанию.
фьюзы в моем п...
Направлятор
21.11.2017 - milcin68:
нужно ли подтягивать 26 pin к питанию?
правильно ли я выставил фьюзы? ...
Минитерминал V.3.0
19.11.2017 - webrusik:
DROZD01, не могли бы поделиться печатной платой?
Часы, термометр, барометр, гигрометр в одном флаконе.
19.11.2017 - bobkus:
Доброго всем. Собрал сей прибор, отлична штука. Пробовал два датчика dht11-врут ...