Простой оптический сенсор приближения

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


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

Чтобы использовать такие устройства в зоне насыщенной паразитным ИК излучением (например, этим шалят люминесцентные газоразрядные источники света) необходимо использовать модуляцию источника сигнала и естественно приемник позволяющий избирательно реагировать на модулированный сигнал. Для этого есть простое решение, это фотоприёмники для ИК дистанционного управления. Но промодулировать сигнал на частоте работы фотоприёмника недостаточно. Большинство ИК фотоприёмников используют механизм подавления несущей. Что это такое? Если на вход фотоприёмника поступает сигнал длительностью более допустимой, то считается, что это помеха и приемник отключается от декодирования. Для восстановления работоспособности необходимо устранить помеху такого рода, прервать сигнал. В принципе на этом основано подавление ИК дистанционного управления, если использовать мощный ИК сигнал с непрерывной модуляцией, то легко подавить работу ИК пультов дистанционного управления. Но речь не об этом.

Для начала нам необходимо модулировать ИК сигнал на частоте работы фотоприёмника, а второе создать импульсы с такой длительностью, какую фотоприёмник будет воспринимать как нормальный сигнал. И последнее условие, это передавая импульс света, измерять длительность полученного импульса и сравнивать с заданной длительностью. Т.е. еще раз по порядку, мы формируем импульс заданной длительностью, модулируем этот импульс несущей заданной частоты, подаём сигнал на светодиод. Свет от светодиода излучается в контролируемое пространство и естественно отражается от разных объектов, но амплитуда будет зависит от расстояния до объектов. Когда в области появляется предмет, вблизи нашего датчика, отражённый свет имеет большую амплитуду, необходимую для нашего фотоприёмника для начала декодирования. На выходе приёмника мы получим восстановленный (без модуляции) наш импульс. Так как мы также можем таким образом получить такие же импульсы от другим источников, мы проверяем его временные параметры – длительность и синхронизацию с нашим передатчиком.

Достаточно для надёжности декодирования наличия объекта в области сенсора, это подсчитать последовательное совпадения нескольких передач импульсов, чтобы гарантировать функцию активации исполнительного механизма.

В проекте рассматривается принцип для формирования одиночного импульса и его проверки на достоверность и это достаточно в 99% задач. Но при необходимости можно сформировать последовательность импульсов, но это уже будет напоминать дистанционное ИК управление.

Начинаем с того, что выбираем МК на котором можно реализовать проект. Нам необходимо возможность сформировать несущию частоту заданого значения для нашего фотоприёмника, для этого подойдут устройства на борту которых есть NCO модуль. По выводам: – нам нужен один вход для ИК приёмника, один выход – для светодиода и один выход – для управления, например. реле. Т.е. контроллер с 6 выводами вполне подойдёт. И это будет старый и знакомый (как минимум для меня) PIC10F320.

Нарисуем схему устройства. Добавим немого Т.З. – питание от сети переменного тока 230 вольт (если у вас нет такой необходимости и у вас питание в проекте  – 5 вольт, то все вместе с стабилизатором можно исключить).

Схема.

По схеме в качестве фотоприёмника используется китайское чудо LF0038M, но можно применить любой с питанием 5 вольт. Он подключается через RC фильтр по питанию, это важно и чем лучше фильтр, тем надёжнее, некоторые фотоприёмники имеют экран, для пром. применения это еще надёжнее.

Светодиод выбирается на волновой диапазон применяемый с фотоприёмником, от этого будет зависит и чувствительность, обратите внимание, ИК светодиоды выпускаются в диапазоне от 820 и выше. И при применении не той длительности вы можете обнаружить, что с одним светодиодом у вас будет чувствительность устройства, например, на 2 метра и более, а на другом 5 см!!. При одном и том же токе через светодиод.

Еще одна особенность таких устройств которые всебе совмещают и передатчик и приёмник, ИК приёмники очень чувствительны к помехам, а особенно к несущей частоте. У нас и вход и силовой выход на светодиод буквально в одном миллиметре. Поэтому мои рекомендации светодиод подключаете на минимальном расстоянии от МК, чтобы длина цепи питания светодиода была минимальной.

Как это может быть реализовано на печатной плате.

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

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

Напоминание для начинающих ! Не подключайте для программирование устройства подключённого к сети  230 вольт, это опасно для вас и для вашего ПК, одному будет пипец точно.

Проект.

Для программирования используем МСС, это проще и быстрее. Основные модули которые нам нужны NCO генератор, классная вещь можно не заморачиваясь получить любую требуемую частоту и таймер для измерения длительности импульсов.

Но естественно для начала надо начать с настройки системного генератора.

 

Частота 16 МГц, включён сторожевой таймер, низковольтное программирование отключено.

Выводы конфигурирование.

Выход NCO настраиваем на порт РА4, это выход управления светодиодом, вход ИК приёмника на вход РА0, выход управление реле настраиваем на вывод РА1. Выводы для реле и светодиода конфигурируем на выход:

По прерываниям, мы конфигурируем еще вход от ИК приёмника, для формирования при любом фронте.

У нас в прерываниях будет присутствовать обработка двух функций от таймера и от изменения состояния по входу:

 

Теперь по сути самого проекта, внем заложено в зависимости от требование создать три устройства:

  • Оптический конечный выключатель
  • Выключатель (влючено/выключено)
  • Выключатель с таймером авто-выключения через 2 часа

 

Первый вариант Оптический концевик – это функции есть объект в области обнаружения датчика, реле активировано, нет объекта реле деактивировано.  Второй вариант – выключатель, это вариант поднесли руку к сенсору реле включено, второй поднесли руку, реле включено. И тритий вариант, выключатель, но если вы забыли выключить свет, то он автоматически отключит реле через 2 часа.

Для этого вводим условие в проекте:

/*
 * < оптический концевик,> (все define закомментированы)
 * < выключатель,> (#define ON_OFF - снять комментарий)
 * <выключатель с таймером авто выключения через 2 часа, > (снять комментарий с 
 * #define ON_OFF и #define AUTO_OFF)
 */

#include "mcc_generated_files/mcc.h"
//------------------------------------------------------------------------------
//#define ONESEC    // режим задержки отключения 2 сек.
//#define ON_OFF    // активация режима выключателя, закомментировать для режима оптического-концевика
//#define AUTO_OFF  // активация режима авто отключения нагрузки

//------------------------------------------------------------------------------

Для работы нашей системы создадим две функции которые будут вызываться через прерывания. Эти функции будут управлять нашим управляющим выводом к которому подключено к реле. За отключение реле будут отвечать другая функция и её необходимо поместить в прерывание таймера.

Функция отключения реле:

// отключение реле по таймера

void Pele_OFF (void)
{
    timer_dl++;

#ifdef ON_OFF
    if (timer_on_off) timer_on_off--;
#ifdef AUTO_OFF
    if (RELE_LAT)
    {
        if (tim_pred) tim_pred--;
        else
        {
            tim_pred = 8000;
            //период 1 секунда
            if (tim_sec) tim_sec--;
            else
            {
                // период 1 минута
                tim_sec = 59;
                if (tim_min) tim_min--;
                else
                {
                    tim_min = OFFmin;
                    RELE_SetLow ();
                }
            }
        }
    }
#endif
#endif

#ifdef ONESEC
    if (timer_dl > 16000)//1 sec
#else
    if (timer_dl > 8000)//1 sec
#endif
    {
#ifndef ON_OFF
        RELE_SetLow ();
#endif
        timer_dl = 0;
    }
}

Функция включения реле:

// включение реле по прерыванию на входе

void Pele_ON (void)
{
    if (IR_GetValue ())
    {
        if (timer_dl > 40 && timer_dl < 70)
        {
#ifndef ON_OFF
            RELE_SetHigh ();
#else
            if (!timer_on_off)
            {
#ifdef AUTO_OFF
                tim_sec = 59;
                tim_min = OFFmin;
#endif
                RELE_Toggle ();
            }
            timer_on_off = 10000; // задержка на повторное включение
#endif
        }
    }
    timer_dl = 0;
}
//--------------------------------------------------------------------

Используя функции обратного вызова, внедрем наши функции в прерывания МК.

void main (void)
{
    // initialize the device
    SYSTEM_Initialize ();

    CLRWDT (); // сброс сторожевого таймера

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    //--------------------------------------------------------------------------
    TMR2_SetInterruptHandler (&Pele_OFF); // выключение реле
    //--------------------------------------------------------------------------
    IOCAF0_SetInterruptHandler (&Pele_ON); // включение реле
    //--------------------------------------------------------------------------

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable ();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable ();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

И активируем прерывания.

В основном цикле программы мы формируем импульс необходимой длительности, для управления светодиодом, формируется он включением и выключение NCO генератора:

    while (1)
    {
        CLRWDT (); // сброс сторожевого таймера
        // Add your application code

        NCO1CONbits.N1EN = 1;
        __delay_ms (5);

#ifdef ONESEC
        NCO1CONbits.N1EN = 0;
        __delay_ms (1000);
#else
        NCO1CONbits.N1EN = 0;
        __delay_ms (100);
#endif



    }
}//----------------------------------------------------

Ну по программе все.


Возможный вариант реализации оптического концевика для промышленного применения.


Дополнительные материалы к проекту для его повторения:

Значок

Простой оптический сенсор приближения (проект) 0.00 KB 12 downloads

Microchip MPLABX v5.45 project. Пароль по просьбе ... пишите...

Значок

Простой оптический сенсор приближения (прошивка) 603 Б 1866 downloads

Прошивка версия оптического концевого выключателя. ...

Значок

Простой оптический сенсор приближения (прошивка, режим выключателя 2) 600 Б 1841 downloads

Простой оптический сенсор приближения (прошивка,...
Значок

Простой оптический сенсор приближения (прошивка, режим выключателя) 0.00 KB 1853 downloads

Простой оптический сенсор приближения (прошивка,...
Значок

Простой оптический сенсор приближения (прошивка, shutdown delay mode 2 sec.) 600 Б 1837 downloads

Режим задержки отключения 2 сек. shutdown delay mode 2...
Значок

Простой оптический сенсор приближения 3D модель 2 МБ 1862 downloads

3D модель прототипа концевого выключателя ...

Это может быть интересно


  • Счетчики посетителейСчетчики посетителей
    Просмотров: 1175 Вас сосчитали!? или счетчики посетителей.   Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
  • Проект с использованием MCC часть 08Проект с использованием MCC часть 08
    Просмотров: 839 И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, …
  • Стабилизатор тока на SN3350, часть 2Стабилизатор тока на SN3350, часть 2
    Просмотров: 984 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …
  • Емкостной сенсорЕмкостной сенсор
    Просмотров: 2716 Изучаем изготовление емкостных сенсоров на PIC-микроконтроллере. Конструкция емкостных сенсоров имеет вид: Емкостные сенсоры строятся по схеме высокочастотного генератора, сам принцип основан на измерение частоты этого генератора. Частота зависит …
  • Униполярный шаговый двигательУниполярный шаговый двигатель
    Просмотров: 1956     В приводах различных устройств часто применяются шаговые двигатели, Шаговый двигатели различают двух типов униполярные – когда обмотки коммутируются током текущим только в одну сторону, например при …
  • Простой цифровой милливольтметр постоянного токаПростой цифровой милливольтметр постоянного тока
    Просмотров: 3736 Простой цифровой вольтметр постоянного тока. Три диапазона измерений с автоматическим переключением 1 – 0,001 – 0,999 V, 2 – 0,01-9,99 V, 3 – 0,1-99,9. Четыре управляемых выхода с возможностью задания функции контроля …
  • VU Meter Tower ART – part 2VU Meter Tower ART – part 2
    Просмотров: 849 Проект – VU Meter Tower ART получил продолжение в своем развитии. Теперь можно заказать набор деталей из акрила для самостоятельной сборки. В проект корпуса внесено целый ряд доработок, …
  • MPLAB® Harmony – или как это просто! Часть 3.MPLAB® Harmony – или как это просто! Часть 3.
    Просмотров: 1866 Часть третья – копнём немного глубже. Вы наверное заметили, что во второй главе, вроде сначала все шло как по маслу, а потом, что бы заморгали светики, я вставил …
  • Простой цифровой вольтметр ch-c3200Простой цифровой вольтметр ch-c3200
    Просмотров: 2281 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …
  • Дифференциальный терморегуляторДифференциальный терморегулятор
    Просмотров: 3685 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …



 

 

 

 

 

 

 

Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

4 комментария для “Простой оптический сенсор приближения

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.