CyberLabs

CyberLabs

Я электронщик - радиолюбитель. Мое хобби это DIY поделки на ардуино и любый другие оригинальные электронные устройства
Пикабушник
3223 рейтинг 128 подписчиков 18 подписок 33 поста 27 в горячем
Награды:
5 лет на Пикабу
98

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino

Всем привет!

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

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

Если Вам интересны подробности, то прошу под кат.

У меня в коридоре смонтировано 7 светильников.

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

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

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Саму плату я спрятал в пространстве между гипсокартоном и потолком, благо места там больше чем достаточно.

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

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

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

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

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

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

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Запитал я эту плату обычным зарядным устройством от телефона.

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Основой всего устройства является контроллер arduino Nano V.3, но можно так же использовать любые другие платы, с микроконтроллером Atmega328.

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

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

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

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

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Работает выключатель следующим образом:

Arduino с выхода D5 постоянно выдает ШИМ сигнал с частотой примерно 977 Гц. К этому выходу через токоограничивающий резистор 82 Ом подключен светодиод, излучающий сигнал в инфракрасном диапазоне. Фототранзистор подключенный к входу D2 детектирует отраженный от руки ИК сигнал и проверяет его на достоверность и если сигнал из 20-ти или больше идущих подряд периодов соответствует частоте 977 Гц, то тогда контроллер включает по очереди все 7 светильников и начинает воспроизводить звуковой эффект через ШИМ выход D11. Все то же самое происходит и при выключении.

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Воспроизведение звуков:

Для воспроизведения звуковых эффектов используется формат WAVE без сжатия, с частотой 16000 Гц и глубиной 8 бит, но при воспроизведении данного формата с использованием ШИМ, в аудио тракте наблюдается неприятный свист и шипение. По этому для улучшения качества воспроизведения, я в коде использовал линейную интерполяцию. При которой, выборка семплов происходит на частоте 62.5 кГц и между оригинальными выборками вставляются еще 3 дополнительных семпла, рассчитанных методом линейной интерполяции. Таким образом на выходе снижается шум квантования, пропадает свист, улучшается качество звука и для воспроизведения не обязательно использовать дополнительные RC фильтры.

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Вместо динамика я использовал старую, маленькую компьютерную колонку без встроенного усилителя.

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Для конвертирования Wave файлов в Си код, можно воспользоваться онлайн конвертером

Схема:

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

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino Освещение, Умный дом, Arduino, Дизайн, Выключатель, Сенсор, Видео, Длиннопост

Компоненты для сборки:

1 — Arduino Nano V.3

2 — Датчик препятствий

3 — 8-ми канальный модуль реле

4 — Резисторы 82 Ом и 1 кОм

5 — Динамик 0,5 — 3 Вт

6 — Любой N-P-N транзистор с допустимым током не менее 500 мА

Код для Arduino:

Скачать все файлы одним архивом

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

В коде вынесены несколько констант, которые можно изменить перед прошивкой.

Константа power_ir — отвечает за дистанцию срабатывания выключателя, может принимать значения от минимума 20 и до максимума 200. Требуемое Вам значение можно определить экспериментальным путем.

lamp_num — определяет количество используемых Вами ламп. Минимальное число лампочек не может быть меньше 1, а максимальное не более 7. Если подправить код то можно увеличить до 15.

lamp_delay — это задержка между последовательными включениями ламп, которая выражена в миллисекундах и может начинаться от 0 и до 4 294 967 295 мс. Хотя я не думаю, что такие огромные задержки кому то понадобятся.

Заключение

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

Спасибо, что дочитали до конца!

Если Вам понравилась моя статья — то поддержите ее лайком и подпиской.

Если у Вас есть вопросы, то можете их задать в комментариях.

Показать полностью 14
76

Открываем дверь домофона при помощи голосового ассистента и ардуино

Всем привет!

Сегодня у меня статья про то, как при помощи Яндекс-колонки Алиса и Ардуино, можно открыть дверь, подключенную к домофону. Если Вам это интересно, то прошу под кат.

Часто бывает так, что кто-то звонит в домофон, а ты в этот момент чем-то занят или просто лень подходить для того, чтобы открыть дверь. Знакомая ситуация, не правда ли?

А мой домофон так вообще без поднятия трубки не открывает дверь и если в течении 30 секунд после вызова не поднять трубку, то кнопка открывания двери перестанет быть активной до того момента, пока не поступит новый вызов. Так как домофон не из дешёвых (на тот момент) меня жаба душила менять его на другой. И я решил с этим бороться.

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

Второй проект был реализован на роутере TL-MR3020 с прошивкой CyberWRT и программным СИП телефоном BareSIP. При нажатии на кнопку вызывной панели, роутер параллельно с вызовом интеркома звонил на мобильный телефон и можно было даже находясь в другом городе разговаривать с человеком, стоящим около двери твоей квартиры, но программный телефон или сам роутер, работали крайне нестабильно и пришлось от него отказаться.

Но тут к моему счастью в прошлом году на день рождения мне подарили голосового ассистента Алису и у меня появилась новая идея — отрывать дверь голосом, через Яндекс колонку.

И сегодня настал тот день, когда я взялся реализовать свою задумку.

Немного о том, как работает вызывная панель видео-домофона.

Вызывная панель соединена с монитором домофона при помощи 4-х проводов GND, +12 В, аудио и видео.

Если на вызывной панели, провод Audio замкнуть через резистор 100 Ом на GND, то раздастся сигнал вызова. А если на провод Audio подать напряжение +12 В, то сработает реле открытия электромагнитного замка.

На изображении ниже показана схема соединения вызывной панели с домофоном.

Открываем дверь домофона при помощи голосового ассистента и ардуино Яндекс Алиса, Домофон, Arduino, Голосовой помощник, Пульт, Видео, Длиннопост

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

GND — экранирующая оплетка

+12 В — красный провод

Аудио — синий провод

Видео — центральная жила коаксиального кабеля

Открываем дверь домофона при помощи голосового ассистента и ардуино Яндекс Алиса, Домофон, Arduino, Голосовой помощник, Пульт, Видео, Длиннопост

Схема

Из схемы видно, что для подключения устройства на Ардуино к домофону, потребуется подсоединить всего 2 провода. Для коммутации этих проводов я использовал то, что у меня было под рукой. Вместо реле можно использовать ключ на N-P-N транзисторе или оптроне PC817.

ИК приемник я применил, первый попавшийся мне на глаза, который я когда-то выпаял из старого телевизора и который пролежал у меня на полке в хламе очень много лет.

Открываем дверь домофона при помощи голосового ассистента и ардуино Яндекс Алиса, Домофон, Arduino, Голосовой помощник, Пульт, Видео, Длиннопост

Используемые компоненты

Ардуино Нано

Модуль реле

ИК приемник 38 кГц

Провода Dupont


Вместо Arduino nano можно применить любой другой микроконтроллер из линейки ардуино. Я же использовал Ардуино нано потому, что у меня их достаточно много.


Исходник для Arduino

Код достаточно простой и понятный.

Для получения и сохранения кода нажатой кнопки, нужно перевести контроллер Ардуино в режим добавления кнопки пульта. Потребуется установить перемычку на выводы D2 и GND и нажать кнопку сброса на Arduino, после чего на плате контроллера засветится системный светодиод и контроллер будет ожидать нажатия кнопки на пульте.

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

Можно нажимать кнопки сколько угодно, но Arduino запомнит только последнее нажатие. Чтобы выйти из режима запоминания кода, достаточно удалить перемычку и нажать на микроконтроллере кнопку «Reset».


#include <IRremote.h>

#include <EEPROM.h>

//#define TOLERANCE 35 // процент допустимого отклонения принимаемого сигнала

#define IR_RECEIVE_PIN 11 // Вход для подключения ИК приемника

#define RELAY_PIN 12 // Выход для управления реле

#define SET_PIN 2 // Вход для перевода в режим программирования пульта

IRrecv irrecv(IR_RECEIVE_PIN);

decode_results results;


void setup()

{

irrecv.enableIRIn(); //запустить ожидание нажатия кнопки на пульте

pinMode(RELAY_PIN, OUTPUT);

digitalWrite(RELAY_PIN, LOW);

pinMode(SET_PIN, INPUT_PULLUP); //D10 конфигурируем на вход, для режима «запоминания кода»

pinMode(LED_BUILTIN, OUTPUT);

digitalWrite(LED_BUILTIN, LOW);

// Serial.begin(115200);

while(!digitalRead(SET_PIN)) //если пины D2 и GND замкнуты то заходим в режим запоминания ИК кода

{

set_command();

}

}


void loop()

{

if (irrecv.decode(&results)) //если был принят код с пульта

{

if(LoadEEPROM()==results.value) //если код совпадает с сохраненным (ir_command==results.value)LoadEEPROM();

{

digitalWrite(RELAY_PIN, HIGH); //включить реле

digitalWrite(LED_BUILTIN, HIGH);

delay(500);

digitalWrite(LED_BUILTIN, LOW);

digitalWrite(RELAY_PIN, LOW); //Выключить реле

}

irrecv.resume(); //запустить ожидание нажатия кнопки на пульте

}

}


void set_command() //режим запоминания кода пульта ДУ

{

digitalWrite(LED_BUILTIN, HIGH);

if (irrecv.decode(&results))

{

digitalWrite(LED_BUILTIN, LOW);

SaveEEPROM(results.value); //сохраняем полученый код кнопки ПДУ в EEPROM

irrecv.resume(); //запустить ожидание нажатия с пульта

}

delay(100);

}


void SaveEEPROM(unsigned long ir_code) // записываем полученый код кнопки ПДУ в EEPROM

{

EEPROM.write(0, ir_code & 0xFF);

EEPROM.write(1, (ir_code & 0xFF00) >> 8);

EEPROM.write(2, (ir_code & 0xFF0000) >> 16);

EEPROM.write(3, (ir_code & 0xFF000000) >> 24);

}


unsigned long LoadEEPROM() // считываем код кнопки ПДУ из EEPROM

{

byte val = EEPROM.read(3);

unsigned long ir_code=val;

val = EEPROM.read(2);

ir_code= (ir_code << 8) | val;

val = EEPROM.read(1);

ir_code= (ir_code << 8) | val;

val = EEPROM.read(0);

ir_code= (ir_code << 8) | val;

return ir_code;

}


При публичном размещении, выложенного мной выше кода — указывайте, пожалуйста, ссылку на первоисточник.


Подключение к Яндекс.Станции Алиса

Для подключения к умной колонке понадобится Умный пульт Яндекс.

Открываем дверь домофона при помощи голосового ассистента и ардуино Яндекс Алиса, Домофон, Arduino, Голосовой помощник, Пульт, Видео, Длиннопост

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

Для этого нужно зайти в приложение Яндекс.Браузер — Все сервисы — Устройства — Управление устройствами — Пульт — Добавить устройство — Настроить вручную — вводим название «Дверь» — Добавить команду — вводим название голосовой команды «Открой» — берем пульт от любой бытовой техники, направляем его на Яндекс.пульт и нажимаем требуемую кнопку.

После того, как синий светодиод на Я.пульте погас — колонка готова к выполнению этой команды. Теперь можно проверять, произносим фразу «Алиса открой дверь», она, немного подумав, выполнит Ваш приказ.


Заключение

Использование Яндекс пульта в умном доме позволит Вам управлять любой бытовой техникой, в состав которой входит ПДУ. А так же достаточно легко, собрав простейшую схему на Arduino интегрировать управление любыми другими устройствами, не имеющих ПДУ. Это просто, надежно и не требует подключения этих устройств к интернету.

Если Вам понравилась моя статья — можете подписаться на мой канал, чтобы не пропустить следующую публикацию.

Если у Вас есть вопросы, то можете их задать в комментариях.

Показать полностью 4
170

Лазерный проектор из старых HDD

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

Всем привет!

Эта история о том, как я из старых жестких дисков собирал лазерный проектор

Если Вам интересно, что из этого получилось, смотрите на видео или читайте статью

===========================> Посмотреть видео на YouTube <==========================

Сначала я разбираю жесткий диск

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

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

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

Припаиваю к электромагнитной катушке два провода

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

Распиливаю корпус жесткого диска на две части

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

Из двух латунных стоек и алюминиевого лепестка, собираю держатель зеркала

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

Выпиливаю зеркало из алюминиевого диска от этого же HDD и приклеиваю его цианакрилатным клеем к гальванометру

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

Проделываем все тоже самое со вторым HDD и соединяем оба гальванометра между собой под углом 90°

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

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

Лазерный проектор из старых HDD Arduino, Лазерное шоу, Лазер, Проектор, Светомузыка, Гифка, Длиннопост

Мы видим классную, лазерную светомузыку. Она рисует невероятные картинки в такт с аудио треками, на которые можно смотреть не отрываясь. Что самое удивительное , а то что изображения как живые и не повторяются от трека к треку.

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


На этом я временно приостанавливаю проект, до получения нужных компонентов.

Так как в лазерных проекторах я не специалист, то жду от Вас помощи и консультаций.

Показать полностью 8
80

Управляемый жестами светильник на Arduino

Всем привет!!!

Я рад , что могу снова показать Вам свои наработки.

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

Данный проект отнял у меня очень много времени, которого у меня и так всегда не хватает.

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

И так все по порядку


Описание светильника

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

Управляемый жестами светильник на Arduino Arduino, Светильник, Своими руками, Видео, Гифка, Длиннопост

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

Если после включения лампы начнем листать влево, то увидим динамические световые эффекты, такие как «Огонь» , «Матрица», «Лава лампа», «Радуга», «Конфетти», «Искры», «Огненный светильник». Если Вам нужно вернуться на обычный светильник, то вместо перелистывания, можно выключить лампу жестом от себя и включить любым из трех жестов.

Выключение производится жестом от себя.


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

Управляемый жестами светильник на Arduino Arduino, Светильник, Своими руками, Видео, Гифка, Длиннопост

Я не уделял особого внимания визуальным эффектам, так как планирую сделать вторую версию лампы на контроллере Wemos D1 mini. В которой планирую довести все до идеала. По этой же причине я пока использую только одну линейку светодиодов, состоящую из 4 планок ws2812b, вместо четырех.


Прерывания APDS9960

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

Сначала попробовал исправить проблему изменениями в железе. Фильтрация питания не помогла, даже от аккумулятора 18650 датчик все равно продолжал жить своей жизнью. Попробовал переключить нагрузочный резистор сигнала INT на +5В и это тоже не принесло успеха.

По мере изучение пришло понимание, от чего происходят ложные срабатывания прерываний. Основная проблема это случайные отражения ИК сигнала. Производитель рекомендует покрыть датчик и все вокруг него черным резиновым напылением. У меня нет такой краски и я не стал с этим заморачиваться. Хотя наверняка это могло бы немного уменьшить число ложных срабатываний.

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


Определение жеста

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

Для того, что бы улучшить стабильность распознавания жестов, так же пришлось в библиотеке уменьшить чувствительность приемника. Для этого нужно в файле SparkFun_APDS9960.h заменить строку:

if( !setLEDBoost(LED_BOOST_300) )

на

if( !setLEDBoost(LED_BOOST_150) )

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

Я так же экспериментальным путем подобрал ток светодиода 50 мА, при котором жесты определяются наиболее стабильно и нет надобности насиловать инфракрасный светодиод, током 100 мА.

А так же я допустил ошибку, разместив микроконтроллер в нижней части светильника, а датчик жестов в на верхней крышке. Из-за этого, для соединения arduino и apds9960, пришлось использовать провода длинной 30 см. Что тоже добавило дополнительной нестабильности работы датчика. В итоге я программным путем победил все эти проблемы.


Схема

Для питания устройства я использую зарядное устройство от моего смартфона, с напряжением выхода 5В и током 2А. Но на самом деле светильник при включенном белом свете на максимальной яркости, не потребляет выше 1,3 А. По этому подойдет любой источник питания с выходным током не менее 1,3А.

Стабилизатор dc-dc mini360, можно заменить на любой другой понижающий преобразователь напряжения, с выходным током не менее 150 мА.

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

Вместо Ардуино Нано можно использовать контроллер Arduino UNO или его клоны.

Управляемый жестами светильник на Arduino Arduino, Светильник, Своими руками, Видео, Гифка, Длиннопост

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

Управляемый жестами светильник на Arduino Arduino, Светильник, Своими руками, Видео, Гифка, Длиннопост

Используемые компоненты

Arduino Nano — 1 шт.

Датчик жестов APDS9960 — 1 шт.

Светодиодные планки ws2812b — 4 шт.

Преобразователь понижающий mini360 — 1 шт.

Соединительные провода dupont— 1 комплект.


Программный код для Ардуино

Код разбит на две части. В первой части находится основной код, который работает с сенсором, а во второй части находится код всех световых эффектов.

Вы можете сами добавить любой эффект по аналогии с моим кодом, но главное не забудьте добавить функцию выхода по жесту из зацикленного эффекта. Для этого нужно добавить в конце цикла, следующую строку if(check_int()) return;

Описание основных функций программы

processingGesture() обрабатывает прерывания от датчика жестов.

processingProximity() обрабатывает прерывания от датчика приближения.

gesture_int() — обработчик прерывания от датчика жестов.

proximity_int() — обработчик прерывания от датчика приближения.


Описание констант

APDS9960_INT — вход для внешнего прерывания. В Arduino Nano и UNO всего два таких входа, 2 и 3.

PIN — здесь нужно указать выход на светодиодную ленту. Можно указывать любой цифровой пин к которому подключены планки ws2812b.

NUM_PIX — здесь указываем количество адресных светодиодов в используемой ленте.

range — предел погрешности от 0 до 10. Если при регулировке яркости зафиксировать руку над датчиком на 2 сек, то показания должны сохраниться, если же показания не сохраняются, то увеличивайте постепенно предел погрешности.


Скачать библиотеку APDS9960

Скачать скетч светильника


Итоги

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

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

Показать полностью 4
29

Микро обзор транзистор тестера GM328A

GM328A - Многофункциональный прибор для проверки и автоматического обнаружения транзисторов типа NPN и PNP, полевых транзисторов, диодов, спаренных диодов, светодиодов, стабилитронов, тиристоров, с автоматическим определением цоколевки выводов всех компонентов.


GM328 можно использовать в качестве генератора прямоугольных ШИМ-сигналов, с возможностью изменять скважность от 1 до 99%. Транзистор тестер может измерять частоту от 1 до 4000000 Гц, проверять у конденсаторов емкость, ESR – эквивалентное последовательное сопротивление и Vloss - добротность.


А также этот универсальный прибор имеет: Русифицированный интерфейс. Цветной ЖК TFT дисплей. Управление в меню прибора производится поворотным энкодером с функцией нажатия. Микросхема контроллера ATmega328P установлена на панельку и имеет удобный для замены и ремонта корпус DIP.

В режиме "Транзистор тест" проверяет переходы транзисторов типа NPN и PNP, автоматически определяет расположение выводов транзисторов, коэффициент усиления по току, пороговое напряжение открытия, утечку тока. Проверяет диоды, емкость перехода, напряжение падения и обратный ток. Есть поддержка измерения делителя из двух резисторов.


Питание прибора можно осуществлять от любого внешнего источника 7 В - 12 В, через стандартный разъем питания(5,5 мм). Если tester не используется в течение 1 минуты, то он автоматически переходит в сон, ток спящего режима всего 20 нА.


При первом включении, следует выбрать "режим самотеста", соединить перемычками из медного провода контакты 1-2-3 и приготовить керамический конденсатор 0,1 мкФ, далее тестер на дисплее подскажет Вам следующие шаги. Во время калибровки, не желательно дотрагиваться до платы, так как Вы можете внести погрешность в измерения.


Внимание!!! Тестер легко спалить, если попытаться измерять емкость электролита, предварительно не разрядив его.

Показать полностью
107

Онлайн преобразование изображений по алгоритму "Floyd-Steinberg"

Онлайн преобразование изображений по алгоритму "Floyd-Steinberg" Онлайн-сервис, Arduino, Oled LCD, Lcd дисплей, Длиннопост

Для Ардуино доступно много разных Ч/Б дисплеев.

Для того что бы получить красивое черно-белое изображение для этих дисплеев, с глубиной цвета всего 1 бит, но в тоже время с имитацией полутонов, как на представленных  картинках, то для этого нужно использовать преобразование по алгоритму "Floyd-Steinberg".


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

По этой же причине я представляю "Онлайн инструмент для конвертирования изображений по алгоритму Floyd-Steinberg dithering.


Пошаговая инструкция:

1 — Изображение может быть цветным или ч/б с любой глубиной цвета

2 — Сделайте его более контрастным(не обязательно)

3 — Измените его размер до требуемого Вам разрешения

4 — Перетяните подготовленную Вами картинку, поверх изображения на странице конвертера.

5 — Для сохранения изображения, наведите на него курсор и нажмите правую кнопку мышки.


Перейти в Онлайн конвертер Floyd-Steinberg

После преобразования этим конвертером, Вы получите изображения как на скриншоте ниже

Онлайн преобразование изображений по алгоритму "Floyd-Steinberg" Онлайн-сервис, Arduino, Oled LCD, Lcd дисплей, Длиннопост

Для тех, кому лень заниматься конвертированием картинок, есть небольшая галерея уже готовых Ч/Б изображений посмотреть можно здесь


Преобразуем в Си код для Arduino

Для того что бы преобразованное изображение вставить в компилятор с понятным ему форматом, нужно используйте онлайн BIN2HEX конвертер

1 - Нажмите кнопку "Выберите фаил", после чего выберите на своем  ПК, цветное или черно-белое изображение с расширением jpg/png/bmp. Изображение должно быть размером 128 х 64. После того как проконвертированое изображение появилось на экране, Вы можете скопировать готовый Си код и использовать его в своих разработках и скетчах Arduino.


Спасибо за прочтение. Если у Вас остались вопросы, то можете мне их задать

Показать полностью 2
72

Пузырьковая панель или дисплей из глицерина. Часть-2

Всем привет!

На этот раз я выкладываю продолжение экспериментов с воздушно-пузырьковым дисплеем.

Тем кто не видел первую часть, могут пройти и посмотреть видео по ссылке.

В результате первого опыта выяснилось, что при минимально возможном размере пузырьков, расстояние между ними должно быть не менее 4-5 см. Иначе в жидкости, между пузырьками происходит взаимное влияние друг на друга, как по горизонтали так и по вертикали.

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

Пузырьковая панель или дисплей из глицерина. Часть-2 Arduino, Дизайн, Видео, Гифка, Длиннопост

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

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


Акриловые перегородки с фоновым экраном, в сборе
Пузырьковая панель или дисплей из глицерина. Часть-2 Arduino, Дизайн, Видео, Гифка, Длиннопост

Все готово для запуска

Пузырьковая панель или дисплей из глицерина. Часть-2 Arduino, Дизайн, Видео, Гифка, Длиннопост

Железо

Ардуино нано v.3

Энкодер с функцией нажатия

Драйвер от ШД на микросхеме ULN2003

Электроклапана

Компрессор аквариумный

Шприцы, системы для перелива


Схема

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

Микросхема ULN2003 способна выдерживать токи до 500мА на каждый канал. Защитные диоды от самоиндукции электроклапанов, уже предусмотрены и встроены в микросхему.

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

Пузырьковая панель или дисплей из глицерина. Часть-2 Arduino, Дизайн, Видео, Гифка, Длиннопост

Скетч для Arduino

Шрифт нарисован не полностью только цифры, заглавные английские и заглавные русские буквы.

Переменные на которые стоит обратить внимание:

uint16_t bub_size=4500; //это размер пузырька

uint16_t bub_space=900; //это расстояние между пузырьками

uint16_t step_bub_size=300, step_bub_space=10; //это шаг наращивания вышеприведенных переменных, при вращении энкодера.

Скачать код для ардуино


Заключение

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

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

Но пузырьки при менее вязких жидкостях не будут иметь одинаковых, ровных форм.

Пузырьковая панель или дисплей из глицерина. Часть-2 Arduino, Дизайн, Видео, Гифка, Длиннопост

Если у Вас остались вопросы, задавайте. Я с радостью на них отвечу.

Показать полностью 5
225

Акустическая левитация на ардуино

Сегодня я расскажу, как в домашних условиях повторить эффект ультразвуковой левитации своими руками.


Звуковые колебания.

Что бы понять всю суть эффекта левитации, нужно понять, что такое звуковая волна и стоячая волна.

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

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

Акустическая левитация на ардуино Arduino, Сонар ардуино, Своими руками, Видео, Длиннопост

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


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

Акустическая левитация на ардуино Arduino, Сонар ардуино, Своими руками, Видео, Длиннопост

Длинна волны — это скорость звука разделенная на частоту колебаний. При температуре 20°C и влажности воздуха 50%, звук распространяется в такой среде со скоростью 340 м/с. Резонансная частота колебаний нашего пьезоизлучателя примерно 40 000 Гц. В итоге получаем длину волны 340000 мм / 40000 Гц = 8,5 мм. Длина стоячей волны будет такой же 8,5 мм.

Излучатели можно располагать на разном расстоянии друг от друга, но оно всегда должно быть кратным длине волны. Чем меньше расстояние между излучателями, тем мощнее узлы стоячей волны. Чем больше пространства между акустическими трансмиттерами, тем больше узлов между ними, но слабеет мощность узлов и наоборот. Так же нужно понимать, что для удержания большого количества предметов в узлах волн и на большем отдалении между ультразвуковыми излучателями, потребуются более мощные пьезо головки. Например от автомобильных парковочных радаров, или от бытовых увлажнителей. В этой статье я рассматриваю самый доступный и бюджетный ультразвуковой излучатель. Который можно выпаять из дальномера HC-SR04


Схема подключения — я использовал Ардуино нано и драйвер моторов MX1508, можно было бы обойтись генератором NE555 и в качестве усилителя использовать микросхему MAX232 которая установлена на дальномере HC-SR04, но я для себя избрал более простой путь, который сэкономил мне время. Так как на сборку акустического левитрона у меня ушло не более 5 минут. Соединения я произвел набором проводов dupont

Акустическая левитация на ардуино Arduino, Сонар ардуино, Своими руками, Видео, Длиннопост

Описание скетча Ардуино.

Код ничего особенного из себя не представляет. Все сводится к настройке таймера и дерганий ногами порта D Arduino. Для этого переводим Timer1 в режим сброса при совпадении(CTC) и теперь при совпадении значений регистра счета TCNT1 с заданным числом в регистре сравнения OCR1A, будет срабатывать прерывание, в обработчике которого выполняется инверсия всего порта D. После чего счетный регистр обнулитcя и после выхода из обработчика процесс счета запустится по новой.

Нужное нам значение регистра OCR1A рассчитывается следующим образом: так как делитель в регистре TCCR1B выключен, то мы берем частоту тактового генератора 16 000 000 Гц и делим на требуемую нам частоту срабатывания прерывания 80 000 Гц, в результате получаем число 200, это и будет наше значение для регистра OCR1A.

Почему 80 кГц, а не 40 кГц, спросите Вы? Потому, что период в обработчике формируется за два срабатывания прерывания. При первом срабатывании на выходах формируется D3=0 и D4=1, а при втором D3=1 и D4=0.

Код для Arduino:

volatile uint8_t portD3_D4 = 8; // единица на D3 и ноль на D4
void setup()
{
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
// Инициализируем Timer1
TCNT1 = 0;
TCCR1A = 0;
TCCR1B = 0;
OCR1A = 199; // Установить регистр сравнения 16 МГц / 80 кГц = 200
TCCR1B = (1 << WGM12)|(1 << CS10); //Устанавливаем режим CTC, без делителя
TIMSK1 |= (1 << OCIE1A); // Включить прерывания таймера
}

void loop () {}

ISR (TIMER1_COMPA_vect) // Обработчик прерывания по таймеру
{
PORTD = portD3_D4; // Отправляем значения в порт
portD3_D4 = 255-portD3_D4;// Инвертируем значения для следующей отправки в порт
}

На этом все.

Буду рад ответить на все Ваши вопросы.

Показать полностью 3
Отличная работа, все прочитано!