Дверная сигнализация с использованием Arduino

Создаем дверную сигнализацию на основе Arduino Mega и ультразвукового датчика, чтобы распознавать присутствие кого-либо за дверью.

Комплектующие

Для реализация проекта дверной сигнализации нам понадобится небольшой набор комплектующих:

Аппаратное оборудование

  1. Arduino Mega
  2. Ультразвуковой датчик
  3. Зуммер
  4. USB-кабель для Arduino
  5. Перемычки
  6. Макетная плата

Программное обеспечение

Проект

Ультразвуковой датчик HC-SR04 мы уже использовали во многих проектах и он же используется здесь для распознавания присутствия любого человека за дверью.

Модуль датчика включает в себя ультразвуковой передатчик, приемник, а также схему управления. Он включает в себя два "круглых глаза", один из которых используется для передачи ультразвуковой волны, а другой - для ее приема.

Мы можем оценить расстояние до объекта, зависящее от времени, затрачиваемого ультразвуковыми волнами, чтобы вернуться обратно к датчику. Это делается с помощью формулы:

Расстояние = (Время х Скорость звука) / 2

Каждый год, когда кто-либо попадает в зону действия ультразвукового датчика, микроконтроллер распознает расстояние от объекта до датчика и, если объект находится в пределах определенного диапазона, он посылает сигнал высокого уровня зуммеру, а зуммер начинает издавать звуковые сигналы.

Мы можем проверить всю цепь, просто поместив что-нибудь перед датчиком в пределах определенного диапазона

Перейдем к схеме соединения нашего устройства.

Схема соединения

Триггерный контакт ультразвукового датчика прикреплен к контакту 12 на Arduino. Контакт Echo датчика прикреплен к контакту 11 на Arduino. Vcc датчика подключен к выводу 5 В Arduino. Заземление датчика (GND) подключено к заземлению (GND) Arduino.

Один вывод зуммера подключен к заземлению (GND) Arduino, а другой - к 8-му выводу Arduino.

Скетч проекта

Ниже вы можете скопировать код и загрузить его в свою Ардуино Мега.

#include <NewPing.h>
#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on ping sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on ping sensor.
#define MAX_DISTANCE 500 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

unsigned int pingSpeed = 50; // How frequently are we going to send out a ping (in milliseconds). 50ms would be 20 times a second.
unsigned long pingTimer;
int flag = 0; // Holds the next ping time.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  pingTimer = millis();
  pinMode(10, OUTPUT); // Start now.
  // Start now.
}

void loop() {
  // Notice how there's no delays in this sketch to allow you to do other processing in-line while doing distance pings.
  if (millis() >= pingTimer) {   // pingSpeed milliseconds since last ping, do another ping.
    pingTimer += pingSpeed;      // Set the next ping time.
    sonar.ping_timer(echoCheck); // Send out the ping, calls "echoCheck" function every 24uS where you can check the ping status.
  }
  if (flag == 1)
  {
    digitalWrite(10, HIGH);

    delay(500);
    digitalWrite(10, LOW);

    delay(500);
    digitalWrite(10, HIGH);

    delay(500);
    digitalWrite(10, LOW);

    delay(500);
  }
  else
  {
    digitalWrite(10, LOW);
  }
}

void echoCheck() { // Timer2 interrupt calls this function every 24uS where you can check the ping status.
  if (sonar.check_timer()) { // This is how you check to see if the ping was received.
    // Here's where you can add code.
    Serial.print("Ping: ");
    Serial.print(sonar.ping_result / US_ROUNDTRIP_CM); // Ping returned, uS result in ping_result, convert to cm with US_ROUNDTRIP_CM.
    Serial.println("cm");
    if ((sonar.ping_result / US_ROUNDTRIP_CM) < 50)
      flag = 1;
    else if ((sonar.ping_result / US_ROUNDTRIP_CM) > 50)
      flag = 0;
  }
}

На этом всё. Устройство мы реализовали. Его можно расширить и придумать разное применение.

31 марта 2020 в 16:12
Опубликовано:
Уроки,

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

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