Контролер підсвічування сходів

Загалом усе почалося з того, що мій друг попросив мене зробити йому цей девайс. Я тільки починав вивчати мікроконтролери STM32, і для мене це перший справжній проект - до цього я балувався світлодіодами і кнопками, а хотілося чогось реального, що може стати в нагоді.
Проект ще не закінчено, викладатиму статті в міру готовності проекту. На даний момент, готова та обкатана програма на макетці, готова схема, фотошаблони для друкованої плати з маскою та шовкографією.
Отже, почнемо. Суть роботи контролера проста. Внизу і вгорі сходів встановлені датчики, які "відчують", що хтось хоче піднятися сходами, або спуститися нею. Тоді світлодіодні стрічки, розташовані під сходами, плавно і по черзі спалахують.
Датчик внизу буде розташований десь тут:

Відразу скажу, фотки робив з тих сходів, на яких усе працюватиме. У будинку ремонт не закінчено, пардон за бардак.
Датчик нагорі сходів буде тут:

Що ж являють собою самі датчики? Це ультразвукові датчики, сонари, HC-SR04. Привіт ардуїнникам!

Невелике описалово. Тут видно, що він має 4 контакти: Vcc, Trig, Echo, Gnd. До Vcc ми підключаємо + живлення, Gnd -. Живиться він від напруги 5 вольт, але після подачі живлення датчик насправді нічого не вимірює. Навіщо ж потрібні Trig і Echo? Виявляється, на датчик спочатку потрібно подати імпульс, на контакт Trig, а потім рахувати результат з контакту Echo. Давайте подивимося на уривок з даташиту:

Тут сказано, що слід подати короткий імпульс тривалістю 10мкс на ногу Trig. Потім модуль надішле 8 ультразвукових сигналів і прийме луна.Потім видасть відстань до об'єкта на нозі Echo імпульсом, тривалість якого буде пропорційна відстані до об'єкта. Відстань можна обчислити за формулою: Відстань(см) = тривалість_імпульсу_echo / 58. Також виробник рекомендує, щоб мінімальний цикл вимірів становив 60мс. У своєму контролері замір відбувається 10 разів на секунду, цього цілком достатньо і цикл вимірів складе 100мс. Так само, для економії ніг мікроконтролера та спрощення програми, висновки Trig можна поєднати в один. Таким чином, сигнали Trig на датчики надсилатимуться одночасно:

Тепер про силову частину. Світлодіодні стрічки, звичайно, не можна підключати безпосередньо до мікроконтролера, так як одна нога мікроконтролера STM32F100x може комутувати струм максимум 20мА, а струм для стрічки може досягати трохи більше 1А на метр. Та й напруга ці стрічки вимагають 12/24В (у разі 12В). Тому потрібно якось подавати на них напругу, не пошкодивши мікроконтролер. Найпростіше рішення в даному випадку – польовий транзистор! Управляється напругою, тобто щоб її відкрити, важливо, якою напругою її відкриваєш, а струм може бути нікчемним. Давайте подивимося на схему:

Як бачите, все досить просто. R2 – це підтяжка до мінусу живлення. Він потрібний для того, щоб транзистор не "ловив" перешкоди ззовні. Резистор R1 у принципі теж потрібний, хоча деякі його не ставлять. Він для захисту самого мікроконтролера. Справа в тому, що "керуючий вхід" польового транзистора або затвор має свою ємність. Під час подачі на нього керуючого напруги ця ємність заряджається і трохи проводить струм. Щоб обмежити цей струм і ставлять резистор R1, щоб не спалити мікроконтролер. Хоча знову ж таки, не всі його ставлять, тому що ємність затвора дуже маленька.Номінали резисторів - майже зі стелі, тут нічого критичного немає.
Давайте поговоримо, як вибрати транзистор для наших цілей, і так, напис IRLML2502 тут не випадково, саме такі і будуть використовуватися в даному проекті. Як підібрати потрібний транзистор? Я виходив з того, що пропонує місцевий магазин, потім дивився в датішити цих транзисторів і так підбирав. Перше, що нам цікаво, це максимальна напруга, яка здатна комутувати транзистор:

Ідемо нижче по даташиту, і знаходимо максимальний струм:

Підходить. Далі, важливий параметр, це напруга, коли транзистор відкриється. Тут дивимося графік:

У різних виробників графіки приблизно однакові. Головне, знайдіть на осях значення Vds та Id. Зараз все поясню. Тут купа ліній, але нам потрібна лише одна. Чи бачите у лівому верхньому кутку графіка значення? Це Vgs, тобто напруга, що подається на затвор щодо початку. У нас мікроконтролер видає 3,2-3,3 вольт десь приблизно. Шукаємо у цій табличці найближчу напругу. Ну, візьмемо 4 значення знизу, значить наша лінія серед цього віника - 4 знизу. Далі, на лівій осі шукаємо те значення струму, який буде комутувати транзистор. У нашому випадку максимум десь 1,5А, ну 2А із запасом. Шукаємо перетин цього струму з нашою лінією, потім від перетину йдемо вниз:

На нижній осі ми отримаємо падіння напруги на стоку транзистора, тобто скільки вольт загубиться на транзисторі при комутації струму 2 за умови, що відкривати його будуть напругою 3В. Як бачимо копійки, тобто можна сказати, що транзистор відкриється повністю. Виходить, він нам підходить. Чудово!
Ну і до завершення занудної теорії схема:

І фотка килима на тлі девайсу на макетці: