Берегите себя

Берегите себя

20 дек. 2018 г.

DS18B20 иди в жопу

Ардуинщики это особая секта. Все у них такое модное, клевое. Среди прочего шрота они особенно любят далласовские датчики 18B20. Мода она штука такая, успевай продавать, пока спрос есть. И продаваны Алиэкспресса еле успевают паковать посылки, днем и ночью они клепают эти датчики, клепают, а спрос все не проходит.
Спрос рождает предложение и повышает цену. Далласовский датчик стоит от 50р и выше. Поэтому у меня их нет. Зато (теперь) есть TMP100 от Ti.



Он менее удобен, все-таки SOT-23-6 против здоровенного TO-92


 и это обстоятельство подразумевает подпайку проводов "один раз" и герметизацию в эпоксидную смолу, либо нужно использовать макетную плату. Я пошел по второму пути.

Тот самый случай, когда макетка и разъем на порядки больше самого датчика!!!
Еще одно обстоятельство - протокол. DS18B20 использует 1Wire, а вот TMP100 это датчик i2c, то есть проводов с данными у него не один а два, SCL и SDA. То есть TMP100 и 18B20 совсем невзаимозаменяемы. Но если строить что-то с нуля, а еще и самому писать программу, то почему бы и не попробовать другой протокол?
Схема подключения датчика температуры TMP100 к микроконтроллеру


Как видно, схема крайне простая. Допустимы напряжения питания 3,3/5В и до 7,5В, в обвязке ничего лишнего (почти).
Как и 18B20 этот термодатчик тоже адресуемый. Две ноги ADD0 и ADD1 могут быть подключены к +5В, GND, или просто висеть в воздухе. Подключение как на схеме выше дает адрес 1001010 (Bin) и выбрано мной только по причине легкого запоминания и легкого подключения. Если датчиков несколько, их придется опрашивать поочередно, не перепутав адреса. Полная таблица возможных адресов приведена в Даташите. Светодиод я добавил исключительно с эстетической точки зрения, чтобы видеть, не отскочил ли проводок и какой именно :) Конечно же его можно не ставить, более того, он вполне может добавлять какие-то наноградусы к показаниям датчика.
Естественно для опроса датчика нужен мозг и мною для простоты был взят Ардуино. Опять же ради простоты код для TMP100 моментально нашелся в интернете и переделан лишь в части вывода информации. Авторы программы пуляли байтами в сериальный порт, а я хотел выкинуть данные на самый простой дисплей 1602 (по красоте), особо ни на что не заморачиваясь. Имеет ли смысл писать программу, нужную лишь "на попробовать". Быдлокодинг рад самого процесса, ладно бывает, но здесь явно не тот случай!
Для программы нужно наличие двух библиотек, впрочем они очень распространненые:
liquid.h
wire.h

В программе придется изменить следующее:
- описание пинов для подключения дисплея
- описание пинов для i2с
- двоичный адрес датчика
- Еще можно  раскомментировать строки serial.print и подсоединить TMP100 через UART к ПК.
Как и в 18B20 АЦП датчика TMP100 имеет разрядность 12 бит в двух байтах. Разрешение АЦП можно изменить, жертвуя точностью ради скорости.  

Если после пайки и заливки скетча в Ардуино дисплей показывает вот такое какашко, выходит, мозги свежих данных не получили и показывают дичь. Либо провода данных перепутаны  местами, либо у самого датчика оторвалась нога, либо кто-то недостаточно внимательно записал двоичный код подключенного датчика и не указал его в программе. Не знаете кто?


"Градусник" в работе, батареи жарят под 50. Ужас!

А вот если все правильно подключено и запрограммировано, то и работает все сразу и без косяков.
Будем пользоваться 100%!

Даташит TMP100/101
Скетч для Ардуино


PS. Не упомянул еще TMP101, это готовый цифровой термостат, благодаря выводу Alert, он дает команду на выключение нагревающего элемента. Конечно же, все программируется в мозгах датчика и требует самой минимальной обвязки. В мемориз.



Комментариев нет:

Отправить комментарий