Датчик контроля протечки воды, OpenVoron |
Печатная плата ch-c0020pcb.
Печатная плата ch-c0020pcb.
При чтении данных из регистра АЦП — ADRES мы сможем получить значение от 0 до 255.
Если для делителя мы выбрали резисторы с одинаковым сопротивлением, то получим 2,5 V (приблизительно). 2,5 V для АЦП даст нам на выходе число 2,5/(5/256)= 128 . Это значит, что в «сухом» состоянии с АЦП будем считывать значение 128 . При «замыкании» электродов водой напряжение естественно будет понижаться. Вопрос насколько? Все это можно выяснить только экспериментальным путем. Берем вольтметр, подключаем к электродам датчика, включаем питание и меряем напряжение. В «сухом» состоянии у меня было 2,43 V, при замыкании контактов пальцами руки, напряжение понижалось до 2,1 V. Это значит, что для микроконтроллера мы будем иметь значение «сухое» — 124, и так называемое «мокрое» — 107.
Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с потолка…
Желающие получить уже полностью собранное и проверенное устройство обращайтесь в интернет-магазин Ворон.
// ||||++----- CHS: АЦП подключен к входу GP0/AN0.
Назначение выводов смотрите на принципиальной схеме или в описании платы.
// |||||+++--- PS: настройка предделителя.
LED=1; // выключить светодиод.
if(timer==dlitel && LED==0) // если светодиод отключен и timer==dlitel.
// ||||||+---- GO/DONE: статус и запуск конвертирования.
Датчик контроля протечки воды
// |||+------- T0SE: счет по фронту импульса на входе T0CKI.
// +---------- ANS1: вывод GP1/AN1 настроен как цифровой.
// загрузку калибровочной константы си берет на себя.
if(BEEP==1 && ALARM==1) // проверим состояние авария и защелка.
Как строится программа? Все наши действия вытекают из нашего тех. задания, которые мы изложили в начале.
О понятии параметра «чувствительность датчика» можно сказать, что чем мы ниже понижаем порог, тем меньше его чувствительность. Чем больше гистерезис, тем больше защита от помех. Но все хорошо в меру. У нас верхний теоретический порог 128, на практике он может быть выше или ниже (все зависит от точности напряжения стабилизации стабилизатора, и погрешности величины сопротивлений выбранных нами резисторов).
// управление светодиодом-индикатором контроля работы датчика.
Главный цикл программы.
dlitelBeepOFF=20000;// равномерный сигнал.
int timer, // таймер формирующий длительность светового индикатора.
Добавить комментарий Отменить ответ.
В контроллере PIC10F2xx есть одна особенность, у них нет системы прерываний, поэтому программа представляет собой один непрерывный последовательный цикл. Этот вариант программирования удобен для начинающих программистов. На этом примере постараемся разъяснить построение простой (и может первой) программы на PIC-контроллере. Для программирования используется среда MPLAB 8.83 и компилятор С HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.83.
#define OUT GP2 // выход управления.
dlitelBeepON; // переменная формирующая период звукового сигнала.
Датчик контроля протечки воды ch-c0020
#define _XTAL_FREQ 8000000 // для __delay.
ALARM; // флаг состояния порога контроля АЦП.
Теперь сама программа. В начале программы мы проводим настройку основных рабочих регистров контроллера — это OPTION, затем настройку порта ввода/вывода, регистры TRISGPIO и GPIO. А так как в нашем датчике главную роль играет АЦП, то и его настройка. Обратите внимание, у нас в регистре конфигурации включен сторожевой таймер, это такой модуль микроконтроллеров, который предназначен для борьбы с возможным сбоем работы программы.
Печатная плата изготовлена с возможностью установки в корпус Z-65. Полное описание можно найти здесь.
Реально датчики работали с уровнем контроля напряжения — 80 и гистерезисом — 20. Эти параметры зависят только от интуиции и опыта разработчика.
// после подачи питания.
else if(timerBeep==dlitelBeepON && OUT==1)
Визуальное расположение уровней контроля должно быть таким как на рисунке.
MCLRE_ON); // Вывод GP3/MCLR настроен на функцию MCLR.
// определение состояния аварии.
if (ALARM==1) // если была авария.
Для программирования PIC-контроллера рекомендуется использовать внутрисхемный отладчик MPLAB ICD3 или программатор-отладчик PICkit 3 . Они автоматически заботятся о сохранении заводской калибровочной константы.
dlitel=60000; // задаем длительность мигания светодиода индикатора.
В настоящее время одним из основных элементов домашней автоматики стал контроль над протечкой воды. Протечка воды может произойти по разным причинам: из-за повреждения водоснабжения у вас или у соседа свыше, или из-за простой случайности, но всегда это довольно неприятное событие. Для того, чтобы обезопасить себя от такого рода событий был разработан этот проект. Он предусматривает два типа устройств:
timer=0; // инициализация таймера индикации светодиода.
Тестирование прототипа датчика.
Следующий шаг, это определения или описания наших констант.
LED=0; // включить светодиод.
Цифровой порт GP1 будем использовать для индикации работы датчика. Сделаем так: если светодиод медленно мигает, значит, датчик работает, если мигает быстро, то обнаружена протечка воды. Такой алгоритм работы необходим, чтобы можно было легко контролировать работоспособность датчика.
ALARM=0; // сбросим аварию.
Заказать готовое изделие в интернет-магазине «Ворон».
Изготовление такого типа устройств не мыслимо без корпуса, поэтому перед проектированием платы для датчика контроля протечки воды был выбран корпус Z65J польского производства.
while(GO); // ожидание окончания конвертирования.
Рекомендуемые винты и гайки для крепления платы. Винты используются в качестве электродов.
Файлы для загрузки.
Для программирования мы будем использовать стандартный соединитель (для проекта OpenVoron). Необходимо скачать в конце статьи программу или HEX-файл и «прошить» контроллер.
Сброс аварии и возврат в дежурный режим выполняется отключением питания. На выходе портов предусмотрим транзисторные ключи для возможности подключения исполнительных устройств типа реле. Питание датчика выберем стандартное для сырых помещений — 12 V, для этого на плате предусмотрим место для стабилизатора, учитывая разные варианты корпусов TO-92 или SOIC-8. Для защиты от неправильного подключения и наводок высокого напряжения на сигнальный кабель установим цепочку защиты D2, R9, ST3 .
// |+--------- GPPU: подтягивающие резисторы на GP0, GP1, GP3 отключены.
Через определенное время происходит переполнение сторожевого таймера, которое приводит к аппаратному рестарту контроллера. Программа запускается сначала и нормальная работа контроллера возобновляется. Поэтому для работы программы без сбоев необходимо расположить команды сброса сторожевого таймера в главном цикле программы.
Задав уровень аварийного порога и гистерезис, мы по изменению величины напряжения на резисторе R2 сможем контролировать протечку воды.
Для автономного датчика вывод GP2 будет управлять звуковым сигналом. Алгоритм работы следующий: если молчит, то нет протечки, а если раздается периодический сигнал, то это значит, что есть протечка воды. Если «попискивает» — была протечка.
Последовательность сборки датчика.
timer=0; // инициализация таймера индикации светодиода.
Код товара для заказа: 001453.
// задержка необходима для заряда входной емкости фильтра.
Это изменение на сопротивление пальцев руки, для воды оно будет значительней, но и этих данных достаточно для задания параметров работы микроконтроллера. Выберем порог срабатывания 100 и гистерезис 5. Гистерезис необходим для создания зоны устойчивости в районе порога срабатывания. Это значит, что Авария «сработает» когда значение получаемое от АЦП станет ниже 100-5=95 и отключится — когда станет выше 100+5=105.
// формирование звукового сигнала.
timerBeep, // таймер формирующий длительность звукового сигнала.
GO=1; // включить конвертирование АЦП.
else if(timer==dlitel && LED==1) // если светодиод включен и timer==dlitel.
CP_ON & // Защита кода включена.
// измерение потенциала между электродами.
От чего возможен такой сбой? Работа самой программы зависит не только от программного кода записанного в контроллер, а также и от данных находящихся в ОЗУ контроллера. Если сама программа из-за свойств FLASH памяти относительно надежно защищена, то ОЗУ более подвержено электромагнитным помехам. Принцип контроля работоспособности программы при помощи сторожевого таймера основан на том, что нормально работающая программа должна в своем основном цикле постоянно сбрасывать в ноль (специальной командой) сторожевой таймер. Если программа «зависла», то нарушается работа основного цикла и таймер не обнуляется.
На основании рассмотренных выше рассуждений спроектируем схему. Остановимся на некоторых особенностях. Соединитель CON1 предназначен для внутрисхемного программирования микроконтроллера. Это избавит от проблемы предварительного программирования контроллера перед пайкой. Для защиты аналогового входа установим диодную сборку BAT54S . Измерительный делитель выполним на резисторах R3 и R5 величиной 510 кОм (этим делителем определяется и входное сопротивление датчика, т.е. его электрическая чувствительность). Для фильтрации установим конденсатор C1 величиной 0,1-0,47 мкФ. Через резистор R2 величиной 10 кОм подадим сигнал на вход AN0.
// настройка портов ввода вывода.
Заказать в интернет-магазине Ворон .
Перед запуском основного цикла необходимо, чтобы все электрические цепи нашей схемы пришли в «нормальное» состояние. У нас есть одна цепь на входе АЦП, которая содержит емкость. Это значит, что ей нужно время, чтобы она зарядилась до необходимого уровня. Если не сделать задержку, то после подачи питания, когда программа войдет в основной цикл, напряжение не успеет на конденсаторе C1 подняться до необходимого уровня.
MCPU_OFF & // Pull-up резистор отключен.
Естественно все мысли по созданию программы трудно полностью изложить. Многое подскажут комментарии. А все остальное можно обсудить на форуме.
Отступление от темы: Почему микроконтроллер, а не операционный усилитель или компаратор. Во первых — наше время — время микроконтроллеров; во вторых -аналоговые устройства подразумевают наличие потенциометров для настройки параметров, «уход нуля» — может со временем приводить к необходимости регулировки чувствительности датчика, что крайне нежелательно для такого рода устройств. При этом чувствительность может возрасти (вызовет ложное «срабатывание» аварии) или наоборот уменьшится (датчик не сработает когда начнется потоп!), а АЦП избавлен от причуд «плавания нуля» — поэтому и выбрали микроконтроллер и ещё плюс — решение всех проблем с логикой работы датчика.
if(BEEP==1) // если была авария.
timer=0; // инициализация таймера индикации светодиода.
// обнуление порта (правда Си тоже это делает)
Измеренное напряжение окажется низким и это будет расценено как аварийная ситуация. Для устранения выдачи ошибочной аварии при включении питания вводится цикл ожидания.
// ||||+------ PSA: предделитель подключен к сторожевому таймеру.
while(GO); // ожидание окончания конвертирования.
#define POROG 100 //80.
GO=1; // включить конвертирование.
IOSCFS_8MHZ & // Тактовый генератор на 8 MHz.
Описание программы для второго типа датчика не приводится, чтобы не перегружать статью. В нем только различаются функции управления выходами. Сигнал индикаторного светодиода выводится на модуль управления. В режиме ожидания — подмигивает, показывает, что датчик исправен и работает. Авария — быстрое мигание. Состояние после аварии — медленное мигание.
if (ADRESPOROG+GISTER) // сравниваем полученное значение из АЦП.
// +---------- GPWU: побуждение по входам GP0, GP1, GP3 отключено.
Построим делитель напряжения на резисторах R1 и R2 , и подключим электроды к одному из резисторов. В «сухом» состоянии, при одинаковых резисторах, мы будем иметь 2,5 V на резисторе R2 (питание 5 V). При попадании воды в зону электродов суммарное сопротивление (электроды + резистор R2 ) начнет уменьшаться, что приведет к понижению напряжения на делителе.
На этом сборка платы закончена, остается запрограммировать контроллер и запаять сигнальный кабель.
Он имеет четыре порта ввода/вывода, на «борту» есть АЦП, что вполне достаточно для создания датчика контроля протечки воды.
#define GISTER 5 //20.
Первоначально необходимо сконфигурировать PIC-контроллер под наши требования, то-есть, настроить регистр конфигурации. В этом регистре настраиваются основные свойства контроллера: частота тактового генератора, использование вывода сброса, работа сторожевого таймера, защита кода памяти программ… Независимо от того насколько полно описывается работа в подобных статьях, всегда для полного знакомства необходимо обращаться к оригиналу описания на PIC-контроллер.
if(ALARM==1)BEEP=1; // защелка сигнала аварии.
Сигнал управление реле — в режиме ожидания разомкнут, авария и после аварии — замкнут. Сама программа еще проще.
WDTE_ON & // Сторожевой таймер включен.
Форма платы предусматривает возможность крепления кабеля пластиковым зажимом и установку тактовую кнопки (в этом проекте не используется). Есть контакты для внутрисхемного программирования контроллера, что удобно и в изготовлении и на этапе проектирования, разработки и отладки.
В таблице приведен тип, необходимое количество деталей для сборки датчика, а также ссылки, по которым можно реально приобрести детали.
Комплектующие для самостоятельной сборки.
// ||+-------- T0CS: вход таймера подключен к внутреннему генератору.
После этого мы должны описать какие переменные мы будем использовать в программе.
Габаритные размеры платы и сборочный чертеж.
#define LED GP1 // порт индикации.
— датчик для работы в комплексе с модулем управления аварийным клапаном водоснабжения. — автономный датчик протечки воды со звуковой сигнализацией — это для тех, у кого пока нет возможности поставить аварийный клапан для отсечки воды, но есть желание получить, хотя бы звуковую сигнализацию.
Памятка покупателю на готовое изделие.
// главный цикл работы.
Почему сразу С? Потому, что язык С в понимании проще для начинающих.
Сборку датчика контроля протечки воды начинайте с запайки PIC-контроллера и стабилизатора напряжения. Далее запаяйте керамические конденсаторы и резисторы. Следующими идут диодные сборки, стабилитрон, и транзисторы. В конце мы запаиваем электролитические конденсаторы и «пищалку».
В качестве основы проекта был выбран микроконтроллер PIC-контроллер PIC10F222 в корпусе SOT-23. Это самый маленький и самый простой контроллер.
// |+--------- ANS0: вывод GP0/AN0 настроен как аналоговый.
bit BEEP, // флаг аварии протечки.
Принцип контроля протечки воды.
dlitel, // переменная формирующая период мигания светового индикатора.
Принцип на котором будет работать датчик — это измерение падения напряжения между контактами (электродами), которые будут контролировать наличие воды. Датчик будет иметь 4 ножки (электрода), на которых он будет стоять на полу. Любая трубопроводная вода содержит большое количество солей, что делают её проводящей электричество.
Для отправки комментария вам необходимо авторизоваться.
// настройка регистра OPTION.
Схема датчика контроля протечки воды.
ЗАКАЗАТЬ М0ЖНО НА ОФИЦИАЛЬНOM МАГАЗИНЕ МAГAЗИНЕ
Датчик контроля протечки воды ch-c0020.
Для первого варианта датчика предусмотрим возможность установки звукоизлучателя (пищалки), а также светодиода индикации. Для второго варианта — выходы индикации работы датчика и сигнал аварии. Этот проект рекомендуется также для начинающих разработчиков, кто впервые столкнулся с программированием микроконтроллеров.
И хорошая мысля — приходит опосля…
// управление зуммером - подачей звукового сигнала.
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |