Автоматизированная база камеры с отслеживанием движения на Arduino и сервоприводе
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino UNO | 1 |
| Конденсатор 100 мкФ | 1 |
| Светодиоды (стандартные) | 5 |
| PIR-датчики движения (HC-SR501) | 5 |
| Резисторы 220 Ом | 5 |
| Сервопривод Tower Pro MG996R | 1 |
О проекте
Идея этого проекта возникла из необходимости решить проблему с домашними камерами наблюдения. У меня была камера, установленная на стене между двумя комнатами, но она могла охватывать только одну комнату за раз — для поворота требовалось ручное управление через ПО. Если кто-то входил в вторую комнату, камера не фиксировала это. Решением стала создание базы с автоматическим отслеживанием движения, на которую можно установить камеру.
Принцип работы
Устройство использует 5 PIR-датчиков для обнаружения движения в радиусе 180°. При срабатывании датчика сервопривод поворачивает базу камеры в соответствующую сторону. Внутри базы размещены 5 светодиодов-индикаторов, которые загораются при срабатывании соответствующего датчика.
Схема подключения
Подключение простое, но из-за 5 датчиков и 5 светодиодов количество проводов довольно велико. Основные моменты:
Светодиодные индикаторы
Использована мини-макетная плата для разделения цепей светодиодов. Каждый светодиод подключен к отдельному цифровому входу Arduino (9–13) через резистор 220 Ом и заземлён.
PIR-датчики движения
Использованы датчики HC-SR501. Каждый подключается к цифровым входам 2–6, к питанию 5В и к земле. Контакты расположены под съёмным кожухом. В коде каждый датчик привязан к соответствующему светодиоду.
Сервопривод
Сервопривод крепится к стойке камеры. Один вывод — к питанию, второй — к цифровому входу 7 Arduino, третий — к земле. Важно: перед включением подключите конденсатор 100 мкФ между питанием и землёй сервопривода для защиты от скачков напряжения.
Не все сервоприводы имеют полный диапазон 180°. Мой двигатель поворачивался только на ~160°, поэтому в коде могут потребоваться корректировки. При попытке выйти за пределы диапазона сервопривод издаёт характерный скрежет.
Конструкция
В качестве основы использован старый аппарат для наклеивания этикеток на CD (Memorex). Плоский пластиковый диск с задней стороны идеально подошёл для установки камеры. Чёрная центральная часть была удалена, в основание просверлены отверстия для крепления сервопривода. Проблема наклона под весом камеры решена картонным цилиндром-распоркой между мотором и платформой.
После установки всех датчиков и сборки электроники (использовалось несколько макетных плат для удобства) видимые части картона покрашены в чёрный цвет для эстетичного вида.
Код
После включения PIR-датчики калибруются 15 секунд — в это время лучше покинуть комнату.
/*************************************************
*** Автоматизированная база камеры с отслеживанием движения ***
*** by Lindsay Fox ***
*************************************************/
#include <Servo.h>
Servo camServo;
int currentPIRposition = 0;
int LEDpin[] = {9,10,11,12,13};
int currentLEDpin = 9;
int PIRpin[] = {2,3,4,5,6};
int currentPIRpin = 2;
int PIRprevState[] = {1,1,1,1,1};
int PIRposition[] = {157,117.75,78.5,39.25,0};
boolean PIRstatus;
void setup() {
Serial.begin(9600);
camServo.attach(7);
for (int p = 0; p < 5; p++) pinMode(PIRpin[p], INPUT);
for (int l = 0; l < 5; l++) pinMode(LEDpin[l], OUTPUT);
Serial.print("Calibrating PIR Sensors ");
for(int c = 0; c < 15; c++) {
Serial.print(".");
delay(1000);
}
Serial.println("PIR Sensors Ready");
camServo.write(78.5);
}
void loop() {
for (int PIR = 0; PIR < 5; PIR++) {
currentPIRpin = PIRpin[PIR];
currentLEDpin = LEDpin[PIR];
PIRstatus = digitalRead(currentPIRpin);
if (PIRstatus == HIGH) {
digitalWrite(currentLEDpin, HIGH);
if(PIRprevState[PIR] == 0) {
if (currentPIRposition != currentPIRpin && PIRprevState[PIR] == 0) {
camServo.write(PIRposition[PIR]);
Serial.print("Current angle: ");
Serial.println(PIRposition[PIR]);
delay(50);
currentPIRposition = currentPIRpin;
PIRprevState[PIR] = 1;
}
PIRprevState[PIR] = 1;
}
} else {
digitalWrite(currentLEDpin, LOW);
PIRprevState[PIR] = 0;
}
}
}
Производственный процесс
- Эволюция и дизайн современных камер
- Минимальный корпус для Raspberry Pi, защищающий от статического разряда
- Управление светодиодом с PIR-датчиком движения на Raspberry Pi
- Система сигнализации с детектором движения на Java и Reactive Blocks — Развертывание на Raspberry Pi и отправка SMS
- Создание кнопки AWS IoT с управлением движением на Raspberry Pi, PIR-датчике и MQTT
- Установка камеры Raspberry Pi в скворечнике — пошаговое руководство
- BrickPi Bookreader: Автоматизация чтения Kindle на Raspberry Pi и LEGO Mindstorms
- Настройка живой IP-камеры на Raspberry Pi с Motion — пошаговое руководство
- Технология линейного движения: точные решения для автоматизации
- Научный центр NASA Langley представляет передовительную пленоптическую камеру для 3D-цветовой визуализации