Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

  • Час 22-09-2015, 11:02
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

Вітаю всіх. Одного разу мені сподобався скляну кулю, який в темряві випромінює світло, накопичений за день, та й до того ж в підставці до нього була RGB підсвічування. Однак підсвічування ця була настільки халтурна (8 кольорів, так і ті стрибком змінювалися), що було вирішено зробити свою, та ще й з плюшками. Основа схеми - мікроконтролер AVR Attiny13. Хоча він підтримує тільки 2 канали апаратного ШІМ (широтно-імпульсна модуляція), а RGB світлодіод вимагає 3, не проблема - реалізуємо програмний ШІМ. Плюшки наступні крім ШІМ регулювання RGB світлодіодів: регулювання швидкості зміни кольорів від 1 секунди на цикл зміни квітів до 1000 секунд, а також можливість зупинити світлові ефекти натисненням кнопки і заморозити поточний колір. Назвав я цю функцію "Стоп-колір". Про кількість кольорів: тут також реалізована фішка - змінення кольорів відбувається не тільки лінійно від червоного до фіолетового кольорів веселки, але і по поєднанню нульових і максимальних значень кольору - тобто від 100 відсоткової насиченості до нульової насиченості кольорів, тобто до білого кольору. Програма зміни кольору лінійна, строго задана програмою. Флеш пам'ять Attiny13 не дозволила реалізувати рандомное непередбачену зміну кольору. Може це і на краще.

Схема вийшла ось такий:

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

Що і як робилося. Регулювання швидкості. Почнемо з затримок функцією _delay_ms(); , звичайне її використання зводиться до запису в дужки якогось значення, протягом якого повинна проходити затримка, але якщо ж в скобочки поставити змінну, то розмір програми різко збільшиться. Це зовсім не годиться, адже вже ризикуємо не влізти в пам'ять Attiny13. Вихід простий - організуємо цикл виклику кінцевого числа раз функції затримки тривалістю, скажімо 1 милі секунда. Розмір програми для контролера знову в нормі. Тепер цю функцію можна використовувати для регулювання швидкості виконання світлового ефекту. Далі звідки брати динамічна зміна змінної затримки? Теж все просто, тинька має на борту АЦП (аналого-цифровий перетворювач) 10 біт, значення від 0 до 1024 - відмінно згодиться для значення затримки. Тобто виходить, що затримка між збільшенням або зменшенням яскравості від 1 милі секунди до 1 секунди. Від 1 тому, що при нульовій затримці буде просто мельтишение, негарно, тому нуль виключений. Отже, беремо значення з АЦП та штовхаємо значення змінної затримки. Також значення АЦП можна брати як 10 біт, тобто 1024 відліку, так і просто поділити це значення на 2, 4, 8 і так далі і вийде більш вузький діапазон регулювання. Апаратно регулювання буде здійснюватися потенціометром або змінним резистором, підключеним крайніми висновками до плюса і мінуса харчування, а середнім до входу АЦП мікроконтролера. R3 для захисту порту, токоограничительный. R1 обмежує напругу таким чином, щоб максимальне значення АЦП було 1000, решта 24 відліку планувалося для підключення ще однієї кнопки, але виразного функціоналу вона не отримала, тому залишилося так для можливості в майбутньому що-небудь "допилити". Джерелом опорної напруги АЦП вибрано напруги живлення 5 вольт мікроконтролера. Що щодо зупинки ефекту зміни кольору, то при натисканні кнопки S2 відбувається перекидання з основного нескінченного циклу зі світловим ефектом в інший порожній нескінченний цикл, повторне натискання кнопки перекидає виконання програми назад в основний нескінченний цикл. Простенько і сердито.

// затримка в мілісекундах (функція для економії пам'яті) void delay_ms(unsigned int time_ms) { register unsigned int i; for(i = 0; i lt; time_ms; i++) { _delay_ms(1); } }

У програмі задіяно 2 переривання: переривання по переповненню таймера 0 для опитування стану кнопки, а також переривання по завершенню перетворення АЦП. Як зазначалося, зміна кольору відбувається не тільки від кольору до кольору, але і із зміною їх насиченості, тобто не тільки горизонтально, але і вертикально. При мінімальній насиченості кольору будуть розмиватися один з одним (див. малюнок нижче) і врешті-решт вийде білий колір, хоча по палітрі на малюнку там присутній і сірий, але можливості RGB світлодіодів не дозволяють передати його, як і чорний колір. Виходить просто яскравість білого кольору замість переходу від чорного до білого. Тому рівні чорного кольору не було навіть спроби реалізувати))

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

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

Програмно справа виходить так (програмний код на gcc):

int main(void) { cli(); // заборонити переривання глобально // настроювання порту DDRB = (1 n) red --; else temp = 3; } if (temp==3) {if (blue lt; pwm-n) blue ++; else temp = 4; } if (temp==4) {if (green gt; n) green --; else temp = 5; } if (temp==5) {if (red lt; pwm-n) red ++; else temp = 6; } if (temp==6) {if (blue gt; n) blue --; else {temp = 1; if (s==1) {if (n lt; pwm/2) n ++; else s = 2;} // збільшується яскравість квітів до білого if (s==2) {if (n gt; 0) n --; else s = 1;} // зменшується яскравість до повної насиченості }} delay_ms(time); if (k==1) {break;} } // кінець while(1) while (2) // режим при натисканні кнопки - стоп, кольори не змінюються більше, фіксується поточний { if (k==0) {goto begin;} } // кінець while(2) } // кінець main

Змінна k відповідає за зупинку зміни кольору, перекидає в різні цикли програми.
Змінна n відповідає за перехід від 100% насиченості квітів до розмиття їх до білого, не може бути більше ніж 1/2 від pwm
Змінна pwm - значення дискретизації ШІМ

Це вся головна програма роботи мікроконтролера для даного пристрою.

Як RGB світлодіоди використовувалася світлодіодна стрічка на цих самих RGB світлодіодах. Конкретної марки або моделі стрічки не знаю, начебто щось від RoHS. Стрічка має в собі вже струмообмежувальні резистори, баланс білого добре налаштований. Так як стрічка вимагає живлення 12 вольт, у схемі був використаний підвищує DC-DC перетворювач на мікросхеми MC34063. Зроблено це для того, щоб була можливість живити схему від трьох пальчикових акумуляторів або просто від USB порту. Ясна річ АА акумулятори доведеться часто заряджати, зате красиво і яскраво. При заміні живлення на 12-вольтової, перетворювач можна замінити на звичайні лінійні перетворювачі типу 7805 і відповідно перерасключить харчування в схемі. Для управління світлодіодами використовується мікросхема ULN2003. По суті це просто 7 транзисторів в корпусі мікросхеми (7 збірок дарлингтонов), можна замінити на звичайні транзистори підходящої потужності і габаритів. Висновки мікросхеми ULN2003 з'єднані попарно для збільшення потужності виходів. Кожна ніжка з даташіту має межу по струму в 0,5 А, а в сумі за всіма значення становить 2,5 А. Це варто враховувати, якщо передбачається навантаження більше, ніж 1 юніт світлодіодної стрічки в моєму випадку. Для регулювання швидкості ефекту зміни кольорів використовується потенціометр R2, можна застосувати будь-який, відповідний за смаком. Кнопка S1 здійснює скидання контролера (reset). На всяк випадок. Конденсатор C8 для більшої надійності, їм можна знехтувати.

Готове пристрій вийшло ось такого виду (зібрано з застосуванням макетної плати власного виробництва для tiny13):

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

Область застосування цього пристрою, як і майже будь-якого іншого, обмежує лише фантазія інженера або радіоаматора. Пристрій може бути легко модернізовано під будь-яку іншу мету завдяки простоті, повторюваності і можливості просто вносити зміни в схему.

Фьюз біти для програмування мікроконтролера Attiny13:

Лампа настрою з регулюванням швидкості зміни кольорів і функцією стоп-колір

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

Список радіоелементів

Позначення Тип Номінал Кількість IC1 IC2 IC3 VD1 R2 R1, R3, R5-R7 R4 R8 R9 R10 R11 R12 C1, C3, C7 С2 С4 C5, C8 С6 L1 S1, S2
МК AVR 8-бітATtiny13A1
Складовою транзисторULN20031
DC/DC конвертер імпульснийMC34063A1
Діод Шотткі1N58191
Змінний резистор10 кОм1
Резистор240 Ом5
Резистор10 кОм1
Резистор12 кОм1
Резистор1 кОм1
Резистор1.5 кОм1
Резистор180 Ом1
Резистор0.25 Ом1 Можна підбором декількох паралель
Конденсатор100 нФ3
Електролітичний конденсатор10 мкФ1
Конденсатор590 пФ1
Електролітичний конденсатор1000 мкФ2
Електролітичний конденсатор100 мкФ1
Дросель100 мкГн1
Тактова кнопкаTC-A1092
RGB світлодіодна стрічка1
Tags

Коментарі до новини