Это руководство поможет вам создать систему мониторинга присутствия в реальном времени с помощью датчика миллиметровых волн DFRobot и макетной платы Beetle ESP32 C6.

Real-Time Presence Monitoring with mmWave and Beetle C6
Real-Time Presence Monitoring with mmWave and Beetle C6

История

В этом проекте мы создадим систему мониторинга сердцебиения в реальном времени, используя датчик миллиметровых волн DFRobot, макетную плату Beetle ESP32 C6 и Arduino IDE. Система будет отправлять оповещения через Telegram, что делает ее идеальной для мониторинга присутствия человека. Данная разработка будет полезна для непрерывного мониторинга в сфере безопасности.

https://hackster.imgix.net/uploads/attachments/1745900/image_Eo6ckeW3Pd.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Необходимые компоненты

  • датчик миллиметровых волн DFRobot (60 ГГц)

  • плата Beetle ESP32 C6

  • соединительные провода

  • макетная плата

  • блок питания

  • аккаунт в Telegram и бот

Шаг 1: Пошаговое руководство

Настройка оборудования

  • Подключите датчик к плате Beetle ESP32 C6:

    • VCC — 5V

    • GND к GND

    • TX к RX

    • RX - TX

  • Подключите плату Beetle ESP32 C6 к подходящему источнику питания.

Шаг 2: Установка программного обеспечения

  • Перейдите на страницу программного обеспечения Arduino

  • Скачайте и установите Arduino IDE: выберите версию, совместимую с вашей ОС (Windows, Mac OS X или Linux), и скачайте её.

https://hackster.imgix.net/uploads/attachments/1745902/image_GyVAwgOSFj.png?auto=compress%2Cformat&w=1280&h=960&fit=max
  • Запустите Arduino IDE: откройте Arduino IDE из установленных приложений.

https://hackster.imgix.net/uploads/attachments/1745903/image_WyIxnbOGWk.png?auto=compress%2Cformat&w=1280&h=960&fit=max
  • Откройте настройки: перейдите в File > Preferences (или Arduino > Preferences для Mac).

В поле «Additional Board Manager URLs» («Дополнительные URL-адреса менеджера плат») введите следующий URL-адрес:

Если у вас уже есть другие URL-адреса, их можно разделить запятой.

https://hackster.imgix.net/uploads/attachments/1745904/image_8NBKXAnFj4.png?auto=compress%2Cformat&w=1280&h=960&fit=max
  • Откройте Менеджер плат (Boards Manager): перейдите в меню Tools > Board > Boards Manager.

  • Поиск ESP32: в строке поиска введите «ESP32».

  • Установите ESP32: найдите запись «ESP32 by Espressif Systems» и нажмите кнопку «Установить».

https://hackster.imgix.net/uploads/attachments/1745905/image_IoMcy75opN.png?auto=compress%2Cformat&w=1280&h=960&fit=max
  • Подключите плату ESP32 к компьютеру с помощью USB-кабеля.

  • Выберите плату: перейдите в меню Tools > Board и выберите конкретную модель платы ESP32 — Beetle ESP32 C6.

https://hackster.imgix.net/uploads/attachments/1745906/image_kIimob8lU6.png?auto=compress%2Cformat&w=1280&h=960&fit=max
  • Выберите порт: перейдите в меню Tools > Port и выберите COM-порт, к которому подключена ваша плата ESP32.

https://hackster.imgix.net/uploads/attachments/1745907/image_s71279M33g.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Шаг 3: Добавление необходимых библиотек

  • Откройте Arduino IDE и перейдите в раздел Sketch > Include Library > Manage Libraries.

https://hackster.imgix.net/uploads/attachments/1745911/image_pdOoVIivq9.png?auto=compress%2Cformat&w=1280&h=960&fit=max
https://hackster.imgix.net/uploads/attachments/1745912/image_mwQweqktp0.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Шаг 4: Программирование Beetle ESP32 C6

Сначала перейдите в раздел скетчей примеров и найдите скетч Human Detection («Обнаружение человека»), а затем используйте базовый скетч.

https://hackster.imgix.net/uploads/attachments/1745913/image_aZhGJginvX.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Далее необходимо настроить выводы UART в соответствии с инструкцией Beetle ESP32 C6.

https://hackster.imgix.net/uploads/attachments/1745915/image_xA2dgQP86y.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Загрузите код и посмотрите на вывод последовательного порта в терминале.

https://hackster.imgix.net/uploads/attachments/1745916/image_xwkfWjDFOB.png?auto=compress%2Cformat&w=1280&h=960&fit=max

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

https://hackster.imgix.net/uploads/attachments/1745919/image_fGjVfOEBPp.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Шаг 5: Настройка Telegram-бота

Создайте Telegram-бота:

  • Откройте Telegram и найдите BotFather.

https://hackster.imgix.net/uploads/attachments/1745920/image_GVfHXJI9UV.png?auto=compress%2Cformat&w=1280&h=960&fit=max
  • Начните чат с BotFather и используйте команду /newbot, чтобы создать новый бот. 

https://hackster.imgix.net/uploads/attachments/1745921/image_AUnoNfkswi.png?auto=compress%2Cformat&w=1280&h=960&fit=max
  • Следуйте инструкциям, чтобы получить свой токен бота.

https://hackster.imgix.net/uploads/attachments/1745922/image_ij0RumFPX1.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Получите свой идентификатор чата: начните общение со своим ботом и отправьте любое сообщение.

https://hackster.imgix.net/uploads/attachments/1745923/image_fAzz1nsoUM.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Найдите объект chat в ответе, чтобы узнать свой идентификатор чата.

Шаг 6: Интеграция с ботом Telegram.

Это готовый скетч, способный распознавать движения человека и отправлять сообщения в Telegram.

#include "DFRobot_HumanDetection.h"
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h> // Universal Telegram Bot Library written by Brian Lough: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
#include <ArduinoJson.h>
#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
#include <SoftwareSerial.h>
#endif

#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5);
DFRobot_HumanDetection hu(&mySerial);
#else
DFRobot_HumanDetection hu(&Serial1);
#endif

// Replace with your network credentials
const char* ssid = "ELDRADO";
const char* password = "amazon123";

// Use @myidbot to find out the chat ID of an individual or a group
// Also note that you need to click "start" on a bot before it can
#define CHAT_ID "xxxxxxxxxxxxxxxxxxxx"

// Initialize Telegram BOT
#define BOTtoken "xxxxxxxxxxxxxxxxxxxxx" // your Bot Token (Get from Botfather)
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

//Checks for new messages every 1 second.
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;

void setup() {  
Serial.begin(115200);

#if defined(ARDUINO_AVR_UNO)||defined(ESP8266)
mySerial.begin(115200);
#elif defined(ESP32)  
Serial1.begin(115200, SERIAL_8N1, /*rx =*/17, /*tx =*/16);
//  Serial1.begin(115200, SERIAL_8N1, /*rx =*/20, /*tx =*/21);
#else
  Serial1.begin(115200);
#endif

Serial.println("Start initialization");

// Connect to Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
#ifdef ESP32
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
#endif
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  // Print ESP32 Local IP Address
  Serial.println(WiFi.localIP());

while (hu.begin() != 0) {
    Serial.println("init error!!!");
    delay(1000);
  }
  Serial.println("Initialization successful");

Serial.println("Start switching work mode");
  while (hu.configWorkMode(hu.eSleepMode) != 0) {
Serial.println("error!!!");
    delay(1000);
  }
  Serial.println("Work mode switch successful");  

Serial.print("Current work mode:");
switch (hu.getWorkMode()) {
    case 1:
      Serial.println("Fall detection mode");
      break;
    case 2:
      Serial.println("Sleep detection mode");
      break;
    default:
      Serial.println("Read error");
  }

 hu.configLEDLight(hu.eHPLed, 1);  // Set HP LED switch, it will not light up even if the sensor detects a person when set to 0.
hu.sensorRet();                   // Module reset, must perform sensorRet after setting data, otherwise the sensor may not be usable   Serial.print("HP LED status:");
  switch (hu.getLEDLightState(hu.eHPLed)) {
    case 0:
      Serial.println("Off");
      break;
    case 1:
      Serial.println("On");
      break;
    default:
      Serial.println("Read error");
  }

Serial.println();
Serial.println();

 String welcome = "Welcome ";
  welcome += "Motion Detector Activated.\n\n";
bot.sendMessage(CHAT_ID, welcome, "");
}

void loop() {
  Serial.print("Existing information:");
  switch (hu.smHumanData(hu.eHumanPresence)) {
    case 0:
      Serial.println("No one is present");
      break;
    case 1:
      Serial.println("Someone is present");
      break;
    default:
      Serial.println("Read error");
}

Serial.print("Motion information:");
switch (hu.smHumanData(hu.eHumanMovement)) {
    case 0:
      Serial.println("None");
      break;
    case 1:
      Serial.println("Still");
      break;
    case 2:
      Serial.println("Active");
      break;
    default:
      Serial.println("Read error");
  }

Serial.print("Body movement parameters: ");
Serial.println(hu.smHumanData(hu.eHumanMovingRange));

if (hu.smHumanData(hu.eHumanMovingRange) > 2) {
    String message = "Motion Detected: Please check the status  \n";                      bot.sendMessage(CHAT_ID, message, ""); }

Serial.print("Respiration rate: ");
Serial.println(hu.getBreatheValue());
  Serial.print("Heart rate: ");
  Serial.println(hu.gitHeartRate());
  Serial.println("---------------------- -");
  delay(200);

}

Примечание: необходимо обновить учётные данные Wi-Fi и Telegram, чтобы они соответствовали вашим собственным.

Как только статус движения станет выше 2, сработает Telegram-бот.

https://hackster.imgix.net/uploads/attachments/1745925/image_rsYCalGnWY.png?auto=compress%2Cformat&w=1280&h=960&fit=max

Шаг 7: Протестируйте установку

Вот и всё! Вы успешно разработали систему обнаружения движения. Теперь давайте проверим работу системы. Вот видео, на котором система работает.

Заключение

https://hackster.imgix.net/uploads/attachments/1745934/screenshot_2024-08-06_161852_9HAFacwohx.png?auto=compress%2Cformat&w=1280&h=960&fit=max

В этом руководстве мы рассмотрели интеграцию датчика миллиметровых волн DFRobot C1001 с платой ESP32 C6 для создания сложной системы обнаружения движения человека. Мы рассмотрели процесс установки оборудования, настройки датчика и написания необходимого кода для обнаружения присутствия и движения человека. Кроме того, мы продемонстрировали, как подключить эту систему к Telegram-боту, что позволяет получать уведомления и оповещения в реальном времени прямо на мобильное устройство. 

Этот проект не только демонстрирует возможности датчика миллиметровых волн в точном обнаружении движения, но и подчеркивает удобство и эффективность использования Telegram для удаленного мониторинга и управления. Следуя этому руководству, вы сможете создать надёжную и интерактивную систему обнаружения движения для различных приложений, от систем «умного» дома до систем безопасности.

Комментарии (7)


  1. Kill_Voice
    25.12.2024 10:16

    Цена датчика конечно мощная, на эти деньги можно купить десяток LD2410 который в целом можно использовать даже без ESP.


    1. AI_MCU_hub Автор
      25.12.2024 10:16

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

      У DFRobot есть более дешёвые варианты, они больше похожи на LD2410, например https://www.dfrobot.com/product-2793.html. Хотя цена всё равно выше.


    1. kenomimi
      25.12.2024 10:16

      Там датчики очень разные, правда, нигде нет вменяемой инструкции, как они работают и как их правильно использовать. Везде или как тут в статье картинки про ардуино с простейшим примером, или нечто на китайском от производителя HiLink (который их и делает, собственно)

      Вроде те, что подороже, баксов 30-40, умеют чуть ли не дыхание определять через стену... В статье, похоже, оно самое, только с добавкой в виде esp32.


      1. Kill_Voice
        25.12.2024 10:16

        Они все плюс-минус одинаково работают, это микроволновый радар который на выходе выдает цифровой сигнал


  1. vagon333
    25.12.2024 10:16

    На видео непонятно, есть ли надежное обнаружение движения и объектов.

    Пробовал LD241х.
    Не смог добиться надежного определения присутствия и определения дистанции.
    Это только у меня такой грустный опыт?


    1. Kill_Voice
      25.12.2024 10:16

      У датчиков LD241x, есть настройки чувствительности по зонам с ними нужно экспериментировать, но в любом случае возможны какие-то фантомые обнаружения, особенно в многоквартирных домах, для более лучшей работы можно дополнить сборку IR датчиком движения


  1. sav13
    25.12.2024 10:16

    А кто-то разобрался с Zigbee в этих контроллерах?

    У меня поле компиляции примера случается циклические ребут (((