Температурный датчик DS18B20
Надоело каждый раз бегать до градусника, чтобы посмотреть температуру за окном, поэтому решено было сделано электронный термометр с выводом температуры на сервер.
Выбор пал на цифровой датчик температуры DS18B20, который питается 3-5В и поддерживает температурный диапазон от -55 до +125°С с точностью 0.06°С.
Датчик очень просто подключается к компьютерному COM порту и кроме того имеется уже готовый софт для работы с ним.
Первым делом необходимо проверить напряжение, которое выдаёт COM порт. На некоторых материнских платах это ±12В, на некоторых ±5В.
В моём случае COM порт выдавал 12В, но уже был занят другими девайсами и поэтому датчик пришлось подключить через переходник USB->COM от МастерКита ВМ8050, который как раз таки выдавал ±5В
Схема подключения очень проста:

Для её сбора нам понадобится:
1) 2 диода, в принципе не важно каких
2) 2 стабилитрона* (на 3-6В)
3) сопротивление на 1.5 кОм (у меня был на 1К)
4) сам датчик DS18B20 (стоит 50-60руб)
*стабилитроны нужно использовать если COM порт выдаёт 12В.
При 5В они не нужны и схема адаптера упрощается до трёх элементов.
При данной схеме подключения датчика, используется "паразитное" питание, т.е. пока в датчик отправляются данные, конденсатор внутри его заряжается и его заряда хватает для питания датчика, пока тот отправляет ответ. Тем самым количество проводов для подключения датчика уменьшается до двух, но и расстояние, на которое датчик может быть удалён сокращается примерно до 100-300 метров :)
Хотя проблему расстояния можно решить подключив внешний конденсатор большей ёмкости к выходах питания и земли датчика и через диод подключить пин данных к пину питания. Это так же увеличивает стабильность работы датчика.
Итак, адаптер готов, можно подключать к компьютеру и приниматься за софтовую часть.
Будем использовать готовую программу, под названием digitemp.
К сожалению порта под FreeBSD не оказалось, но исходники скомпилировались без особых проблем.
Если нет gmake, то ставим его:
Затем ставим сам digitemp:
Переходник ВМ8050 под фряхой определился автоматически и в системе появился новый COM порт /dev/cuaU0. COM порт на материнской плате скорее всего называется /dev/cuau0
Если всё прошло без ошибок, тогда можно проверять датчик. Первым делом нужно определить все подключенные датчики, а на эти два провода их можно подключить довольно много, ибо каждый имеет свой уникальный идентификатор.
В моём случае их два:
После этой команды программа сохраняет конфиг в файл .digitemprc, в котором перечисляет имеющиеся датчики, а так же другие параметры, такие как имя устройства, формат вывода и время чтения показаний с каждого датчика.
Далее считываем показания с датчиков:
Иногда датчик может возвращать температуру 85°C что означает то, что датчик не успел инициализироваться, что может быть вызвано большим удалением датчика или не надёжным его подключением. В этом случает можно увеличить время чтения данных с датчика до 2000мс или добавить дополнительный внешний конденсатор или просто подвести внешнее питание к датчику.
Если программа возвращает ошибку контрольной суммы (CRC), то следует проверить правильность подключения (полярность).
Показания с двух датчиков, установленных на улице города Челябинска можно увидеть на сайте http://sens.darkbyte.ru/
Кроме того, для удобства сделал плагин для Google Chrome, отображающий текущую температуру в Челябинске.
Для съёма показаний с датчиков имеется API, подробнее можно прочитать по ссылке.
Выбор пал на цифровой датчик температуры DS18B20, который питается 3-5В и поддерживает температурный диапазон от -55 до +125°С с точностью 0.06°С.
Датчик очень просто подключается к компьютерному COM порту и кроме того имеется уже готовый софт для работы с ним.
Первым делом необходимо проверить напряжение, которое выдаёт COM порт. На некоторых материнских платах это ±12В, на некоторых ±5В.
В моём случае COM порт выдавал 12В, но уже был занят другими девайсами и поэтому датчик пришлось подключить через переходник USB->COM от МастерКита ВМ8050, который как раз таки выдавал ±5В
Схема подключения очень проста:

Для её сбора нам понадобится:
1) 2 диода, в принципе не важно каких
2) 2 стабилитрона* (на 3-6В)
3) сопротивление на 1.5 кОм (у меня был на 1К)
4) сам датчик DS18B20 (стоит 50-60руб)
*стабилитроны нужно использовать если COM порт выдаёт 12В.
При 5В они не нужны и схема адаптера упрощается до трёх элементов.
При данной схеме подключения датчика, используется "паразитное" питание, т.е. пока в датчик отправляются данные, конденсатор внутри его заряжается и его заряда хватает для питания датчика, пока тот отправляет ответ. Тем самым количество проводов для подключения датчика уменьшается до двух, но и расстояние, на которое датчик может быть удалён сокращается примерно до 100-300 метров :)
Хотя проблему расстояния можно решить подключив внешний конденсатор большей ёмкости к выходах питания и земли датчика и через диод подключить пин данных к пину питания. Это так же увеличивает стабильность работы датчика.
Итак, адаптер готов, можно подключать к компьютеру и приниматься за софтовую часть.
Будем использовать готовую программу, под названием digitemp.
К сожалению порта под FreeBSD не оказалось, но исходники скомпилировались без особых проблем.
Если нет gmake, то ставим его:
cd /usr/ports/devel/gmake
make install clean
Затем ставим сам digitemp:
fetch http://www.digitemp.com/software/linux/digitemp-3.6.0.tar.gz
tar -xzvf digitemp-3.6.0.tar.gz
cd digitemp-3.6.0
gmake ds9097
mkdir /usr/local/etc/digitemp/
cp digitemp_DS9097 /usr/local/etc/digitemp/digitemp
cd ..
rm –r digitemp-3.6.0
rm digitemp-3.6.0.tar.gz
Переходник ВМ8050 под фряхой определился автоматически и в системе появился новый COM порт /dev/cuaU0. COM порт на материнской плате скорее всего называется /dev/cuau0
Если всё прошло без ошибок, тогда можно проверять датчик. Первым делом нужно определить все подключенные датчики, а на эти два провода их можно подключить довольно много, ибо каждый имеет свой уникальный идентификатор.
В моём случае их два:
#digitemp -q -i -s /dev/cuaU0
28C0A1BA020000BA : DS18B20 Temperature Sensor
28E6AEBA020000D1 : DS18B20 Temperature Sensor
ROM #0 : 28C0A1BA020000BA
ROM #1 : 28E6AEBA020000D1
После этой команды программа сохраняет конфиг в файл .digitemprc, в котором перечисляет имеющиеся датчики, а так же другие параметры, такие как имя устройства, формат вывода и время чтения показаний с каждого датчика.
Далее считываем показания с датчиков:
#digitemp -q -a
Apr 08 14:59:41 Sensor 0 C: 11.25 F: 52.25
Apr 08 14:59:44 Sensor 1 C: 39.38 F: 102.88
Иногда датчик может возвращать температуру 85°C что означает то, что датчик не успел инициализироваться, что может быть вызвано большим удалением датчика или не надёжным его подключением. В этом случает можно увеличить время чтения данных с датчика до 2000мс или добавить дополнительный внешний конденсатор или просто подвести внешнее питание к датчику.
Если программа возвращает ошибку контрольной суммы (CRC), то следует проверить правильность подключения (полярность).
Показания с двух датчиков, установленных на улице города Челябинска можно увидеть на сайте http://sens.darkbyte.ru/
Кроме того, для удобства сделал плагин для Google Chrome, отображающий текущую температуру в Челябинске.
Для съёма показаний с датчиков имеется API, подробнее можно прочитать по ссылке.