Наверное мы слишком спешим... Вот если вспомнить относительно недавнее прошлое, которое еще можно увидеть в кинофильмах, перед глазами встает забавная картинка - ослик ходит по кругу, приводя в движение водяной насос, поднимающий воду из неглубокого колодца...
Однако, времена меняются - мы потребляем все больше, ресурсов - все меньше, а ритм жизни таков, что ждать осла пару дней, чтобы чуть-чуть немножечко помыться - удел философов, способных созерцать собственный пуп до полной остановки сердца.
Все
более мощные моторы качают воду из скважин, глубина которых и не
снилась строителям архаичных колодцев. Печальный факт - грунтовых вод
все меньше и если еще в прошлом веке клЫент хотел "сладкую воду", то
теперь уже согласны на любую - лишь бы мокрая была. Некоторые и до нефти
добуривают :)
Но задача таки есть - представьте себе глЫбокую скважину с очень маленьким дебетом, из которой нужно черпать воду и для полива, и для хозяйственных нужд. Согласовать возможности насоса и колодца - никак не получается и приходится контролировать уровень воды в оном, дабы насос не погорел, качая воздух. И вот тут мы приходим к формированию нашего ТЗ.
Скважина ДОЛЖНА быть оборудована датчиками, показывающими минимальный уровень воды для начала работы насоса и уровень, на котором мотор необходимо выключить. Голь, как обычно, хитра на выдумку и вариантов всяческих поплавковых концевиков понапридумано много. Но у любого датчика есть совершенно мерзопакостная особенность - ну не любят они влажность!!! Впрочем, датчиком может служить и простая, частично изолированая (от стенок скважины), металическая пластина - ей влажность как раз и нужна :) А точнее - нужна вода, чтобы замкнуть ее со стенками скважины или с какой-нить железякой на дне колодца. Проблема с теми датчиками одна - питать их надо переменным током, чтобы предотвратить накопление солей, образующихся в результате электролиза.
Вторым аспектом проблемы является требования к величине тока, протекающего через датчик. С одной стороны, чем меньше ток, тем меньше разрушается поверхность датчика и меньше ионизируется водичка. С другой - малые токи предполагают возникновение наводок и прочих мерзостей, связаных с перетеканием токов между электрической сетью и реальным локальным заземлением в виде конструкции скважины.
Для решения этой задачи, помимо банальной развязки цепей питания датчиков, есть неплохое решение - использование микрокомпьютера для кратковременных замеров. Ведь длительность работы датчика так же важна в процессе кипячения водички переменным током :)
Но мы немного увлеклись. Пожалуй настало время прикинуть варианты...
данный мегадевайс способен проверять наличие нагрузки в обоих полупериодах сигнала.
это устройство работает только на одной полуволне, вторая - тупо восстанавливает датчик.
Ну и что мы имеем? На вход ключа подаем сигнал генератора. Ключик накачивает наш импульсный трансформатор мощности ключа и трансформатора - минимальны. Запалить светодиод в оптопаре - сильно много тока не нужно. Выход оптопары отрабатывает наличие замыкания на разъеме J1. Вроде все просто... Есть только маленький нюанс - емкость подводящих к датчику проводов и емкость самого датчика будут критичны, поскольку, заряжаясь, будет давать ложное срабатывание в начале меандра, вне зависимости от наличия замыкания на датчике. Для ликвидации данного безобразия у нас есть вариантики - суровая подтяжка оптопары и отсрочка измерений несколько исправят дело, но ухудшит чувствительность датчика, поскольку для борьбы с той же подтяжкой понадобятся большие токи на входе оптрона. Да и обвязка дополнительная.... ФИ!
Мы будем использовать переключабельность направления пинов микроконтроллера для подавления данного эффекта.
Режим генератора микросхемы, при этом, задается так:
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
//TCCR0A=0x02;
//TCCR0B=0x03;
stop_gen(); // собственно тут в TCCR0B заносится 0x00, чтоб не гудел зазря
OCR0A=0x01;
OCR0B=0x00;
Прерывание таймера по достижению OCR0A. а там уже все остальные чудеса.
void stop_gen(void) {
TCCR0A=0x02;
TCCR0B=0x00;
PORTD.5 = 0;
}
void start_gen(void) {
gc = 11;
TCCR0A=0x02;
TCCR0B=0x03;
TCNT0=0x00;
DDRB = 0x01;
PORTD.5 = 1;
}
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void) {
#asm("cli")
if (DDRB.0) DDRB = 0;
else {
DDRB = 0x01;
gc--;
if (!gc) stop_gen(); else PORTD.5 = !PORTD.5;
}
#asm("sei")
}
Вай! Чуть не забыл!
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTB=0xFF;
DDRB=0x00;
Почему это возможно? Пяток миллиампер, которые транзистор оптопары способен утянуть с ВЫХОДА микроконтроллера абсолютно никак не влияет на здоровье оного, а восстановление сигнала (логического 0, если таковой присутствует) произойдет быстро и безболезненно. И все это при минимальной обвязке входов.
Результат сиих измышлений в виде схемы, печатки и прошивки в приложениях к статье.
В качестве импульсного трансформатора использован сетевой дроссель импульсного блока питания. Индуктивностью 25мГн. Для формирования нескольких миллиампер на датчиках его вполне достаточно, а изоляция между обмотками у него зверская :)
Из излишеств - двухполупериодный замер и стабилизатор тока в питании релюхи. Но это дело вкуса...
Логика работы схемы такова:
При отсутствии сигнала с датчика на баке, датчик верхнего уровня включает мотор. Мотор работает либо до заполнения бака, либо до потери сигнала от датчика нижнего уровня.
Кнопки ручного включения и отключения мотора работают 10 минут после первого нажатия из автоматического режима.
Ручное включение в состоянии, когда нижний уровень присутствует, будет удерживаться вплоть до исчезновения сигнала с датчика нижнего уровня. Если во время ручного включения датчик бака был не активен, контроллер так же автоматически выключится по заполнении бака. В остальных случаях, мотор будет качать до победного...
Фьюзы контроллера: