| СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ |
|
В свое время мы посмотрели как можно с помощью Ke-USB24A помигать светодиодами, принимать данные снаружи через дискретные линии, настроенные на вход. Здесь поговорим о более полезных на практике вещах, например об измерении температуры. К модулю можно подключить внешний датчик температуры и получать измерения последней на компьютере в нашей собственной программе. А дальше с ней можно делать все что угодно. Начиная от ее банального отображения в программе (некая программа-градусник) до "умного" управления различной автоматикой, включение или выключение которой определяется уровнем текущей температуры. Какй же датчик использовать и как его собственно использовать, возникает вопрос. В этой статье я буду применять датчик температьуры от KernelChip, т.е. тойже фирмы которая и делает модули Ke-USB24A. Выглядит этот датчик вот так:
Т.е. это собственно сам датчик (синия трубка на конце) который установлен на отрезке кабеля длинной примерно 1.5 м. Из кабеля торчат два провода: один с красным маркером, другой с черным. Схема подключения датчика показана на рисунке ниже. Сам датчик подключается к АЦП. К счастью, в модуле Ke-USB24A как раз "завалялся" один АЦП. Дополнительно потребуется один постоянный резистор величиной в 110 кОм. Приведенная схема довольно подробная и напутать здесь что-либо будет довольно сложно.
Итак, датчик "прикрутили", хотелось бы и температуру померить в моей собственной программе. Как мы будем это делать? Довольно просто. Давайте напишем простенькое Windows приложение на языке C++ в Microsoft Visual Studio с использованием MFC.
Так, отвлекся немного, поехали дальше. Подробно расписывать процедуру создания проекта не буду. Много раз уже делал. Готовый проект можно скачать в шапке этой статьи. Что же эта программу будет уметь делать? Да ничего особенного. С ее помощью можно будет в режиме реального времени наблюдать показания датчика температуры. Вмзуально она выглядит вот так:
Другими словами, выглядит она незатейливо и незамысловато (во какие удивительные слова есть в русском языке). Давайте ее запустим. Итак, датчик подключен к модулю, модуль подключен к компьютеру. Указываем номер COM порта, который был выдан системой для нашего модуля и нажимаем кнопку Open. Наблюдаем показания температуры. Отлично, роаботает. Как видно у меня вполне комфортная температура.
Соответственно, если проднести датчик к настольной лампе или к замерзшему окну (январь всетаки в конце концов) можно наблюдать плавное изменение показаний датчика. Как видно, показания не изменяются мгновенно. Датчик обладает некоторой инерционностью. Теперь посмотрим как же работает программа. Когда мы нажимаем на кнопку Open - вызывается соответствующая функция обработчик. Мельком проверяется валидность введенного номера порта и проводится попытка его открытия с помощью класса SerialGate, предназначенного для работы с COM портом. Можно было конечно написать все и прямыми вызовами функций, но мне всю эту рутинную работу делать не захотелось. Поэтому и использую SerialGate. Итак, порт открыли. Далее, отправляем в него команду на включение переодической выдачи резульатов АЦП с частотой 1 Гц. Потм стартуем системный тайсмер и настраиваем его на срабатывание каждыую секунду. Потом запускаем отдельный прогпраммный поток, который будет заниматься чтением COM порта. Отдельный поток нужен для того чтобы программа не зависала все время на одной задаче - чтения порта, но и могла выполнять и другие операции, например, обрабатывать сообщения перемещения окна и т.д. Функция потока реализованна на "коленке" и меня можно за нее забросать тухлыми помидорами, но мне было лень делать все красиво и аккуратно. Здесь мы читаем порцию данных из порта и пытаемся вычленить от туда результат чтения АЦП, который передается в виде #ADC,Value. Значение Value четырехзначное, поэтому я там и применяю некую странную технику "склейки" числа. Итак, значение АЦП получили. Переводим его в величину напряжения в вольтах используя очевидное преобразование. Далее интерсенее. Нам нужно из этого напряжения получить значение температуры. Для этого существует готовая формула, которую можно найти на сатранице используемого датчика температьуры. Аккуратно ее записываем на языке Си и получаем вот такого "крокодила". С помощью его рассчитываем значение температуры и помещаем результат в переменную, ассоциированную с окном ввода, размещенного на диалоговом окне. Раз в 1 секунду срабатывает таймер и обновляет информацию в окне температуры. Вот собственно и все. Что еще можно добавить? Описанная техника позволяет подключить этот датчик и к другим модулям KernelChip, например, Ke-GSM или Ke-USB24R. Технология таже самая. Используя этот датчик можно строить различные системы автоматического управления и регулирования. © Дмитрий Иванов |
| Контакты | | | Гостевая книга |
| © 2005-2009 сопряжение компьютеров с внешними устройствами PCPORTS.RU © Иванов Д.В. | ||||||||||||||