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

Оптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения…

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

Microchip MPLABX v5.45 project. Пароль по просьбе … пишите на почту или в комментариях … Пароль на прохання … пишіть на пошту або в коментарях … Password upon request … write to mail or in the comments … Метки:PIC10F320

Датчик приближения от Румена Желева

Проект на Болгарском языке. Автор Румен Желев. Болгария. Проект,  датчик приближения в котором устранены все недостатки влияния засветки посторонними источниками. Применен совершенно оригинальный принцип контроля ИК излучения. Основната идея на този датчик на приближение (proximity sensor) е да се управлява светодиодна лента която се използва като осветление над кухненски плот, чрез приближаване с ръка или …
Читать далее Датчик приближения от Румена Желева

Первый проект для самых маленьких


Современные микроконтроллеры, это довольно сложные по функциональности устройства. Но есть образцы которые представляют устройство с минимальной конфигурацией, но  обладают всеми первоначальными устройствами для понимания работы PIC-контроллеров.

PIC10F222 / PIC10F320/322

Самая простая архитектура, которая позволит, понять принцип работы микроконтроллера под управление программы.

pic10_01

Контроллер имеет 4 порта ввода вывода, 3 двунаправленных, т. е. могут как выводить информацию из контроллера, так и получать информацию из вне. Один порт, который может только работать на ввод данных.

Восьми битный АЦП работы с аналоговыми сигналами. Он позволяет сигналы в диапазоне 0-5 вольт преобразовывать в числовое значение в диапазоне от 0 до 255.

Восьми битный таймер для подсчета импульсов. Таймер может работать как от внутреннего генератора, так и с импульсами с “внешнего мира”. Таймер имеет предварительный делитель, который позволяет расширить диапазон подсчитываемых импульсов.

Двухуровневый стек – позволяющий вызывать в программе функции в два уровня вложения.

Сторожевой таймер – для контроля работы программы.

Для обучения необходимо собрать схему с применением PIC-контроллера. Для это можно использовать любую демо-плату.

К сожалению для обучения необходимо наличие программатора. Рекомендую использовать PICKIT-2, PICKIT-3.

Схема примера для обучения.

pic10_02

 Резистор R1 для тестирования работы АЦП контроллера. Кнопки PB1 и PB2 предназначены для проведения опытов по вводу цифровых данных. Светодиоды LD1 и LD2 для индикации выполнения запрограммированных функций.

И так первое собираем схему на демо-плате.

Второе создаем проект.

Загружаем MPLAB®X.

pic10_03

Создаем новый проект

pic10_04

Выбираем тип проекта

pic10_05

Выбираем контроллер

pic10_06

Нажать продолжить

pic10_07

pic10_08

Выбираем компилятор для проекта.

pic10_09

Придумаем имя проекта, а также создадим каталог для проекта, выберем кодировку windows-1251.

pic10_10

Создаем рабочий файл – с именем main.

pic10_11

и вот оно начало

pic10_12


Прошло время и вышел на первое место PIC10F320/322 это уже полноценный микроконтроллер изучая который можно получить практически полное понятие о работе и функциях микроконтроллера.

Все примеры написаны на Microchip MPLAB XC8 C Compiler (Free Mode) V1.30

Функциональная схема микроконтроллера

cat_chem_ob_00

Еще раз с чего начинаем, как подключить микроконтроллер к питающему напряжению и как подключить к программатору:

cat_chem_ob_01

 Для начала работы необходимо иметь не только микроконтроллер паяльник, а и тестер для возможности измерения напряжения и тока.

 Первое на что начинающему электронщику надо обратить внимание, для питания необходимо взять пятивольтовый стабилизатор для нашего примера подойдет 78L05. Добавьте последовательно диод для защиты от неправильного подключения питания, это спасет от первых ошибок. Основная проблема по работе с таким микроконтроллером это его габариты, второе, что для тренировки необходимо выполнить условие внутрисхемного программирования. Для подключения внешних устройств к микроконтроллеру, необходимо учитывать, что должны быть подключены через резисторы с сопротивлением не ниже 680 ом. При первом включении проверьте напряжение на выходе стабилизатора должно быть 5 вольт и замерьте ток потребления, он не должен превышать нескольких миллиампер.

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

 В PIC10F320 4 порта через которые он моде общаться с внешним миром, 3 двунаправленные, т.е. по ним может как поступать в контролер информация, так и выводиться из микроконтроллера обработанные данные, и один однонаправленный только на вход, это связана с техническими ограничениями.

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


Этап первый конфигурирование:

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

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

Следующий этап это настроить работу основной модуль это тактовый генератор:

cat_chem_ob_02

В таком маленьком контроллера, такой функционально навороченный генератор. По функциональной схеме видно, что можно использовать для тактирования микропроцессора как внутренний генератор, так и внешний источник тактовых импульсов, эта функция переключается в регистре конфигурации бит FOSC. Если мы выбираем внутренний генератор, то можно выбрать широкий диапазон частот. Нам необходимо учитывать только одно, если нет необходимости в быстроте обработки данных, то выбираем максимально низкую частоту для экономии потребления. Хочу оговориться в микроконтроллере есть константа калибровки частоты внутреннего генератора и необходима его загрузка, но эту функцию выполнить компилятор Си автоматически. Для нашего проекта выполним настройку (она также будет изменяться в зависимости от необходимости):

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

cat_chem_ob_03

 Таймер тактируется от собственного генератора и имеет предделитель для настройки периода срабатывания. Мы настроим на максимальное время 256 секунд. После коррекции программа примет вид

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

Для удобства и краткости программы опишем наши порты, например порт индикации назовем LED, а порт тактовой кнопки TK0.

 На этом основная настройка выполнена, теперь надо протестировать работу. Напишем функцию которая позволит при замыкании кнопки включать светодиод.

Текст программы для загрузки [wpdm_file id=301 template=”link-template-calltoaction3.php”] функция программы нажимаем кнопку – светодиод загорается.


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

Логика работы следующая:

  1. Проверяем нажатие кнопки, т.е. проверяем уровень.
    1. Если уровень не соответствует нажатой кнопки пропускаем функцию и сбрасываем флаг  кнопка нажата.
    2. Если уровень соответствует нажатой кнопке – выполним ожидание 10 мСек. которое необходимо для успокоения переходных помех при нажатии тактовый кнопки.
  2. Опять проверяем уровень на таковой кнопки
    1. Если уровень высокий пропускаем функцию, считаем, что это просто помеха была
    2. Если уровень низкий проверяем состояние флага  кнопка нажата
  3. Если бит высокий, то мы считаем, что кнопка уже нажата и выполняется удержание, функция пропускается
  4. Если бит низкий то это значит, что кнопка еще не нажималась и необходимо активировать переключение светодиода
  5. Выполняем переключение и установку бита кнопка нажата, для блокировки повторения выполнения переключения если при следующем цикле клавиша будет удерживаться.

Текст программы главного цикла

Но для реализации этого фрагмента необходимо описать следующие параметры:

#define _XTAL_FREQ 16000000 // тактовая частота – указать компилятору рабочую тактовую частоту

bit NAG; // флаг кнопки нажатия – описать флаг

Скачать программу [wpdm_file id=302 template=”link-template-calltoaction3.php”]


Теперь заставим светодиод мигать, для этого будем использовать макросы задержки _delay(х), __delay_ms(х), __delay_us(х).

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

cat_chem_ob_04

Настройка таймера

При такой настройке мы получим прерывание с частотой 61,035 Гц  (61=4000000/256/256).

Настройка прерываний

Разрешим прерывание от таймера и разрешим глобальные прерывания.

 Сам текст функции прерывания

 В этой функции переменой timer_sek выполняется функция дополнительного делителя. При значении 30 время выполнения составляет приблизительно 0,5 секунды.

Теперь усложним задачу и добавим функция мигания светодиода с управлением длительностью таймером и функция выключения включения одной кнопкой.

Файл для загрузки [wpdm_file id=303 template=”link-template-calltoaction3.php”]


Измерение температуры при помощи модуля индикатора температуры

cat_chem_ob_05

Для этого необходимо включить два модуля в работу

 Для контроля в главный цикл вставим измерение и индикацию. Значение настроено приблизительно температуру тела человека, при нагреве от тепла руки будет переключение индикации. Если температура ниже будет гореть светодиод, при нагреве отключаться. Эта функция носит название на нагрев. Для охлаждения необходимо знак в “<” на “>“.

Файл примера для загрузки [wpdm_file id=304 template=”link-template-calltoaction3.php”]


Пример простая “мигалка”. Используется для управления три кнопки, в две предназначенные задания частоты мигания, третья для включения выключения мигания.

Файл для загрузки [wpdm_file id=306 template=”link-template-calltoaction3.php”]


Для дальнейшего развития, читайте проекты:

Самый простой диммер для светодиодного освещения
Гаджеты для домашней автоматики – Емкостной сенсор
Гаджеты для домашней автоматики – Датчик приближения
Гаджеты для домашней автоматики – Датчик движения

Датчик приближения от Румена Желева



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


  • Гаджеты для домашней автоматики – Емкостной сенсорГаджеты для домашней автоматики – Емкостной сенсор
    Управление светодиодным освещением – Сенсор емкостной. Данный гаджет предназначен для управления освещением где необходимо включением освещение сенсорным прикосновением. Датчик позволяет управлять светодиодной нагрузкой в виде модулей или светодиодных лент освещения. Питание …
  • CCP – модуль в режиме Compare на примере PIC18CCP – модуль в режиме Compare на примере PIC18
    CCP – модуль можно использовать в трех режимах: Capture – позволяет захватывать входной сигнал и определять его параметры (длительность или частоту). Дополнительно управлять внутренними модулями. Compare –  позволяет формировать импульсы …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из трудоемкого варианта …
  • Бегущие огни на WS2812BБегущие огни на WS2812B
    В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по работе с …
  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
    Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная прошивка. …
  • Контроллер управления светодиодным освещением с дистанционным управлениемКонтроллер управления светодиодным освещением с дистанционным управлением
    Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще можно увидеть …
  • MAX7219/21 и 8х8 LED дисплеиMAX7219/21 и 8х8 LED дисплеи
    MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно Метки:MAX7219, MAX7221
  • Проект с использованием MCC часть 16Проект с использованием MCC часть 16
    Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код

    [crayon-614f5cb721c25103272557/]

    Суть его проста постоянно в главном цикле …

  • Применение typedef, struct и unionПрименение typedef, struct и union
    Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ Синтаксис структур. …
  • Проект с использованием MCC часть 13Проект с использованием MCC часть 13
    Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать. Для начала откроем наш заголовочный файл в нем очень много букв: По этому. да …