Детектор кота на кухне проект на Arduino

Цель проекта:
Создание устойчивого рефлекса у Котэ путем своевременного запрета к проникновению на кухню.

Пердназначение устройства:
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);
}

 

При использовании данных материалов просьба — укажите ссылку на данную статью.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *