Цель проекта:
Создание устойчивого рефлекса у Котэ путем своевременного запрета к проникновению на кухню.
Пердназначение устройства:
1. Обнаружение кота пытающегося проникнуть на кухню
2. Мгновенная подача звукового сигнала и световой сигнализации при обнаружении кота
Описание и принцип работы:
Сразу оговорюсь, я не мастер писать скетчи для ардуино, если будут рекомендации – пишите)
Устройство установлено вертикально, на полу, при этом датчики располагаются один над другим. Зоны обзора датчиков движения не должны пересекаться, нижний должен смотреть паралельно земле, а верхний примерно под углом 45 гр (на фото первоначальный вид устройства). В процессе тестирования и настройки пришлось ограничивать зону видимости верхнего датчика таким образом чтобы он не пересекался с нижним.
При срабатывании нижнего датчика и отсутствии срабатывания верхнего в промежутке времени 1-3 сек устройство понимает что мимо него прошел кот и подает звуковой сигнал.
При срабатывании нижнего датчика и появлении сигнала с верхнего, устройство понимает что прошел человек и никак не реагирует.
Используемые компоненты для создания устройства:
1. Плата Arduino UNO с микроконтроллером ATmega328 – 1шт
2. ИК датчик движения – 2 шт
3. Динамик “пищалка” от компа – 1 шт
4. Светодиоды 2шт и сопротивления 2шт.
5. Корпус от старого WiFi роутера ASUS (внутри корпуса на фото видно как пристроил плату и приложил датчики движения)
6. Выключатель для вкл/выкл устройства
7. Котэ – как подопытный
Код программы для Arduino
//Программа детектор кота :)))
#define LowPin 2 //Нижний датчик движения
#define HighPin 4 //Верхний датчик движения
int dinamik = 3; //объявляем переменную с номером пина, на который мы подключили пьезоэлемент
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 10;
unsigned long low_detect_time;
unsigned long low_detect_delta;
//================================
void setup()
{
Serial.begin(9600); //Инициализируем консоль для отладки и вывода результатов
pinMode(LowPin, INPUT); //объявляем пин как вход нижнего датчика
pinMode(HighPin, INPUT); //объявляем пин как вход верхнего датчика
pinMode(dinamik, OUTPUT); //объявляем пин как выход динамика
//дадим датчикам время на калибровку
digitalWrite(LowPin, LOW);
digitalWrite(HighPin, LOW);
Serial.print(“Calibrating”);
for(int i = 0; i < calibrationTime; i++)
{
Serial.print(“.”);
delay(1000);
}
Serial.println(” done”);
Serial.println(“SENSORS ACTIVE”);
delay(50);
//Звуковое уведомление о активности сенсоров
beep (100,1000);
}
//================================
//================================
void loop()
{
low_detect_delta=millis()-low_detect_time;
//Если обнаружено движение только на нижнем датчике
if((digitalRead(LowPin) == HIGH) and (digitalRead(HighPin) == !HIGH))
{
low_detect_time=millis();
delay(50);
}
Serial.println(“Delta: “);
Serial.print(low_detect_delta);
if ((low_detect_delta<3000) and (low_detect_delta>1000) and (digitalRead(HighPin) == !HIGH))
{
Serial.println(“Kote DETECTED!!!!!!!!!!!!!! “);
beep (100,1000);
}
}
void beep(int mil, int ton)
{
tone (dinamik, ton);
delay(mil);
noTone(dinamik);
}
При использовании данных материалов просьба – укажите ссылку на данную статью.