مشروع · ESP32-CAM · حياة برّيّة
مصيدة كاميرا تلتقط عند الحركة
كاميرات الدروب التجاريّة تبدأ من 60 دولارًا. ESP32-CAM مع حسّاس PIR أقلّ من 10 دولارات وتؤدّي الجوهر نفسه: يتحرّك شيء دافئ فتستيقظ الكاميرا وتحطّ JPEG على MicroSD — وخلافًا للعلبة التجاريّة، مصيدتك تقدّم لوحة حالة حيّة تفحصها من الهاتف دون فتح العلبة.
القدح — PIR مع مهلة
يرى HC-SR501 جسمًا دافئًا فيرفع خرجه؛ الكود يلتقط لقطة واحدة على الحافّة الصاعدة ثمّ يتجاهل الحسّاس 5 ثوانٍ — وإلّا صار غزال واحد يرعى أربعين صورة متطابقة. الضبط الخشن على مقاومي حساسيّة وتثبيت PIR نفسه:
#define MODE_TIMELAPSE 0 // 0 = PIR-triggered camera trap
#define PIR_PIN 13 // HC-SR501 OUT -> GPIO13
// loop(): shoot on motion, with a 5 s cool-down so one animal isn't 40 photos
bool pir = digitalRead(PIR_PIN);
if (pir && !motion && millis() - lastShot > 5000) {
lastShot = millis();
capture("Motion"); // JPEG -> /0042.jpg on the SD card
}
motion = pir; اللوحة — افحص المصيدة دون لمسها
جوهر المصيدة أن تُترك وحدها. اقترب لمدى Wi-Fi فتخبرك نقطة وصول ESP بكلّ شيء: عدد اللقطات، وامتلاء SD، وحياة PIR، وسجلّ بسطر لكلّ حيوان:
dash.layout("Trap", RICON_MOTION);
dash.stat("Photos", &shots, "");
dash.gauge("SD used", &sdUsedPct, 0, 100, "%").variant("bar");
dash.led("Motion", &motion); // watch the PIR fire, live
dash.led("SD ready", &sdOk);
dash.button("Shoot", "Capture now", []() { capture("Manual"); });
evlog = &dash.log("Captures", 6); // "Motion -> /0042.jpg"
dash.beginAP("RisalDash-CamTrap", "12345678"); الكود الجاهز هو examples/06_Projects/CamTrap مع MODE_TIMELAPSE 0؛
والبناء نفسه بتعريف واحد هو كاميرا الفاصل الزمنيّ.
إعداد الكاميرا حسب دليل الإعدادات: SVGA بجودة 10.
ملاحظات ميدانيّة
| المشكلة | الحلّ |
|---|---|
| قدحات كاذبة من أوراق دفّأتها الشمس | وجِّه شمالًا، خفِّض حساسيّة PIR، أطِل المهلة |
| لقطات اللّيل سوداء | لا إضاءة IR في OV2640 — أضِف لوحة IR-LED أو اكتفِ بالفجر/الغسق |
| البطاريّة تنفد في أيّام | النوم العميق + PIR على طرف الإيقاظ؛ 18650 أو LiFePO4 |
| الحيوانات تقضم الأسلاك | علبة توصيلات + كيس محكم؛ سيليكا جل ضدّ الضباب |
اللوحة نفسها والكود نفسه — تعريف واحد فيصير فاصلًا زمنيًّا مجدولًا.