ESP32-S3 camera board and PIR motion sensor mounted near a doorway with phone notification

ระดับกลาง

สร้างกล้องวงจรปิดตรวจจับการเคลื่อนไหว

เซ็นเซอร์IoT

รวมบอร์ดกล้องเข้ากับเซ็นเซอร์ตรวจจับความเคลื่อนไหวและ SD การ์ด เพื่อให้จับภาพและบันทึกภาพเมื่อมีบางสิ่งเคลื่อนไหวจริงเท่านั้น เป็นกล้องที่ตรวจจับความเคลื่อนไหวด้วยตัวเองอย่างแท้จริง ไม่ต้องใช้บัญชีคลาวด์

รวมชิ้นส่วนจริง 3 รายการ

ราคารวมชุดนี้: 1,220.00 ฿

ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน

สิ่งที่คุณต้องใช้

เป้าหมายของโครงการ

โครงการกล้องส่วนใหญ่จะสตรีมวิดีโออย่างต่อเนื่อง แต่โครงการนี้ฉลาดกว่า: มันจะอยู่ในโหมดสแตนด์บาย คอยตรวจจับการเคลื่อนไหว และจะเปิดใช้งานกล้องและบันทึกภาพลงในที่เก็บข้อมูลก็ต่อเมื่อมีสิ่งใดสิ่งหนึ่งกระตุ้นอย่างแท้จริง เป็นกล้องรักษาความปลอดภัยที่ทำงานด้วยการตรวจจับการเคลื่อนไหวที่ไม่ต้องสมัครสมาชิกและไม่มีบัญชีคลาวด์

ตัวควบคุมทำอะไรบ้าง

ส่วนใหญ่จะใช้เวลาในการตรวจสอบพินเอาต์พุตของเซ็นเซอร์ตรวจจับความเคลื่อนไหว เมื่อพินนั้นเป็น HIGH ก็จะเปิดใช้งานกล้อง ถ่ายภาพเดียว และบันทึกลงในการ์ด SD ด้วยชื่อไฟล์ที่มีการประทับเวลา ก่อนที่จะกลับไปตรวจสอบอีกครั้ง

เซ็นเซอร์ตรวจจับความเคลื่อนไหวทำอะไรบ้าง

เซ็นเซอร์ PIR ตรวจจับสัญญาณความร้อนอินฟราเรดของวัตถุที่เคลื่อนที่ผ่านขอบเขตการมองเห็น และรายงานเป็นสัญญาณดิจิทัลแบบง่าย ซึ่งเป็นเทคโนโลยีการตรวจจับเดียวกันกับที่อยู่เบื้องหลังไฟที่ทำงานด้วยการเคลื่อนไหวในครัวเรือนส่วนใหญ่

บอร์ดกล้องทำอะไรบ้าง

อยู่ในโหมดสแตนด์บายจนกว่าจะได้รับคำสั่ง จากนั้นจะถ่ายภาพนิ่งเดียวตามต้องการ และส่งให้ตัวควบคุมเป็นข้อมูลภาพพร้อมที่จะเขียนลงในไฟล์โดยตรง

โมดูลการ์ด SD ทำอะไรบ้าง

ให้พื้นที่เก็บข้อมูลถาวรในเครื่องสำหรับทุกภาพที่ถ่าย ซึ่งหน่วยความจำบนบอร์ดของตัวควบคุมไม่สามารถเก็บได้ในขนาดที่ใช้งานได้จริง และเป็นสิ่งที่ยังคงอยู่ได้แม้ไฟฟ้าดับ

แนวคิดซอฟต์แวร์และไลบรารี

ทำให้แต่ละส่วนทำงานแยกกันก่อน: ยืนยันว่าเซ็นเซอร์ตรวจจับความเคลื่อนไหวรายงานสัญญาณ HIGH/LOW ที่สะอาดเชื่อถือได้ ถ่ายภาพด้วยตนเองหนึ่งภาพและบันทึกลงในการ์ด SD จากนั้นรวมเข้าด้วยกันเพื่อให้เหตุการณ์การเคลื่อนไหวเป็นตัวกระตุ้นการถ่ายภาพ

การทดสอบและการแก้ไขปัญหา

  • เซ็นเซอร์ตรวจจับความเคลื่อนไหวทำงานตลอดเวลาโดยไม่มีสิ่งใดเคลื่อนไหว โมดูล PIR ส่วนใหญ่มีตัวปรับความไวและการหน่วงเวลาในตัว ให้ลดความไวลงและปล่อยให้เซ็นเซอร์ปรับสภาพตัวเองเป็นเวลาหนึ่งนาทีหลังจากเปิดเครื่องก่อนทำการทดสอบ
  • รูปภาพออกมาว่างเปล่าหรือเสียหาย ตรวจสอบว่าการ์ด SD ฟอร์แมตเป็น FAT32 และไฟล์ถูกปิดอย่างถูกต้องหลังจากการเขียนแต่ละครั้ง
  • กล้องพลาดวัตถุที่เคลื่อนที่เร็ว ให้เพิ่มช่วงพักสั้นๆ หลังจากการถ่ายภาพแต่ละครั้ง แทนที่จะพยายามถ่ายภาพอย่างต่อเนื่อง และยอมรับว่าภาพนิ่งเดียวจะตามหลังตัวกระตุ้นเล็กน้อยเสมอ

การอัปเกรดเสริม

เพิ่มนาฬิกาเรียลไทม์จากชุดสร้าง SD Card Data Logger เพื่อให้ทุกภาพที่บันทึกได้รับการประทับเวลาที่แม่นยำในชื่อไฟล์ แม้ว่าตัวควบคุมจะไม่มีพลังงานระหว่างการกระตุ้น

การเดินสาย

  • PIR VCC → บอร์ดกล้อง 5V
  • PIR GND → บอร์ดกล้อง GND
  • PIR OUT → บอร์ดกล้อง GPIO13 — เลือก GPIO ใดก็ได้ที่ `camera_pins.h` ของบอร์ดของคุณไม่ได้ระบุว่าเป็นพินกล้อง/PSRAM; GPIO13 เป็นตัวอย่างทั่วไป ยืนยันกับบอร์ดเฉพาะของคุณ
  • โมดูล SD VCC → บอร์ดกล้อง 3.3V (หรือ 5V หากโมดูลมีตัวควบคุมในตัว — ตรวจสอบลายหน้าโมดูล)
  • โมดูล SD GND → บอร์ดกล้อง GND
  • โมดูล SD CS → GPIO1 — อีกครั้ง เลือก GPIO ที่ว่างที่ไม่ได้ถูกใช้โดยอินเทอร์เฟซกล้อง
  • โมดูล SD SCK/MOSI/MISO → พิน SPI ฮาร์ดแวร์ของบอร์ด (ใช้โดยอัตโนมัติโดย `SD.begin()`)
  • บอร์ดกล้อง Freenove → คอมพิวเตอร์ผ่าน USB-C — พลังงาน + การตั้งโปรแกรม

GPIOs ใดบ้างที่ว่างอย่างแท้จริงนั้นขึ้นอยู่กับว่าพินตัวอย่างกล้องของ Freenove อ้างสิทธิ์ใน `camera_pins.h` สำหรับบอร์ดของคุณอย่างไร — เปิดไฟล์นั้นก่อนและหลีกเลี่ยงทุกพินที่ระบุไว้ก่อนที่จะเชื่อมต่อ PIR/SD โมดูล PIR ส่วนใหญ่มีโพเทนชิออมิเตอร์ในตัวสำหรับความไวและการหน่วงเวลาการเรียกซ้ำ; หากคุณได้รับการเรียกซ้ำอย่างรวดเร็ว ให้หมุนโพเทนชิออมิเตอร์การหน่วงเวลาขึ้น แทนที่จะทำการ debounce ในโค้ดเพียงอย่างเดียว

แผนภาพการต่อสาย

VCC → 5V GND OUT → GPIO13 VCC → 3.3V GND CS → GPIO1 SCK/MOSI/MISO Freenove ESP32-S3 PIR SD module the board's hardware SPI…

โค้ดเริ่มต้น

#include <SPI.h>
#include <SD.h>

// --- Pin definitions ---
// PIR and SD pins: pick any GPIOs that Freenove's camera_pins.h for your exact
// board does NOT list as in use by the camera/PSRAM interface. The pins below
// are a common example pattern - confirm against your board's pin definition
// header before wiring.
#define PIR_PIN     13   // PIR OUT (digital input, HIGH on motion)
#define SD_CS_PIN   1    // SD card module chip select
// SD_CS_PIN uses the board's default hardware SPI bus (SCK/MOSI/MISO) via SD.begin()

bool motionActive = false;

void setup() {
  Serial.begin(115200);
  pinMode(PIR_PIN, INPUT);

  if (!SD.begin(SD_CS_PIN)) {
    Serial.println("SD card init failed - check wiring/CS pin");
  } else {
    Serial.println("SD card ready");
  }
}

void logMotionEvent(unsigned long timestampMs) {
  File logFile = SD.open("/motion_log.txt", FILE_APPEND);
  if (logFile) {
    logFile.print("Motion detected at t+");
    logFile.print(timestampMs);
    logFile.println("ms");
    logFile.close();
    Serial.println("Logged motion event to SD");
  } else {
    Serial.println("Failed to open log file on SD");
  }
}

void loop() {
  bool motionNow = digitalRead(PIR_PIN) == HIGH;

  if (motionNow && !motionActive) {
    motionActive = true;
    Serial.println("Motion started");
    logMotionEvent(millis());

    // --- Camera integration point (pseudocode) ---
    // This is where you'd call into the camera example's real capture flow.
    // The official CameraWebServer example (and esp_camera.h it's built on)
    // uses these real, genuine functions - wire this in once you've loaded
    // that example and confirmed your board's camera_pins.h:
    //
    //   camera_fb_t *fb = esp_camera_fb_get();
    //   if (fb) {
    //     File imgFile = SD.open("/capture.jpg", FILE_WRITE);
    //     if (imgFile) {
    //       imgFile.write(fb->buf, fb->len);
    //       imgFile.close();
    //     }
    //     esp_camera_fb_return(fb);
    //   }
    //
    // Don't copy pin numbers from anywhere else - camera_pins.h from your
    // loaded example already has them correct for your board.

  } else if (!motionNow && motionActive) {
    motionActive = false;
    Serial.println("Motion ended");
  }

  delay(200);
}

ไม่แน่ใจขั้นตอนไหน? ถามเรา