Рейтинг@Mail.ru
Датчик уровня на МК своими руками - ДРУиД
Войти
или
Зарегистрироваться
Главная Файлы Видеоматериалы Форум
Карта сайта
Главная -> РУБРИКИ: -> Девайсы для быта -> Датчик уровня на МК

Статья опубликована: 2014-06-18/17:54:00-Admin

Датчик уровня на МК



"Удивительный вопрос, —
Почему я водовоз?
Потому что —  без воды
И ни туды и ни сюды!"

слова В. Лебедева-Кумача, музыка И. Дунаевского

В предыдущей статье описывалась необходимость создания датчика уровня релейного типа. Так как с программированием МК и схемотехникой МЫ уже на ТЫ то и осуществлять задуманное будем на МК. В интернете много различных схем на эту темы, но использование МК в такой примитивной задаче обусловлено несколькими причинами:

  1. Закрепление навыков программирования МК;
  2. Разработка печатных плат в домашних условиях;
  3. Возможность использовать свой алгоритм работы датчика уровня;
  4. Расширение и/или интегрирование в какие - либо готовые решения.

Итак пробежимся по пунктам.

Будем применять на практике те знания, которые получили в процессе изучения МК.

Осваивать ЛУТ технологии и практиковаться в разведении печатных плат.

Придумаем своеобразный алгоритм работы.

Снабдим каким нибудь функционалом, не относящийся к основной задаче.

Ну чтож пора браться за дело: создадим датчик уровня своими руками!

Если используем пластиковую ёмкость, то для регистрации нижнего и верхнего уровня понадобиться 3 электрода. При использовании металической ёмкости электродов будет 2, но их изоляция от корпуса будет основным моментом правильной работы системы.

Мы остановимся на варианте пластиковая емкость + 3 электрода.

Электроды необходимо изготовить или из нержавеющей стали (например из электродов для сварки нержавейки), или из меди (латуни, бронзы). Так как корозия в воде быстро приведет в негодность другие материаллы. Материал подобрали. Разберемся с креплением электродов на стенке ёмкости.

Внешний вид электрода показан на рисунке 1.

рисунок 1 Резьба нужна для крепления на стенке емкости. Накручиваем гайки, подкладываем шайбы, резиновые уплотнители и ВУАЛЯ электроды на месте. Места креплений электродов выбираем как НАМ удобно, один ниже всех - это общий, второй на уровне того нижнего уровня при котором должен включаться насос для заполнения ёмкости, третий на уровне отключения. С механикой разобрались. Приступаем к разработке электронной части устройства.

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

Раз уж МЫ используем микроконтролер, то и его ресурсы будем задействовать по-максимому.

Применем таймер для формирование времени опроса электродов. Ну к примеру в 5 секунд :) У кого то может стоять пожарный гидрант и 5 секунд слишком много для опроса, тогда можно поставить и 50 мс время опроса, дело сугубо личное. Итак, каждые пять секунд МК будет опрашивать электроды на предмет находятся они в воде или нет, и по результам опроса включать или выключать насос. Отлично, но ведь в эти 5 секунд нет смысла гонять ток между электродами, расщепляя воду на примитивные состоявляющие: водород и кислород. Поэтому будем обестачивать общий электрод, размыкая тем самым цепь. Электрическая схема такого алгоритма приведена на рисунке 2.

рисунок 2По прошествии 5 секунд, МК открывает транзистор, тем самым подавая на общий электрод потенциал земли, и через сопротивление воды на двух уровневых электродах устонавливается потенциал земли или питания, взависимости от наличия воды.

Далее от состояния электродов включаем или выключаем насос.

Программная реализация показана ниже и прокоментированна.

/* 
Датчик уровня
 */

#include 

#define _XTAL_FREQ 8000000 //тактовая частота МК

//конфигурационные биты
#pragma config FOSC = INTRC_NOCLKOUT // INTOSCIO oscillator
#pragma config WDTE = ON //(WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON // Low-Voltage (Single-Supply) 
#pragma config CPD = OFF // (Data EEPROM code protection off)
#pragma config CP = OFF // (Code protection off)

//Препроцесорные определения
#define Nas RB3
#define Com RB0
#define Up RB1
#define Down RB2
#define Clock 10 // число переполнений для получения нужной задержки

//глобальные переменные
unsigned char flag=0; //флаг для обработки истекшего времени
unsigned char count; //счетчик времени

//обработка прерывания
void interrupt isr(void)
{
    if (PIR1bits.TMR1IF) //флаг от переполнениятаймера 1
    {
        if (count > Clock) { // при переполнении взводим 
                            //флаг о прошествии заданного времени
            count =0;
            flag=1;
        }
        else count++;
        PIR1bits.TMR1IF=0;
    }
}
//инициализация МК
void pic_init(void) {
    ANSEL=0;
    ANSELH=0; //все входа как цифровые порты ввода/вывода
    TRISB=0xF6; //RB0,RB3 на выход, остальные на вход 
    PORTB=0; // начальные уровние на PORTB
    T1CON=0b00110000; //настройка таймера 1
    PIE1bits.TMR1IE=1; //разрешение прерывание от переполнения таймера
}

void main (void) {
    pic_init(); //инициализация МК
    INTCONbits.GIE=1; //разрешения глобальных прерываний
    INTCONbits.PEIE=1;
    T1CONbits.TMR1ON=1; //запуск таймера 1
    while(1) {
        CLRWDT(); // сброс сторожевого таймера
        if (flag){
            Com=1; // по флагу подаем напряжение на общий электрод
            __delay_ms(5); //небольшая зайдержка
            if (!Up) Nas=0; //если достигнут максимум, выключаем насос
            if (Down) Nas=1; //если ниже минимума выключаем насос
            __delay_ms(1);
            Com=0; //обестачиваем общий электрод
            flag=0; //сбрасываем флаг
        }
    }
}

Разведение печатной платы оставляю на ВАШЕ усмотрения, исходя из электронных компонентов, имеющихся у ВАС в наличии. Разводим, ЛУТим, травим, паяем, заливаем прошивку (написанную в среде MPLAB X IDE) наслаждаемся работой.

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

 

З.Ы. Вопросы, комментарии, предложения складываем тут.

 


Просмотров: 4246



Комментарии: (0)

Оставить комментарий

Да, Я Хочу Всегда Быть В Курсе Новых Событий На Сайте!

Подпишитесь прямо сейчас, и получайте обновления на свой E-Mail:

Ваш E-Mail в безопасности


Рекомендованные статьи:



Поговорим о диммере. Что это за "чудо" прибор?! Для чего он нужен в быту или в системе "умный" дом. Какие типы диммеров бывают.


На чём разрабатывать девайсы своими руками?


РУБРИКИ:








Последняя статья:

Часть I. Статья №6. Верстка подвала – блока футтер

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

Читать далее »


Справка Обратная связь Вопросы и ответы Контакты RSS-лента © 2013-2016, ДРУиД - Дом Рационально-Умный и Душевный
Рейтинг@Mail.ru Яндекс.Метрика