Автоматическое освещение atmega328 (pir)

Содержание

Автоматическое освещение на базе Arduino

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

В качестве контроллера здесь используется недорогая версия Arduino Nano.

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



Шаг второй. Пару слов о датчике движения
Автор не делал датчик движения фиксированным, поскольку была идея сделать его на «рожках», это позволит менять его направление при необходимости. Также пока однозначно не решено, где именно будет крепиться прибор. Особенность датчика в том, что при первом запуске ему надо дать время порядка 10-30 секунд. За это время он сам настроиться, произведет калибровку и будет работать как надо. В принципе, этот момент не так важен.

Шаг третий. Прошивка электроники
Прошивка собрана из кусков различных «туториалов» для датчиков. Работает электроника очень просто, когда датчик обнаруживает движение, идет сравнивание показателей фоторезистора с пороговым значением, которое необходимо для срабатывания реле. Это значение регулируется с помощью потенциометра. Если все требования соблюдены, реле включается на три минуты, можно задать и другой временной промежуток. Далее, если движения нет, то система отключает свет.

Чтобы проверить пороговые значения фоторезистора он был закрыт пальцем и затем автор направил на него фонарик мощностью в 2000 люмен.

В общей сложности с учетом праздников и помощи надежного коллеги – кота, на всю сборку было затрачено порядка 12-15 часов. Для работы системы достаточно источника питания в 4 Ватта, автору он обошелся в 200 рублей.

Подключается система тоже очень просто. Достаточно подключить освещение через реле и подать на электронику через источник питание в 5В.

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

Как научить Arduino управлять светом

Сейчас на просторах китайских интернет магазинов можно найти различные системы освещения, которыми можно управлять, как с помощью пульта, так и с помощью адаптивных методов управления. Например, на www.aliexpress.com продаются лампочки, которыми можно управлять с помощью пульта. Также там продаются лампочки, которые включаются автоматически при регистрации движения или при фиксации слабой освещенности. Каждому начинающему радиолюбителю будет интересно узнать, по какому принципу работает это умное оборудование. Чтобы разобраться с этой задачей, мы подготовили материал, в котором подробно рассмотрим примеры управления светом с помощью Arduino. Проект Ардуино представляет собой платформу, на которой собираются платы, содержащие на своем борту микроконтроллер. Особенностью этих плат является то, что к ним можно подключать десятки различных компонентов, которыми можно управлять через встроенный микроконтроллер. Для нашего материала мы будем использовать такие компоненты, как ИК-приемник, датчик освещенности и PIR-датчик.

Управляем освещением при помощи ИК-пульта

В этом примере мы рассмотрим управление с помощью обычного пульта управления от телевизора. Для этого примера потребуется такое оборудование и ПО:

  • Arduino UNO — одна из разновидностей плат ардуино;
  • Блок твердотельного реле FOTEK SSR-25DA;
  • ИК-приемник TSOP1xxx;
  • Любой ИК-Пульт от телевизора;
  • Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
  • Лампочка, подключаемая к сети 220 вольт.

Первым делом нам нужно установить Arduino IDE. Скачать официальный установщик Arduino IDE можно, перейдя по ссылке www.arduino.cc/en/Main/Software. В нашем случае мы загрузим версию для Windows. Установка достаточно проста и с ней должен справиться любой пользователь. После установки Arduino IDE приступим к непосредственной сборке схемы управления светом. Ниже изображена схема подключения всех компонентов к плате Arduino UNO.

Теперь подключим наш собранный модуль управления светом к компьютеру посредством USB кабеля. Перед запуском Arduino IDE нужно установить модуль IRremote. Загрузить этот модуль можно на GitHub по ссылке https://github.com/z3t0/Arduino-Irremote/archive/master.zip. Загруженный архив нужно распаковать в папку «C:Program FilesArduinolibraries», где Arduino IDE хранит все библиотеки. Теперь можно запустить установленную ранее Arduino IDE. В запущенной программе нам нужно ввести код, изображенный ниже.

Скачать файл этого кода для загрузки в скетч можно по ссылке sketch_1.

Этот код нужен для того, чтобы узнать код кнопки, которую передает ИК-Пульт при нажатии.

В нашем случае мы будем использовать пульт от телевизора Samsung. Ниже показано изображение используемого ИК-Пульта.

Теперь загрузим наш код в микропроцессор и откроем «Монитор порта». На самом пульте нажмем понравившуюся кнопку и посмотрим на результат в «Мониторе порта». В нашем случае высветился код 16523466. Этот код мы и будем использовать для следующего скетча. Теперь загрузим второй код программы в Arduino IDE. Скачать файл этого кода можно по ссылке sketch_2. Обратите внимание, что в 21 первой строке скетча записан код нашей кнопки. Код вашей кнопки будет совершенно другой. Загрузив этот код в микропроцессор, лампочка изначально не будет гореть. Нажав запрограммированную кнопку, мы ее включим. Отключение лампочки производится нажатием этой же кнопки.

Из примера видно, что сделать систему управления светом на базе Arduino совсем несложно. Также стоит отметить, что для этого примера вы можете использовать практически любой ИК-Пульт. Саму же сборку лучше всего поместить в отдельный блок и разместить рядом с лампочкой. Таким образом, при наведении пульта на лампочку, ее можно будет включать и отключать. Еще хотелось бы отметить, что удобней использовать схему с беспроводным Bluetooth адаптером. Такая схема намного функциональней, поскольку передает сигнал через радиоволну, а управление светом производится через смартфон. Но такая схема будет намного дороже рассмотренной из-за стоимости беспроводного Bluetooth адаптера.

Управляем освещением при помощи датчика освещенности

В этом примере наш блок управления светом будет управлять светом автоматически. Поможет ему в этом датчик освещенности, который будет передавать информацию на микроконтроллер о состоянии текущего показателя освещения. Если освещенность очень низкая, то микроконтроллер будет автоматически включать лампочку, подключенную к сети 220 вольт. Такую систему освещения еще называют адаптивной. Для примера сборки схемы с адаптивным освещением потребуется такое оборудование и ПО:

  • Arduino UNO — одна из разновидностей плат ардуино;
  • Блок реле SRD-12VDC-SL-C;
  • Резистор на 10 кОм;
  • Фоторезистор (выступает в роли датчика освещенности);
  • Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
  • Лампочка, подключаемая к сети 220 вольт.

Первым делом соберем схему с помощью этих компонентов изображенную ниже.

Теперь откроем Arduino IDE и внесем в нее такой код:
int s1 = A0; // Выбираем пин для подключения датчика освещенности “Фоторезистора”
int s2; // Переменная, которая будет хранить информацию, получаемую с датчика
void setup() <
Serial.begin(9600); // Устанавливаем последовательный порт для связи
>
void loop() <
// Считываем информацию с датчика:
s2 = analogRead(s1); // Присваиваем значение переменой s2
Serial.println(s2); // Выводим информацию на “Монитор порта” с датчика освещенности
delay(100); // Устанавливаем короткую задержку
>
Этот код не предназначен для включения нашей лампочки. С помощью этого кода мы проверим наш датчик освещенности. Поэтому загрузим этот код в Arduino UNO и откроем «Монитор порта».

В «Мониторе порта» видно, что мы получаем значения с фоторезистора, а это значит, что он нормально функционирует. Теперь пришло время загрузить основной код для автоматического управления светом. Для этого вставьте этот код в Arduino IDE:
int s1 = A0; // Выбираем пин для подключения датчика освещенности “Фоторезистора”
int s2; // Переменная, которая будет хранить информацию, получаемую с датчика
void setup() <
pinMode(2, OUTPUT); // Подключаем второй пин к реле SRD-12VDC-SL-C
Serial.begin(9600); // Устанавливаем последовательный порт для связи
>
void loop() <
// Считываем информацию с датчика:
s2 = analogRead(s1);// Присваиваем значение переменой s2
Serial.println(s2); // Выводим информацию на “Монитор порта” с датчика освещенности
if(s2
Принцип работы этого скетча основан на условном операторе, при котором выполняется условие «s2 int p1 = 8; // Выбираем пин для подключения датчика освещенности “Фоторезистора”
int s1; // Переменная, которая будет хранить информацию, получаемую с датчика
void setup() <
pinMode(2, OUTPUT); // Подключаем второй пин к реле SRD-12VDC-SL-C
Serial.begin(9600); // Устанавливаем последовательный порт для связи
>
void loop() <
s1 = digitalRead(p1); // Считываем информацию с датчика
if (s1 == LOW) < // Условие
Serial.println(“The object does not move”); // Выводим сообщение в “Монитор порта” что объект не найден
digitalWrite(2,LOW); // Отключаем лампочку
>
else <
Serial.println(“The object started moving”); // Выводим сообщение в “Монитор порта” что объект найден
digitalWrite(2,HIGH); //Включаем блок реле SRD-12VDC-SL-C
>
delay(900); // Устанавливаем короткую задержку
>
Принцип работы этой программы детально описан в ее комментариях. Проверить работу датчика можно с помощью «Монитора порта», в котором будут выводиться сообщения «The object started moving» и «The object does not move».

Читайте также:  Мощный преобразователь напряжения 12v / 220v

Подводим итог

В этой статье мы рассмотрели три способа управления светом при помощи датчика движения, фоторезистора и ИК-приемника. Каждый из методов найдет свое применение в различных помещениях и намного упростит управление светом. Также хочется отметить, что вы можете комбинировать эти примеры. Например, можно одновременно использовать датчик приближения и ИК-приемник. Еще хотелось бы напомнить нашим читателям, что все рассмотренные примеры используют прямое подключение к сети 220 В, поэтому будьте предельно осторожны. Если у вас под рукой нет платы Arduino или она еще не дошла из Китая, то мы советуем воспользоваться бесплатным сервисом Autodesk Circuits. Этот сервис представляет собой конструктор с различными компонентами Arduino.

Все платы Arduino и компоненты в этом сервисе виртуальные.

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

Видео по теме

До свидания, ATmega328! Здравствуй, ATmega328PB!

Atmel ATmega328PB

В микроконтроллере (МК) нам всегда не хватает встроенной периферии. Будь то аппаратные каналы ШИМ, АЦП или последовательные интерфейсы обмена данными – в конечном итоге нам всегда хочется иметь хотя бы еще один из них, хотя на самом деле многие из них нам не нужны. Видимо, услышав наши мольбы, на смену популярному 8-разрядному МК ATmega328 [1] Atmel выпустила ATmega328PB [2].

К настоящему времени официального пресс-релиза по ATmega328PB Atmel так и не выпустила, как и не получил массового распространения по дистрибьюторским сетям сам микроконтроллер. В начале 2015 года сообщалось о выходе приборов семейства megaAVR серии «PB» (ATmega168PB, ATmega88PB, ATmega48PB) и возможном релизе ATmega328PB, но если по первым уже имеются какие-то наработки и пользователи применяют их в своих устройствах и делятся впечатлениями, то ATmega328PB до сих пор остается загадкой.

Прежде всего, необходимо подчеркнуть, что ATmega328PB не является полной заменой ATmega328/ATmega328P, а представляет собой новое устройство, однако по выполняемым функциям он обратно совместим с существующим ATmega328. Ранее разработанный для этих устройств программный код будет корректно работать и на новых приборах без изменения существующей конфигурации или включения новых функций, в то время как обратная совместимость кода не гарантируется. Несмотря на то, что серия выпускается только в 32-выводных корпусах TQFP/QFN/MLF, по расположению выводов с ATmega328 она не совместима, о чем более подробно будет сказано ниже.

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

Общие сведения

В высокопроизводительном 8-разрядном AVR RISC микроконтроллере ATmega328PB реализована технология управления питанием picoPower. Он имеет 32 КБ Flash-памяти с поддержкой чтения во время записи, 1 КБ EEPROM и 2 КБ ОЗУ. Пользователю доступны 27 линий ввода/вывода общего назначения, 32 регистра общего назначения, пять таймеров/счетчиков с расширенным функционалом и гибкими настройками, внутренние и внешние прерывания, 8-канальный 10-разрядный АЦП, программируемый сторожевой таймер с отдельным генератором, последовательные интерфейсы USART, TWI и SPI. МК сохраняет полную работоспособность в широком диапазоне напряжений питания от 1.8 В до 5.5 В. Оценить функциональный состав МК можно по блок-схеме на Рисунке 1.

Рисунок 1.Блок-схема микроконтроллера ATmega328PB.

Для поддержки разработчиков компания предлагает оценочный набор ATMEGA328PB-XMINI (серия Xplained Mini), который может использоваться не только для знакомства с возможностями микроконтроллера, но также для разработки и отладки собственных приложений. Выполненная в Arduino-совместимом форм-факторе оценочная плата упростит интеграцию ATmega328PB в пользовательские устройства.

Дополнительные порты ввода/вывода

В ATmega328PB добавлен дополнительный 4-битный порт ввода/вывода PORTE [3:0] (Таблица 1). Две линии ввода/вывода PE2 (вывод 19) и PE3 (вывод 22) мультиплексированы с входами АЦП ADC6 и ADC7. Выводы 3 (GND в ATmega328) и 6 (VCC в ATmega328) заменены на линии ввода/вывода PE0 и PE1, соответственно, при этом PE0 выполняет альтернативную функцию выходного канала аналогового компаратора ACO.

Таблица 1.Функциональные отличия портов
ввода/вывода ATmega328PB
Выводы корпуса
TQFP/MLF
ATmega328ATmega328PB
3GNDPE0/ACO
6VCCPE1
19ADC6ADC6/PE2
22ADC7ADC7/PE3

ATmega328PB стал первым 8-разрядным МК семейства AVR с интегрированным контроллером сенсорного интерфейса QTouch (Peripheral Touch Controller, PTC), обрабатывающим сигналы емкостных сенсоров для определения касания. Как правило, внешние емкостные сенсоры формируются на печатной плате, а их электроды подключаются непосредственно к аналоговому интерфейсу PTC посредством мультиплексирования линий ввода/вывода в микроконтроллере. PTC поддерживает режимы работы как с определением собственной емкости сенсоров, так взаимной.

Первый режим обеспечивает возможность подключения к МК 24 сенсорных кнопок, второй – 144 кнопок. Отлично зарекомендовавшая себя технология QTouch и гибкость настроек контроллера позволяют использовать одновременно оба типа сенсоров, при этом для одного электрода требуется один вывод микроконтроллера. Аппаратная фильтрация, автоматическая калибровка и рекалибровка сенсоров, встроенные схемы компенсации паразитной емкости и регулировка чувствительности повышают надежность сенсорного интерфейса и исключают необходимость использования каких-либо внешних компонентов (Рисунок 2).

Рисунок 2.Блок-схема контроллера QTouch в режиме определения
собственной емкости сенсоров.

Разработка и отладка сенсорного интерфейса для приложений на МК ATmega328PB поддерживается программной средой QTouch Composer с библиотекой QTouch Library, в которой можно создавать различные комбинации сенсорных кнопок, слайдеров, колес и датчиков приближения.

Механизм обнаружения сбоев синхронизации

Clock Failure Detection mechanism (CFD) – еще одно нововведение в ATmega328PB. Это схема цифровой логики с собственным генератором 128 кГц, предназначенная для отслеживания сбоев синхронизации (только для кварцевого резонатора и внешнего источника тактовой частоты) и автоматического переключения на встроенную схему RC-генератора 1 МГц.

Включение механизма контроля синхронизации выполняется автоматически на стадии программирования Fuse-битов выбора источника тактовой частоты (CKSEL) и активизируется только при тактовой частоте выше 256 кГц. При переходе микроконтроллера в режим пониженного энергопотребления схема контроля тактовой частоты отключается, и включается автоматически при пробуждении МК.

Два дополнительных таймера/счетчика

В ATmega328PB интегрированы два дополнительных 16-разрядных таймера/счетчика с отдельными предделителями, блоками сравнения и входами захвата. Таким образом, теперь ATmega328PB имеет два 8-разрядных и три 16-разрядных таймера/счетчика с расширенным набором функций. С добавлением этих таймеров число доступных каналов аппаратной ШИМ выросло до 10 (на ATmega328 их всего 6).

OCM1C2 – модулятор выходов таймеров

Встроенный модулятор Output Compare Modulator (OCM) позволяет генерировать модулированные сигналы. Он использует выходы блоков сравнения (Output Compare Unit B) двух появившихся в ATmega328PB новых 16-разрядных таймеров/счетчиков Timer/Counter3 и Timer/Counter4, о которых было сказано выше. Когда работа модулятора разрешена, два выхода каналов сравнения образуют модулятор, где один канал служит источником несущей частоты, а другой – модулирующей, как это показано на Рисунке 3.

Рисунок 3.Блок-схема модулятора выходов таймеров.

Выходы блоков сравнения Output Compare 3B и Output Compare 4B совместно используют один вывод порта PD2. Имея более высокий приоритет, выходы блоков сравнения (OC3B и OC4B) переопределяют конфигурацию вывода PD2, заданную битом PORTD2. Когда OC3B и OC4B разрешены одновременно, автоматически разрешается работа модулятора.

Дополнительные последовательные интерфейсы обмена данными

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

Универсальный приемопередатчик содержит детектор начала блока данных, который имеет гибкие настройки и может использоваться для пробуждения МК при получении стартового бита. Детектор старт-бита имеет собственный тактовый генератор 8 МГц, поддерживает работу как в асинхронном, так и в синхронном режиме, и может быть сконфигурирован для генерации сигнала прерывания немедленно после определения старт-бита.

Аналоговый компаратор

Выход аналогового компаратора ACO подключен к отдельному выводу микроконтроллера, мультиплексируемому с портом PE0.

Уникальный серийный номер

Узнать уникальный серийный номер ATmega328PB можно посредством чтения определенных регистров ввода/вывода. Он формируется конкатенацией 9 байт, содержащихся в этих регистрах. Регистры доступны только для чтения.

Заключение

Увеличенное количество коммуникационных интерфейсов, 10 каналов ШИМ, контроль тактовой частоты и, самое главное, поддержка сенсорного интерфейса QTouch значительно расширяют область применения микроконтроллера ATmega328PB. Это могут быть промышленные системы контроля и управления, драйверы светодиодных светильников, приборы учета, средства домашней автоматизации. Дополнительная информация доступна в техническом описании.

Микроконтроллер ATmega328PB поддерживается основными программными, аппаратными и системными отладочными инструментами, включая Atmel Studio 6 и Atmel Power Debugger. Кроме того, множество примеров, программных библиотек и вспомогательных инструментов доступно пользователям в Atmel Gallery.

Ссылки

Материалы по теме

Перевод: Vadim по заказу РадиоЛоцман

Автомат освещения на Ардуино

Доброго времени суток уважаемые посетители сайта www.samosdel.ru. Надеюсь данное устройство вам пригодится в Вашем доме. Приступаем.

Предыстория. Столкнулся я с такой ситуацией что у меня под навесом находится 3 прохода, через которые приходится входить/ выходить. Задумался я об освещении. Чтоб можно было включить и выключить его с любой точки. Сейчас у меня ПОКА свет под навесом включается из дома что не совсем удобно, т.к. когда приходишь , например, с работы, уже темно и приходится открывать дом в потемках (свет то включается дома и на весь день его включать… слишком много электричества улетит впустую) что вообще ни разу не удобно. Посмотрел стоимость проходных выключателей. Ужаснулся. Да и выключить свет тоже можно забыть. Решил сделать автомат освещения на известном микроконтроллере Ардуино. Сказано- начал делать.

Читайте также:  Метеостанция на arduino и mr3020 для народного мониторинга

Схема автомата освещения на Ардуино

Во первых подумал что куда подсоединить. Решил поставить кнопки а не выключатели, и их подключить к аналоговому порту т.к. он может принимать значения не только 0 и 1 но и что то среднее между ними, что при большой длине провода до кнопки может вызвать несрабатывание кнопки, аналоговый вход более чувствителен к уровню, но он также чувствителен и к наводке от сети 50 Гц, поэтому на плате я бы порекомендовал поставить между входом А0 и Gnd конденсатор на 0,01-0,1 мкФ (на схеме не показан) дабы наводки стекали с сигнального провода на землю. Кнопок включения можно ставить сколько угодно. Светодиоды тоже планировал ставить над кнопками, чтобы в темноте они светились и указывали местоположение кнопок. Если провода для проходных выключателей нужно ставить трехжильные и сечением 1,5 мм² не менее, а он довольно дорогой, то для кнопок и светодиодов достаточно витой пары, которой везде просто валяется целые кучи. Для светодиодов предусмотрел транзистор. Он предохранит выход контроллера от перегрузки по току при большом количестве светодиодов. Резистор на светодиоды придется подобрать в зависимости от количества светодиодов. Реле- покупное для Ардуино на 5В KY-019. Блок питания- самый маленький что найдете на 5В. Можно зарядник от телефона, но есть блоки питания гораздо меньшие по размеру и потреблению.

Теперь разберемся с алгоритмом работы данного автомата:

  1. При включении должны загореться светодиоды, указывающие местоположение кнопок включения.
  2. При коротком нажатии включается выдержка (настраивается индивидуально в зависимости от дальности кнопки до входа в дом), светодиоды гаснут, включается реле на заданное время. По истечении выдержки отключается реле, включаются светодиоды. Это автоматический режим.
  3. При длительном нажатии (> 1 сек) происходит тоже самое как и в п.2 только выдержки нет. Т.е. включается свет до тех пор пока повторно не нажмется любая из кнопок, т.е. как будто включили и не выключаем выключатель. Например ждем гостей и они могу не знать что и как включать. При таком режиме светодиоды продолжают гореть, что указывает на данный режим работы. Повторное нажатие любой из кнопок отключает данный режим. Это ручной режим.
  4. Так же должно быть принудительное отключение при любом из режимов нажатием любой из кнопок для экономии электричества.

Приступаем к написанию скетча. Я, конечно, до предлагаемого материала посидел несколько дней при разработке и нашел много тонкостей и ошибок. О процессе написания и отладке я остановлюсь подробно дабы Вы и сами могли понять что и как я делал и что получил в итоге. Для начала я попробовал найти 2 режима работы на одной кнопке. Нашел. Разобрался но… он меня не устроил и я решил написать полностью свой обработчик. Поэтому сначала я просто написал скетч на включение/ отключение реле и светодиода при нажатии на одну кнопку. Если будете копировать скетч то после вставки в Arduino IDE нажмите комбинацию клавиш Ctrl+T (английская). Скетч выстроится корректно и удобно для чтения и редактирования.

В нем все понятно. При старте контроллер ждет нажатия кнопки. При нажатии на аналоговом порту А0 появляется напряжение выше нуля (analogRead(A0) > 100), это вызывает срабатывание логического переключателя. Смотрим на нижнюю часть условия else и понимаем что это и есть готовый вариант принудительного отключения! Поэтому сносим его подальше вниз по скетчу и принимаемся дописывать верхнюю часть.

Это вторая часть моего получившегося скетча. Принцип работы следующий: при нажатии на кнопку проверяется состояние логического переключателя bSwitch, и если оно равно нулю то присваиваем ему 1 (означает срабатывание устройства на включение), гасим светодиод и включаем реле (у KY-019 активный уровень- низкий) т.е. запускаем автоматический режим работы (bType =1). Затем идет цикл, который продолжает отслеживать нажатие кнопки и, если удерживать её дольше iTime * 1000 миллисекунд то произойдет переключение в ручной режим (bType =0). Но это еще полдела. В данном куске кода был решен только выход из ручного и принудительное завершение автоматического режимов. Поэтому ниже дописал секцию по значениям которой происходит отключение через iTimeWork *1000 миллисекунд. Все довольно сносно работало при значении iTimeWork до 30. Затем начались вообще непонятные глюки. Ставлю 180 секунд. Автомат сразу включается и отключается. Я всю голову изломал пока не догадался посмотреть тип переменной millis(). Она оказалась unsigned long. Как я понял, методом подбора значений, выше 32 секунд я вводить значения не могу т.к. при складывания типа unsigned long и прибавления умноженного на 1000 типа integer общее значение (last_millis + iTimeWork * 1000) принимает тип integer и практически моментально переключает автоматический режим обратно в отключенное состояние. Тут получается ошибка совместимости типов и поэтому программа просто вылетала. После того как я присвоил переменной iTimeWork тип unsigned long программа начала корректно исполнятся. Заключительный вид скетча выглядит так:

Хочу обратить внимание на название переменной iTimeWork в предыдущем скетче и переменно ulTimeWork в данном скетче. Как я говорил очень удобно указывать в названии переменной её тип. Поэтому тут я переименовал переменную iTimeWork (расшифровывается как i nt eger Time Work переменная времени работы TimeWork с типом integer) в ulTimeWork (unsigned long переменная времени работы TimeWork). Данный скетч занимает всего 1572 байта и можно использовать не Ардуино а, например, ATMEGA8. Для этого я применил оператор #define который подставляет в строках кода вместо переменной её значение. Т.е если написано #define lgt 13 и встречается команда digitalWrite(lgt, LOW); то вместо lgt в команде digitalWrite(lgt, LOW); вставляется её значение, т.е. 13. Получается команда digitalWrite(13, LOW); Данный прием особенно эффективен при больших проектах или, как в нашем случае, когда необходимо поменять назначение выводов сразу во всем скетче. Для этого достаточно одной команды и правильного написания кода чтоб сделать глобальные изменения а не прыгать по каждому оператору. Так что для прошивки в ATMEGA8 достаточно посмотреть даташит на неё, выбрать нужные выводы и объявить их в соответствующих секциях #define!

Распиновка 328 атмеги

Например приведу распиновку 328 Атмеги (она такая же как и ATMEGA8). В нашем случае подключаться напрямую к микросхеме нужно будет так: порт А0- 23 нога, светодиоды- 19 и реле- 13 ноги контроллера. ATMEGA8 отдельно стоит около 50-60 руб в Китае что почти в 10 раз дешевле Arduino UNO и в 2-3 дешевле Arduino NANO. Поэтому имеет смысл для постоянных проектов иметь в запасе пару тройку таких контроллеров вместо ардуин. Достаточно просто купить программатор за те же 100 руб или использовать как программатор собственно Ардуину. Для совсем небольших проектов, можно купить контроллеры Attiny. Они бывают 25, 45 и 85 серии где первая цифра указывает объем её памяти в килобайтах. Например Attiny45 имеет всего 8 выводов и 4 кБ памяти. В нашем случае достаточно было бы Attiny25 т.к. объем занимаемой памяти 1,5 кБ и выводов хватит на все. Все очень просто!

Теперь можно перейти к дополнительному функционалу. Ну во первых можно поставить датчик освещенности на фоторезисторе. Конечно можете сказать- проще поставить датчик движения и все… Но в нашем случае появляется более гибкое устройство. У Вас может возникнуть вопрос- как регулировать порог срабатывания? Можно жестко ввести в скетче значения и датчик будет срабатывать по достижению этих значений. А можно сделать регулируемый датчик. Для этого необходимо будет всего один переменный на 10 кОм и один постоянный резисторы на 1 кОм. Переменный резистор подключаем крайними выводами к + и -5В. Ползунок через сопротивление 1 кОм подключаем к аналоговому входу, например А1. Не забываем подключить фоторезистор к другому порту, например А2. Считываем значения из А1, сравниваем со значением А2 и, например, при достаточной освещенности не даем включать реле. Таким образом мы будем экономить электричество в дневное время + защита от случайного нажатия днем. Но и это еще не все! Для тех кто выезжает за город только по выходным данное устройство будет просто находкой. Если подключить к контроллеру модуль GSM и передавать ему различные команды то можно добиться эффекта присутствия хозяина дома. Т.е. мы частично делаем уже небольшое не охранное а предупредительное устройство. Можно конечно подключить блок часов реального времени и включать по времени, но включение в одно и тоже время может указывать на отсутствие хозяев или на их просто дикую пунктуальность. Можно вообще завести охранную сигнализацию на контроллер и при получении аварийного сигнала будет выполнятся дозвон или отправляться СМС на указанный номер. Вобщем, нам бы это только суметь…

Ну а по поводу установки в доме данного автомата скажу следующее. Сам блок включу через выключатель в доме т.к. летом темнеет поздно и рассветает рано. Как только отпадет надобность в автомате- просто выключаю его и все. Давайте посчитаем. Вроде потребляемая мощность и небольшая, всего 2-3 Ватта НО. В день на холостом режиме (не считаем включения ламп) потребляется 3*24=72 Ватта, в месяц 72*30= 2160 Ватт или 2 кВт. Уже много. Поэтому все равно есть смысл иногда отключать автомат освещения. Но это все равно меньше чем свет попросту горит на улице. Дальше, у меня 3 точки где необходимо установить кнопочный пост со светодиодами. Поэтому я довольно дешево перекрываю все точки просто протянув витую пару до нужных точек. Опять же безопасность. По витой паре будет идти максимум 5 Вольт. Думаю данный автомат можно использовать и на лестничном освещении в многоэтажных домах. А если использовать вместе с фоторезистором то экономия будет очень существенная!

Читайте также:  Самодельный осциллограф на avr

Автомат уличного освещения готов! Оставляйте свои отзывы по конструкции и функционалу автомата. Буду рад любым предложениям и критике.

Вторая версия более доработанного автомата освещения находится ЗДЕСЬ.

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

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

Автоматическое освещение atmega328 (pir)

Восьмиканальная цветомузыкальная установка для самостоятельной сборки на микроконтроллере ATmega328p, с использованием элементов поверхностного монтажа (SMD) и микросхем в DIP ( Dual In-line Package) корпусе.

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

Пример работы

Руководство по эксплуатации

Принципиальная схема

Устройство можно поделить на несколько основных блоков:

1. Микроконтроллер ATmega328p с обвязкой и элементы управления / индикации устройства.

2. Фильтр низких частот на базе операционного усилителя (ОУ) LM358N

Печатная плата

Плату разводил из расчета, что элементы управления и индикации будут прикручиваться/встраиваться в корпус устройства, а соединяться с основной платой будут посредством штыревых разъемов. Тактовые кнопки были предназначены для предварительного бескорпусного тестирования. Особой необходимости их установки нет.

Варианты разводки плат:

  • Вариант 1
  • Вариант 2 (модифицированный 1)
  • Разводка платы от посетителя сайта – Александра (от 19.06.2019)
  • Разводка платы от посетителя сайта – Алексея (от 06.12.2019)

Разводка 1 вариант включает:

    Микропроцессор ATmega328p Фильтр низких частот на ОУ LM358N
  • 3 вывода на кнопки управления (Demo, Fade Speed, Runlight)
  • 3 вывода для индикации скорости затухания (Fade Speed status LED)
  • вывод на светодиодную ленту со светодиодами ws2812b (Dout)
  • стерео вход (Audio IN)
  • вход для микрофонного предусилителя / линейный вход (Mic Amp IN)
  • вывод для индикации наличия питания (Power LED)
  • 3 вывода для индикации режима работы (Mode status LED)
  • вывод индикации нажатия (Button press blink)

Ширина дорожек 0,5. Посадочные места под SMD резисторы и конденсаторы для типоразмера 0603 или 0805. Если между контактами проходит дорожка, то практичнее использовать 0805. При монтаже главное контролировать отсутствие замыканий при установке последних.

Аудио сигнал подается одним из способов:

1. Сигнал с линейного выхода подаётся на 3-х пиновый вход “AUDIO IN”. Сумматор каналов предусмотрен на плате (по резистору в 1 кОм на каждый канал).

2. При использовании микрофонного усилителя сигнал в обход сумматора подается на “MicAmp IN”.

Если необходимо подключить регулятор громкости, то предварительно суммированный стереосигнал через регулятор громкости (переменный резистор в 10кОм) подается на вход “MicAmp IN” (в обход сумматора на плате). Сумматор в простом исполнении – по резистору в 1 кОм на каждый канал.

Разводка 2 вариант

Модифицированная разводка варианта 1 – выведены все задействованные выводы микроконтроллера и убраны перемычки. Здесь также используются элементы в DIP корпусе для микросхем и в SMD для остальных элементов. Данная разводка на железе еще не была проверена.

Разводка платы от Александра (от 19.06.2019)

Модифицированная разводка варианта 1 – выведены все задействованные выводы микроконтроллера и убраны перемычки. В отличии от остальных вариантов Александр развел плату под дискретные компоненты, за что ему огромное спасибо. Данная разводка на железе еще не была проверена.

Разводка платы от посетителя сайта – Алексея (от 06.12.2019)

Появился еще один вариант разводки. В данном исполнении плата была максимально уменьшена в размере без потери функционала. Работоспособность данной разводки успешно проверена на железе.

Перечень компонентов

РезисторыКоличествоКонденсаторыКоличествоДругоеКоличество
Итого:14123
100 kΩ11.5 nF1ATmeag328p1
10 kΩ2100 nF = 0.1 μF5LM358n1
150 Ω110 nF1Quartz 16 (20) MHz1
1 kΩ222 pF2
2.4 kΩ327 nF1
220 kΩ2470 nF = 0.47 μF1
330 Ω3470 μF 16v1

Прошивка

Светодиодные ленты WS2812B

39 комментариев

Приветствую посетителей и автора!
Столкнулся с проблемой.
НЕХ загруженный в ардуину прекрасно работает. А вот на DIP не могу запустить.
На 27 ноге (D0) ATmega328P как и положено идут серии импульсов для адресации, но лента их не определяет. Всё что я имею, это включенные на яркий белый 24 пиксела. Если в мегу залить например НЕХ для 8 диодов, то просто будут гореть белым все 8. При этом мега реагирует на кнопки и переключает как и положено светодиоды индикации режима.
Сравнил временные интервалы импульсов у Ардуины и у ATmega328P, так вот у меги они гораздо более длинные по времени. Перепробовал несколько микросхем, у всех результат одинаковый. Менял кварцы, ёмкости, всё одно…
Понимаю, что зубы по интернету не лечат, но всёже… Может у кого возникнет идея куда копать?

Привет!
Ну если лента на одном работает, а на другом нет, то значит дело не в ленте xD.
Странно конечно, но ардуина эта та же мега. Разница только в том, что на ардуине с завода выставлены фьюзы, а на меге надо выставлять вручную. Возможно загвоздка там.
Обрати внимание на бит CKDIV8. Это делитель тактовой частоты на 8 и по умолчанию он включен. Его надо выключить.
С включенным как раз длинна импульсов будет в 8 раз больше положенного.

Добрый день. Есть вопрос. Подключил матрицу 16*16 256 светодиодов. Но “расширяется” только до 240, не горит одна полоска из 16 штук. “Допилите” пожалуйста прошивку до новой версии, чтобы работало на 256 диодов

Или поделитесь пожалуйста кодом для Atmel Studio. Попробую разобраться….

Привет! Код лежит в одном архиве вместе с прошивкой в папке “Sources”.
Мне известны несколько ошибок в работе и есть пару предложений от пользователей сайта. Поэтому уже достаточно материала для выпуска новой версии, но пока тупо нет времени. =)
Думаю на выходных получится немного покопаться в коде по поводу 256.

AVR УРОК 38. Atmega 328p Pro Mini

Урок 38

Atmega 328p Pro Mini

Сегодня мы познакомимся поближе с интересной отладочной платой, выполненной на базе микроконтроллера Atmega 328p. А наибольший интерес у программистов микроконтроллеров AVR данная плата вызвала тем, что помимо того, что контроллер здесь не слабый, но, самое главное, стоит она сущие копейки. Я, например, приобретал её всего лишь за 2,7 $. В видеоверсии данного урока я описании дам ссылку на распаковку и первоначальное тестирование данной платы, а также и на продавца, у которого я её приобретал.

По данной плате есть немало видеотестов, но почему-то все они практически выполнены с применением в качестве программатора переходника USART, и, самое главное, программирование происходит посредством программы для разработки ПО для плат Arduino.

Мы же пойдём другим путём и применим данную плату уже как полноценную отладочную плату для создания приложений под управлением привычной для нас среды программирования Atmel Studio. Соттветственно, в качестве программатора мы также возьмём привычный нам народный программатор, который мы применяем во всех наших занятиях и подключим его к шине SPI.

Я думаю, будет лишним перечисление всех достоинств контроллера Atmega328p по сравнению с контроллером Atmega 8A. Здесь и оперативной памяти больше и памяти под прошивку больше, и также здесь две шины USART по сравнению с одной в восьмой серии.

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

Теперь подключим программатор Для подключения программатора я спаял вот такой переходничок

Распиновка нашей платы совпадает со стандартом Arduino UNO R3. Приводить я её здесь не буду во избежание нарушения прав. Найти данную распиновку не представляет никаких трудностей. Согласно распиновки разъём к плате подключаем следующим образом:

AVR ISP – ATMEGA328
VCC-VCC
GND-GND
RESET-RST
MOSI-11
MISO-12
SCK-13

Получится вот так

Подключим к разъёму программатор и проверим обнаружение платы. Для этого запустим программу avrdude, выберем там контроллер ATmega328P и нажмем кнопку “чтение”. Программатор и контроллер должны будут обнаружиться и должны будут считаться калибровочные ячейки

Также считаем фьюзы, чтобы потом установить подобные в протеусе для корректной работы эмуляции, ну и также для того, какие именно фьюзы надо и куда устанавливать, а то ведь фьюзы – это дело такое… Для этого переходим на закладку “Fuses” и жмем там кнопку “Чтение”. После этого фьюзы расставятся так, как они уже выставлены в контроллере

Теперь также подключим для тестирования 10 светодиодов. У меня, как вы знаете из моих уроков, есть 10-диодная матрица. Не забываем про токоограничивающие резисторы. Так как я данную матрицу использую ещё в тестах на контроллерах stm32, в которых граничный ток портов ниже, то резисторы там установлены на 680 ом. Менять я их не стал, светодиоды работают и с ними, возможно только светятся не так ярко, но это не страшно. Вот такая вот плата с матрицей

К отладочной плате светодиоды мы подключим следующим образом (нажмите на картинку для увеличения изображения)

Согласно стандарту Arduino соединения получатся следующие

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector