В этом проекте сделаем выключатель который будет выключаться и выключаться по хлопку.
Для этого нам понадобится:
attiny13: http://ali.pub/3i09aa
Микрофон: http://ali.pub/3i09fq
Реле: http://ali.pub/29qkrt
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Схема подключения компонентов будет следующая:
За место светодиода можно также подключить и реле, эффект будет тот же.
Теперь давайте перейдем к программированию attiny13. Чтоб это сделать, нам нужно сначала настроить программу arduino ide, я описал данный процесс вот здесь.
Сам код программы выглядит вот таким образом:
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define LED_PIN PB0 // пин для реле(светодиода) #define MIC_PIN PB1 // пин для микрофона static volatile uint8_t state = 0; int main(void) { uint8_t reset = 0, claps = 0; /* setup */ DDRB |= _BV(LED_PIN); MCUCR &= ~(_BV(ISC01)|_BV(ISC00)); GIMSK |= _BV(INT0); sei(); /* loop */ while (1) { /* если обнаружен одиночный хлопок, запустите процедуру */ if (state) { claps++; // increment claps count if (claps == 1) { // если это первый хлопок reset = 0; // сбросить счетчик } else if (claps == 2) { // если второй хлопок PORTB ^= _BV(LED_PIN); // то либо включить либо выключить claps = reset = 0; // и установить начальное значение } state = 0; _delay_ms(200); } if (++reset >= 10) { claps = state = reset = 0; } _delay_ms(100); } } ISR(INT0_vect) { state = 1; }
Сам код можно скачать отсюда: https://yadi.sk/d/49yFYUdnNjSHKA
Принцип работы очень простой, модуль микрофона умеет подавать сигнал по пину D0 когда улавливает какой либо шум. И получается, что как только мы совершаем хлопок, сигнал подается на пин D0 и улавливается контроллером attiny13 и контроллер ждет второго такого сигнала, если второй хлопок произошел меньше чем с интервалом в секунду, то attiny13 включает реле ( или светодиод) если же нет, то придется повторить попытку.
Видео: