Датчик виявлення протікання на 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

Top