Как подключить датчики к компьютеру
Контроль температуры. Как подключить датчик температуры DS1820 через COM-порт копьютера и мониторить температуру.
Иногда перед человеком встает необходимость контролировать температуру, скажем, в помещении серверной или в любимом инкубаторе для крокодильчиков. Те, кто не хотят заморачиваться, имеют деньги или не владеют руками, тупо покупают специализированные приборы. Те же, кто дружит с паяльником, или хотя бы знает, что такое припой и для чего нужна канифоль, ищут возможности проще и дешевле.
Недавно передо мной стала задача дистанционного контроля температуры в серверных помещениях моей конторы. Как тру-инженер прекрасно владеющий паяльником и знающий что такое DS1820, я решил собрать контроль самостоятельно и сэкономить конторе денежку.
В интернетах не мало сломано копий по данному вопросу. Материал везде достаточно одинаковый и сводится к одному: берем датчик температуры DS1820 фирмы Dallas и путем довешивания дополнительно двух диодов Шоттки, двух стабилитронов и одного резистора, получаем приблуду на COM-порт, которая в состоянии замерять температуру.
Все бы хорошо, однако нормального ПО для работы с такой приблудой я так и не нашел. Точнее, оно есть, но за него хотят денег. Что я понимаю под нормальным ПО? Да мне всего-то и надо что контролировать температуру в помещении, и, когда она превысит, скажем, 30 градусов, оповестить меня об этом. Вот тут-то и загвоздка: есть ПО которое бесплатное, но оно просто показывает температуру, что мне нафиг не надо. И есть ПО, которое еще позволяет что-то делать, когда температура выше определенного предела, но оно стоит денег.
Поскольку денег платить я не хочу, а использовать ломаное ПО в организации нельзя, я пошел своим путем и написал программу контроля температуры, которая, при определенных пользователем условиях, позволяет производить какие-либо действия. А поскольку я не жадный, выкладываю программу здесь, глядишь, еще кому пригодится.
Итак. Прежде всего схема. Она валяется везде в интернете и собрать ее совсем не сложно. По стоимости деталек: в моем городе на расстоянии 500 км от столицы все детали обошлись мне в 300 рублей. Самый дорогой был именно датчик температуры DS1820, остальное — копейки.
Собираем схему, можно прямо на разъеме для com-порта. На рисунке показано сразу 3 датчика. Это как пример того, как подключить к одной одной линии много датчиков. Для работы достаточно только одного. Подключаем собранную схему к компьютеру и дальше в действие вступает специальная программулина.
Моя программа на самом деле не замеряет температуру, а является посредником. Температуру замеряет портированная под Windows линуксовая программа DigiTemp. А моя программа анализирует работу консольной DigiTemp и соответственно реагирует. Ничего дополнительно устанавливать не нужно, все уже есть внутри.
1. Запускаем программу. При первом запуске она сразу открывает раздел настроек. Там нужно указать COM-порт, и просто нажать кнопку «Поиск сенсоров».

3. Двойным кликом на обнаруженных датчиках открываем их настройки, где можно изменить имя датчика (чтобы было понятно, где он) и добавить действие, которое будет выполняться при определенных условиях.
По кнопке «Добавить» добавляется действие. На текущий момент программа поддерживает только одно действие — запуск внешней программы. Я посчитал это действие самым важным и реализовал его в первую очередь. Далее, если будет желание читателей и хорошие идеи — добавим еще. Окошко действия «Запуск программы» выглядит так:
Тут все просто — указываем выше/ниже какой температуры срабатывать, выбираем программу, рабочий каталог, если нужно и параметры командной строки, опять же, если нужно.
После всех настроек, можно нажать кнопку «Пуск» основного окна программы и она начнет свой монотонный никому не нужный труд. С интервалом, заданным в параметре «Интервал опроса сенсоров» программа будет запускать опрос, обрабатывать данные и выводить их в таблицу. Заодно будет проверять условия срабатывания действий, и при их совпадении — запускать действие.
Поле «Количество попыток опроса» предназначено для увеличения количества циклов чтения за один интервал опроса. При неуверенном чтении датчиков можно попытаться увеличить это значение в разумных пределах (скажем, до 5).
Время чтения одного датчика где-то 0,7 — 1 секунда, соответственно, опрос 3х датчиков будет длиться в районе 3х секунд.
При установленной галке «Автозапуск мониторинга при старте программы» мониторинг будет запускаться автоматически, что даст возможность запихнуть программу в автозагрузку.
А вот, собственно, и сама программа:
Предложения, пожелания и прочий флуд приветствуется.
Использование датчиков в Windows 7
Поддержка Windows 7 закончилась 14 января 2020 г.
Рекомендуем перейти на компьютер Windows 11, чтобы продолжать получать обновления для системы безопасности от Корпорации Майкрософт.
Что такое датчик?
Датчики — это аппаратные компоненты, которые могут предоставлять компьютеру информацию о расположении компьютера, его окружающем расположении и не только. Полученные с помощью датчиков данные могут сохраняться и использоваться программами при выполнении повседневных задач для большего удобства работы с компьютером. Существует два типа датчиков:
Датчики, подключаемые к компьютеру посредством проводного или беспроводного соединения.
В число примеров датчиков входят датчики местоположения, например GPS-приемник, который может определить текущее расположение компьютера. На основе полученных данных в специальной программе могут выводиться сведения, например о ближайших ресторанах или маршрутах проезда к нужному пункту назначения. Датчик освещения предназначен для определения уровня освещенности окружающей среды, на основе чего автоматически корректируется яркость экрана.
Использование датчиков расположения и других датчиков
С помощью датчиков можно настраивать программы, данные и службы на компьютере на основании сведений о его текущем расположении, условиях окружающей среды и других данных. Например, с помощью датчика расположения и компьютера можно найти ближайший ресторан, определить направления движения к нему, передать данные о направлениях другу и использовать их на карте для планирования маршрута движения.
Программы могут получать доступ к данным с датчика после его установки и включения на компьютере. Эти данные могут использоваться программами при выполнении повседневных задач для большего удобства работы с компьютером. Чтобы запретить программам и учетным записям использовать данные, полученные с помощью датчика, отключите его.
Так как некоторые программы могут отправлять персональные данные по сетевым подключениям, вы можете включить или отключить датчик только при входе в Windows с учетной записью администратора.
При необходимости можно ограничить доступ к личным данным определенных пользователей на компьютере.
Как применение датчиков влияет на конфиденциальность?
По умолчанию, если датчик включен, все программы и пользователи на вашем компьютере могут получить доступ к сведениям с этого датчика. В ОС Windows при попытке доступа программ к данным о расположении компьютера выводится временное уведомление в виде значка «Датчик расположения и другие датчики» в области уведомлений. Windows отображает этот значок при первом доступе программы или службы к расположению вашего компьютера с датчика.
Некоторые программы могут использовать персональные данные (например, ваше местонахождение) от датчиков без разрешения. С помощью учетных записей можно ограничить доступ программ к данным, полученным с использованием датчиков.
Предоставление доступа к данным, полученным с использованием датчиков
Может потребоваться ограничить доступ к программам и службам (которые запускаются в фоновом режиме для всех учетных записей пользователей) из-за доступа к данным датчиков. По умолчанию при первом включении датчика все программы и службы могут получить информацию от датчика для всех учетных записей пользователей. Можно ограничить доступ программ к данным, полученным с использованием датчиков, с помощью учетных записей. Можно также ограничить доступ к информации датчиков для служб, но это будет применено ко всем учетным записям пользователей.
Откройте «Расположение» и «Другие датчики», нажав 
Примечание: Чтобы изменить пользовательские параметры датчиков, должен быть установлен как минимум один датчик.
В левой области выберите пункт Изменить параметры пользователя.
В списке Датчик выберите датчик, для которого требуется изменить параметры пользователя.
В разделе Доступ установите или снимите флажки рядом с именами пользователей, которым требуется предоставить или запретить доступ к данным датчика соответственно. Нажмите кнопку ОК. 
Включение и отключение датчиков
Программы могут использовать данные с датчика после включения. Можно включать или отключать датчики, установленные на компьютере, в разделе панели управления «Датчик расположения и другие датчики». При отключении датчик не выключается физически. Некоторые программы могут по-прежнему использовать данные, получаемые с помощью отключенного датчика.
После включения датчика по умолчанию все пользователи и программы на компьютере смогут получать с него доступ к информации. Когда программа или служба впервые получают доступ к расположению вашего компьютера с датчика, Windows временно отображает значок «Расположение и другие датчики» в области уведомлений.
Включение и отключение датчика
Откройте «Расположение» и «Другие датчики», нажав 
Установите или снимите флажок рядом с датчиком, который требуется включить или отключить соответственно, и нажмите кнопку Применить. 
Установка и удаление датчиков
См. документацию, входящую в комплект поставки датчика, или посетите веб-сайт изготовителя датчика. После установки датчика нужно включить его. Это позволит программам получать доступ к информации с датчика.
Удаление датчика
Откройте «Расположение» и «Другие датчики», нажав 
Выберите удаляемый датчик.
В меню «Дополнительныепараметры» щелкните «Удалить этот датчик»и нажмите кнопку «ОК». 
Меню навигации
Пользовательские ссылки
Информация о пользователе
Термометр на DS18B20 (подключение через COM порт)
Сообщений 1 страница 30 из 103
Поделиться116.12.2013 02:07:42
Этот компьютерный COM термометр выполнен на специализированной микросхеме DS18B20 фирмы Dallas. Он подключается к ПК (компьютеру) через последовательный COM порт. Если в вашем компьютере нет COM порта, можете посмотреть другой вариант градусника, подключаемый через USB. USB термометр на ATmega8 и PIC18F4550
Или использовать переходник USB to UART. Поскольку датчик температуры DS18B20 имеет интерфейс 1-Wire, то для согласования с COM портом компьютера необходим преобразователь уровней напряжения, выполненный по схеме:
Замечу что это не единственный возможный вариант схемы. Идея не нова и в интернете можно найти разнообразные варианты схем от простейших, до сравнительно сложных.
При использовании USB переходника, схему можно упростить.
Если у переходника нет выводов DTR и RTS, но есть выход 5 вольт, схема такая.
Программа проверена и хорошо работает с USB переходниками на микросхеме PL2303.
В программе следует выбрать COM порт к которому подключен датчик температуры и если порт не занят, устройство исправно и датчик подключен, то в поле, расположенном в центре окна, отобразится текущая температура. Linux версию программы нужно запускать с правами root-а, иначе не будет доступа к COM порту. Это одна из особенностей операционной системы Linux.
Исходный текст программы «DS18B20 Thermo» и скомпилированные файлы. Для компиляции требуется PureBasic 5.20 или более новая версия.
Доработанная программа, позволяющая считывать температуру из нескольких датчиков.
Поделиться208.07.2015 11:06:28
Поделиться308.07.2015 14:09:41
С такой длиной линии не проверял. Для улучшения помехоустойчивости скорее всего придется уменьшить сопротивления резисторов R3 и R7, а также использовать внешнее питание, а не от COM порта.
Поделиться408.10.2015 08:44:03
Здравствуйте! При минусовой температуре у меня показывает 4000 вроде. Это программа так показывает или у меня что то не так с датчиком. Положительную температуру показывает как нужно. Программа которая первая, с одним датчиком.
Отредактировано wvlas (08.10.2015 08:46:41)
Поделиться510.10.2015 17:35:05
Посмотрел ее исходник. Должно нормально работать с отрицательным температурами. На всякий случай, пересобрал программы из исходников.
Поделиться628.12.2015 10:42:03
privet vsem skajite pojalusta kak sdelat chto mnogo datchik rabotaet vetot pragrame
Поделиться728.12.2015 11:52:52
Датчики подключаются параллельно друг другу, т. е. их одноименные выводы соединяются вместе.
Поделиться812.01.2016 13:05:12
Поделиться912.01.2016 21:10:20
Когда происходят ошибки, они отображаются в колонке «Статус». Обычно ошибок нет.
Поделиться1013.01.2016 21:46:44
uvas est programa chto pokazivaet vlajnost ili etot sxema i programa mojet pokazat vlajnost.
Поделиться1114.01.2016 20:46:37
Влажность можно вычислить методом «сухого и мокрого термометра». https://ru.wikipedia.org/wiki/Психрометр
Поделиться1215.01.2016 20:38:52
uvas est programa chto pokazivaet vlajnost
Поделиться1323.01.2016 09:23:30
Поделиться1423.01.2016 13:43:05
Эта ошибка происходит постоянно или только иногда?
Ошибка CRC означает что данные исказились. Возможно это из-за большой длины провода между компьютером и датчиком и из-за большого уровня помех.
Поделиться1523.01.2016 14:32:08
Поделиться1623.01.2016 14:33:15
vsh sxema pravino rabotaet.
Поделиться1723.01.2016 19:40:23
Схема нормально работает. Но если датчиков много, сопротивление резистора R3 нужно уменьшить.
Поделиться1823.01.2016 22:17:36
Поделиться1924.01.2016 16:28:32
Скорее всего одно и тоже, но нужно смотреть их описание.
Повысить стабильность и уменьшить число ошибок можно включив режим «Снизить нагрузку на CPU» в меню программы.
Поделиться2008.03.2016 23:35:26
Здравствуйте. Подскажите почему исходник с одним датчиком запускается нормально, а со многими вместо русских надписей вопросики =. =. Виндовс ХР SP3 PureBasic5.3
И почему в исходнике со многими датчиками у Вас температура изменяется на 0.1 градуса, а у меня через 0.5. Причем из пяти датчиков четыре работают через 0.5 градуса, а один (второй в списке) работает нормально через 0.1. Датчики одинаковые и из одного магазина
Отредактировано OllyRom (08.03.2016 23:42:00)
Поделиться2109.03.2016 00:46:55
а со многими вместо русских надписей вопросики =. =. Виндовс ХР SP3 PureBasic5.3
Ели речь про архив DS18B20_ThermoMon_v1.0.zip то исходник нормально открывается и компилируется. С надписями все в порядке.
Случайно кодировку не изменили?
температура изменяется на 0.1 градуса, а у меня через 0.5
Датчик DS18B20 или DS1820 / DS18S20?
Поделиться2209.03.2016 07:16:27
Ели речь про архив DS18B20_ThermoMon_v1.0.zip то исходник нормально открывается и компилируется. С надписями все в порядке.
Случайно кодировку не изменили?
Датчик DS18B20 или DS1820 / DS18S20?
Да, речь именно об этом архиве. Он разархивировался на ноутбуке с Win8.1 на флешку, тестово запускался, но поскольку на нем нет COM и LPT, флешка переставлялась на комп древнее с нужными портами, а на том уже вопросики.
Датчики покупались в =Космодроме= kosmodrom.com.ua/el.php?name=DS18B20,
Можно ли подключить параллельно DS18B20 еще и DHT11 ДатчикВлажности+Температуры? и что нужно изменить в исходнике. Даташит kosmodrom.com.ua/el.php?name=DHT11
Страница с описанием датчика kosmodrom.com.ua/prodlist.php?page=0&name=ds18b20&okbutton=%CF%EE%E8%F1%EA+%EF%EE+%F1%EA%EB%E0%E4%F3
Написано: =Программируемая пользователем разрешающая способность встроенного АЦП может быть изменена в диапазоне от 9 до 12 разрядов выходного кода. Абсолютная погрешность преобразования меньше 0,5° C=.
А как ее изменить? этупрограммируемую пользователем разрешающую способность?
Отредактировано OllyRom (09.03.2016 07:26:50)
Поделиться2309.03.2016 10:38:53
а со многими вместо русских надписей вопросики =. =. Виндовс ХР SP3 PureBasic5.3
Можно ли подключить параллельно DS18B20 еще и DHT11
Нет нельзя. У DHT11 другой протокол, не 1-Wire.
Поделиться2410.03.2016 06:40:01
Нет нельзя. У DHT11 другой протокол, не 1-Wire.
Теперь по поводу разрешения датчика DS18B20 при измерении температуры. В даташите на него указано =The core functionality of the DS18B20 is its direct-to-digital temperature sensor. The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively. The default resolution at power-up is 12-bit. The DS18B20 powers up in a low-power idle state. To initiate a temperature measurement and A-to-D conversion, the master must issue a Convert T [44h] command. = То есть по умолчанию при подаче питания (power-up) он должен ставиться в мах разрешение. Прочитал только что поверхностно (не вдаваясь в точность перевода) даташит термометра, написано что начальное конфигурирование датчика делается при подключении только одного к мастеру. А я их посадил сразу все грядкой 5 штук, приду с работы вечером поюзаю.
DHT11 действительно параллельно втыкать в шину нельзя, у него упрощенный 1-Wire протокол без 64-битной уникальной идентификации + обратного управления, и передача температуры и влажности с CRC одним пакетом, нужно либо другие однопроводные датчики, либо на контроллере =разобрать= пакет и эмулировать два датчика 1-wire с разными бортовыми номерами. К тому же мне в проект нужно еще и пару датчиков давления 0-15атм.
Так что на форуме похоже надолго
Сбор показаний датчиков и их отображение
Людям нравятся красивые презентации. Красивые картинки, немного текста, меняющиеся слайды. Красивая картинка позволяет быстро передать информацию человеку, сообщить самое важное. Мы все это знаем. Я вот думаю, как «скрестить ежа и ужа»?
Как наглядно на мониторе компьютера представить процессы, происходящие внутри микроконтроллера или ПЛИС? Или как показать, что происходит внутри всей системы автоматики, реализованной на микроконтроллере или ПЛИС?
Вообще-то правильный ответ я знаю – нужно использовать SCADA системы.
SCADA – это supervisory control and data acquisition, диспетчерское управление и сбор данных. Но мы не ищем легких путей, мы хотим немножко изобрести своего велосипеда.
Хочу поделиться своим простым методом отображения данных, получаемых от датчиков и сенсоров из платы управления.
Вот так, по порядку попробую рассказать.
Протокол передачи данных.
В настоящее время физических возможностей подключить какое-то устройство к компьютеру или ноутбуку фактически осталось только две: сетевое подключение через Ethernet/WiFi или USB. Практически ушли в прошлое «настоящие» параллельные и последовательные порты. С ними было просто. Конечно их еще можно найти, если поискать. Но лучше в эту сторону и не думать.
Ethernet пока отставляю в сторону. Для передачи по сети нужно в контроллере иметь драйвера стека TCP/IP, как правило это тянет за собой наличие ОС, обычно Linux или ucLinux. Потом потребуется интерфейс настройки сети: а какой IP адрес? А статический или динамический? А какая маска и gateway? В общем не очень просто в реализации и настройке.
USB кажется гораздо проще, хотя и тут много подводных камней: а какой класс/субкласс устройства? А нужно ли ему драйвера или используются стандартные драйвера той же Windows?
И опять возвращаемся «на круги своя» — проще всего использовать последовательный порт через USB. В простейшем случае есть шнуры типа USB2Serial. Ну или как отличный вариант для разработчика плат и контроллеров – различные микросхемы FTDI.
ОК, все же выбираем последовательный порт через USB. А раз так, то значит пересылка данных может быть в виде последовательности символов. Значит дальше еще проще: показания датчиков можно передавать в виде строк вида «НАЗВАНИЕ_ДАТЧИКА=ЗНАЧЕНИЕ»
При таком подходе мы сможем легко увеличивать количество опрашиваемых сенсоров, и легко менять их тип. Состояние концевика или геркона будет передваться, например, в виде строк «but0=1» или «but1=0». Значение температуры можно передавать в виде строки «t0=36,6». Строки проще всего разделять символами «перевода каретки»: 0x0D 0x0A.
Так, на первых порах даже и программа визуализации на компьютере не нужна. Можно просто запустить программу терминала вроде Putty и смотреть на показания датчиков из контроллера.
Контроллер.
Мой контроллер выполнен на базе ПЛИС Altera Cyclone III. На самом деле это известная разработчикам плата Марсоход2. Я уже писал про некоторые проекты, выполненные на ней. Например, когда-то мы сделали на этой плате на чистой ПЛИС FM радио передатчик. А еще мы сделали на ней USB Tracker. Есть и другие проекты.
На плате уже есть 2 кнопочки – это первые два датчика для моих экспериментов.
Еще я подключил микросхему термометра ds18b20 – это второй датчик.
Можно еще использовать АЦП платы для измерения чего-то-пока-не-знаю-чего. Пока здесь просто переменный резистор вместо датчика.
Важно, что на плате уже стоит микросхема FTDI FT2232HL, которая обеспечивает связь с компьютером через USB в виде виртуального последовательного порта. Скорость передачи аж 12Мбит/сек. Это условно 1,2 Мбайта/сек. Если, например, плата опрашивает датчики каждые 100 миллисекунд, то получается можно за каждый опрос передавать компьютеру более 100Кбайт данных. Вполне прилично.
Сейчас не буду рассказывать о проекте для платы и ПЛИС Cyclone III. Для этого есть отдельная статья. В этой статье подробно рассказано, как опрашиваются данные и передаются результаты в компьютер через последовательный порт. Лучше перейдем к рассмотрению 3-ей компоненты – программы визуализации значений датчиков, которая работает на компьютере.
Программа визуализации данных.
Тут хотелось все сделать быстро и просто. На чем писать программу, чтоб было просто написать, менять, дополнять?
Я выбираю Питон, хотя честно говоря опыта нет. Просто кажется, что это будет хорошо. Как сказал один из хабражителей (извините, не помню кто) – дополнительно хотелось бы «потреннировать своего питона».
Итак, поскольку программа будет графическая, то попробую встроенный в питон Tkinter. Для работы с последовательным портом буду использовать pyserial.
Хочется написать эдакий набор классов — для каждого типа датчиков свой класс.
Самый простой класс – двоичный датчик. Это может быть кнопка, концевик, геркон. Его значения 0 или 1. Соответствующий этому датчику питоновский класс BinSensor отображает всего 2 состояния. Предлагаю каждому состоянию нарисовать свое изображение. Изображение прикрепляется к фиксированным координатам окна программы поверх фонового изображения.
Как только пришло значение «0» показываем первую картинку. Если пришло значение «1», то показываем вторую картинку. Изображения могут быть любыми — все зависит от нашей фантазии.
В функцию __init__, которая вызывается при создании экземпляра класса, передаются параметры:
Name – название датчика
Img0 и img1 – имена файлов картинок, используемых для отображения состояния датчика.
X и y – координаты окна, где будет отображаться датчик.
При создании объекта датчика сразу создается Label с картинкой и размещается в окне Tkinter.
Функция set принимает параметр строку – это новое состояние датчика «0» или «1». В зависимости от нового значения картинка внутри Label переконфигурируется, меняется на другую. В общем это и все.
Аналогичным образом реализуется второй класс vBarSensor.
Этот класс графически представляет датчик типа термометра. Значения из датчика могут меняться в некотором диапазоне. Так же при создании экземпляра этого класса нужно указать имя датчика. Кроме этого у термометра есть возможное минимальное и максимальное значение, и еще указываем координаты столбика в окне визуализации, ширину и высоту столбика.
Столбик термометра как бы состоит из двух частей нижняя красная и верхняя светлая.
Можно было бы создать один Tkinter canvas и на нем нарисовать эти столбики, но почему-то я сделал не так. Сделал два canvas разного цвета и в функции set() меняю им вертикальный размер. В принципе это не важно. Работает. Кстати, если хочется видеть именно изображение термометра в окне визуализации, то его можно нарисовать на фоновом изображении окна, а поверх него разместить экземпляр vBarSensor.
Наверное будет симпатично.
Написал еще один класс GridDisplay для отображения показаний датчика и изменении их во времени. Его исходный код приводить здесь не буду, чтобы не перегружать статью излишними подробностями. Кому будет нужно скачает с сайта весь проект, вместе с исходниками для ПЛИС для Altera Quartus II.
А вот главную программу alls.py пожалуй покажу. Здесь не очень много всего:
В этой программе открываю последовательный порт для чтения. Загружаю фоновое изображение в окно. Создаю список всех имеющихся датчиков. Далее читаю строки з порта, разбираю их и по имени датчика передаю соответствующему экземпляру классов новое значение.
Запустить программу из Python легко: «import alls», где alls — это имя главной программы файл alls.py. Вот так сейчас выглядит моя программа:
Вот видео, которое показывает, как все это работает (только не пугайтесь, я там фен включаю для нагрева датчика температуры, так что звук лучше прикрутить):
Теперь, когда «скелет» приложения работает, то можно приступать к детальному рисованию плана помещения и установленных в нем датчиков.












