Как подключить датчик к компьютеру
Перейти к содержимому

Как подключить датчик к компьютеру

Сбор показаний датчиков и их отображение

Людям нравятся красивые презентации. Красивые картинки, немного текста, меняющиеся слайды. Красивая картинка позволяет быстро передать информацию человеку, сообщить самое важное. Мы все это знаем. Я вот думаю, как «скрестить ежа и ужа»?

Как наглядно на мониторе компьютера представить процессы, происходящие внутри микроконтроллера или ПЛИС? Или как показать, что происходит внутри всей системы автоматики, реализованной на микроконтроллере или ПЛИС?

Вообще-то правильный ответ я знаю – нужно использовать SCADA системы.
SCADA – это supervisory control and data acquisition, диспетчерское управление и сбор данных. Но мы не ищем легких путей, мы хотим немножко изобрести своего велосипеда.

Хочу поделиться своим простым методом отображения данных, получаемых от датчиков и сенсоров из платы управления.

  • протокол передачи данных. Нужно как-то кодировать передаваемую от контроллера к компьютеру информацию.
  • firmware в системе автоматики, в микроконтроллере или ПЛИС. Этот модуль должен собарать показания датчиков и передавать их на компьютер для отображения в «красивом виде»
  • программное обеспечение визуализации. Показывает состояние и значения датчиков. Может строит какие-то графики.

Вот так, по порядку попробую рассказать.

Протокол передачи данных.

В настоящее время физических возможностей подключить какое-то устройство к компьютеру или ноутбуку фактически осталось только две: сетевое подключение через 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 пожалуй покажу. Здесь не очень много всего:

#!/usr/bin/env python import sensor from sensor import * import serial from serial import * class AllSensors: def __init__(self): #open serial port self.s=serial.Serial(«COM27″,115200,timeout=10) #load background image self.bgnd=PhotoImage(file=»bgnd.gif») self.label_bgnd=Label(root,image=self.bgnd) self.label_bgnd.place(x=0,y=0) #add all sensors and indicators self.all=[] self.all.append( BinSensor(«b0″,»f0.gif»,»f1.gif»,32,32) ) self.all.append( BinSensor(«b1″,»f0.gif»,»f1.gif»,32,128) ) self.all.append( vBarSensor(«a0»,1,0,255,128,32,32,160) ) self.all.append( GridDisplay(«t0″,16,-55,125,10,16,180,32,256,160) ) def set(self,name,val): for sens in self.all: if(sens.name==name): sens.set(val) return def setline(self,line): p=line.split(» https://habrastorage.org/r/w1560/storage3/ac8/7d3/b08/ac87d3b08d8cda9eea5762d1451c2111.png» data-src=»https://habrastorage.org/storage3/ac8/7d3/b08/ac87d3b08d8cda9eea5762d1451c2111.png»/>

Вот видео, которое показывает, как все это работает (только не пугайтесь, я там фен включаю для нагрева датчика температуры, так что звук лучше прикрутить):

Теперь, когда «скелет» приложения работает, то можно приступать к детальному рисованию плана помещения и установленных в нем датчиков.

Использование датчиков в Windows 7

Рекомендуем перейти на компьютер Windows 11, чтобы продолжать получать обновления для системы безопасности от Корпорации Майкрософт.

Что такое датчик?

Датчики — это аппаратные компоненты, которые могут предоставлять компьютеру информацию о расположении компьютера, его окружающем расположении и не только. Полученные с помощью датчиков данные могут сохраняться и использоваться программами при выполнении повседневных задач для большего удобства работы с компьютером. Существует два типа датчиков:

Датчики, подключаемые к компьютеру посредством проводного или беспроводного соединения.

В число примеров датчиков входят датчики местоположения, например GPS-приемник, который может определить текущее расположение компьютера. На основе полученных данных в специальной программе могут выводиться сведения, например о ближайших ресторанах или маршрутах проезда к нужному пункту назначения. Датчик освещения предназначен для определения уровня освещенности окружающей среды, на основе чего автоматически корректируется яркость экрана.

Использование датчиков расположения и других датчиков

С помощью датчиков можно настраивать программы, данные и службы на компьютере на основании сведений о его текущем расположении, условиях окружающей среды и других данных. Например, с помощью датчика расположения и компьютера можно найти ближайший ресторан, определить направления движения к нему, передать данные о направлениях другу и использовать их на карте для планирования маршрута движения.

Программы могут получать доступ к данным с датчика после его установки и включения на компьютере. Эти данные могут использоваться программами при выполнении повседневных задач для большего удобства работы с компьютером. Чтобы запретить программам и учетным записям использовать данные, полученные с помощью датчика, отключите его.

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

При необходимости можно ограничить доступ к личным данным определенных пользователей на компьютере.

Как применение датчиков влияет на конфиденциальность?

По умолчанию, если датчик включен, все программы и пользователи на вашем компьютере могут получить доступ к сведениям с этого датчика. В ОС Windows при попытке доступа программ к данным о расположении компьютера выводится временное уведомление в виде значка «Датчик расположения и другие датчики» в области уведомлений. Windows отображает этот значок при первом доступе программы или службы к расположению вашего компьютера с датчика.

Некоторые программы могут использовать персональные данные (например, ваше местонахождение) от датчиков без разрешения. С помощью учетных записей можно ограничить доступ программ к данным, полученным с использованием датчиков.

Предоставление доступа к данным, полученным с использованием датчиков

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

Откройте «Расположение» и «Другие датчики», нажав Значок кнопки "Пуск"«Начните», а затем на панели управления. В поле поиска введите датчики, а затем щелкните «Место» и «Другие датчики».

Примечание: Чтобы изменить пользовательские параметры датчиков, должен быть установлен как минимум один датчик.

В левой области выберите пункт Изменить параметры пользователя.

В списке Датчик выберите датчик, для которого требуется изменить параметры пользователя.

В разделе Доступ установите или снимите флажки рядом с именами пользователей, которым требуется предоставить или запретить доступ к данным датчика соответственно. Нажмите кнопку ОК. Требуются права администратораЕсли вам будет предложено ввести пароль администратора или подтверждение, введите пароль или подскакийте его.

Включение и отключение датчиков

Программы могут использовать данные с датчика после включения. Можно включать или отключать датчики, установленные на компьютере, в разделе панели управления «Датчик расположения и другие датчики». При отключении датчик не выключается физически. Некоторые программы могут по-прежнему использовать данные, получаемые с помощью отключенного датчика.

После включения датчика по умолчанию все пользователи и программы на компьютере смогут получать с него доступ к информации. Когда программа или служба впервые получают доступ к расположению вашего компьютера с датчика, Windows временно отображает значок «Расположение и другие датчики» в области уведомлений.

Включение и отключение датчика

Откройте «Расположение» и «Другие датчики», нажав Значок кнопки "Пуск"«Начните», а затем на панели управления. В поле поиска введите датчики, а затем щелкните «Место» и «Другие датчики».

Установите или снимите флажок рядом с датчиком, который требуется включить или отключить соответственно, и нажмите кнопку Применить. Требуются права администратораЕсли вам будет предложено ввести пароль администратора или подтверждение, введите пароль или подскакийте его.

Установка и удаление датчиков

См. документацию, входящую в комплект поставки датчика, или посетите веб-сайт изготовителя датчика. После установки датчика нужно включить его. Это позволит программам получать доступ к информации с датчика.

Удаление датчика

Откройте «Расположение» и «Другие датчики», нажав Значок кнопки "Пуск"«Начните», а затем на панели управления. В поле поиска введите датчик и затем выберите пункт Датчик расположения и другие датчики.

Выберите удаляемый датчик.

В меню «Дополнительныепараметры» щелкните «Удалить этот датчик»и нажмите кнопку «ОК». Требуются права администратораЕсли вам будет предложено ввести пароль администратора или подтверждение, введите его или подскакийте.

Контроль температуры. Как подключить датчик температуры DS1820 через COM-порт копьютера и мониторить температуру.

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

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

В интернетах не мало сломано копий по данному вопросу. Материал везде достаточно одинаковый и сводится к одному: берем датчик температуры DS1820 фирмы Dallas и путем довешивания дополнительно двух диодов Шоттки, двух стабилитронов и одного резистора, получаем приблуду на COM-порт, которая в состоянии замерять температуру.

Все бы хорошо, однако нормального ПО для работы с такой приблудой я так и не нашел. Точнее, оно есть, но за него хотят денег. Что я понимаю под нормальным ПО? Да мне всего-то и надо что контролировать температуру в помещении, и, когда она превысит, скажем, 30 градусов, оповестить меня об этом. Вот тут-то и загвоздка: есть ПО которое бесплатное, но оно просто показывает температуру, что мне нафиг не надо. И есть ПО, которое еще позволяет что-то делать, когда температура выше определенного предела, но оно стоит денег.

Поскольку денег платить я не хочу, а использовать ломаное ПО в организации нельзя, я пошел своим путем и написал программу контроля температуры, которая, при определенных пользователем условиях, позволяет производить какие-либо действия. А поскольку я не жадный, выкладываю программу здесь, глядишь, еще кому пригодится.

Итак. Прежде всего схема. Она валяется везде в интернете и собрать ее совсем не сложно. По стоимости деталек: в моем городе на расстоянии 500 км от столицы все детали обошлись мне в 300 рублей. Самый дорогой был именно датчик температуры DS1820, остальное — копейки.

2016-10-18_15-40-15

Собираем схему, можно прямо на разъеме для com-порта. На рисунке показано сразу 3 датчика. Это как пример того, как подключить к одной одной линии много датчиков. Для работы достаточно только одного. Подключаем собранную схему к компьютеру и дальше в действие вступает специальная программулина.

Моя программа на самом деле не замеряет температуру, а является посредником. Температуру замеряет портированная под Windows линуксовая программа DigiTemp. А моя программа анализирует работу консольной DigiTemp и соответственно реагирует. Ничего дополнительно устанавливать не нужно, все уже есть внутри.

Для работы программы требуется установленная платформа .NET версии не ниже 3.5, она сейчас есть практически везде.

1. Запускаем программу. При первом запуске она сразу открывает раздел настроек. Там нужно указать COM-порт, и просто нажать кнопку «Поиск сенсоров».

2016-10-18_15-48-17

2. Если железо в порядке, com-порт работает и ничем больше не занят и наш адаптер спаян правильно, программа обнаружит подключенные сенсоры, отобразит табличку с их названиями, типом и прочей служебной информацией.

2016-10-18_15-50-33

3. Двойным кликом на обнаруженных датчиках открываем их настройки, где можно изменить имя датчика (чтобы было понятно, где он) и добавить действие, которое будет выполняться при определенных условиях.

2016-10-18_15-51-52

По кнопке «Добавить» добавляется действие. На текущий момент программа поддерживает только одно действие — запуск внешней программы. Я посчитал это действие самым важным и реализовал его в первую очередь. Далее, если будет желание читателей и хорошие идеи — добавим еще. Окошко действия «Запуск программы» выглядит так:

2016-10-18_15-55-02

Тут все просто — указываем выше/ниже какой температуры срабатывать, выбираем программу, рабочий каталог, если нужно и параметры командной строки, опять же, если нужно.

После всех настроек, можно нажать кнопку «Пуск» основного окна программы и она начнет свой монотонный никому не нужный труд. С интервалом, заданным в параметре «Интервал опроса сенсоров» программа будет запускать опрос, обрабатывать данные и выводить их в таблицу. Заодно будет проверять условия срабатывания действий, и при их совпадении — запускать действие.

Поле «Количество попыток опроса» предназначено для увеличения количества циклов чтения за один интервал опроса. При неуверенном чтении датчиков можно попытаться увеличить это значение в разумных пределах (скажем, до 5).

Время чтения одного датчика где-то 0,7 — 1 секунда, соответственно, опрос 3х датчиков будет длиться в районе 3х секунд.

При установленной галке «Автозапуск мониторинга при старте программы» мониторинг будет запускаться автоматически, что даст возможность запихнуть программу в автозагрузку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *