Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Автоматизированная база камеры с отслеживанием движения на 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;
    }
  }
}

Производственный процесс

  1. Эволюция и дизайн современных камер
  2. Минимальный корпус для Raspberry Pi, защищающий от статического разряда
  3. Управление светодиодом с PIR-датчиком движения на Raspberry Pi
  4. Система сигнализации с детектором движения на Java и Reactive Blocks — Развертывание на Raspberry Pi и отправка SMS
  5. Создание кнопки AWS IoT с управлением движением на Raspberry Pi, PIR-датчике и MQTT
  6. Установка камеры Raspberry Pi в скворечнике — пошаговое руководство
  7. BrickPi Bookreader: Автоматизация чтения Kindle на Raspberry Pi и LEGO Mindstorms
  8. Настройка живой IP-камеры на Raspberry Pi с Motion — пошаговое руководство
  9. Технология линейного движения: точные решения для автоматизации
  10. Научный центр NASA Langley представляет передовительную пленоптическую камеру для 3D-цветовой визуализации