Датчик виявлення протікання на ATtiny13
Думаю, серед відвідувачів цього сайту навряд чи знайдуться ті, хто не знає, що таке Ардуіно. За допомогою цієї плати можна створювати безліч різних пристроїв. Крім того, для Ардуіно існує безліч різних сенсорів, що дозволяють виявляти різні явища: світло, вологу, нахил та багато іншого. Наприклад, чудовий набір із 37 сенсорів, який можна придбати на відомій китайській інтернет-площадці.
Але іноді виникають ситуації, коли з тих чи інших причин використовувати плату Ардуіно невигідно: дорого, надмірно, проблеми з подачею потрібної напруги для деяких моделей, мало місця для пристрою і т. д. У таких випадках я пропоную використовувати мікроконтролер ATtiny13. Цей МК має АЦП і цілком підходить для створення невеликих, автономних датчиків. Як приклад у своїй статті я пропоную зібрати датчик виявлення протечки, який у випадку виявлення на контактах сенсора вологи буде подавати звуковий сигнал. Такий сенсор можна придбати і окремо. Його вартість не перевищить 200 гривень.
Датчик досить простий за своєю конструкцією і доступний для початківців. Він складається з сенсора, що реагує на вологість, мікроконтролера, що приймає рішення про протечку, а також динаміка і 5В від старого телефонного зарядного пристрою.
Принцип роботи датчика також досить простий: при потраплянні води між контактами сенсора відбувається замикання, в результаті чого змінюється рівень сигналу на АЦП.
Сенсор, використаний у статті, має чотири виходи: GND, VCC, аналоговий і цифровий. Для нашого пристрою нам знадобляться два виходи для живлення і аналоговий вихід А0.
Схема пристрою:
Алгоритм роботи програми буде наступним. З сенсора на АЦП циклічно зчитується сигнал. При перевищенні порогового рівня сигналу, буде спрацьовувати динамік. Потім знову зчитуємо з АЦП і перевіряємо рівень. Таким чином, у разі, якщо причина протечки буде швидко усунена, датчик перестане видавати сигнал без відключення живлення.
Оскільки, код написаний на асемблері, для кращого розуміння алгоритму, нижче наведено блок-схему.
Ось вихідний код програми для МК ATTiny. Порогове значення, при перевищенні якого відбувається спрацьовування, вказується в константі porog.
.include "tn13def.inc" .equ porog =128 .equ led =1 .org 0 rjmp reset .org 9 rjmp ADC_complete reset: ldi r16,RAMEND out SPL, r16 ldi r16, 1|(1<<1)|(1<<2)|(1<<3) out DDRB,r16 ldi r16,(1<<ADLAR)|(1<<MUX1) out ADMUX,r16 ldi r16,(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2) out ADCSRA,r16 ldi r16,(1<<WGM00)|(1<<WGM01)|(1<<COM0A1)|(1<<COM0A0) out TCCR0A,r16 ldi r16,(1<<CS01) out TCCR0B,r16 sei main: rjmp main ADC_complete: in r16,ADCH out OCR0A,r16 cpi r16,porog ; порогове значення BRSH Level1 sbi PORTB,led rjmp Return Level1: cbi PORTB,led Return: reti
Для прошивки використовувався AVRDude, фьюзи не змінювалися.
Далі на відео представлений процес складання пристрою. В якості апгрейду можна припаяти до динаміка довгий провід, щоб помістити саме пристрій у ванній, а динамік у сусідній кімнаті.
Розміщувати динамік в тому ж приміщенні, що і датчик, не надто логічно.
В цілому, аналогічним чином можна підключити до ATtiny13 і інші сенсори, призначені для роботи з Arduino.
Список радіоелементів
Обозначення | Тип | Номінал | Кількість | Примітка |
---|---|---|---|---|
МК AVR 8-біт |
ATtiny13
|
1 | ||
Резистор |
10 кОм
|
2 | ||
Динамік | 1 | |||
Сенсор вологості | 1 | |||
Монтажна плата | 1 |