Програмно-керований люстр на Arduino

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

Нещодавно закінчив альфа-версію інтелектуального люстри, який може статися тільки якщо sysadmin підбирає паяльника і C++.

Перед тим як поділитися технологією трохи, дайте мені сказати, що це робить і що я не вдалося досягти. При включенні люстри перевертають до максимального (неприпустимо), тобто його можна використовувати як звичайний люстру з фізичним комутацією;
до chandelier також управляється дистанційно з пульта управління (чотирканальний для Arduino);
до Яскравість світла можна регулювати плавно (відносно) назад і вперед, використовуючи дві кнопки. У той же час регулювання є циклічною, тобто якщо ви робите її яскравіше, ніж максимум, світло буде виходити (зміщено 0), і якщо ви робите менше мінімуму, він буде переходити до максимального (так, натиснувши кнопку на пульті, люстру можна вимкнути і вимкнути)
- Половина години після обточування, люстра припадає яскравості трохи. Яскравий світло не завжди необхідний, і цей кицька буде охолоджувати систему трохи. Після скидання яскравості можна встановити знову до максимуму, і знову за півгодини.
- chandelier має неймовірний час відключення. За замовчуванням, це одна година. За допомогою пульта дистанційного (затискаючи одну з кнопок) можна встановити протягом півгодини, два години, або назад за годину. Але це не м'який таймер, тому що:
до chandelier має датчик руху, відповідно, таймер відраховує час після останнього повідомлення;
до На ніч при виявленні руху люстра перетворюється на дуже невелику яскравість за одну хвилину. У денний час це не працює, так як є датчик світла в люстрі. Займає кілька рухів (секунд 5) так, щоб люстра не повертала, коли я перетворю в ліжко.
до Особливістю люстри вночі відключається за допомогою кнопки на пульті дистанційного керування, так як поняття «час ночі» для датчика світла і для людини трохи відрізняється;
- Коли досягається час, світло поступово починає виділяти, і якщо рух відбувається в цей час, світло повернеться до свого старого значення;
- Шанделер здатний вказати його стан за допомогою світлодіода, або навіть самої люстри.

Як дізнатися більше? Далі йдуть вперед.

Для освітлення були обрані звичайні китайські світлодіоди, 20 Вт, теплий білий світлий світлий.




Arduino Mini був обраний для контролю логічної частини.


Це датчик руху.


І це датчик світла.
856126

DU віддалено використовувався як це.
р.

Драйвер звичайний китайський.


Я не захаращує читачів без використання теоретичних непотрібних схем, з'єднання кожного блоку абсолютно примітивний.
Віддалений датчик має чотири виходи, які повертаються пристрій при натисканні кнопки на пульті дистанційного керування. Підключаємо їх до цифрових входів. Датчик руху. Датчик світла підключений до аналогового введення A0.
Він був дешевим і китайським.

Особливу увагу слід приділити занурюванню, керованим методом програми. В інтернеті багато схем, багато готових пристроїв. Я пішов простий спосіб, і я поставив один єдиний польовий транзистор, IRF840. Говорячи про те, що він працює.

Я апологую за ручну схему, на жаль, я не фахівець в схемах. Принцип підключення:

Вибачте, що я не є експертом з програмування, або як: // Спеціальна ліва, яка зменшує затримки при використанні цифровогоRead\digitalWrite. #включає int led = 7; // Pin, де індикатор світлодіодний інт mov = 5 підключений; // Pin, де датчик руху int tra = 9 підключений; // Pin, де підключено полеперетворювач воріт = 12; // Pin, де вихід A int вниз = 11; // Pin, де вихід B int swi = 10; // шпилька, де вихід C int swi1 = 6; // Pin, де вихід D String bt підключений; int tmp; int mv; int mv; int таймер; int timer; таймер змінних int br = 255; // Яскравість світлодіода за замовчуванням int cur = 255; // Сервіс яскравість змінного int stepp = 5; // Враховуємо, як було багато рухів, і скидаємо їх, наприклад, 7 btn = кнопкаpressed(); // Прочитати яку кнопку натиснути на пульті дистанційного керування // Якщо кнопка натискається, ми формуємо, якщо (btn!=') {if (br>10) {stepp=10;} // Якщо значення струму перевищує 10, то змінити крок 10. Це зроблено, щоб зробити більш помітні зміни яскравості, якщо (btn =="a") {br = br + stepp;} якщо (btn =="b") {br = br-stepp;} якщо (btn =="c") {/ Якщо ви натиснете час вибору ключа, то якщо (out=7200) {out = 3600;blink(8.50);delay(1000);} ще // Якщо поточний час є два години, то скидання за годину, і флеш 8 разів, якщо (out = 1800) {out = 7200;blink(0.2000);delay(1000);} інше // Якщо поточний час складає півгодини, то парі на два, і натисніть один довгий час, якщо (out = 3600) {out = 1800;blink(50,15);delay(1000);} // Якщо поточний час є годиною, то встановлюється на півгодини і флікер з індикатором } якщо (br<0) {br = 255;} // Якщо поріг яскравості низький, то встановлюється максимальна (повернення на світло) якщо (br>255) {br = 0;} // Якщо поріг яскравості перевищений, то скидаємо 0 (відключаємо світло) cur=br; аналоговийписати (тра, бр); // Ми встановлюємо напругу на виході PWM Ардуїну, а відповідно на воротах транзистора // Змішані змінні після натискання кожного таймера=0; inttimer=0; переїхала=0; затримка(250); } // Якщо було записано рух, то знову починайте підрахунки, якщо (цифровийReadFast(mov)=== 1) {timer=0; цифровийWriteFast(13,HIGH); } інші {digitalWriteFast(13,LOW } } if ((br>240)and(inttimer=1800)) {br=180;cur=180;anlogWrite(tra,cur);} // Якщо половина години пропущена, а яскравість люстри високий, то ми трохи перекидаємо // При досягненні певного таймера ми плавно виділяємо світло, але відновимо її, якщо (timer=out) { for(int i = br;i>=0;i-) { аналоговийписати(tra,i); br=0; якщо (digitalReadFast(mov)=1) {timer=0; br=cur; аналоговийWrite(tra,cur); break; } затримки(100); // Якщо запускається таймер нічної лампи, відключіть світло, якщо (timer==svet) і(moved=1)) { br=0; b=0; mv=0; cur=0; аналоговийWrite(tra,br); } // Якщо було рух і яскравість лампи - нуль, то ввімкніть світло на п'ять, і скинути таймер, якщо ((mv>5) і (br=0) і (sensorValue>1020) {br=5; cur=5; timer = 0; mv=0; аналоговийWrite(tra,br); iblink(int, int del) {for (int i=0; i=0; i Невеликий робочий процес:








Трохи відео демонстрації:

Трохи розчарування: Дизайн, який був знятий ненадійним. Два 20-ватні світлодіоди теплого світла викопують радіатор таким чином, що розтопили олово, яка була пропалюється до них дроти. Замініть два 20-ват теплі з чотири 10-ватними нейтральними і вводили нижню косу.
- Нейтральні білі світлодіоди непристойні до очей.
- Я не можу придумати емуляцію клавіш, як на комп'ютерних клавіатурах. Через це зміни світла в струмках, так як затримка фіксується.
до Дистанційний контроль періодично ковзає, а саме, не спійманий ресивером, тому світловий показник на пульті дистанційного керування не гарантує доставки сигналів. Ось чому мені довелося ввести індикатор на люстрі.
Масивний радіатор для двох 20-ватних світлодіодів був недостатньо, або вони працювали в екстремальному режимі. Завтра я буду вимірювати струми і спробувати покласти резисторів.
- Плафон - це повна дегустація, так як він показує всі сіні на дротах. Планування замовлення матового акрилу і виготовлення дифузного білого світла.
- Я не знайшов КРЕН5А на ринку (необхідний, але факт), через це Ардуїна мала поставити додатковий блок живлення, і я хотів би його від водія.
- Не добре, ні Ардуїна. Я подав дошку для атоми, програміст прийде - Я позбавлюся від зайвих snot.

Дякую за читання до кінця. Чи зацікавили я поставляю ще одну статтю з поліпшеною люстрою? так не проголосувало 242 осіб. 40 затриманий. Тільки зареєстровані користувачі можуть брати участь у опитуванні. Приходьте, будь ласка,

Джерело: habrahabr.ru/post/247151/