ساخت سیستم روشنایی هوشمند با سنسور حرکتی PIR و رزبری پای

پروژه‌های اینترنت اشیا (IoT) و اتوماسیون

۸ دقیقه مطالعه
فهرست مطالب
این مطلب از سایت tool.hamidvalad.ir گرفته شده است

معرفی

در این پروژه، یک سیستم روشنایی هوشمند می‌سازیم که به طور خودکار با تشخیص حرکت افراد، چراغ را روشن و خاموش می‌کند. این سیستم با استفاده از رزبری پای، سنسور حرکتی PIR (Passive Infrared) و یک رله پیاده‌سازی می‌شود و نمونه‌ای کاربردی از اتوماسیون خانگی و اینترنت اشیا (IoT) است. کاربرد اصلی این سیستم در مکان‌هایی مانند راه پله، راهرو، پارکینگ و حیاط است که نیاز به روشنایی خودکار دارند.

سخت‌افزار مورد نیاز و توضیحات

لیست کامل قطعات:

  • رزبری پای (هر مدل): کامپیوتر تک‌برد که مغز اصلی سیستم است. مدل‌های Raspberry Pi 3, 4, Zero همگی مناسب هستند.
  • eggcatcher
  • سنسور حرکتی PIR (مانند HC-SR501): این سنسور تشعشعات مادون قرمز ساطع شده از بدن انسان را تشخیص می‌دهد. دارای سه پین اصلی: VCC (5V)، GND، و OUT (خروجی دیجیتال).
  • eggcatcher
  • ماژول رله ۵ ولت: برای کنترل قطع و وصل برق چراغ. رله یک کلید الکترومکانیکی است که با سیگنال ۵V از رزبری پای کنترل می‌شود.
  • eggcatcher
  • چراغ یا لامپ: می‌تواند LED، الئیدی یا لامپ معمولی تا ۲۲۰ ولت باشد (با توجه به توان رله).
  • برد برد (Breadboard): برای اتصالات موقت و تست مدار.
  • eggcatcher
  • سیم‌های جامپر: سیم‌های نر-نر برای اتصال بین رزبری و برد برد، و نر-مادگی برای اتصال به پین‌های رزبری.
  • منبع تغذیه: آداپتور مناسب برای رزبری پای (معمولاً ۵V/2.5A).
  • مقاومت‌های Pull-down (اختیاری): مقاومت ۱۰ کیلو اهم برای کاهش نویز روی پین سنسور.

نحوه کار سنسور PIR:

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

نحوه کار رله:

رله دارای سه ترمینال برای بار (چراغ): COM (مشترک)، NO (نرمالاً باز)، و NC (نرمالاً بسته). وقتی سیگنال از رزبری پای دریافت می‌شود، رله فعال شده و مسیر بین COM و NO بسته می‌شود و چراغ روشن می‌شود.

نحوه اتصال مدار

مراحل اتصال:

  1. اتصال سنسور PIR به رزبری پای:
    • پین VCC سنسور → پین ۲ (5V) رزبری پای
    • پین GND سنسور → پین ۶ (GND) رزبری پای
    • پین OUT سنسور → پین ۱۱ (GPIO 17) رزبری پای
  2. اتصال رله به رزبری پای:
    • پین VCC رله → پین ۴ (5V) رزبری پای
    • پین GND رله → پین ۹ (GND) رزبری پای
    • پین IN رله → پین ۱۲ (GPIO 18) رزبری پای
  3. اتصال چراغ به رله:
    • سیم فاز چراغ → ترمینال COM رله
    • سیم دیگر چراغ → ترمینال NO رله
    • نول چراغ مستقیم به برق متصل می‌شود

نکات ایمنی:

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

نصب و پیش‌نیازهای نرم‌افزاری

برای اجرای این پروژه نیاز به رزبری پای با سیستم عامل Raspbian (اکنون Raspberry Pi OS) دارید. مراحل نصب:

۱. نصب سیستم عامل:

  • دانلود Raspberry Pi Imager از سایت رسمی رزبری پای
  • انتخاب سیستم عامل Raspberry Pi OS (32-bit)
  • فلش کردن روی کارت microSD
  • قبل از اولین بوت، فایل wpa_supplicant.conf برای وای‌فای و فایل خالی ssh برای فعال کردن remote access ایجاد کنید

۲. به‌روزرسانی سیستم:

Terminal
sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip -y

۳. کتابخانه‌های مورد نیاز:

کتابخانه RPi.GPIO معمولاً به صورت پیش‌فرض نصب است، اما اگر نبود:

Terminal
sudo apt install python3-rpi.gpio -y

۴. تست اولیه GPIO:

برای اطمینان از کارکرد صحیح GPIO، می‌توانید یک LED را تست کنید:

Python
import RPi.GPIO as GPIO
import time


PIR_PIN = 17  # Pin connected to PIR output
RELAY_PIN = 18  # Pin connected to relay


GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR_PIN, GPIO.IN)
GPIO.setup(RELAY_PIN, GPIO.OUT)

def control_light(state):
    """Turn light on/off"""
    GPIO.output(RELAY_PIN, state)
    print(f"Light {'ON' if state else 'OFF'}")

try:
    print("Starting motion detection...")
    while True:
        if GPIO.input(PIR_PIN):
            print("Person detected!")
            control_light(True)
            time.sleep(30)  # Keep light on for 30 seconds
            control_light(False)
        time.sleep(0.1)
        
except KeyboardInterrupt:
    print("Stopping...")
    GPIO.cleanup()

توضیح کامل کد پروژه

ساختار کلی کد:

کد پروژه شامل چهار بخش اصلی است: تنظیمات اولیه، پیکربندی GPIO، تابع کنترل چراغ، و حلقه اصلی تشخیص حرکت.

۱. بخش تنظیمات و تعریف پین‌ها:

در ابتدای کد، پین‌های GPIO مورد استفاده را تعریف می‌کنیم. پین ۱۷ برای خواندن وضعیت سنسور PIR و پین ۱۸ برای کنترل رله در نظر گرفته می‌شوند. انتخاب این پین‌ها دلخواه است و می‌توانید از پین‌های دیگر GPIO نیز استفاده کنید.

۲. پیکربندی GPIO:

با دستور GPIO.setmode(GPIO.BCM) حالت شماره‌گذاری پین‌ها را روی Broadcom SOC Channel تنظیم می‌کنیم. سپس پین سنسور را به عنوان ورودی و پین رله را به عنوان خروجی تعریف می‌کنیم.

۳. تابع کنترل چراغ:

این تابع ساده، وضعیت رله را تغییر می‌دهد. وقتی پارامتر state برابر True باشد، پین رله HIGH شده و چراغ روشن می‌شود. همچنین پیام مناسبی در ترمینال نمایش داده می‌شود.

۴. حلقه اصلی برنامه:

حلقه بی‌نهایت while True به طور مداوم وضعیت سنسور PIR را بررسی می‌کند. اگر حرکت تشخیص داده شود، برنامه:

  • پیام "Person detected!" را چاپ می‌کند
  • چراغ را روشن می‌کند
  • ۳۰ ثانیه صبر می‌کند (چراغ روشن می‌ماند)
  • چراغ را خاموش می‌کند

تاخیر ۰.۱ ثانیه‌ای بین هر بار بررسی سنسور، باعث می‌شود CPU کمتر مصرف شود.

۵. مدیریت خطا و خروج ایمن:

با فشردن Ctrl+C توسط کاربر، برنامه به بخش except منتقل شده و با اجرای GPIO.cleanup()، تمام پین‌های GPIO به حالت اولیه بازمی‌گردند. این کار از آسیب احتمالی به رزبری پای جلوگیری می‌کند.

قابلیت‌های پیشرفته و بهبودها

۱. افزودن سنسور نور محیط:

می‌توانید یک سنسور نور (LDR یا photoresistor) اضافه کنید تا چراغ فقط در تاریکی روشن شود:

  • اتصال LDR به پین آنالوگ رزبری پای (نیاز به ADC دارد)
  • اضافه کردن شرط جدید در حلقه: if motion detected AND light level below threshold
  • استفاده از ماژول ADC مانند MCP3008 برای خواندن مقادیر آنالوگ

۲. کنترل از طریق وب:

با استفاده از Flask یا Django می‌توانید یک پنل وب ایجاد کنید:

  • روشن/خاموش کردن دستی چراغ
  • تنظیم مدت زمان روشن ماندن
  • مشاهده تاریخچه حرکات
  • تنظیم حساسیت از راه دور

۳. اتصال به تلگرام یا واتس‌اپ:

با استفاده از APIهای موجود، می‌توانید هنگام تشخیص حرکت، پیام هشدار دریافت کنید:

  • ارسال عکس از دوربین متصل
  • اطلاع‌رسانی فوری به موبایل
  • کنترل سیستم از طریق پیام

۴. ذخیره‌سازی داده‌ها:

ثبت تمامی حرکات در یک پایگاه داده:

  • استفاده از SQLite برای ذخیره زمان هر حرکت
  • ایجاد گزارش‌های هفتگی و ماهانه
  • تحلیل الگوهای تردد

۵. چند سنسوری کردن سیستم:

استفاده از چند سنسور PIR در مکان‌های مختلف:

  • تشخیص جهت حرکت
  • پوشش منطقه بزرگتر
  • کاهش خطاهای تشخیص

عیب‌یابی و حل مشکلات رایج

مشکلات سنسور PIR:

  • سنسور حرکت را تشخیص نمی‌دهد:
    • علت احتمالی: زمان کالیبراسیون کافی نبوده
    • راه حل: ۳۰-۶۰ ثانیه پس از روشن شدن صبر کنید
  • سنسور مدام فعال می‌شود:
    • علت احتمالی: حساسیت زیاد یا نویز الکتریکی
    • راه حل: حساسیت را کم کنید یا مقاومت pull-down اضافه کنید
  • محدوده تشخیص کم است:
    • علت احتمالی: لنز سنسور کثیف یا معیوب
    • راه حل: لنز را تمیز کنید یا سنسور را عوض کنید

مشکلات رله:

  • رله صدای تق تق می‌دهد:
    • علت احتمالی: جریان کافی برای coil رله نیست
    • راه حل: از منبع تغذیه قوی‌تر استفاده کنید
  • چراغ روشن نمی‌شود:
    • علت احتمالی: اتصالات شل یا معیوب
    • راه حل: تمامی اتصالات را بررسی کنید
  • رله داغ می‌شود:
    • علت احتمالی: جریان بار بیش از حد رله است
    • راه حل: رله با توان بالاتر استفاده کنید

مشکلات نرم‌افزاری:

  • خطای GPIO در حال استفاده: برنامه قبلی به درستی بسته نشده. رزبری را restart کنید.
  • عدم دسترسی به GPIO: برنامه باید با sudo اجرا شود یا کاربر به گروه gpio اضافه شود.
  • پین اشتباه: شماره پین‌ها را در کد و اتصالات فیزیکی بررسی کنید.

کاربردهای عملی پروژه

۱. سیستم روشنایی راه پله:

نصب سنسور در ابتدا و انتهای راه پله، چراغ را هنگام رفت و آمد روشن می‌کند و پس از ۳۰ ثانیه خاموش می‌شود.

۲. چراغ حیاط و پارکینگ:

با ورود به حیاط یا پارکینگ، چراغ‌ها به طور خودکار روشن شده و امنیت را افزایش می‌دهند.

۳. سیستم امنیتی:

می‌توانید هنگام تشخیص حرکت در ساعات خاص (مثلاً شب)، علاوه بر روشن کردن چراغ، آژیر نیز به صدا درآید.

۴. صرفه‌جویی انرژی در ادارات:

در اتاق‌های کنفرانس یا قسمت‌های مشترک، چراغ فقط هنگام حضور افراد روشن می‌ماند.

۵. کنترل تجهیزات دیگر:

به جای چراغ، می‌توانید پنکه، هواکش، یا سایر دستگاه‌ها را کنترل کنید.

خلاصه و جمع‌بندی

این پروژه نشان داد که چگونه با هزینه کم می‌توان یک سیستم هوشمند کاربردی ساخت. مزایای اصلی این سیستم عبارتند از:

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

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

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

منابع و مستندات

منبع : مستندات رسمی GPIO رزبری پای

منبع : مستندات کتابخانه RPi.GPIO

منبع : دیتاشیت سنسور PIR HC-SR501

منبع : آموزش کار با رله

منبع : آموزش سنسورهای رزبری پای