ورکشاپ آموزشی - آیسی مدار
رفتن به محتوا

جاسوئیچی هوشمند دوربین‌دار با ESP32 برای امنیت شخصی

ابزار و گجت
۰ نظر
۶۱ نفر
کد ۳۲۰۳

امنیت شخصی همیشه یکی از دغدغه‌های مهم روزمره‌ست. خیلی وقت‌ها وقتی تو خیابون‌های خلوت یا تاریک قدم می‌زنیم، حس می‌کنیم کسی پشت سرمونه. تو این پروژه قراره یه گجت امنیتی هوشمند و مینیاتوری بسازیم که مثل یه چشم سوم پشت سرت رو می‌پاد. این گجت به شکل یه جاسوئیچی طراحی شده و خیلی راحت به کیف یا کمربندت وصل می‌شه.

قلب تپنده این پروژه ماژول جذاب دوربین هوش مصنوعی ESP32-S3 هست که مدام تصاویر پشت سرت رو بررسی می‌کنه. اگه کسی برای یه مدت مشخصی تو کادر دوربین بمونه و تعقیبت کنه، این جاسوئیچی بلافاصله یه نوتیفیکیشن روی گوشیت می‌فرسته. تازه می‌تونی تصاویر زنده رو هم از طریق یه داشبورد تحت وب روی مرورگرت ببینی.

ترکیب پرینت سه‌بعدی، الکترونیک فشرده و هوش مصنوعی تو یه دستگاه به این کوچیکی، این پروژه رو به یکی از جذاب‌ترین ساختنی‌ها تبدیل کرده. تو این آموزش از آیسی‌مدار، تمام مراحل طراحی، مونتاژ مدار و کدهای پایتون رو قدم‌به‌قدم با هم پیش می‌بریم تا تو هم این جاسوئیچی امنیتی رو برای خودت بسازی. بریم سراغ ساخت!

مرحله ۱

ایده اولیه و طراحی ظاهر گجت روی کاغذ

قبل از اینکه مستقیم سراغ نرم‌افزارهای طراحی سه‌بعدی بریم، بهتره شکل کلی گجت رو روی کاغذ پیاده کنیم. این کار کمک می‌کنه تا دید بهتری نسبت به ظاهر نهایی جاسوئیچی و جای قرارگیری قطعات داشته باشیم.

ابعاد ماژول دوربین DFRobot ESP32-S3 کاملا مشخصه و لنز اون جای ثابتی داره. پس باید قاب جلویی رو طوری در نظر بگیریم که فضای کافی برای بیرون زدن لنز دوربین باز باشه و دیدش کور نشه.

با یه اسکچ ساده روی کاغذ، جای دقیق باتری، مدار شارژ و بقیه قطعات رو مشخص می‌کنیم. این کار باعث می‌شه وقتی رفتیم سراغ طراحی کامپیوتری، ابعاد دقیق و بی‌نقصی داشته باشیم.

مرحله ۲

مدل‌سازی و پرینت سه‌بعدی بدنه گجت

حالا که ایده خاممون پخته شده، وارد نرم‌افزاری مثل فیوژن 360 می‌شیم تا مدل سه‌بعدی رو بسازیم. قاب این گجت به صورت چندتکه طراحی شده تا سرهم‌بندی راحتی داشته باشه.

  1. 1 عدد قاب جلویی (بدنه اصلی با سوراخ مخصوص لنز ESP32)
  2. 1 عدد قاب پشتی (محل قرارگیری باتری، ماژول TP4056، افزاینده ولتاژ و کلید)
  3. 10 عدد قطعه تزئینی (برای چسبوندن روی قاب جلویی و تکمیل ظاهر گجت)

برای اینکه جاسوئیچیمون ظاهر جذاب‌تری داشته باشه، از فیلامنت‌های رنگی برای پرینت استفاده می‌کنیم:

  1. قاب جلویی: پرینت‌شده با فیلامنت PLA قرمز
  2. قاب پشتی: پرینت‌شده با فیلامنت PLA مشکی
  3. قطعات تزئینی: پرینت‌شده با فیلامنت PLA مشکی

بعد از اینکه پرینت همه بخش‌ها تموم شد، قطعات تزئینی رو به قاب قرمز متصل می‌کنیم و قطعات الکترونیکی رو تو قاب مشکی می‌چینیم و در نهایت دو نیمه رو به هم وصل می‌کنیم.

مرحله ۳

چسبوندن قطعات تزئینی روی بدنه

بعد از پرینت قطعات، نوبت به خوشگل‌تر کردن قاب جلویی می‌رسه. تو این طراحی، 10 تا قطعه کوچیک تزئینی داریم که باید روی سطح قاب قرمز رنگ قرار بگیرن تا ظاهر نهایی دستگاه رو تکمیل کنن.

برای محکم کردن این قطعات از چسب قطره‌ای استفاده می‌کنیم. روی هر قطعه یه قطره خیلی کوچیک چسب بزن و با دقت، اون‌ها رو سر جای خودشون روی قاب جلویی قرار بده. چون این قطعات خیلی ریزن، باید قبل از خشک شدن چسب خیلی سریع تنظیمشون کنی تا کج نچسبن.

مرحله ۴

بررسی مدار و اتصالات الکترونیکی

مدار این پروژه فوق‌العاده ساده و جمع‌وجوره. برای تامین انرژی از یه باتری لیتیوم یونی استفاده می‌کنیم. این باتری به یه ماژول شارژر TP4056 وصل می‌شه تا هر وقت باتری خالی شد، به راحتی بتونی شارژش کنی. خروجی این بخش به ماژول افزاینده ولتاژ MT3608 می‌ره تا ولتاژ کافی و پایدار برای تغذیه دوربین ESP32 رو بسازه.

یه کلید فشاری 6 پین هم سر راه مدار قرار می‌دیم تا هر وقت خواستیم، گجت رو به سرعت خاموش یا روشن کنیم. همه این اتصالات رو دقیقا طبق شماتیک پروژه لحیم‌کاری کن.

مرحله ۵

مونتاژ قطعات و دوربین داخل قاب

بعد از اینکه اتصالات سیم‌ها رو انجام دادی، وقتشه تمام قطعات رو داخل قاب جاسازی کنی. باتری، ماژول شارژر، برد افزاینده ولتاژ و کلید قطع و وصل، همگی داخل قاب پشتی قرار می‌گیرن. این قاب طوری طراحی شده که هر قطعه دقیقا سر جای خودش فیکس بشه. تو سمت مقابل هم ماژول دوربین ESP32 رو روی قاب جلویی نصب کن و مطمئن شو که لنز دقیقا روبه‌روی شکاف قاب قرار گرفته.

وقتی همه قطعات نشستن سر جاشون، سیم‌های اضافه رو با دقت مرتب کن تا بین قاب‌ها گیر نکنن. حالا قاب جلویی و پشتی رو روی هم بذار و چفت کن تا بدنه جاسوئیچی کاملا بسته بشه.

مرحله ۶

وصل کردن کارابین برای آویز کردن

برای اینکه بتونی این گجت رو همیشه همراهت داشته باشی، باید یه قلاب بهش اضافه کنی. روی قاب سه‌بعدی یه حلقه در نظر گرفته شده که مخصوص همین کاره.

یه کارابین کوچیک تهیه کن و به این حلقه وصلش کن. حالا خیلی راحت می‌تونی جاسوئیچی هوشمندت رو به بند کوله‌پشتی، پل کمربند یا کیفت آویزون کنی. با این کار، دوربین همیشه دید خوبی به فضای پشت سرت داره و با خیال راحت می‌تونی تو خیابون قدم بزنی.

مرحله ۷

آشنایی با سیستم پردازش تصویر

این پروژه از نظر نرم‌افزاری به سه بخش اصلی تقسیم می‌شه. بخش اول همون ماژول دوربین ESP32 هست که مدام از فضای پشت سرت عکس می‌گیره و اون‌ها رو از طریق شبکه وای‌فای ارسال می‌کنه.

بخش دوم، یه سرور پایتون هست که این تصاویر رو دریافت می‌کنه و با استفاده از الگوریتم‌های هوش مصنوعی، چهره افراد رو تشخیص می‌ده. اگه سیستم متوجه بشه که یه چهره برای مدت طولانی تو کادر مونده (یعنی شخصی داره تعقیبت می‌کنه)، وارد عمل می‌شه و در نهایت داده‌های پردازش‌شده روی داشبورد تحت وب به نمایش در میان و نوتیفیکیشن‌ها برات ارسال می‌شن.

به بیان ساده، مسیر حرکت اطلاعات تو این سیستم به این شکله: دوربین ESP32 ← پردازش سرور ← منطق تشخیص خطر ← داشبورد وب و ارسال هشدار

مرحله ۸

کدهای ESP32 برای عکس‌برداری

تو این مرحله باید کدهای مربوط به برد ESP32 رو آماده کنیم. این کد وظیفه داره دوربین رو راه‌اندازی کنه، به شبکه وای‌فای وصل بشه و فریم‌های تصویر رو پشت سر هم برای سرور بفرسته.

1. تنظیمات اولیه دوربین

اول از همه پین‌های مخصوص ماژول دوربین DFRobot ESP32-S3 رو داخل کد تعریف می‌کنیم.

TXT
#define Y2_GPIO_NUM 16
#define Y3_GPIO_NUM 18
#define Y4_GPIO_NUM 21
#define Y5_GPIO_NUM 17
#define Y6_GPIO_NUM 14
#define Y7_GPIO_NUM 7
#define Y8_GPIO_NUM 6
#define Y9_GPIO_NUM 4

تنظیمات کیفیت و رزولوشن تصویر رو هم به این شکل اعمال می‌کنیم:

TXT
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_scl = SIOC_GPIO_NUM;
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = FRAMESIZE_QQVGA;
config.fb_count = 1;

بعدش ماژول دوربین با این دستور راه‌اندازی می‌شه:

TXT
esp_camera_init(&config);

2. وصل شدن به وای‌فای

برد ESP32 با دستور زیر به مودم یا هات‌اسپات گوشیت وصل می‌شه:

TXT
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}

به محض اتصال، آی‌پی دستگاه روی سریال مانیتور نشون داده می‌شه.

3. ثبت فریم‌های تصویر

داخل حلقه اصلی برنامه، عکس‌ها با این تابع ثبت می‌شن:

TXT
camera_fb_t *fb = esp_camera_fb_get();

این تابع، یه بافر شامل داده‌های تصویر رو بهمون برمی‌گردونه.

4. ارسال تصاویر به سرور

این بافر از طریق یه درخواست متد پست (HTTP POST) مستقیم به سمت سرور پایتون شلیک می‌شه:

TXT
HTTPClient http;
http.begin("http://YOUR_PC_IP:5000/detect");
http.addHeader("Content-Type", "application/octet-stream");
http.POST(fb->buf, fb->len);
http.end();

تو این بخش:

  1. متغیر fb<-buf همون دیتای تصویره.
  2. متغیر fb<-len سایز تصویر رو مشخص می‌کنه.

5. خالی کردن حافظه

بعد از ارسال موفق تصویر، باید حافظه بافر رو پاک کنیم تا برد برای عکس بعدی آماده باشه:

TXT
esp_camera_fb_return(fb);

روند نهایی کد

TXT
Capture Frame  Send to Server  Release Buffer  Repeat
مرحله ۹

سرور پایتون و منطق تشخیص چهره

حالا نوبت به مغز متفکر پروژه یعنی سرور پایتون می‌رسه. این سرور عکس‌های خام رو از برد ESP32 می‌گیره، پردازششون می‌کنه و اگه ببینه کسی مدام داره تعقیبت می‌کنه، از طریق Pushbullet روی گوشیت هشدار می‌فرسته.

1. راه‌اندازی سرور

برای این کار از فریم‌ورک فلسک (Flask) استفاده می‌کنیم تا یه بک‌اند سریع و سبک داشته باشیم:

JavaScript
from flask import Flask, request
import face_recognition
import numpy as np
from PIL import Image
import io
import time
import requests
app = Flask(__name__)

2. تنظیمات نوتیفیکیشن Pushbullet

اول باید توکن امنیتی حساب Pushbullet خودت رو وارد کنی:

TXT
PUSH_TOKEN = "YOUR_PUSHBULLET_ACCESS_TOKEN"

بعدش تابع ارسال نوتیفیکیشن رو می‌نویسیم:

Python
def send_push(message):
url = "https://api.pushbullet.com/v2/pushes"
headers = {
"Access-Token": PUSH_TOKEN,
"Content-Type": "application/json"
}
data = {
"type": "note",
"title": "RearSight Alert",
"body": message
}
requests.post(url, json=data, headers=headers)

3. دریافت عکس از ESP32

وقتی سرور بایت‌های خام تصویر رو دریافت می‌کنه:

Python
@app.route('/detect', methods=['POST'])
def detect():
image_bytes = request.data

اون‌ها رو به فرمت قابل پردازش تبدیل می‌کنه:

TXT
image = Image.open(io.BytesIO(image_bytes))
frame = np.array(image)

4. تشخیص چهره با هوش مصنوعی

حالا الگوریتم تشخیص چهره وارد عمل می‌شه و تو تصویر دنبال صورت آدم می‌گرده:

TXT
face_locations = face_recognition.face_locations(frame)

5. منطق تشخیص بر اساس زمان

سیستم چک می‌کنه ببینه چهره‌ای که پیدا شده چقدر تو کادر مونده:

TXT
global last_detect_time, alert_triggered
if len(face_locations) > 0:
if last_detect_time is None:
last_detect_time = time.time()
if time.time() - last_detect_time > 10 and not alert_triggered:
alert_triggered = True
send_push("Person detected behind you!")

اگه کادر بدون چهره باشه، تایمر صفر می‌شه:

TXT
else:
last_detect_time = None
alert_triggered = False

6. ذخیره آخرین فریم

عکس آخر برای نمایش تو داشبورد وب ذخیره می‌شه:

TXT
global latest_frame
latest_frame = image_bytes

7. ارسال تاییدیه به دوربین

TXT
return {"faces": len(face_locations)}

کد نهایی سرور

TXT
Receive Image  Detect Face  Check Duration  Trigger Pushbullet Alert  Store Frame
مرحله ۱۰

طراحی داشبورد وب برای مانیتورینگ زنده

برای اینکه بتونی زنده ببینی دوربین دقیقا داره چی می‌بینه و وضعیت خطر رو چک کنی، یه داشبورد تحت وب طراحی می‌کنیم. این فرانت‌اند با کمک ای‌پی‌آی (API) با سرور پایتون در ارتباطه.

1. ساختار پایه HTML

رابط کاربری این بخش رو با تگ‌های ساده HTML می‌نویسیم تا روی هر مرورگری باز بشه:

HTML
<!DOCTYPE html>
<html>
<head>
<title>RearSight Dashboard</title>
<style>
body {
background: black;
color: white;
text-align: center;
}
img {
width: 80%;
border-radius: 10px;
}
.status {
font-size: 20px;
margin-top: 10px;
}
</style>
</head>

2. نمایش زنده تصاویر

آخرین فریم پردازش‌شده مستقیم از سمت سرور فراخوانی می‌شه:

TXT
<body>
<h2>RearSight Dashboard</h2>
<img src="/latest_frame" id="feed">
<div class="status" id="status">
Monitoring...
</div>

3. بررسی وضعیت خطر

با کمک کدهای جاوا اسکریپت، داشبورد مدام اطلاعات وضعیت رو درخواست می‌کنه:

TXT
<script>
setInterval(() => {
fetch('/api/status')
.then(res => res.json())
.then(data => {
document.getElementById("status").innerText =
"Faces Detected: " + data.faces_detected;
});
}, 2000);
</script>

4. رفرش کردن خودکار عکس‌ها

برای اینکه تصویر همیشه آپدیت باشه:

TXT
<script>
setInterval(() => {
document.getElementById("feed").src =
"/latest_frame?time=" + new Date().getTime();
}, 1000);
</script>

5. کدهای سمت سرور (API پایتون)

داشبورد به این دوتا اندپوینت (Endpoint) برای گرفتن اطلاعات وابسته است:

API وضعیت سیستم

Python
@app.route('/api/status')
def status():
return {
"faces_detected": last_faces
}

API دریافت تصویر

Python
@app.route('/latest_frame')
def latest_frame_route():
return send_file(
io.BytesIO(latest_frame),
mimetype='image/jpeg'
)

کد نهایی داشبورد

TXT
ESP32  Server  API  Web Dashboard  Live Updates
مرحله ۱۱

جمع‌بندی و ایده‌های توسعه

به همین راحتی موفق شدی یه جاسوئیچی هوشمند بسازی که مثل یه بادیگارد نامرئی حواسش به پشت سرت هست! این گجت با کمک ماژول دوربین ESP32-S3 و هوش مصنوعی، چهره‌ها رو تشخیص می‌ده، مستقیم به گوشیت هشدار می‌فرسته و حتی اجازه می‌ده تصویر زنده محیط رو ببینی.

خبر خوب اینه که این دوربین مینیاتوری تو محیط‌های تاریک و نور کم هم عملکرد قابل قبولی داره و برای شب‌ها هم کارایی خودش رو از دست نمی‌ده.

هدف اصلی این پروژه این بود که نشون بدیم ترکیب بردهای کوچیک مجهز به هوش مصنوعی با پرینت سه‌بعدی، چقدر می‌تونه ابزارهای قدرتمند و خفنی خلق کنه.

البته این نسخه اولیه پروژه‌ست و یه‌سری محدودیت‌ها هم داره؛ مثلا تو مکان‌های خیلی شلوغ که آدم‌های زیادی در حال حرکت هستن، ممکنه سیستم کمی گیج بشه. ارتقا دادن الگوریتم تشخیص چهره می‌تونه ایده جذابی برای نسخه‌های بعدی باشه. مثل همیشه منتظر نظراتت تو بخش کامنت‌های آیسی‌مدار هستیم؛ به نظرت چه ویژگی دیگه‌ای می‌تونه این گجت رو بی‌نقص کنه؟

فایل‌های پیوست

STEP RearSight.step
INO esp32cam_follower.ino
PY server (1).py

تو میتونی اولین سازنده باشی!

اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر

این آموزش با استانداردهای اختصاصی آیسی‌مدار بازنویسی و بهینه‌سازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.

آموزش‌های مشابه

گفتگو‌های کاربران

هنوز نظری ثبت نشده؛ تو شروع کن!