Популярные статьи

BMW 3-series Coupe (Бмв ) 2006-2009: описание, характеристики, фото, обзоры и тесты

С сентября 2006 года серийно выпускается БМВ 3-й серии купе (Е92). Невзирая на свое техническое родство с седаном и Touring, купе БМВ 3-й серии имеет

Длительный тест Range Rover Sport: часть вторая

Аш длительный тест Range Rover Sport Supercharged подошел к концу. Первая хорошая новость: машину не угнали! Вторая: несмотря на соблазн, за

Audi E-tron (Ауди ) 2010: описание, характеристики, фото, обзоры и тесты

Audi E-tron, представленный на автосалоне в Детройте в январе 2010 года, совсем не то же самое, что E-tron, который выставлялся осенью на IAA 2009 во

Принципы ухода за АКБ зимой

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

SEAT Toledo (Сиат Толедо) 1998-2004: описание, характеристики, фото, обзоры и тесты

Эта модель расширяет присутствие компании SEAT в сегменте рынка престижных автомобилей. Toledo - первый автомобиль компании дизайн которого выполнен

В 2000 г. семейство японских Corolla лишь обновилось. Спрос на эти машины падал и классическая Corolla уже не устраивала японских покупателей. Как

Skoda Octavia (Шкода Октавия) 1996-1999: описание, характеристики, фото, обзоры и тесты

Skoda Octavia - это современный переднеприводной автомобиль с поперечным расположением двигателя. На нём может стоять один из пяти моторов концерна

Chrysler PT Cruiser (Крайслер Пт крузер) 1999-2010: описание, характеристики, фото, обзоры и тесты

Дебют серийной модели PT Cruiser состоялся в 1999 году в Детройте. Компании Chrysler удалось зацепить ностальгическую струну в душе каждого простого

Примеряем Audi A6 Allroad и A8 Hybrid к нашим дорогам

Компания сыграла на контрасте, представив одновременно две модели, совершенно противоположные по идеологии: сверхэкономичный лимузин-гибрид А8 и

Toyota Tundra Crew Max (Тойота Тундра Crew Max) 2006-2009: описание, характеристики, фото, обзоры и тесты

Toyota Tundra (Тойота Тундра) проектировался как грузовик. Мощный двигатель, основательная рама и большая грузоподъемность... вот что отличает этот

Архив сайта
Облако тегов
Календарь

Контролер витяжного вентилятора у ванній кімнаті

Це стара версія поста, який я так і не опублікував, хоча писав це ще влітку. Поступово до проекту інтерес згас і я вже було хотів видалити пост з чернеток, але недавно до проекту знову виник певний інтерес і я вирішив його опублікувати. Піст не повноцінний, скоріше це можна назвати чернеткою, причину я трохи нижче вказав. Ну і втрата інтересу до проекту теж. Можливо я напишу продовження із зазначенням, що все-таки у мене вийшло і чого я досяг і чому я так вчинив. Ну да ладно, все це лірика, приступаємо до читання:

Отже, вдосталь награвшись з світлодіодом, як сенсором освітленості на платі MSP430 Launchpad , Вирішив рухати далі. Треба переводити це в чинне пристрій. Так як у мене є в наявності тільки мікроконтролери AVR (не рахуючи MSP430, які йшли в комплекті з платою), то і пристрій буде на AVR. Відповідно, розробимо і витравимо під цю справу друковану плату. Отже, поїхали ...

Для початку парканом, як повинен працювати контролер витяжного вентилятора у ванній кімнаті, з якою логікою. Для себе я бачу наступний алгоритм роботи витяжки:

  1. При включенні світла у ванній, чекаємо 2 хв, не включаючи вентилятор.
  2. Якщо 2 хвилини минули, а світло ще включений, запускаємо вентилятор.
  3. Якщо світло було включено менше 3 хв і вимкнули світло, то вимикаємо і вентилятор.
  4. Якщо світло було включено більше 3 хвилин, то після виключення світла у ванній вентилятор працює пропорційно часу, поки був включений світло (наприклад, за кожні 5 хв включеного світла, +3 хв роботи вентилятора)
  5. У будь-якому випадку через 30 хв вимикаємо вентилятор

Алгоритм роботи, за прикидками, досить простий. Особливих вимог до «заліза» мікроконтролера немає. Вимоги до схеми контролера - мінімальна кількість деталей.

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

Це стара версія поста, який я так і не опублікував, хоча писав це ще влітку

Схема контролера витяжного вентилятора у ванну кімнату.

Описувати особливо нічого. Для живлення мікроконтролера використовується блок живлення з гасить конденсатором (C1). При зазначених номіналах на виході блоку живлення (R2, C1, D2, D3, C2, D1, C3, C4) отримуємо близько 5 вольт. Можна було б застосувати інтегральний лінійний стабілізатор, типу LM7805, але у нас завдання - мінімальна кількість деталей. В принципі, того блоку живлення, що є, для живлення мікроконтролера цілком достатньо.

УВАГА!!!

При складанні і налагодження пристрою дотримуйтесь підвищену обережність! Схема не має гальванічної розв'язки від електричної мережі! 5 вольт на мікроконтролер подається щодо самої схеми. Щодо вас там діє 220 вольт. Якщо ви торкнетеся провідників плати у включеному пристрої, то може призвести до ураження електричним струмом! Ні в якому разі не програмуйте мікроконтролер при включеному пристрої, якщо тільки ваш програматор не має гальванічної розв'язки від мережі. Будьте обережні! Я вас попередив.

Для управління навантаженням застосовується симистор (Тріак) BT136. Це досить потужний симистор (вентилятор у нас споживає всього 14ватт, ток 0.085A), але інших у мене немає. Знову ж таки, для мінімізації кількості деталей, симистор включений не як рекомендують в даташіте, а безпосередньо до ноги мікроконтролера. Даташит же рекомендує включати симистор через оптопару по типу MOC3032 і іже з ним (з детектором нуля або без, в залежності від розв'язуваних задач).

Після цього я взяв вентилятор і прикинув, куди я буду ставити плату, заміряв розміри і т.д. Усередині вентилятора виявилося цілком можливо розмістити плату контролера. Потім я приступив до розведення плати. Заліз в своє господарство, наколупав необхідних деталей і запустив Орла. Виходячи з імєємих деталей і розмірів майбутньої плати, вийшло ось що:

Друкована плата контролера витяжного вентилятора

Робив за своїми розмірами, у вас може бути інший вентилятор, інші деталі, інші розміри і т.д.

Тут повинна була бути купа фоток процесу розробки і виготовлення пристрою. Заготовив багато фото. Чесно. Все було розсортовані / відібрано / розкладено / оброблено в окрему папку на домашньому комп'ютері. Але через непередбачені обставини, я цю папку (а там було і купа інших проектів) випадково видалив. 🙁 А коли виявив, що її немає, було вже пізно що-небудь відновлювати. Тому фотографій практично немає. І частина статті довелося тому покоцать.

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

Програматор я використовую куплений на Ebay у кЕтайцев. USBasp. Ось такий:

Ось такий:

Китайський програматор USBasp

Ну не хоче він з Тіні13 працювати. Хоч ти вбий. До цього я раніше програми ATMega8, Attiny2313 і т.д., більш старші контролери. Все було нормально і без проблем. Тут же з Тіні13 не запрацював. Причому, коли Випоюють стабілітрон, то програматор намагається щось побачити, а коли стабілітрон варто, то програматор взагалі нічого не бачить. Кілька разів спробував зашити тестову прошивку, після чого Тіня взагалі перестала реагувати. І зі стабілітроном, і без нього. Перепаяти іншу Тіню13. Та ж історія. Після декількох спроб і вона перестала реагувати. Третю Attiny13 спіткала та ж доля (🙁). Після цього вони у мене закінчилися.

Гугленіе з даної проблеми з програматором особливо нічого не дало. Проблема така існує, але рішення поки немає. Кожен крутиться як може. Я теж вирішив черговий раз все переробити. Для цього, так як Тінек у мене не залишилося, вирішив перейти на ATMega8, яких кілька штук у мене валялося. Знову запустив Eagle CAD і перемалював схему.

Знову запустив Eagle CAD і перемалював схему

Схема контролера витяжного вентилятора у ванну кімнату. Version 2

Ну і відповідно, друкована плата за цією схемою.

Друкована плата контролера витяжного вентилятора. Version 2

Протравами, запаяв, включив програматор ... Вау! Запрацювало! Програматор справно визначає мікроконтролер, прошиває його, шиє фьюз. Ну треба ж, скільки часу на це пішло ...

[Deleted] 🙁

Ось так виглядає зібране пристрій, змонтований в вентилятор.

Плата контролера вентилятора встановлена ​​в сам вентилятор

Все, паяльник вимкнув прибрав в сторону, нехай остигає. З ним роботу закінчив. Тепер дістаємо комп'ютер і приступаємо до програмування бидлокодінгу.

Для початку я накидав программульку, яка як «Hello world» для світлодіода, тільки для вентилятора. Тобто просто вмикає вентилятор, а через деякий час вимикає його. Що б перевірити включення навантаження. І тут мене чекав сюрприз.

Виявилося, що це якщо коли симистор включений по даташіту, через оптопару (з детектором «0», наприклад MOC3062), то якщо на оптопару подається лог. «1», то поки вона подається, навантаження включена. Прибрали одиницю - навантаження виключена. Зручно для мене в даному випадку.

Але у мене ж не по даташіту, у мене прямо до ноги МК підключений симистор. А відповідно і управляти я їм повинен імпульсами самостійно. З плюсів - можна регулювати потужність, що віддається в навантаження, тобто регулювати швидкість обертання вентилятора. Краса! Загорівся я ідеєю. Але не тут то було. Що б регулювати потужність, потрібно визначати момент переходу напруги в навантаженні через «нуль», а потім, в залежності від необхідної потужності, через певний час видавати імпульс на відкриття симистора. Але у мене немає схеми детектування нуля! Всі вже зібрано. А переробляти черговий раз схему і плату ой як не хочеться ...

У аппнотах на мікроконтролери PIC вичитав, що детектувати перехід через «нуль» можна, якщо просто подати сигнал з катода стабілітрона на ногу мікроконтролера через резистор. Ну що ж, вирішив спробувати. Якраз розводка плати дозволяла взяти сигнал з катода стабілітрона і через відповідний SMD-резистор подати його на ногу мікроконтролера INT0 або INT1.

Дістав паяльник, включив, повісив резистор на ІНТ1. Вимкнув паяльник, прибрав.

Але ось же непруха .... Так у мене ця схема і не запрацювала. Я не зміг визначати перехід через «нуль». Блін! ... Я навіть не знаю, якої форми там сигнал ... 🙁 Як же погано без осцилографа. Серйозно задумався про його купівлю.

Треба було щось робити. І я вирішив відмовитися від ідеї регулювати обороти вентилятора. Потрібно змусити просто працювати вентилятор. Поекспериментувавши, зрозумів, що якщо подавати на керуючий вхід симистора імпульси раз в 500 мікросекунд, то це забезпечить надійне включення і роботу вентилятора. Якщо подавати імпульси раз в 1000 мкс, то вентилятор працює ривками, а напруга на ньому коливається вольт по 20 в сторони від приблизно рівня 146 вольт. Тому, залишив імпульси в 500 мкс.

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

Так як в таймері 0 АТмегі8 немає режиму порівняння, при якому викликається переривання за випадковим збігом з числом, то вчинимо так. Будемо завантажувати в лічильник заздалегідь підготовлене значення, назвемо його базою лічильника, і нехай лічильник рахує далі від цього числа до переповнення. Коли лічильник переповниться, буде викликано переривання по переповнення і ми можемо в обробнику його обробити, в нашому випадку, видати імпульс на симистор. Ну і заново завантажити в рахунковий регістр значення бази, що б він вважав від бази лічильника а не від нуля, і щоб у нас не попливли інтервали.

Базу лічильника можна порахувати на калькуляторі, наприклад, мені подобається «калькулятор для AVR» (див. В додатку). Якщо взяти частоту мікроконтролера 2МГц, переддільник таймера 8, то база лічильника буде дорівнює 8. Помилка при цьому буде дорівнює нулю. Тобто переривання по переповнення лічильника відбуватиметься рівно кожні 500 мікросекунд.

Для відліку інтервалів часу в затримках застосуємо інший лічильник - таймер 2. Теж восьмібітних. Його налаштуємо аналогічним чином: переривання по переповнення, перевантаження бази лічильника, обробка переривання. Частоту налаштуємо на 1мс, тобто у нас буде відбуватися 1000 переривань в секунду. Скажімо так, пристойна точність, хоч вона така і не потрібно в цьому проекті.

Так як для всіх лічильників AVR дозволяє встановити тільки один переддільник, то для того щоб отримати зазначені параметри таймера 2 при частоті МК 2МГц і предделителя 8, потрібно базу лічильника виставляти в 0x06.

У обробнику переривання таймера 2 вважатимемо кількість спрацьовувань переривання. Для цього заведемо глобальну 32-бітну змінну uint32_t sys_time, яка буде у нас системним лічильником часу (в мікросекундах). Для наших потреб цього більш ніж достатньо. Тобто, що б дізнатися поточний системний час, ми читаємо дані з sys_time. Ось приклади відповідності (для наочності):
1000 - 1 сек.
3000 - 3 сек.
30000 - 30 сек.
60000 - 1 хв.
300000 - 5 хв.
1800000 - 30 хв.

[Deleted] 🙁

В принципі, код прошивки добре і рясно прокоментований. Розібратися в ньому, я думаю, не складе особливих труднощів. У тому вигляді, який є зараз, відкомпільоване прошивка займає 1Кб. Тобто, якщо є необхідність, то її можна впихнути в контролери Attiny13 і іже з ними.

Ще б я шматок коду, який там є:
if (sel_time> 300000) load_timer = 180000; // якщо більше 5 'то включити навантаження на 3'
if (sel_time> 600000) load_timer = 360000; // якщо більше 10 'то включити навантаження на 6'
if (sel_time> 900000) load_timer = 540000; // якщо більше 15 'то включити навантаження на 9'
if (sel_time> 1200000) load_timer = 720000; // якщо більше 20 'то включити навантаження на 12'
if (sel_time> 1500000) load_timer = 900000; // якщо більше 25 'то включити навантаження на 15'
оптимізував так:
load_timer = sel_time / 300000 * 180000;

[Deleted] 🙁

To be continued ... (May be)

Ах, так, забув файліки докласти ...
Виправляюся.

файліки проекту


venilator_v1.zip

- проект в EagleCad з AtTiny13
venilator_v3.zip - проект в EagleCad з AtMega8

ventilator4.zip - остання версія проекту (исходник і відкомпілювати прошивка). Це копія папки з проектом для Eclipse IDE (так, для AVR пишу в Eclipse, ну не подобаються мені студії від Atmel).

А як рахувати затримки?