Думаю, среди посетителей данного сайта вряд ли найдутся те, кто не знает, что такое Ардуино. С помощью этой платы можно создавать множество различных устройств. Кроме того, для Ардуино существует множество различных сенсоров, позволяющих обнаруживать различные явления: свет, влагу, наклон и многое другое. К примеру, замечательный набор из 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-битATtiny131
Резистор10 кОм2
Динамик1
Сенсор влажности1
Монтажная плата1
Добавить все