воскресенье, 9 февраля 2025 г.

Бесконтактный инфракрасный измеритель температуры LU90614

 Бесконтактные инфракрасные измерители температуры могут быть полезны в тех случаях когда контакт с поверхностью, температуру которой необходимо измерить, нежелателен или невозможен. Например при измерении температуры каких либо агрессивных коррозионных жидкостей вроде кислот и растворов солей а также в медицине когда поверхностью является кожа человека которая может содержать опасные микроорганизмы, в таком случае контактный измеритель будет дополнительным переносчиком инфекции. Помимо этих, возможно есть много примеров когда бесконтактный измеритель температуры будет лучше контактного. Про принципу действия, контактные датчики делятся на много типов. Одним из них являются термопары которые работают на эффекте Зеебека. Большинство недорогих бесконтактных датчиков, на самом деле, работают на таком же эффекте но термопар в них много, они маленькие и соединены последовательно а ЭДС в них возникает при нагревании под действием инфракрасного излучения от источника температура которого измеряется. Также в таких датчиках имеется оптический фильтр который не пускает на термопары не тепловое излучение. Т.к. термопара измеряет не температуру а разность температур то такие датчики дополняются встроенными терморезисторами для измерения холодной части термопары для правильного расчета температуры. В общем правильный расчет температуры будет не прост. Существуют готовые модули с датчиками, оптическими системами фокусировки инфракрасного излучения и контроллерами которые собирают информацию с датчика и выдают готовые цифровые данные с температурой. Например популярный датчик MLX90614. Но он достаточно дорогой и ему есть недорогая дешёвая альтернатива - датчик LU90614 который, на момент написания данной статьи, стоит на порядки дешевле и также может измерять температуру. Он имеет несколько другую оптическую систему, несколько большие размеры а также выдает данные по асинхронному интерфейсу UART в отличии от MLX90614 который выдает данные по синхронному интерфейсу. Для получения данных с датчика, можно подключить его к ПК через USB-uart переходник.

При подключении важно не перепутать выводы питания. После подключения датчика к ПК можно начать с ним коммуникацию через какую либо программу-терминал последовательного порта, поддерживающий отправку данных в 16тиричном виде. Например такую которую можно скачать по ссылке https://disk.yandex.ru/d/s3CgtoBmzA81ug. Традиционный монитор последовательного порта среды Arduino не подходит т.к. он не позволяет отправлять данные в 16тиричном виде. После подключения платы к ПК и открытия терминала, нужно выбрать правильный COM порт из списка, скорость 9600 бод (для данного модуля) и остальные настройки как на скриншотах:


После нажать "Connect" для соединения с модулем.


После успешного соединения можно получить запросить температуру объекта, отправив ему последовательность байт:

0xFA 0xC6 0xC0 0xFA 0xCA 0xC4

но для того чтобы программа корректно восприняла данные как 16тиричные их нужно отправлять в другом формате, без пробелов а перед каждым байтом ставить знак доллара так:

$FA$C6$C0$FA$CA$C4

Данную строку надо вписать в нижнее текстовое поле и нажать кнопку "Send" для отправки:

После этого модуль должен прислать последовательность байт. Третий из которых это целая часть измеренной температуры, четвертый - десятичная часть измеренной температуры:
Т.е. на скриншоте показана температура 27.5 градусов цельсия. Для того чтобы измерить температуру тела нужно аналогично вписать и отправить последовательность:

$FA$C5$BF$FA$CA$C4

Максимальная температура которую можно получить таким образом равна 255 т.к. это максимальное число которое м.б. в одном байте:



Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

вторник, 7 января 2025 г.

W801 кнопка

Популярная отладочная плата с микроконтроллером w801 имеет достаточно много пинов ввода вывода общего назначения (GPIO). Пины общего назначения могут работать как выходы или как входны. Напр. можно выбрать нин PB8.

Рисунок 1 - Подключение кнопки к плате с микроконтроллером W801

Пин PB8 не имеет альтернативных функций поэтому его можно использовать как GPIO не боясь упустить какую либо интересную функцию имеющуюся у данного микроконтроллера помимо GPIO. Также ряддом с ним располагаются пины питания для организации подтяжки и собственно подключения самой кнопки.

рассмотрим код:

Для настройки какого либо пина общего назначения, используется функция 

tls_gpio_cfg();

чтобы настроить данный пин на вход, надо передать константу WM_GPIO_DIR_INPUT вторым параметром в данную функцию. Первым параметром передается константа с номером пина. Последним параметром передается тип подтяжки (если я правильно понял). Читается состояние пина функцией 

ret = tls_gpio_read(WM_IO_PB_08);

у которой только один параметр это номер пина и которая возвращает его состояние. Если на пине лог. 0 то функция возвратит 0. Далее на основе этого имеется ветвление. Если на пине лог. 0 то светодиод будет мигать. Если нет то не будет. Для компиляции кода, нужно запустить из корня проекта команду

sudo make

для загрузки рошивки в плату, команду

sudo tools/w800/wm_tool -c ttyUSB0 -rs rts -dl bin/w800/w800.fls

Если загрузка продет удачно то светодиод будет мигать если кнопка не нажата. Если нажато то мигание должно не работать.



Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g