پروژه آینه هوشمند با آردوینو UNO Q

پرژه آینه هوشمند با آردوینو

ساخت آینه هوشمند با Arduino UNO Q

معرفی پروژه

در این پروژه می‌خواهیم یک آینه هوشمند (Smart Mirror) بسازیم که با استفاده از برد Arduino UNO Q کار می‌کند. این آینه در ظاهر مثل یک آینه معمولی است، اما پشت سطح شیشه‌ای آن یک نمایشگر مخفی قرار گرفته که اطلاعات مختلف را به شما نمایش می‌دهد.

این آینه می‌تواند اطلاعاتی مثل:

  • ساعت و تاریخ

  • تقویم شخصی

  • لیست کارهای روزانه (To-Do List)

  • دما و رطوبت محیط

  • نمودار تغییرات شرایط اتاق

  • پیش‌بینی وضعیت آب‌وهوا

را نمایش دهد؛ همه این اطلاعات بدون اینکه ظاهر آینه خراب شود، از پشت شیشه دوطرفه دیده می‌شوند.

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


قطعات مورد نیاز

بخش الکترونیک

برای ساخت قسمت هوشمند آینه به قطعات زیر نیاز داریم:

  • Arduino UNO Q (نسخه ۴ گیگابایت رم)
    مغز اصلی پروژه که وظیفه پردازش اطلاعات و اجرای نرم‌افزارها را بر عهده دارد.

  • Modulino Temperature & Humidity
    سنسوری برای اندازه‌گیری دما و رطوبت محیط.

  • دوربین USB
    برای تشخیص اشیا و پردازش تصویر.

  • نمایشگر IPS سایز ۱۷.۳ اینچ با رزولوشن 1920×1080
    صفحه‌ای که اطلاعات پشت آینه نمایش داده می‌شود.

  • برد کنترلر نمایشگر HDMI/eDP
    برای اتصال نمایشگر به سیستم پردازشی.

  • هاب USB-C با قابلیت شارژ PD و خروجی HDMI

  • آداپتور USB-C با توان ۶۵ وات
    برای تأمین انرژی مورد نیاز کل سیستم.


قطعات مکانیکی و ابزارها

برای ساخت بدنه و نصب قطعات:

  • شیشه آینه دوطرفه (Two-way Mirror)

  • قاب عکس عمیق یا قاب سایه‌دار (Shadow Box)

  • براکت‌های زاویه‌ای (۴ تا ۸ عدد) همراه با پیچ M3

  • تفنگ چسب حرارتی

  • متر اندازه‌گیری

  • مجموعه پیچ‌گوشتی

  • دریل شارژی


نرم‌افزار مورد نیاز

  • Arduino App Lab

این محیط برای مدیریت برنامه‌ها، اجرای سرویس‌ها و کنترل بخش‌های مختلف Arduino UNO Q استفاده می‌شود.


توضیح کلی پروژه

آینه هوشمند چگونه کار می‌کند؟

در این آموزش، قدم‌به‌قدم ساخت یک آینه هوشمند با Arduino UNO Q را بررسی می‌کنیم.

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

  1. پردازنده Qualcomm MPU

  2. میکروکنترلر STM32 MCU

هرکدام از این دو بخش وظایف متفاوتی را انجام می‌دهند و همین موضوع باعث می‌شود پروژه روان‌تر و حرفه‌ای‌تر اجرا شود.


تقسیم وظایف بین دو پردازنده

نقش STM32 MCU

میکروکنترلر STM32 وظیفه ارتباط مستقیم با سخت‌افزارها را دارد.

در این پروژه، STM32 اطلاعات سنسور دما و رطوبت Modulino را دریافت می‌کند. خواندن سریع داده‌های سنسورها و کنترل قطعات الکترونیکی، دقیقاً کاری است که یک میکروکنترلر برای آن طراحی شده است.


نقش Qualcomm MPU

پردازنده Qualcomm که سیستم‌عامل Linux را اجرا می‌کند، وظایف سنگین‌تر را انجام می‌دهد، مانند:

  • اجرای رابط کاربری آینه

  • نمایش اطلاعات روی صفحه

  • پردازش تصویر دوربین USB

  • اجرای مدل هوش مصنوعی تشخیص اشیا

  • مدیریت ارسال لحظه‌ای اطلاعات بین سیستم و نمایشگر

به این ترتیب، هر پردازنده کاری را انجام می‌دهد که در آن بهترین عملکرد را دارد.


نحوه عملکرد نرم‌افزاری سیستم

Arduino UNO Q در پس‌زمینه سه سرویس اصلی یا Brick اجرا می‌کند.

Brick در واقع یک سرویس آماده است که توسط App Lab روی سیستم Linux برد نصب و اجرا می‌شود. این سرویس‌ها مانند برنامه‌های جداگانه‌ای هستند که هرکدام وظیفه خاصی دارند.

مزیت استفاده از Brickها این است که نیازی نیست کاربر زیرساخت‌های پیچیده نرم‌افزاری را خودش تنظیم کند.

سه Brick استفاده شده در این پروژه عبارت‌اند از:


۱. WebUI (رابط کاربری وب)

این بخش مسئول نمایش اطلاعات روی آینه است.

وظایف آن:

  • اجرای فایل‌های رابط کاربری مانند index.html و app.js

  • ایجاد ارتباط بین برد و مرورگر

  • ارسال اطلاعات لحظه‌ای به صفحه نمایش

برای ارتباط سریع از WebSocket استفاده می‌شود تا اطلاعات بدون نیاز به رفرش صفحه به‌روزرسانی شوند.


۲. Database (پایگاه داده سری زمانی)

این بخش وظیفه ذخیره اطلاعات سنسورها را دارد.

تمام داده‌های مربوط به:

  • دما

  • رطوبت

  • تغییرات محیط

در یک پایگاه داده محلی InfluxDB ذخیره می‌شوند.

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


با وارد کردن ایمیل خود یک پروژه حرفه ای کنترل دما با آردوینو + کتاب آموزشی رو به رایگان دریافت کنید

فرم ایمیل جمع کن +ارائه پروزه و کتاب رایگان به کاربران


۳. Video Object Detection (تشخیص اشیا با دوربین)

این بخش مربوط به هوش مصنوعی پروژه است.

دوربین USB تصویر محیط را دریافت می‌کند و یک مدل آماده هوش مصنوعی روی آن اجرا می‌شود.

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

این پیام حدود ۵ ثانیه روی نمایشگر باقی می‌ماند.


جریان انتقال اطلاعات در سیستم

هر بار که سنسور یک مقدار جدید ثبت می‌کند:

  1. فایل اصلی برنامه (main.py) مقدار جدید را دریافت می‌کند.

  2. اطلاعات داخل پایگاه داده ذخیره می‌شود.

  3. همان لحظه داده از طریق WebSocket به مرورگر ارسال می‌شود.

  4. نمودار روی آینه بدون بارگذاری مجدد صفحه تغییر می‌کند.

به همین دلیل اطلاعات آینه کاملاً زنده و لحظه‌ای نمایش داده می‌شوند.


مونتاژ سخت‌افزار

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

توجه داشته باشید که:

  • پنل LCD به‌راحتی خش می‌افتد.

  • شیشه آینه نیز در برابر ضربه و فشار حساس است.


ساخت قاب و نصب شیشه آینه

ابتدا اندازه قسمت داخلی قاب را اندازه‌گیری کنید.

شیشه آینه و نمایشگر ۱۷.۳ اینچی باید داخل قاب قرار بگیرند، اما کمی فضای آزاد برای نصب و تهویه داشته باشند.

سپس:

  1. چند سوراخ تهویه ۶ میلی‌متری در قسمت بالا و پایین پشت قاب ایجاد کنید.

  2. سطح شیشه آینه را با یک پارچه میکروفایبر کاملاً تمیز کنید.

  3. شیشه را داخل قسمت جلویی قاب قرار دهید.

  4. سمت بازتابنده شیشه باید رو به بیرون باشد.

  5. با استفاده از براکت‌های زاویه‌ای، شیشه را در گوشه‌ها ثابت کنید.

نکته مهم:
براکت‌ها باید به اندازه‌ای محکم باشند که شیشه حرکت نکند، اما نباید بیش از حد سفت شوند؛ زیرا فشار زیاد ممکن است باعث ترک خوردن شیشه شود.


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

قبل از قرار دادن قطعات داخل قاب:

  1. کابل نواری نمایشگر را به برد کنترلر HDMI/eDP متصل کنید.

  2. نمایشگر را پشت شیشه آینه قرار دهید.

  3. سطح صفحه نمایش باید به سمت شیشه باشد.

برای ثابت کردن نمایشگر:

  • مقدار کمی چسب حرارتی در گوشه‌های پنل بزنید.

  • سپس با براکت‌های زاویه‌ای در قسمت‌های بلندتر، آن را محکم‌تر کنید.

در پایان:

  • کابل HDMI

  • کابل برق

  • کابل‌های اتصال دیگر

را از سوراخ‌های تهویه یا شکافی که در پشت قاب ایجاد کرده‌اید عبور دهید.


تکمیل مونتاژ بخش الکترونیک

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

در این مرحله باید تمام بخش‌های هوشمند آینه شامل برد کنترلر نمایشگر، هاب USB-C، برد Arduino UNO Q، سنسور محیطی و دوربین را به شکل صحیح به یکدیگر متصل کنیم.


نصب برد کنترلر نمایشگر

ابتدا برد کنترلر نمایشگر را در قسمت پشت قاب نصب کنید.

برای ثابت نگه داشتن آن می‌توانید از یکی از روش‌های زیر استفاده کنید:

  • چسب حرارتی

  • چسب دوطرفه فومی مقاوم

دقت کنید که برد در محلی قرار بگیرد که:

  • فشار روی آن وارد نشود.

  • کابل‌ها به‌راحتی قابل اتصال باشند.

  • امکان گردش هوا وجود داشته باشد.


نصب هاب USB-C

در کنار برد کنترلر نمایشگر، هاب USB-C را نصب کنید.

سپس خروجی HDMI هاب را به ورودی HDMI برد کنترلر نمایشگر متصل کنید.

این هاب نقش یک مرکز اتصال را دارد و باعث می‌شود تمام تجهیزات جانبی مانند دوربین و برد اصلی بتوانند به‌صورت هماهنگ با یکدیگر کار کنند.


اتصال Arduino UNO Q

حالا نوبت نصب برد اصلی پروژه یعنی Arduino UNO Q است.

برد را به شکلی نصب کنید که پورت USB آن قابل دسترسی باشد؛ زیرا در مراحل راه‌اندازی و برنامه‌ریزی ممکن است به آن نیاز داشته باشید.

سپس:

  1. Arduino UNO Q را از طریق کابل USB-C به هاب متصل کنید.

  2. ماژول Modulino Temperature & Humidity را به پورت Qwiic روی UNO Q وصل کنید.

  3. دوربین USB را به یکی از پورت‌های USB برد UNO Q متصل کنید.


اتصال منبع تغذیه

در آخر، آداپتور USB-C با توان ۶۵ وات را به هاب USB-C متصل کنید.

قبل از رفتن به مرحله بعد، بررسی کنید که:

  • نمایشگر روشن می‌شود.

  • Arduino UNO Q برق دریافت می‌کند.

  • تمام کابل‌ها به‌درستی متصل شده‌اند.

اگر هر دو بخش اصلی یعنی نمایشگر و برد پردازشی روشن شدند، سیستم آماده راه‌اندازی نرم‌افزاری است.


راه‌اندازی Arduino App Lab

برای کار با Arduino UNO Q و مدیریت برنامه‌های پروژه، باید محیط Arduino App Lab را راه‌اندازی کنیم.

دو روش برای دسترسی به App Lab وجود دارد:


روش اول: استفاده از UNO Q به عنوان یک کامپیوتر مستقل لینوکسی

Arduino UNO Q می‌تواند مانند یک کامپیوتر کوچک مبتنی بر Linux کار کند.

مراحل:

  1. برد UNO Q را روشن کنید.

  2. مراحل راه‌اندازی اولیه (Setup Wizard) را انجام دهید.

  3. برنامه Arduino App Lab به‌صورت پیش‌فرض نصب شده است.

  4. پس از روشن شدن برد، App Lab به‌صورت خودکار اجرا می‌شود.

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


روش دوم: استفاده از برنامه دسکتاپ Arduino App Lab

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

مراحل:

  1. برنامه Arduino App Lab را از وب‌سایت رسمی Arduino دریافت کنید.

  2. نرم‌افزار را نصب و اجرا کنید.

  3. Arduino UNO Q را با کابل USB-C به کامپیوتر متصل کنید.

در اولین باری که یک Brick جدید به پروژه اضافه می‌کنید، برد باید فایل مربوط به آن سرویس را از مخزن Arduino دانلود کند.

بنابراین در اولین نصب Brickها، اتصال اینترنت فعال ضروری است.

بعد از دانلود اولیه، سرویس‌ها روی خود برد اجرا می‌شوند.


آشنایی با ساختار کد پروژه

کد این پروژه از سه فایل اصلی تشکیل شده است.

هر فایل یک بخش مشخص از سیستم را مدیریت می‌کند و این فایل‌ها به کمک App Lab Bricks با یکدیگر و همچنین با سخت‌افزار Arduino UNO Q ارتباط برقرار می‌کنند.

ساختار کلی پروژه به شکل زیر است:

  • بخش پردازش و ارتباطات اصلی (Backend)

  • رابط کاربری نمایش روی آینه (Frontend)

  • کد مربوط به میکروکنترلر و سنسورها


فایل main.py بخش اصلی Backend

فایل main.py قلب نرم‌افزاری پروژه است.

این فایل روی پردازنده Qualcomm MPU و در محیط App Lab اجرا می‌شود و وظایف اصلی سیستم را انجام می‌دهد.

کارهایی که این فایل انجام می‌دهد:

  • راه‌اندازی Brickهای مورد نیاز

  • دریافت اطلاعات از میکروکنترلر STM32

  • ذخیره داده‌های سنسورها

  • ارسال لحظه‌ای اطلاعات به رابط کاربری آینه

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


راه‌اندازی Brickهای اصلی

در ابتدای فایل، دو Brick اصلی پروژه ساخته می‌شوند:

db = TimeSeriesStore()   # Database – Time Series Brick
ui = WebUI()             # WebUI – HTML Brick

Brick اول:

TimeSeriesStore

وظیفه ذخیره اطلاعات سنسورها را دارد.

داده‌هایی مانند:

  • دما

  • رطوبت

  • زمان ثبت اطلاعات

را ذخیره می‌کند تا بتوان از آن‌ها برای رسم نمودار و نمایش تاریخچه استفاده کرد.


Brick دوم:

WebUI

مسئول ارتباط با رابط کاربری آینه است.

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


ارتباط بین پردازنده Qualcomm و STM32

یکی از قابلیت‌های مهم Arduino UNO Q، ارتباط داخلی بین دو پردازنده آن است.

این ارتباط توسط قابلیتی به نام Bridge انجام می‌شود.

Bridge مانند یک پل ارتباطی بین:

  • پردازنده Qualcomm MPU (بخش Linux)

  • میکروکنترلر STM32 MCU

عمل می‌کند.


روند انتقال اطلاعات سنسور

زمانی که STM32 یک مقدار جدید از سنسور Modulino دریافت می‌کند:

  1. مقدار جدید را می‌خواند.

  2. آن را از طریق Bridge به بخش Python ارسال می‌کند.

  3. تابع ثبت‌شده در Python اجرا می‌شود.

  4. مقدار جدید داخل دیتابیس ذخیره می‌شود.

  5. همان لحظه اطلاعات از طریق WebSocket به مرورگر ارسال می‌شود.

در نتیجه، نمودارهای روی آینه بدون نیاز به تازه‌سازی صفحه، به‌صورت زنده تغییر می‌کنند.


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

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

Modulino Sensor
⬇️
STM32 MCU
⬇️ (Bridge)
Python Backend – main.py
⬇️
Database + WebSocket
⬇️
Web Interface روی نمایشگر آینه

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


پردازش اطلاعات سنسورها در فایل main.py

یکی از وظایف اصلی فایل main.py دریافت اطلاعات سنسور دما و رطوبت، ذخیره‌سازی آن‌ها و ارسال لحظه‌ای داده‌ها به رابط کاربری آینه است.

تابع زیر مسئول ثبت نمونه‌های سنسور است:

def record_sensor_samples(celsius, humidity): 
    T = float(celsius) 
    H = float(humidity) 
    ts = int(datetime.datetime.now().timestamp() * 1000) 

    db.write_sample('temperature', T, ts)  
    db.write_sample('humidity', H, ts) 

    ui.send_message('temperature', {'value': T, 'ts': ts})  
    ui.send_message('humidity', {'value': H, 'ts': ts})

در این تابع چند مرحله اتفاق می‌افتد:

  1. مقدار دما و رطوبت که از STM32 دریافت شده، به عدد تبدیل می‌شود.

  2. زمان ثبت داده به میلی‌ثانیه ذخیره می‌شود.

  3. مقدارها در پایگاه داده InfluxDB ذخیره می‌شوند.

  4. همان لحظه اطلاعات جدید از طریق WebSocket به مرورگر ارسال می‌شود.

به این ترتیب، اطلاعات روی آینه بدون تأخیر و بدون نیاز به رفرش صفحه نمایش داده می‌شوند.

در پایان، این تابع توسط Bridge ثبت می‌شود تا STM32 بتواند هنگام دریافت داده جدید آن را فراخوانی کند:

Bridge.provide('record_sensor_samples', record_sensor_samples)

تشخیص اشیا با هوش مصنوعی و دوربین

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

این بخش توسط Brick مخصوص Video Object Detection مدیریت می‌شود.

این سرویس در پس‌زمینه دائماً تصویر دوربین را بررسی می‌کند و هر زمان که یک شیء یا شخص با میزان اطمینان کافی شناسایی شود، نتیجه را به برنامه اصلی ارسال می‌کند.


تنظیم سیستم تشخیص تصویر

در این پروژه مقدار آستانه اطمینان روی ۰.۴ قرار داده شده است.

یعنی اگر مدل هوش مصنوعی حداقل ۴۰ درصد مطمئن باشد که یک شیء را تشخیص داده، نتیجه ارسال خواهد شد.

video_detector = VideoObjectDetection(
    confidence=0.4,
    debounce_sec=1.5
)

پارامتر دوم یعنی:

debounce_sec=1.5

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


دریافت نتیجه تشخیص

تابع زیر زمانی اجرا می‌شود که دوربین چیزی را تشخیص دهد:

def on_any_detection(detections: dict):

    detected_label, data = max(
        detections.items(),
        key=lambda item: item[1].get('confidence', 0)
    )

    ui.send_message('vision_detection', {
        'label': detected_label,
        'confidence': data.get('confidence', 0)
    })

این تابع:

  • تمام اشیای شناسایی‌شده را بررسی می‌کند.

  • موردی که بیشترین امتیاز اطمینان را دارد انتخاب می‌کند.

  • نتیجه را به رابط کاربری ارسال می‌کند.

برای مثال اگر دوربین این اطلاعات را دریافت کند:

{
 'person': {'confidence': 0.87},
 'cat': {'confidence': 0.51}
}

سیستم گزینه person را انتخاب می‌کند، چون امتیاز بالاتری دارد.

در نهایت نتیجه توسط Brick تشخیص تصویر فعال می‌شود:

video_detector.on_detect_all(on_any_detection)

نمایش وضعیت آب‌وهوا

اطلاعات آب‌وهوا در این نسخه از پروژه به صورت یک API داخلی ارائه می‌شود.

در حال حاضر داده‌ها ثابت هستند، اما ساختار برنامه طوری طراحی شده که بتوان به‌راحتی آن را به یک سرویس آنلاین آب‌وهوا متصل کرد.

نمونه تابع:

def get_forecast(request=None):
    return {
        'city': 'Cairo',
        'current': 26.3,
        'daily': [...]
    }

این تابع اطلاعاتی مانند:

  • نام شهر

  • دمای فعلی

  • پیش‌بینی روزهای آینده

را برمی‌گرداند.

سپس API مربوطه برای رابط کاربری فعال می‌شود:

ui.expose_api('GET', '/forecast', get_forecast)

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


فایل index.html و style.css — طراحی ظاهر آینه

بخش رابط کاربری پروژه توسط فایل‌های HTML و CSS ساخته شده است.

فایل index.html مسئول تعیین ساختار تمام بخش‌هایی است که روی آینه دیده می‌شوند.

چیدمان صفحه شامل موارد زیر است:

گوشه بالا سمت چپ:

  • ساعت

  • تاریخ

قسمت پایین سمت چپ:

  • تقویم

  • لیست کارهای روزانه

گوشه بالا سمت راست:

  • پیش‌بینی وضعیت آب‌وهوا

مرکز صفحه:

  • نمودار دما

  • نمودار رطوبت

لایه بالایی صفحه:

  • پیام تشخیص هوش مصنوعی هنگام شناسایی یک شخص یا شیء


طراحی واکنش‌گرا

طراحی اولیه رابط کاربری بر اساس اندازه ثابت:

1600 × 900 پیکسل

ساخته شده است.

اما برای اینکه روی نمایشگرهای مختلف درست نمایش داده شود، از یک متغیر CSS به نام:

--scale

استفاده شده است.

این روش باعث می‌شود:

  • نسبت اندازه‌ها حفظ شود.

  • ظاهر رابط کاربری در رزولوشن‌های مختلف خراب نشود.

  • نوشته‌ها و المان‌ها همچنان واضح باقی بمانند.


شخصی‌سازی تقویم و کارها

بخش‌های زیر به صورت HTML ثابت ساخته شده‌اند:

  • تقویم

  • رویدادها

  • لیست کارها

برای شخصی‌سازی آینه کافی است این قسمت‌ها را مستقیماً در فایل:

index.html

ویرایش کنید.


فایل app.js — منطق سمت مرورگر

فایل app.js وظیفه کنترل رفتار رابط کاربری را دارد.

این فایل در مرورگر اجرا می‌شود و کارهایی مانند موارد زیر را انجام می‌دهد:

  • اتصال به برد

  • دریافت اطلاعات لحظه‌ای

  • به‌روزرسانی ساعت

  • نمایش نمودارها

  • نمایش پیام‌های هوش مصنوعی


راه‌اندازی ساعت دیجیتال

پس از باز شدن صفحه، یک ارتباط Socket.IO با برد ایجاد می‌شود.

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

این کار باعث می‌شود نمایش ساعت روان‌تر و سریع‌تر باشد.

نمونه کد:

function initClock() {

 let currentTime = new Date('2025-11-27T21:20:01');

 function updateClock() {

   currentTime.setSeconds(
     currentTime.getSeconds() + 1
   );

   document.getElementById('clock').textContent =
     currentTime.toLocaleTimeString([], {
       hour: '2-digit',
       minute: '2-digit',
       second: '2-digit'
     });
 }
 updateClock();

 setInterval(updateClock, 1000);
}

در نسخه نهایی می‌توان مقدار ثابت زمان را حذف کرد و از زمان واقعی سیستم استفاده کرد.


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

زمانی که داده جدیدی از سنسورها دریافت شود، مقدار جدید به نمودارهای Chart.js اضافه می‌شود.

برای جلوگیری از شلوغ شدن نمودار:

  • فقط آخرین ۶۰ مقدار نگهداری می‌شود.

  • داده‌های قدیمی‌تر حذف می‌شوند.

  • نمودار همیشه وضعیت اخیر محیط را نشان می‌دهد.

نمونه دریافت اطلاعات دما:

socket.on('temperature', (msg) => 
    renderChartData(
        temperatureLive,
        msg,
        document.getElementById('temp-value'),
        '°C'
    )
);

و برای رطوبت:

socket.on('humidity', (msg) => 
    renderChartData(
        humidityLive,
        msg,
        document.getElementById('hum-value'),
        '%'
    )
);

نمایش نتیجه تشخیص هوش مصنوعی

زمانی که دوربین یک شیء یا شخص را تشخیص دهد، پیام مربوطه دریافت می‌شود.

سپس نام تشخیص داده‌شده روی آینه نمایش داده می‌شود.

این پیام بعد از ۵ ثانیه به صورت خودکار محو می‌شود.

socket.on('vision_detection', (msg) => {

 const box = document.getElementById('greeting-box');

 if (!box || !msg?.label) return;

 box.textContent =
 `AI detection: ${
 msg.label.charAt(0).toUpperCase()
 + msg.label.slice(1)
 }`;
 box.classList.add('greeting-visible');

 setTimeout(() =>
 box.classList.remove('greeting-visible'),
 5000);

});

توسعه‌های بیشتر برای پروژه

این آینه هوشمند قابلیت ارتقاهای زیادی دارد. بسیاری از امکانات جدید فقط به اضافه کردن یک Brick و چند خط کد نیاز دارند.


اضافه کردن آب‌وهوای زنده

با اضافه کردن:

Weather Forecast Brick

می‌توان تابع ثابت get_forecast() را حذف کرد و اطلاعات واقعی آب‌وهوا را از سرویس‌هایی مانند Open-Meteo دریافت کرد.


اضافه کردن خروجی صوتی

با استفاده از:

Text-to-Speech Brick

می‌توان کاری کرد که آینه هنگام تشخیص یک شخص یا شیء، اطلاعات را با صدا اعلام کند.

مثلاً:

  • اعلام ساعت

  • خواندن وضعیت هوا

  • اعلام تشخیص دوربین


طراحی قاب حرفه‌ای‌تر

برای ظاهر نهایی بهتر می‌توان یک پنل پشتی با پرینتر سه‌بعدی طراحی کرد.

این پنل می‌تواند:

  • بردها را مخفی کند.

  • کابل‌ها را مرتب کند.

  • ظاهر پشت آینه را حرفه‌ای‌تر کند.


جمع‌بندی بخش نرم‌افزار

ساختار نرم‌افزاری این پروژه به شکلی طراحی شده که هر قسمت وظیفه مشخصی دارد:

  • STM32 → ارتباط سریع با سنسورها

  • Qualcomm MPU → پردازش‌های سنگین و اجرای Linux

  • Python Backend → مدیریت داده‌ها

  • Web Interface → نمایش اطلاعات روی آینه

  • AI Detection → تعامل هوشمند با محیط

همین معماری باعث می‌شود Arduino UNO Q بتواند یک آینه ساده را به یک سیستم هوشمند، تعاملی و قابل توسعه تبدیل کند.

باکس دانلود پروژه 👇 ( برای دانلود فایل های پروژه باید عضو سایت شوید )

با ایجاد اکانت کاربری در سایت به فایل های این پروژه دسترسی داشته باشید


علاقه مندان پروژه های هوشمند سازی و آردوینو

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

1 × 3 =