Штучне світанок

Штучне світанок

Почалося все рік тому. Перед Новим 2014 роком дещо занепав життєвий тонус. Процес самокопання призвів до такої думки:

- А, що ж так темно-то, Господи?

Втім, для людини, яка живе взимку за літнім часом - думка цілком природна.

Ідея

Не маючи можливості переставити час я вирішив спробувати змінити відчуття за допомогою зміни освітлення. Хід думок був приблизно наступний: природне світло потрапляє в квартиру природно через вікно, а коли світла немає - темно. Запалити світло за вікном важко, але можна створити ілюзію того, що там за вікном світло. Дивлячись вночі у вікно ми бачимо темряву - це не змінити, але вночі люди зазвичай вмикають світло і закривають штори - так світліше і більш комфортно. А чим відрізняється зашторене вікно вночі і вдень? А тим, що світло пробивається через штори. Так, власне, і народилася сама ідея: треба підсвітити простір між вікном і шторами!

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

Потрібні для білої п'ятиметрової стрічки 2A на 12V були взяті від БП здохлого переносного диска. Втім, 12V від комп'ютерного БП буде нічим не гірше (тільки треба знати як його запустити і не варто включати зовсім без навантаження).

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

Так... ну і бардак в загальному-то так собі... Але! Не забуваймо, що це вечір. А ось зимовим ранком, та за літнім часом - дуже бадьорить!

Окрилений першою удачею, я вирішив продовжувати експеримент тепер вже не на собі, а на власних дітях. Адже одна справа самому вставати по будильнику і зовсім інша - будити нещасних дітей, в школу, коли ні зги не видно; знаючи відмінно, що один з них точно жайворонок який, будь за вікном світло, давно б вже сидів за столом і тихесенько збирав якесь LEGO... Але, тут - ясна річ - вже потрібна справжня ілюзія. Потрібен світанок! Справжній. І не о 7 ранку, коли тато включив (тато теж, до речі, поспав би ще). І не відразу, а поступово. І світло має бути не біле, а червоно-оранжево-жовте.

Очевидно, потрібна RGB-стрічка керована за розкладом. А значить - мікроконтролер і годинник реального часу. І вільний час вдало збігся з уже наявним бажанням зробити що-небудь корисне на AVR'ці.

Реалізація

Та-дам. Зустрічайте - Voskhod1b! Прилад для імітації природного світанку, він же ніжний будильник, він же органайзер, він же нічник, він же - все, що завгодно якщо додати потрібні датчики і модифікувати код. Наприклад: світлофор збірки, офісний годинник з індикацією запізнення і перерв або підсвічування для акваріума або світломузичне оформлення тощо.

Світанок

Діти в школу збирайтеся (т. зв. «зелений свисток»)

Денне підсвічування, продовжуємо «сонячний» день

Нічник

Розклад програмується за допомогою текстового інтерфейсу. Доступні команди можна отримати запитавши підказку командою - h, можливі режими роботи за розкладом можна дізнатися командою - ha. З'єднуватися можна як безпосередньо за UART, так і за bluetooth. Кольори кодуються трьома шістнадцятковими байтами. Для підбору значень кольорів, є можливість використовувати інтерактивний режим. В інтерактивному режимі можна керувати як RGB так і HSV складовими кольору. Розклад роботи запам'ятовується в EEPROM пам'яті контролера. Пристрій можна в будь-який момент вимкнути. Стан після включення - «як би і не вимикався».

Ось приклад розкладу, який я використовував для моїх змучених школою третьокласників рік тому:

00:00:00 => 06:40:00: dark спимо

06:40:00 => 06:55:00: rgb 08 05 03 штучні...

06:55:00 => 07:00:00: rgb 40 25 15 … ний...

07:00:00 => 07:05:00: rgb 80 50 39 … схід

07:05:00 => 07:55:00: rgb ff 91 1d тепле біле світло

07:55:00 => 08:00:00: rgb 00 55 00 5 хвилин до виходу в школу - «зелений свисток»

08:00:00 => 08:05:00: rgb 55 55 00 виходимо в школу -'жовтий свисток '

08:05:00 => 08:20:00: rgb 55 00 00 вже запізнюємося в школу -'червоний свисток '

08:20:00 => 11:00:00: dark діти в школі

11:00:00 => 13:30:00: rgb ff 91 1d теплий білий

13:30:00 => 14:30:00: rgb 80 50 39 невелика денна...

14:30:00 => 15:00:00: rgb 20 12 07 … підсвічування

15:00:00 => 16:57:00: dark денний сон

16:57:00 => 16:58:00: rgb 20 12 07 проси-...

16:58:00 => 16:59:00: rgb 40 25 14 … паним -...

16:59:00 => 17:00:00: rgb 80 50 30 … ся.

17:00:00 => 21:00:00: rgb ff 91 1d вечірнє підсвічування

21:00:00 => 22:00:00: rgb 40 25 15 штучний...

22:00:00 => 23:00:00: rgb 08 05 03... захід

23:00:00 => 23:30:00: rgb 01 01 03 сутінки

23:30:00 => 00:00:00: rgb 00 00 01 нічник до півночі

Схема:

Використовується МК ATmega168. Підійде ATmega328 або ATmega88/ATmega8, але команд у останніх буде трохи поменше і підказка підкороче. Не перевіряв, але впевнений, що і ATmega16 буде працювати. Годинник реального часу - DS1307. Світлодіоди запалюються MOSFET'ами IRF540N. Зрозуміло, настільки потужні транзистори не потрібні, вони просто були під рукою, зате поширені і не дорогі - не шкода. Є запас по потужності, можна працювати зі стрічками на 24V, а при наявності захисту по струму в блоці живлення не страшні короткі замикання в стрічці.

Необхідні 5V для меги і 3.3V для bluetooth модуля HC-05 - виробляють лінійні стабілізатори L7805 і L78L33. Додаток bluetooth (U5) не обов'язковий, як і резистори R11, R12, R13 (узгоджуючі 5V МК з 3.3V контролера bluetooth) як стабілізатор U4. Схема буде запускатися і працювати і навіть без U2, але, зрозуміло, тільки в інтерактивному режимі.

Програма. На асемблері писати мені не хотілося, мабуть тому в ATtiny2313 програма не влізла, та я особливо і не впирався. Було цікаво оцінити можливість використання C++ для програмування мікроконтролерів. Виявилося, що цілком реально, за допомогою абстрактних інтерфейсів написати код, що збирається як для МК (Atmel Studio 6.1), так і для Windows (Microsoft Visual Studio 2012). Під Windows проект збирається з використанням програмою емуляції RTC, UART, EEPROM і PWM. Упевнений, що код без проблем збереться і під Linux, якщо виключити єдину windows-api функцію SetConsoleTitleA (), яка виводить у заголовок вікна поточні значень ШИМу.

Бібліотеку для роботи з UART взято з Application Note AVR303 - буферизований апаратний UART на перериваннях. Код трохи модифікований для підтримки ATmega8/16, ATmegaX8 і ATiny2313 (USART2.cpp, USART2.h).

Для роботи з I2C інтерфейсом DS1307 використовується бібліотека Павла Бобкова ChipEnable.Ru (за що йому велике спасибі) заснована в свою чергу на AVR315 (twim.cpp, twim.h).

Хм, виходить так, що проект зібраний «з миру по нитці». Втім, чому дивуватися - так воно і є. З того, чим можу похвалитися сам - це, мабуть, реалізація швидкого перетворення HSV- > RGB, в якій не використовується операція ділення (див. HSV2RGB.cpp, HSV2RGB.h).

Робота з UART і I2C проводиться за перериваннями, і щоб процесор не нудьгував: ШИМ - програмний. Тобто майже програмний - зав'язаний на 8-бітний таймер. Експерименти показали, що суто програмний ШІМ в основному циклі, незважаючи на максимум частоти, виглядає погано, мерехтить. Підозрюю, що причина пов'язана з невеликими флуктуаціями частоти, які стають помітні оку. Мій же ШИМ хоч і програмний, не зовсім простий: світлодіоди запалюються зі зрушенням на третину періоду. Наприклад, якщо R = G = B = 25, то періоди світіння світлодіодів R [0,24], G [85,109], B [170,194]. За моїми відчуттями, в такому режимі роботи, стрічка виглядає краще.

Друкована плата розлучена в програмі DipTrace на одному шарі. Розмір ПП опредений розмірами купленої пластмасової коробочки. Транзистори і стабілізатори довелося покласти, а від зручних затиснутих роз'ємів довелося відмовитися - не вистачило місця.

Блок живлення - будь-який, відповідний за потужністю, для живлення LED-стрічок. Для звичайної п'ятиметрової 12-вольтової RGB-стрічки (60 світлодіодів на метр) потрібен блок живлення на 6A. Зрозуміло, комп'ютерний БП теж підійде. Якщо використовувати БП від комп'ютера, немає необхідності в стабілізаторах U3, U4, оскільки 5V і 3.3V можна брати прямо з нього. У комп'ютерного БП тільки два недоліки: розмір і вентилятор.

Принципова схема, малюнок друкованої плати (є версія для ЛУТ і версія для ЛУТ із заливкою), вихідний код, прошивки для ATMega8/88/168/328 і windows-емулятор додані.

Процес програмування і різні варіанти программаторів тут не розглядаються. Я використовую программатор usbasp: www.fischl.de/usbasp

І програму: www.khazama.com/project/programmer/KhazamaAVRProgrammer162.rar

Про ф'юзи. Заводські AtmegaX8 продаються зі встановлених битом «Divide clock by 8 internally», який треба зняти. Також треба переналаштувати МК на використання високочастотного кварцу і обов'язково використовувати «Brown-out detector level at VCC = 4.3V», інакше можуть бути проблеми з вмістом EEPROM. У програмі khazama AVR Programmer фьюзи, які використовуються, виглядають так:

Трохи про деякі технологічні аспекти радіоелектронного виробництва ПП в домашніх умовах

Стружка склотекстоліту - дуже шкідлива річ, бажано мінімізувати її кількість. Для вирізання заготовки рекомендую використовувати не ножівку, а ножівки по металу - це і точніше, і швидше, і багато зручніше. Згорлити текстоліт краще під шаром води, але це трохи пізніше.

Друкована плата ЛУТ - наше все. Фотопроцес - не пробував, поки не було необхідності в настільки тонких виробництвах, щоб возитися з УФ-лампами і злими лужами. Отже, ЛУТ. Перепробовано багато чого: і безліч глянцевих журналів, і горезвісний фотопапір відомої фірми різної щільності і фольгу (пхати в принтер страшно, проте - реально працює), АЛЕ мій поточний вибір - вінілова плівка.

Куплена в госпмазі, дешево. Потрібна гладка, фактурна не годиться, колір значення не має. Ну, це ж принадність, що таке! Друкуємо малюнок ПП на папері, відрізаємо шматочок вінілової плівки за розміром малюнка, клеїмо на малюнок зверху, друкуємо ще раз. Вирізаємо, прогладжуємо праскою, остужаємо під пресом (перевернута табуретка підійде) і просто акуратно знімаємо плівку з плати. Ще раз - нічого відмочувати і скочувати не потрібно - просто повільно відриваємо, як скотч. В якості демонстрації, моя плата залита дрібною сіткою, в оригінальній ЛУТ технології видаляти папір з отворів - дуже клопітко.

Так, плату треба попередньо зачистити від окислу і знежирити. Любителі можуть, звичайно, використовувати дрібну шкурку і ацетон, але мій вибір, і вже давно - порошковий Comet і паперові рушники для просушки.

Травимо в абсолютно безпечному розчині лимонної кислоти в перекисі водню. При кімнатній температурі процес займає 15 хвилин. Все відбувається без плям і запаху, як від хлорного заліза. (100мл перекису водню, 40г лимонної кислоти, 1 чайна ложка солі). Після закінчення розчин безпечно зливається в каналізацію.

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

Зверніть увагу на муть - частина цього пилу могла опинитися в легенях.

Видалення тонера проводиться без хімії. Ацетон? Ні, не чули. Мочалкою з металевої стружки можна видалити тонер менше ніж за хвилину.

Луження. Старий добрий паяльник вже піднадоїв. Як і це вічне запитання, що раніше лудити чи злити? Лудим сплавом РОЗЕ у воді з лимонною кислотою і сіллю. Процес займає кілька хвилин. Ніякого гліцерину! І ніяких гумових шпателів - незручно ж і гаряче. Мій вибір - малярна пензлик і дерев'яні палички для фіксації плати на дні посудину. Лимонна кислота видаляє плівку окисла з поверхні плати. Сіль потрібна для підвищення температури кипіння, та й вода з сіллю кипить якось спокійніше.

Природно, що посуд для луження не повинен використовуватися для їжі

Після луження плата миється, сушиться (паперові серветки) і покривається шаром рідкого флюса (каніфоль у спирті).

Ось яка краса!

Збірка

Як сказано в таких випадках - «добре зафіксований пацієнт наркози не потребує» «правильно зібрана схема налагодження не потребує». Однак можу порекомендувати деякий порядок складання: встановлюємо всі резистори і конденсатори, панельки для мікросхем і стабілізатори U3, U4. Подаємо харчування і переконується, що на 7 виведенні МК 5V, і 3.3V теж на місці. Далі встановлюємо транзистори, кварці, підключаємо LED стрічку і програмуємо МК або на платі, або в программаторі, і ставимо на місце. Після подачі харчування світлодіоди на стрічці повинні протягом 5 секунд пройти по всіх кольорах від червоного через зелений і синій до червоного. Якщо процес зміни кольорів займає 20 секунд - швидше за все неправильно встановлений фьюз «Divide clock by 8 internally». Далі підключаємося по UART (9600/8 data/no parity/1 stop) і граємося з кольорами в інтерактивному режимі. Встановлюємо DS1307, ставимо час командою ts і переконуємося, що годинник йде... чи не йдуть??? Тут є тонкий момент: DS1307 запускається не завжди. Не панікуємо, відмиваємо від флюса, сушимо плату, пробуємо притягнути корпус кварцу до землі, поміняти кварц або вже на худий кінець саму DS1307. Годинникова мікросхема - дуже чутлива, працює фактично на мікротоках - трошки акуратності і все вийде.

Стрічку кріпимо на карниз і/або стелю - головне, що б було видно тільки світло від діодів, а не самі діоди.

З'єднання стрічки з платою зручно робити звичайною вітою парою, коричневий і коричневий з білим - 12V, інші кольори відповідно - R, G, B. Якщо використовується модуль bluetooth пристрій, можна закріпити де-небудь на карнизі, тоді доведеться тягнути тільки 12V або 220V якщо там же розмістити і блок живлення.

Про модуль bluetooth - HC-05 - хустка дрібниці і для установки зручно спочатку підпаяти до неї ніжки, а потім вже встановити на платі.

Зібраний пристрій:

Зверніть увагу на перемички. Вони з'єднують модуль bluetooth з мікроконтролером: 3.3V — 3.3V1; URX — UTXb; UTX — URXb. Якщо додаток blutooth не використовується UART адаптер підключається до гніздів URX, UTX, GND.

І так, каюся, поклав стабілізатор живлення модуля bluetooth на бік ой, негарно як - самому не подобається тільки для того щоб вліз в коробочку роз'єм Molex.

Точки росту

  • SMD
  • різні розклади по днях тижня
  • апаратний ШИМ
  • датчик освітлення
  • інші виконавчі пристрої
  • GUI
  • ARM32 - особливо цікаво (кілька STM32F030F4P6 чекають свого часу)

Схема, прошивки, плата, вихідники

Разом

В експлуатації знаходяться два пристрої. Останній зібрано точно за додатною документацією. Працює 24 * 5.5 - тому що у вихідні, незважаючи на загальну концепцію, всім хочеться поспати. Тато погрався з AVR, синуля посверлив, попаяв і тепер радісно рулить стрічкою з планшета. В цілому, всі задоволені.

Дякую за увагу. Сподіваюся, пристрій буде кому-небудь корисний.