✨ اطلاعات نویسنده

👤 نام: احسان اصفهانی
🏫 وابستگی: گروه مهندسی کامپیوتر، دانشگاه فردوسی مشهد
📧 ایمیل: ehsanesfhany@gmail.com
🔗 لینکدین: linkedin.com/in/ehsanesfehani

📚 فهرست مطالب


1️⃣ فصل اول سنسورها

📷 دوربین

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

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

هنگامی که نور وارد دوربین می‌شود، ابتدا توسط لنز جمع‌آوری و بر روی سطح سنسور متمرکز می‌گردد. سنسور دوربین — که معمولاً از نوع CCD یا CMOS است — صفحه‌ای بسیار حساس به نور بوده و از میلیون‌ها عنصر کوچک تشکیل می‌شود که به هر یک از آن‌ها پیکسل گفته می‌شود.

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

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

سنسورهای تصویربرداری ذاتاً قادر به تشخیص رنگ نیستند و تنها شدت کلی نور را اندازه‌گیری می‌کنند. به همین دلیل، برای ثبت اطلاعات رنگی، یک لایه بسیار نازک به نام آرایهٔ فیلتر رنگی (Color Filter Array – CFA) بر روی سطح سنسور قرار داده می‌شود.

رایج‌ترین نوع این فیلترها، الگوی بایر (Bayer Pattern) است. در این الگو، هر چهار پیکسل شامل ترکیب زیر هستند:

یک پیکسل مجهز به فیلتر قرمز (Red)

یک پیکسل مجهز به فیلتر آبی (Blue)

دو پیکسل مجهز به فیلتر سبز (Green)

این ترتیب به دلیل حساسیت بیشتر چشم انسان به رنگ سبز انتخاب شده است.

به این ترتیب:

هر پیکسل تنها یکی از سه رنگ اصلی را دریافت و اندازه‌گیری می‌کند.

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

پیکسل‌های سبز تنها نور سبز را ثبت می‌کنند.

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

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

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

رابطهٔ میان شدت نور و تعداد الکترون‌های تولیدشده کاملاً مستقیم است:

نور زیاد → تولید الکترون‌های بیشتر

نور کم → تولید الکترون‌های کمتر

عدم وجود نور → تقریباً هیچ الکترونی تولید نمی‌شود

حالا دقیقا چگونه کار میکند

وقتی فوتون به ناحیهٔ تخلیهٔ (Depletion Region) دیود برخورد می‌کند:

انرژی فوتون → آزاد شدن یک الکترون از باند ظرفیت

تشکیل یک الکترون آزاد + یک حفره

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

الکترون → سمت N

حفره → سمت P

این جداسازی سریع → تولید یک جریان خارجی متناسب با نور

📌 پس جریان از نور می‌آید، نه از عبور حامل‌ها از PN

چرا فتو‌دیود را معکوس بایاس می‌کنیم؟ بزرگ‌تر شدن ناحیهٔ تخلیه (Depletion Width) میدان الکتریکی قوی جلوگیری از جریان عبوری دیود

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

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

رابطهٔ میان روشنایی صحنه و مقدار ولتاژ تولیدشده مستقیم است:

پیکسل روشن → ولتاژ بالا

پیکسل تاریک → ولتاژ پایین

این ولتاژ، نخستین شکل از سیگنال الکتریکی خام به حساب می‌آید

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

با افزودن فیلترهای رنگی (مانند آرایهٔ بایر)، هر پیکسل به یکی از سه رنگ اصلی سبز، قرمز یا آبی حساس می‌شود

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

به این ترتیب، فتودیود در قلب هر پیکسل سنسور، با ترکیب فیزیک نیمه‌هادی، جذب فوتون و ایجاد بار الکتریکی، عمل تبدیل نور به سیگنال الکتریکی را انجام می‌دهد

🎙️ میکروفون

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

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

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

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

کاهش فشار → دیافراگم به سمت عقب رانده می‌شود

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

نوع اول Dynamic Microphone

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

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

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

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

نوع دوم Condenser / Capacitor Microphone

میکروفون خازنی بر اساس تغییرات ظرفیت یک خازن عمل می‌کند. در این ساختار، دیافراگم نقش صفحهٔ متحرک خازن را دارد و در مقابل آن یک صفحهٔ ثابت قرار گرفته است. این دو صفحه یک خازن را تشکیل می‌دهند که ظرفیت آن از رابطهٔ زیر به دست می‌آید:

\[C = \frac{\varepsilon A}{d}\]

در این رابطه، $C$ ظرفیت خازن، $A$ مساحت صفحات، $d$ فاصلهٔ بین دیافراگم و صفحهٔ ثابت، و $\varepsilon$ ثابت دی‌الکتریک هوا است. زمانی که موج صوتی به دیافراگم برخورد می‌کند، فشار هوا باعث می‌شود دیافراگم به جلو و عقب حرکت کند. این حرکت، فاصلهٔ بین دو صفحه را تغییر می‌دهد و بنابراین فاصلهٔ لحظه‌ای به صورت زیر تعریف می‌شود:

\[d(t) = d_0 + \Delta d(t)\]

با تغییر فاصلهٔ بین صفحات، ظرفیت خازن نیز تغییر می‌کند و مقدار لحظه‌ای آن به شکل زیر است:

\[C(t) = \frac{\varepsilon A}{d_0 + \Delta d(t)}\]

برای اینکه خازن بتواند سیگنال الکتریکی تولید کند، ابتدا با یک ولتاژ ثابت بایاس می‌شود. در این حالت، بار ذخیره‌شده روی خازن از رابطهٔ زیر تبعیت می‌کند:

\[Q = C \cdot V\]

از آنجا که بار الکتریکی $Q$ در لحظه ثابت می‌ماند، تغییر ظرفیت به‌طور مستقیم موجب تغییر ولتاژ خازن می‌شود. بنابراین ولتاژ خروجی میکروفون تابع ظرفیت لحظه‌ای خازن خواهد بود:

\[V(t) = \frac{Q}{C(t)}\]

از آنجا که تغییر ظرفیت دقیقاً ناشی از حرکت دیافراگم است، در نهایت تغییرات ولتاژ خروجی متناسب با جابه‌جایی دیافراگم بوده و نسخه‌ای الکتریکی از موج صوت می‌شود:

\[V(t) \propto \Delta d(t)\]

به این ترتیب، میکروفون خازنی با تبدیل نوسان مکانیکی دیافراگم به تغییرات ظرفیت و سپس تغییرات ولتاژ، یک سیگنال الکتریکی آنالوگ تولید می‌کند که شکل آن کاملاً با موج صوت ورودی یکسان است.

نوع سوم Micro Electro Mechanical System

میکروفون‌های MEMS نسل جدیدی از میکروفون‌های الکترونیکی هستند که با استفاده از فناوری ریزساختارهای الکترومکانیکی تولید می‌شوند. در این نوع میکروفون، اجزای مکانیکی و الکترونیکی در ابعاد میکرومتری روی یک تراشهٔ سیلیکونی ساخته می‌شوند؛ به همین دلیل این میکروفون‌ها بسیار کوچک، سبک، مقاوم و مناسب برای دستگاه‌های قابل‌حمل مانند گوشی‌های هوشمند، لپ‌تاپ، هدفون و تجهیزات IoT هستند.

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

یکی از ویژگی‌های مهم میکروفون‌های MEMS استفاده از ASIC داخلی (تراشهٔ پردازش سیگنال) است. این ASIC معمولاً شامل تقویت‌کننده، فیلتر، مدارهای نویز پایین و مبدل آنالوگ‌به‌دیجیتال (ADC) است. به همین دلیل بسیاری از میکروفون‌های MEMS به‌صورت دیجیتال (I²S یا PDM) خروجی می‌دهند و مستقیماً قابل اتصال به پردازنده‌ها و میکروکنترلرها هستند. این موضوع باعث کاهش نویز، سادگی طراحی و کیفیت پایدار در دستگاه‌های کوچک می‌شود.

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

# 🌡️ ترمیستور NTC

ترمیستورهای NTC نوعی مقاومت‌ حرارتی هستند که مقدار مقاومت آن‌ها با افزایش دما کاهش می‌یابد. مادهٔ سازندهٔ این ترمیستورها معمولاً شامل اکسیدهای فلزی نیمه‌هادی است که رفتار رسانایی آن‌ها با دما طبق مدل‌های فیزیکی مواد نیمه‌هادی تغییر می‌کند. در نتیجه، ترمیستور NTC برای اندازه‌گیری دما، جبران‌سازی حرارتی و مدارهای کنترل دما به‌طور گسترده استفاده می‌شود.

### رابطهٔ اصلی مقاومت–دما تغییر مقاومت یک ترمیستور NTC با دما به‌صورت نمایی بوده و با معادلهٔ معروف **Beta** توصیف می‌شود:
\[R(T) = R_0 \, e^{\, B \left(\frac{1}{T} - \frac{1}{T_0}\right)}\]
که در آن: \(R(T)\) مقاومت در دمای \(T\) \(R_0\) مقاومت در دمای مرجع \(T_0\) (معمولاً 25°C = 298.15 K) \(B\) ثابت مادهٔ ترمیستور (Beta Constant) \(T\) و \(T_0\) بر حسب کلوین (Kelvin) هستند. ### معادلهٔ دقیق‌تر: Steinhart–Hart برای دقت بالا در حسگرهای حرفه‌ای، از معادلهٔ سه‌پارامتری استینهارت–هارت استفاده می‌شود:
\[\frac{1}{T} = A + B \ln(R) + C [\ln(R)]^3\]
در این رابطه: \(A\)، \(B\) و \(C\) ضرایب مخصوص ترمیستور هستند. \(T\) دمای مطلق بر حسب کلوین \(R\) مقدار مقاومت لحظه‌ای ترمیستور NTC بر پایهٔ رفتار رسانایی نیمه‌هادی‌ها کار می‌کند. با افزایش دما، انرژی حرارتی باعث آزاد شدن حامل‌های بار بیشتری در ساختار کریستالی ماده می‌شود. در نیمه‌هادی‌ها، افزایش تعداد الکترون‌های آزاد مستقیماً منجر به کاهش مقاومت الکتریکی می‌شود. به همین دلیل NTC دارای «ضریب دمایی منفی» است؛ یعنی با بالا رفتن دما، مقاومت آن کاهش می‌یابد. این تغییر مقاومت، طبق رابطهٔ نمایی یا معادلهٔ استینهارت–هارت، به‌صورت دقیق به دمای لحظه‌ای وابسته است. در مدارهای الکترونیکی، این مقاومت متغیر معمولاً در یک تقسیم مقاومتی قرار داده می‌شود تا تغییرات ولتاژ خروجی به‌طور مستقیم دمای محیط را نشان دهد.
# 🔥 سنسورهای گاز MQ-135 و MQ-2

سنسورهای خانوادهٔ MQ مانند MQ-135 و MQ-2 از نوع MOS (Metal Oxide Semiconductor) هستند. این سنسورها از یک مادهٔ نیمه‌هادی حساس به گاز — معمولاً SnO₂ (قلع اکسید — به همراه یک المنت گرم‌کن داخلی تشکیل شده‌اند. با گرم‌ شدن تا دمای 200–400 درجه، سطح نیمه‌هادی حالت فعال پیدا می‌کند و رسانایی آن با حضور گازهای مختلف تغییر می‌کند.

در حالت عادی (بدون گاز قابل‌سنجش)، اکسیژن محیط روی سطح SnO₂ جذب شده و باعث کاهش تعداد الکترون‌های آزاد و افزایش مقاومت سنسور می‌شود. اما وقتی گازهای قابل‌احتراق یا آلاینده وارد سطح سنسور می‌شوند، فرآیند اکسید–احیا باعث آزاد شدن الکترون‌ها شده و **رسانایی افزایش** می‌یابد. بنابراین: - غلظت گاز **زیاد → مقاومت کم** - غلظت گاز **کم → مقاومت زیاد** ## نحوه کار MQ-2

سنسور MQ-2 یک سنسور گاز از نوع نیمه‌هادی اکسید فلزی (MOS) است که برای تشخیص گازهای قابل‌اشتعال مثل LPG، پروپان، بوتان، هیدروژن و همچنین دود طراحی شده است. از نظر فیزیکی، داخل این کپسول فلزی تور‌دار، یک لولهٔ سرامیکی کوچک قرار دارد که روی سطح آن لایه‌ای از SnO₂ (اکسید قلع نوع n) به‌همراه الکترودهای فلزی چاپ شده است. در مرکز این لولهٔ سرامیکی، یک سیم هیتر (معمولاً آلیاژ نیکروم) پیچیده شده که با ولتاژ حدود ۵ ولت کار می‌کند و دمای بخش حساس سنسور را تقریباً به ۳۰۰–۳۵۰ درجهٔ سلسیوس می‌رساند؛ دمایی که در آن واکنش‌های شیمیایی روی سطح SnO₂ به‌صورت پایدار و تکرارپذیر انجام می‌شوند. پایه‌های سنسور به‌گونه‌ای بیرون آمده‌اند که دو پایه برای هیتر (H-H) و چهار پایه برای اتصال به لایهٔ حساس (دو پایه A و دو پایه B که معمولاً به‌صورت جفت‌جفت به هم وصل می‌شوند) استفاده می‌شود، و در مدار به شکل یک مقاومت متغیر (Rs) دیده می‌شود که با تغییر غلظت گاز تغییر می‌کند.

مکانیزم کاری MQ-2 بر پایهٔ تغییر مقاومت لایهٔ SnO₂ در اثر جذب اکسیژن و واکنش با گازهای احیاکننده است. در هوای تمیز، مولکول‌های اکسیژن روی سطح SnO₂ جذب (adsorb) می‌شوند و الکترون‌هایی را از باند رسانش SnO₂ می‌گیرند و به یون‌های O⁻ ،O₂⁻ یا O²⁻ تبدیل می‌شوند؛ این کار در ناحیهٔ نزدیک سطح، یک لایهٔ تخلیه (depletion layer) ایجاد می‌کند و در نتیجه، مقاومت الکتریکی سنسور بالا است. وقتی گازهای قابل‌اشتعال یا احیاکننده (مثل LPG، H₂ یا دود) وارد می‌شوند، روی همین سطح واکنش اکسید–احیا رخ می‌دهد؛ به‌طور ساده، گاز احیاکننده با اکسیژن جذب‌شده واکنش داده و آن را به CO₂ و H₂O تبدیل می‌کند و الکترون‌هایی که قبلاً به دام افتاده بودند آزاد می‌شوند و به باند رسانش برمی‌گردند، بنابراین مقاومت SnO₂ به‌شدت کاهش می‌یابد و رسانایی زیاد می‌شود. در مدار، با یک مقاومت بار (RL) این تغییر مقاومت Rs به تغییر ولتاژ تبدیل می‌شود و می‌توان از نسبت Rs/R₀ (که R₀ مقاومت سنسور در غلظت مرجع، مثلاً ۱۰۰۰ppm است) برای تخمین غلظت گاز استفاده کرد. سنسور MQ-2 نیاز به پیش‌گرمایش و کالیبراسیون دارد، به دما و رطوبت و نوع گاز وابسته است و نسبت به چندین گاز به‌طور هم‌زمان حساس است (Cross-sensitivity)، بنابراین در عمل بیشتر برای تشخیص وجود یا نبود گاز/دود و هشدار، و نه اندازه‌گیری خیلی دقیق ppm استفاده می‌شود.

## نحوه کار MQ-135 سنسور MQ-135 نیز مانند سایر سنسورهای سری MQ بر پایهٔ ساختار نیمه‌هادی اکسید فلزی ساخته شده است، اما ترکیب داخلی آن طوری دوپ و اصلاح شده که به‌طور ویژه نسبت به گازهای آلاینده‌ی هوا مانند آمونیاک (NH₃)، بنزن (C₆H₆)، بخارات الکلی، دود خودرو، ترکیبات آلی فرّار (VOCs) و تا حدی CO₂ حساسیت بیشتری داشته باشد. درون بدنهٔ فلزی توری‌دار آن یک لولهٔ سرامیکی قرار دارد که روی آن لایهٔ SnO₂ دوپ‌شده چاپ شده و الکترودهای A و B روی دو طرف آن قرار گرفته‌اند. در مرکز این لوله، یک هیتر پیچیده شده که با ولتاژ حدود ۵ ولت کار می‌کند و سطح سنسور را به دمای کاری مناسب (تقریباً ۳۰۰ درجه) می‌رساند تا واکنش‌های سطحی ثابت و قابل‌تکرار باشند. پایه‌ها شامل دو پایهٔ هیتر (H-H) و چهار پایهٔ الکترودی (A و B) هستند که در مدار به صورت مقاومت متغیر دیده می‌شوند.

مکانیزم تشخیص MQ-135 مبتنی بر تغییر مقاومت لایهٔ SnO₂ در اثر حضور گازهای احیاکننده است. در هوای پاک، اکسیژن روی سطح جذب می‌شود و الکترون‌هایی را از ساختار SnO₂ می‌گیرد، در نتیجه یک لایهٔ تخلیه (Depletion layer) با مقاومت بالا تشکیل می‌شود. اما هنگامی که گازهای آلاینده مانند NH₃ یا بخارات آلی وارد سطح می‌شوند، با اکسیژن جذب‌شده واکنش اکسید–احیا انجام می‌دهند و الکترون‌های به دام افتاده آزاد می‌شوند. این آزادسازی الکترون باعث افزایش رسانایی و کاهش مقاومت سنسور می‌شود و همین تغییر مقاومت (Rs) با یک مقاومت بار (RL) به تغییر ولتاژ تبدیل می‌شود. MQ-135 به علت ماهیت MOS و حساسیت هم‌زمان به چند گاز، برای اندازه‌گیری دقیق ppm مناسب نیست، اما به‌طور وسیع برای تشخیص کیفیت هوا، تولید هشدار آلودگی، تهویه هوشمند، تشخیص دود و بخارات سمی استفاده می‌شود و معمولاً نیاز به پیش‌گرمایش، کالیبراسیون و درک اثر دما/رطوبت دارد.

## مدل ریاضی سنسور (منحنی مشخصه) رابطهٔ بین مقاومت سنسور و غلظت گاز طبق مدل لگاریتمی/توانی زیر تخمین زده می‌شود:
\[\frac{R_S}{R_0} = A \,(ppm)^{-B}\]
که در آن: \(R_S\): مقاومت سنسور در حضور گاز \(R_0\): مقاومت سنسور در غلظت استاندارد گاز (کالیبراسیون) \(ppm\): غلظت گاز \(A\) و \(B\): ضرایب تجربی منحنی مشخصه سنسور برای محاسبهٔ غلظت گاز معمولاً رابطهٔ زیر در دیتاشیت توصیه می‌شود:
\[ppm = \left( \frac{R_S}{R_0} \cdot \frac{1}{A} \right)^{-\frac{1}{B}}\]
## محاسبهٔ مقاومت سنسور از تقسیم مقاومتی در مدار معمولی، سنسور با یک مقاومت ثابت \(R_L\) سری می‌شود:
\[V_{out} = \frac{R_L}{R_S + R_L} \, V_{CC}\]
بنابراین:
\[R_S = R_L\left(\frac{V_{CC}}{V_{out}} - 1\right)\]
# 📏 سنسور فاصله‌سنج HC-SR04

سنسور HC-SR04 یک حسگر فاصله‌سنج فراصوتی ارزان، قابل‌اعتماد و بسیار پرکاربرد در رباتیک، سامانه‌های هوشمند و پروژه‌های IoT است. اساس کار این سنسور شبیه روش ناوبری خفاش‌ها و دلفین‌هاست؛ یعنی با ارسال موج صوتی به سمت محیط و دریافت بازتاب آن، فاصلهٔ اجسام محاسبه می‌شود. سنسور HC-SR04 یک موج فراصوت با فرکانس حدود ۴۰ کیلوهرتز به سمت هدف ارسال می‌کند، سپس مدت‌زمان رفت و برگشت موج (که به آن Time of Flight یا زمان پرواز گفته می‌شود) را اندازه‌گیری می‌کند. با دانستن سرعت صوت در هوا و زمان طی‌شده، می‌توان فاصلهٔ جسم را به‌صورت نسبتاً دقیق محاسبه کرد.

این روش اندازه‌گیری مستقل از نور محیط است؛ بنابراین برخلاف سنسورهای نوری، در تاریکی مطلق نیز عملکرد خوبی دارد. همین ویژگی باعث شده سنسور HC-SR04 در ربات‌های مسیریاب، سیستم‌های پارک خودرو، پروژه‌های آموزشی و انواع سامانه‌های هوشمند تشخیص مانع، یکی از گزینه‌های محبوب باشد.

ساختار داخلی و نقش کریستال پیزوالکتریک

قلب اصلی سنسور HC-SR04 یک کریستال پیزوالکتریک است؛ ماده‌ای سرامیکی (مانند PZT) که قابلیت تبدیل انرژی الکتریکی به ارتعاش مکانیکی و برعکس را دارد. به تبدیل ولتاژ به لرزش، اثر پیزوالکتریک معکوس گفته می‌شود و به تبدیل لرزش به ولتاژ، اثر پیزوالکتریک مستقیم. همین دو خاصیت باعث می‌شود کریستال پیزوالکتریک بتواند هم نقش فرستندهٔ موج صوتی و هم نقش گیرندهٔ موج بازتاب‌شده را بر عهده بگیرد.

در بخش فرستندهٔ HC-SR04، وقتی مدار داخلی یک سیگنال AC با فرکانس حدود ۴۰ کیلوهرتز به کریستال اعمال می‌کند، کریستال با همان فرکانس با دامنهٔ بسیار سریع به جلو و عقب می‌لرزد. این ارتعاش مکانیکی، موج فراصوت را در هوا تولید می‌کند. در سمت گیرنده نیز کریستال مشابهی قرار دارد، با این تفاوت که در حالت عادی تحریک نمی‌شود، بلکه منتظر رسیدن بازتاب موج است. هنگامی که موج بازتاب‌شده به گیرنده می‌رسد، کریستال شروع به لرزش می‌کند و این لرزش به‌صورت یک سیگنال الکتریکی بسیار ضعیف در دو سر کریستال ظاهر می‌شود. مدار داخلی سنسور این سیگنال ضعیف را تقویت، فیلتر و سپس به یک پالس منطقی تبدیل می‌کند تا توسط میکروکنترلر به‌راحتی اندازه‌گیری شود.

سنسور HC-SR04 معمولاً شامل دو ماژول پیزوالکتریک مجزا است: یکی برای ارسال (Transmitter) و دیگری برای دریافت (Receiver). این طراحی باعث کاهش نویز و افزایش دقت می‌شود، زیرا مسیر ارسال و دریافت از هم جدا هستند و می‌توان بازتاب‌های ضعیف را هم بهتر تشخیص داد.

فرایند کار سنسور از دید سیگنال و زمان

سنسور چهار پایهٔ اصلی دارد: VCC، GND، TRIG و ECHO. برای شروع اندازه‌گیری، میکروکنترلر یک پالس با عرض حدود ۱۰ میکروثانیه به پایهٔ TRIG می‌فرستد. پس از این تحریک کوتاه، سنسور یک «بسته» موج فراصوت (Burst) شامل چند سیکل ۴۰ کیلوهرتزی را به وسیلهٔ کریستال فرستنده ارسال می‌کند. موج در هوا منتشر شده و به سمت جسم حرکت می‌کند. پس از برخورد موج به جسم، بخشی از انرژی موج به صورت بازتاب به سمت سنسور برمی‌گردد و توسط کریستال گیرنده دریافت می‌شود.

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

### معادلات سرعت صوت و محاسبهٔ فاصله سرعت صوت در هوا تقریباً به دما وابسته است و می‌توان آن را با رابطهٔ زیر مدل کرد: $$ v \approx 331 + 0.6T $$ که در آن **T** دما بر حسب درجهٔ سلسیوس و **v** سرعت صوت بر حسب متر بر ثانیه است. در دمای حدود ۲۰ درجه، سرعت صوت تقریباً ۳۴۳ متر بر ثانیه است. رابطهٔ عمومی فاصله: $$ d = \frac{v \times t}{2} $$ که در آن **d** فاصله، **v** سرعت صوت، و **t** زمان رفت‌وبرگشت موج است. در بسیاری از کاربردهای عملی، از رابطهٔ تقریبی زیر استفاده می‌شود: $$ \text{Distance (cm)} \approx \frac{t(\mu s)}{58} $$ ### چرا فرکانس ۴۰ کیلوهرتز و اهمیت رزونانس کریستال کریستال‌های پیزوالکتریک دارای یک **فرکانس رزونانس** هستند؛ یعنی در یک فرکانس مشخص بیشترین دامنهٔ نوسان را دارند. در سنسورهای HC-SR04 این فرکانس معمولاً ۴۰ کیلوهرتز انتخاب می‌شود. طول موج موج فراصوت در ۴۰ کیلوهرتز و سرعت صوت ۳۴۳ m/s: $$ \lambda \approx \frac{343}{40000} \approx 0.0086\,m \approx 8.6\,mm $$ ### تأثیر جنس و شکل جسم بر بازتاب موج رفتار موج فراصوت هنگام برخورد به جسم به جنس، شکل و زاویهٔ سطح جسم بستگی دارد. سطوح سخت مثل فلز یا بتن بازتاب قوی ایجاد می‌کنند. سطوح نرم مثل اسفنج، پارچه و … انرژی موج را جذب می‌کنند و بازتاب ضعیف می‌شود. اگر سطح جسم زاویه‌دار باشد، موج بازتاب‌شده ممکن است هرگز به گیرنده بازنگردد. ### تأثیر شرایط محیطی: دما، رطوبت و فشار سرعت صوت عمدتاً به دما وابسته است. با افزایش دما سرعت صوت زیاد شده و فاصله بیشتر از مقدار واقعی اندازه‌گیری می‌شود. در دمای پایین سرعت صوت کم شده و فاصله کمتر از مقدار واقعی به دست می‌آید. برای دقت بالاتر، معمولاً از سنسور دما مثل DHT22 یا DS18B20 کنار HC-SR04 استفاده می‌شود. ### محدودیت‌ها، بازهٔ کار و کاربردهای عملی HC-SR04 معمولاً در بازهٔ **۲ سانتی‌متر تا ۴ متر** کار می‌کند و دقتی در حد چند میلی‌متر ارائه می‌دهد. کمتر از ۲ سانتی‌متر تشخیص سخت می‌شود و بیشتر از ۴ متر موج بازتاب ضعیف می‌شود.

سنسور PIR (Passive Infrared)

سنسور PIR یا «سنسور مادون‌قرمز غیرفعال» یکی از کاربردی‌ترین سنسورها در سیستم‌های امنیتی، خانه‌ی هوشمند و پروژه‌های اینترنت اشیاء است. این سنسور هیچ انرژی‌ای به بیرون ارسال نمی‌کند و تنها با دریافت تغییرات تابش مادون‌قرمز که از اجسام گرم مانند بدن انسان ساطع می‌شود، حرکت را تشخیص می‌دهد. چون بدن انسان به دلیل دمای حدود ۳۷ درجه سانتی‌گراد پیوسته در محدوده‌ی ۸ تا ۱۴ میکرومتر انرژی مادون‌قرمز منتشر می‌کند، این سنسور به‌خصوص برای تشخیص انسان بسیار مؤثر است. نکته‌ی مهم این است که PIR مقدار ثابت گرما را تشخیص نمی‌دهد بلکه تنها «تغییرات» آن را احساس می‌کند، بنابراین اگر فرد کاملاً ساکن بایستد، بعد از چند ثانیه خروجی سنسور خاموش می‌شود.

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

## اثر پایروالکتریک اثر پایروالکتریک (Pyroelectric Effect) یک پدیدهٔ فیزیکی است که در برخی کریستال‌های غیرمتقارن اتفاق می‌افتد. این مواد وقتی دچار تغییر دما می‌شوند، روی سطح خود بار الکتریکی تولید می‌کنند. فقط تغییر دما مهم است، نه مقدار دمای ثابت اگر دما ثابت بماند، هیچ ولتاژی تولید نمی‌شود.
در سنسورهای PIR دو قطعهٔ بسیار حساس از جنس کریستال پایروالکتریک قرار دارد که فقط نسبت به تغییر دما واکنش نشان می‌دهند. بدن انسان امواج مادون‌قرمز گرمایی (۸ تا ۱۴ میکرومتر) منتشر می‌کند. اگر این تابش باعث شود دمای سطح کریستال تغییر کند، مقدار کمی بار الکتریکی تولید می‌شود. سنسور به دمای ثابت واکنش نمی‌دهد؛ تنها تغییرات سریع IR ولتاژ می‌سازند، بنابراین فقط زمانی فعال می‌شود که جسم گرمی مثل انسان در میدان دید حرکت کند.

برای تشخیص واضح‌تر حرکت، روی سنسور یک لنز فرزنل قرار دارد. این لنز محیط را به نواحی کوچک و متعدد تقسیم می‌کند. وقتی انسان حرکت می‌کند، تصویر حرارتی او به‌صورت پشت‌سرهم از یک بخش لنز به بخش دیگر منتقل می‌شود. در نتیجه ابتدا مقدار IR روی عنصر پایروالکتریک سمت چپ تغییر می‌کند و سپس روی عنصر سمت راست. این تغییر متوالی باعث ایجاد پالس‌های مثبت و منفی می‌شود. اختلاف بین این دو پالس همان سیگنالی است که نشان می‌دهد «حرکت رخ داده است». سیگنال تولید شده توسط کریستال‌ها بسیار کوچک است، بنابراین یک تقویت‌کننده و مقایسه‌گر داخلی (معمولاً تراشهٔ BISS0001) آن را بزرگ می‌کند و نویزهای محیط را حذف می‌کند. وقتی اختلاف ولتاژ دو عنصر پایروالکتریک از حد مشخصی بیشتر شود، خروجی سنسور برای مدتی به حالت HIGH می‌رود. این همان لحظه‌ای است که سنسور اعلام می‌کند: «در میدان دید من حرکتی وجود دارد». به همین دلیل سنسور PIR بدون ارسال هیچ موجی و صرفاً با تحلیل تغییرات مادون‌قرمز ناشی از حرکت انسان عمل می‌کند.

# سنسور اثر انگشت خازنی (Capacitive Fingerprint Sensor)

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

برجستگی‌های اثر انگشت (ridges) به سطح سنسور نزدیک‌تر هستند و باعث می‌شوند فاصلهٔ خازن کم شود و ظرفیت زیاد گردد. در مقابل، شیارها (valleys) دورتر هستند و ظرفیت خازن کمتر می‌شود. مدار داخلی سنسور این تغییرات ظرفیت را با اندازه‌گیری زمان دشارژ RC یا جریان لحظه‌ای خازن تشخیص می‌دهد. تفاوت بین ظرفیت‌های زیاد و کم، یک نقشهٔ دقیق از الگوی خطوط اثر انگشت می‌سازد.
پس از اندازه‌گیری ظرفیت تک‌تک خازن‌ها، سنسور یک ماتریس دیجیتال می‌سازد که مقدار هر خانه‌ٔ آن نشان‌دهندهٔ میزان نزدیکی پوست به همان نقطه از الکترودهاست. این ماتریس دقیقاً مانند یک تصویر سیاه‌وسفید الکتریکی از اثر انگشت عمل می‌کند. سپس پردازندهٔ داخلی نقاط مهم اثر انگشت (Minutiae) را استخراج کرده و با الگوی ذخیره‌شده مقایسه می‌کند. اگر شباهت کافی باشد، سیستم هویت فرد را تأیید می‌کند. # سنسور تشخیص رنگ TCS34725

سنسور TCS34725 یک حسگر تشخیص رنگ است که از چهار نوع فتودیود تشکیل شده: قرمز (R)، سبز (G)، آبی (B) و شفاف (Clear). این فتودیودها شدت نوری را که در هر کانال وارد می‌شود به سیگنال الکتریکی تبدیل می‌کنند. یک فیلتر طیفی روی سنسور قرار دارد که طول موج‌های مربوط به رنگ‌های اصلی را جدا می‌کند تا هر فتودیود فقط نور مخصوص خود را دریافت کند. وجود یک تقویت‌کننده و ADC داخلی 16 بیتی باعث می‌شود مقدار نور هر رنگ با دقت بسیار بالا اندازه‌گیری شود.

وقتی نور از جسم بازتاب می‌شود و به سنسور می‌رسد، هر کانال R، G و B مقدار متفاوتی از نور را دریافت می‌کند. مثلاً اگر جسم قرمز باشد، کانال R شدت نور بالاتری دریافت می‌کند، درحالی‌که G و B مقدار کم‌تری خواهند داشت. سنسور این شدت‌ها را اندازه‌گیری می‌کند و سه مقدار دیجیتال (R، G، B) تولید می‌شود. سپس این مقدارها به یک بردار رنگی تبدیل می‌شوند و می‌توان با آن رنگ جسم را دقیقاً تشخیص داد.
پردازندهٔ سنسور و میکروکنترلر مقدارهای دریافت‌شده را با استفاده از محاسبات کالیبراسیون و تصحیح نور محیط (Lux & Color Temperature) اصلاح می‌کنند. سنسور TCS34725 یک LED سفید داخلی هم دارد که برای نوردهی ثابت استفاده می‌شود تا رنگ در شرایط مختلف محیط تغییر نکند. در نهایت می‌توان خروجی را به صورت RGB کامل، دمای رنگ (CCT) یا شدت نور (Lux) دریافت کرد. این داده‌ها برای پروژه‌های رباتیک، IoT، کالیبراسیون صفحه‌نمایش و تشخیص رنگ اشیا بسیار کاربردی هستند. # سنسور تشخیص ژست‌ حرکتی هوا (Gesture Sensor) – مدل APDS-9960

سنسور APDS-9960 شامل چهار فتودیود جهت‌دار است که به ترتیب نور منعکس‌شده از بالا، پایین، چپ و راست را دریافت می‌کنند. در کنار آن یک LED مادون‌قرمز (IR LED) قرار دارد که نور IR را به سمت دست می‌تاباند. این سنسور علاوه بر ژست حرکتی، قابلیت‌های تشخیص نور محیط، رنگ و نزدیکی را هم دارد. مدار داخلی سنسور شامل ADCهای چند کاناله، فیلترها و واحد پردازش ژست است که دادهٔ هر فتودیود را جداگانه نمونه‌برداری و تحلیل می‌کند.

وقتی دست شما در هوا حرکت می‌کند، مقدار نور مادون‌قرمزی که به هر فتودیود می‌رسد الگوی زمانی متفاوتی ایجاد می‌کند. برای مثال اگر دست از چپ به راست حرکت کند، ابتدا فتودیود سمت چپ مقدار نور بیشتری دریافت می‌کند و کمی بعد فتودیود سمت راست افزایش نور را حس می‌کند. پردازندهٔ داخلی سنسور این تغییرات زمانی را با هم مقایسه می‌کند و با استفاده از Δزمان و Δشدت نور جهت حرکت (بالا، پایین، چپ، راست) را تشخیص می‌دهد. به همین دلیل می‌توان با آن کارهایی مثل Swipe Left/Right یا Up/Down را شناسایی کرد.
پس از ثبت تغییرات نور در چهار فتودیود، سنسور داده‌ها را فیلتر کرده و یک بردار ژست (Gesture Vector) تولید می‌کند که شامل شدت نور و زمان ثبت‌شده در هر جهت است. سپس با الگوریتم داخلی، بردارها با الگوهای استاندارد ژست‌ها (Swipe، Up، Down، Left، Right، Near، Far) مقایسه می‌شوند. در نهایت نتیجه به صورت دادهٔ دیجیتال از طریق پروتکل I²C به میکروکنترلر ارسال می‌شود. به دلیل اینکه پردازش ژست داخل خود سنسور انجام می‌شود، میکروکنترلر تنها نتیجهٔ نهایی را می‌خواند و نیاز به محاسبات سنگین ندارد. # سنسور mmWave (موج میلی‌متری)
سنسور mmWave ابتدا با استفاده از یک نوسان‌ساز فرکانس بالا (VCO / PLL) موجی با فرکانس بسیار زیاد تولید می‌کند؛ معمولاً ۶۰ تا ۷۷ گیگاهرتز. این موج به آنتن فرستنده (TX) منتقل می‌شود. چون طول موج این امواج فقط چند میلی‌متر است، آنتن آن‌ها بسیار کوچک طراحی می‌شود، حتی روی همان تراشهٔ سنسور. موج میلی‌متری ارسال‌شده مانند نور نامرئی در فضا پخش می‌شود و به هر جسمی که سر راهش باشد برخورد می‌کند. هر جسم بخشی از موج را بازتاب می‌دهد. این بازتاب‌ها دوباره به سمت آنتن گیرندهٔ سنسور (RX) برمی‌گردند. کل کار رادار mmWave بر پایهٔ این است که امواج ارسالی و امواج بازگشتی چه تغییری نسبت به هم پیدا می‌کنند؛ از همین تغییرات فاصله، سرعت، جهت و حرکت استخراج می‌شود.
در سنسورهای mmWave از تکنیک قدرتمند FMCW استفاده می‌شود. در این روش موج ساده فرستاده نمی‌شود، بلکه موجی ارسال می‌شود که فرکانسش به‌صورت خطی در زمان افزایش پیدا می‌کند؛ این موج را Chirp می‌نامند. وقتی موج به جسم برخورد کرده و با تأخیر برمی‌گردد، چون موج اصلی در حال افزایش فرکانس بوده، موج دریافتی از موج ارسالی فرکانس متفاوتی دارد. سنسور این اختلاف فرکانس را اندازه‌گیری می‌کند. هرقدر فاصله بیشتر باشد، این اختلاف فرکانس بزرگ‌تر می‌شود.
اگر جسمی که در مقابل سنسور است حرکت کند، موج بازتاب‌شده دچار اثر داپلر می‌شود. به این معنی که اگر جسم به سمت سنسور نزدیک شود، فرکانس موج بازتابی کمی افزایش می‌یابد و اگر دور شود، کاهش می‌یابد. mmWave این تغییر فرکانس بسیار کوچک را با پردازش سیگنال اندازه‌گیری می‌کند. این کار با انجام FFT روی سینگال بازگشتی انجام می‌شود و فرکانس داپلر مشخص می‌کند سرعت دقیق چقدر است. نکتهٔ مهم این است که mmWave می‌تواند حتی حرکت‌های بسیار کوچک بدن مثل حرکت میلی‌متری قفسهٔ سینه هنگام تنفس یا ضربان قلب را نیز تشخیص دهد. چون این حرکات تغییرات داپلری ایجاد می‌کنند که سنسور قادر به اندازه‌گیری آن‌هاست.
برای اینکه سنسور تشخیص دهد جسم دقیقاً کجای فضا قرار دارد (نه فقط فاصله)، mmWave از چند آنتن گیرنده استفاده می‌کند. هر آنتن، موج بازتابی را با یک اختلاف فاز کوچک دریافت می‌کند. چون موج میلی‌متری طول موج کوتاهی دارد، حتی جابه‌جایی میلی‌متری بین آنتن‌ها باعث اختلاف فاز قابل اندازه‌گیری می‌شود. رادار با حل یک معادلهٔ مثلثاتی می‌تواند زاویهٔ ورود موج (AOA – Angle of Arrival) را محاسبه کند. سپس فاصله + زاویه + شدت بازتاب به یکدیگر ترکیب می‌شود و خروجی به شکل یک Point Cloud سه‌بعدی ارائه می‌شود. شبیه کاری که LiDAR انجام می‌دهد، امّا با مقاومت بیشتر در برابر تاریکی، پارچه، مه و دود. # صفحه‌ لمسی خازنی (Capacitive Touch) صفحه‌ خازنی از چندین لایه تشکیل شده است: شیشهٔ محافظ، لایهٔ رسانای شفاف (ITO)، ماتریس الکترودهای X و Y و در نهایت کنترلر لمسی. مهم‌ترین لایه همان شبکهٔ الکترودهای شفاف است که روی هم قرار گرفته‌اند و مجموعه‌ای از خازن‌های کوچک را تشکیل می‌دهند. این شبکهٔ ماتریسی دائماً توسط کنترلر اسکن می‌شود تا هر تغییری در ظرفیت الکتریکی را تشخیص دهد.
در این فناوری، انگشت انسان که رساناست، مانند صفحهٔ سوم یک خازن عمل می‌کند. هر نقطه روی صفحه یک خازن خیلی کوچک است. وقتی انگشت نزدیک شود، ظرفیت خازن تغییر می‌کند (زیاد یا کم می‌شود). کنترلر دقیقاً همین تغییرات بسیار کوچک را اندازه‌گیری می‌کند و از آن برای تشخیص لمس استفاده می‌شود. به همین دلیل صفحه‌های خازنی بدون فشار و فقط با تماس کار می‌کنند.
در صفحه‌های خازنی مدرن، ماتریس الکترودها خطوط X و Y هستند. کنترلر هر خط را با فرکانس بالا اسکن می‌کند تا نقاطی که ظرفیت خازنی‌شان تغییر کرده شناسایی شود. با مقایسهٔ تغییرات روی محور X و Y، محل دقیق لمس مشخص می‌شود. در فناوری جدید PCAP، این ماتریس بسیار فشرده‌تر شده و امکان پردازش چند لمس هم‌زمان با دقت بالا فراهم است.
سیگنال ظرفیت خازنی بسیار کوچک و پر از نویز است. کنترلر لمسی (Touch Controller IC) وظیفه دارد نویز را فیلتر کند، سیگنال را تقویت کند، تغییرات ظرفیت را با دقت بسیار بالا اندازه‌گیری کند و مختصات دقیق لمس را از طریق I²C یا SPI به CPU بفرستد. اگر این کنترلر نباشد، صفحه لمسی عملاً کار نمی‌کند؛ زیرا تغییرات ظرفیت در حد پیکوفاراد است و نیاز به تقویت و پردازش دقیق دارد. ### چرا با دستکش معمولی کار نمی‌کند؟ دستکش‌های معمولی عایق هستند و بار الکتریکی از آنها عبور نمی‌کند؛ اما سیستم خازنی به رسانایی انگشت نیاز دارد تا تغییر ظرفیت ایجاد شود. چون دستکش اجازهٔ جابه‌جایی بار را نمی‌دهد، کنترلر لمسی تغییری در ظرفیت حس نمی‌کند. به همین دلیل سازندگان، دستکش‌های مخصوص صفحه لمسی را با الیاف فلزی یا مواد رسانا تولید می‌کنند تا نقش انگشت را ایفا کنند. ## Self Capacitance (ظرفیت نسبت به زمین) در این روش هر الکترود به‌صورت مستقل نسبت به زمین ظرفیت دارد. وقتی انگشت نزدیک شود، مثل اینکه الکترود به «زمین بزرگ‌تری» نزدیک شده باشد → ظرفیت زیاد می‌شود.
## Mutual Capacitances (ظرفیت بین دو الکترود X و Y) در این روش ظرفیت بین یک الکترود X و یک الکترود Y اندازه‌گیری می‌شود. وقتی انگشت نزدیک شود، میدان بین X و Y را مختل می‌کند → ظرفیت کاهش پیدا می‌کند.
در صفحه‌های پیشرفته از روش Mutual Capacitance استفاده می‌شود؛ یعنی ظرفیت بین یک الکترود X و یک الکترود Y سنجیده می‌شود. این روش امکان تشخیص چند لمس هم‌زمان را با دقت بالا فراهم می‌کند. در مقابل، Self Capacitance ظرفیت هر الکترود را نسبت به زمین اندازه‌گیری می‌کند که ساده‌تر است، اما چندلمسی واقعی را به‌خوبی پشتیبانی نمی‌کند. به همین دلیل گوشی‌های مدرن از تکنیک “Projected Mutual Capacitance” استفاده می‌کنند. # صفحه لمسی مقاومتی (Resistive Touch) صفحه‌ لمسی مقاومتی از دو لایهٔ رسانا تشکیل شده که یکی از جنس PET انعطاف‌پذیر و دیگری از جنس شیشه سخت است. هر دو سطح با لایه‌ای از ITO (Indium Tin Oxide) پوشیده شده‌اند که شفاف و رسانا است. بین این دو لایه، مجموعه‌ای از فاصله‌دهنده‌های میکرومتری (Spacer Dots) قرار دارد تا مانع اتصال دائمی شوند. هنگامی که فشار وارد می‌شود، لایهٔ PET کمی خم می‌شود و با لایهٔ زیرین تماس پیدا می‌کند. این تماس الکتریکی نقطه‌ای همان سیگنال اولیهٔ لمس است.
وقتی کاربر با انگشت، قلم یا حتی ناخن فشار می‌دهد، دو سطح رسانا در یک نقطه به هم می‌رسند و پیوند الکتریکی ایجاد می‌شود. این صفحه مانند یک شبکهٔ مقاومت خطی (Resistive Divider) عمل می‌کند. با اعمال ولتاژ روی لایهٔ زیرین، یک میدان ولتاژ خطی (Gradient) تشکیل می‌شود. نقطهٔ تماس، ولتاژی بین صفر تا Vcc تولید می‌کند. این ولتاژ نسبت مستقیم با مکان لمس دارد. در حقیقت، لمس کردن باعث می‌شود کنترلر لمسی مقدار دقیق ولتاژ نقطهٔ فشار را بخواند و به مختصات تبدیل کند.
صفحه‌ لمسی مقاومتی برخلاف خازنی، به ویژگی‌های بدن انسان وابسته نیست و با هر چیز فشاردهنده‌ای کار می‌کند: قلم معمولی، ناخن، کارت بانکی یا حتی دستکش. این ویژگی آن را برای دستگاه‌هایی مثل ATM، POS، کیوسک‌های صنعتی، مانیتورهای پزشکی و محیط‌هایی با گردوغبار یا رطوبت عالی می‌کند. همچنین به‌دلیل استفاده از PET و شیشهٔ معمولی، قیمت تولید آن ارزان و تعمیرپذیری آن بالاست. این صفحات در برابر نویز الکترومغناطیسی و تغییرات دما عملکرد پایداری دارند. با وجود مزایا، صفحات مقاومتی معایبی دارند. مهم‌ترین آن‌ها عدم پشتیبانی واقعی از Multi-touch (همزمان فقط یک نقطه را می‌فهمند) و شفافیت کمتر به‌دلیل وجود لایه‌های متعدد PET، ITO و اسپیسرهاست. همچنین لمس نیازمند فشار مکانیکی است که تجربهٔ کاربری را کندتر می‌کند. به همین دلیل گوشی‌ها و تبلت‌های امروزی که نیاز به حساسیت بالا، چندلمسی و کیفیت تصویر بهتر دارند، از صفحات خازنی (Capacitive Touchscreen) استفاده می‌کنند. اما برای دستگاه‌های صنعتی و عمومی، Resistive همچنان یکی از گزینه‌های اصلی است. ## محاسبه مختصات در صفحه لمسی مقاومتی (Resistive Touch) در صفحات لمسی مقاومتی، تعیین موقعیت انگشت یا قلم بر اساس **تقسیم ولتاژ (Voltage Divider)** انجام می‌شود. سطح رسانای ITO مانند یک **مقاومت خطی یکنواخت** رفتار می‌کند؛ بنابراین هر نقطه از صفحه، ولتاژی **متناسب با فاصله‌اش از لبه‌ها** دارد. کنترلر لمسی با خواندن این ولتاژ، مختصات لمس را استخراج می‌کند. ### 1) فرمول اصلی تقسیم ولتاژ (پایه‌ی محاسبه مختصات) زمانی که محور X فعال می‌شود: - لبهٔ چپ صفحه به 0V متصل می‌شود (X−) - لبهٔ راست به \(V_{cc}\) متصل می‌شود (X+) این کار یک **شیب ولتاژ خطی** روی کل صفحه ایجاد می‌کند. از آن‌جا که مقاومت سطحی یکنواخت است، ولتاژ روی صفحه با فاصله از لبه چپ کاملاً **خطی** تغییر می‌کند. فرمول خواندن ولتاژ: $$ V_{read} = V_{cc} \times \frac{X_{touch}}{W} $$ توضیح: اگر لمس در نیمه صفحه باشد، ولتاژ نصف \(V_{cc}\) خواهد بود؛ اگر لمس در 25٪ عرض صفحه باشد، ولتاژ برابر 0.25 × \(V_{cc}\) خواهد شد. --- ### 2) تبدیل ولتاژ به مختصات واقعی کنترلر لمسی مقدار ولتاژ خوانده‌شده را می‌داند، اما موقعیت را نه. بنابراین با حل معکوس معادله بالا: $$ X_{touch} = W \times \frac{V_{read}}{V_{cc}} $$ توضیح: این رابطه موقعیت فیزیکی را از نسبت ولتاژ استخراج می‌کند. مثلاً اگر \(V_{read}=1.2V\) و \(V_{cc}=3.3V\) باشد، لمس در حدود 36٪ عرض صفحه است. ### 3) نسخهٔ عملی مبتنی بر ADC (چیزی که در میکروکنترلر واقعاً انجام می‌شود) میکروکنترلر ولتاژ آنالوگ را مستقیماً نمی‌بیند. خروجی از **ADC** دریافت می‌شود: - اگر ADC یک مبدل n بیتی باشد: - مقدار آن بین 0 تا \(2^n - 1\) متغیر است - برای 12 بیت، مقدار بین 0 تا 4095 خواهد بود نسبت موقعیت برابر است با نسبت مقدار ADC: $$ X_{touch} = W \times \frac{A_x}{2^{n} - 1} $$ و برای محور Y: $$ Y_{touch} = H \times \frac{A_y}{2^{n} - 1} $$ توضیح: اگر \(A_x = 2048\) و ADC = 12bit باشد، لمس تقریباً در وسط محور X است. ### 4) چرا روابط خطی هستند؟ (تحلیل فیزیکی) دلیل خطی بودن روابط این است که لایهٔ ITO: - مقاومت سطحی یکنواخت دارد - ولتاژ بین دو لبه‌ی آن طبق قانون اهم **به‌صورت خطی پخش می‌شود** - نقطهٔ لمس دقیقاً بخشی از یک شبکهٔ مقاومت خطی است پس نسبت فاصله و نسبت ولتاژ یکسان است: $$ \frac{X_{touch}}{W} = \frac{V_{read}}{V_{cc}} $$ این ویژگی باعث می‌شود محاسبات ساده، سریع و قابل‌اعتماد باشند. ### 5) نسخه حرفه‌ای — ماتریس کالیبراسیون (برای ATM، POS، نمایشگرهای صنعتی) در عمل، صفحه همیشه **کاملاً ایده‌آل نیست**. عواملی مثل: - انحراف مکانیکی سنسور - عدم یکنواختی ITO - خطای نصب - انحنای صفحه - فرسایش PET باعث می‌شود نقاط لمس دقیق نباشند. بنابراین پس از لمس سه یا پنج نقطه‌ی کالیبراسیون، از یک تبدیل خطی دوبعدی استفاده می‌شود: $$ X_{screen} = A_x X_{raw} + B_x Y_{raw} + C_x $$ $$ Y_{screen} = A_y X_{raw} + B_y Y_{raw} + C_y $$ این ماتریس خطاهای شیفت (Offset)، کشیدگی (Scale) و چرخش (Skew) صفحه را اصلاح می‌کند. ---
1️⃣ فصل دوم میکروکنترلرهای رایج
## ESP32

مشخصات سخت‌افزاری ESP32

  • CPU: دو هسته‌ای Xtensa LX6 تا 240MHz
  • RAM: حدود 520KB SRAM
  • Flash: بین 4MB تا 16MB
  • PSRAM: موجود در برخی مدل‌ها (4MB تا 8MB)
  • WiFi: استاندارد 802.11 b/g/n
  • Bluetooth: نسخه 4.2 + BLE
  • GPIO: حدود 30 پایه
  • ADC: دقت 12 بیتی، حدود 18 کانال
  • DAC: دو کانال 8 بیتی
  • UART: تا 3 عدد
  • SPI: تا 4 عدد
  • I²C: تا 2 عدد
  • I²S: برای صوت پشتیبانی می‌شود
  • PWM: موجود روی اکثر GPIOها
  • RTC: دارد (برای Deep Sleep)
  • رمزنگاری سخت‌افزاری: AES, SHA, RSA
  • ولتاژ کاری:
    • ولتاژ ورودی: 5V
    • سطح منطقی GPIO: 3.3V
  • مصرف انرژی:
    • حالت فعال: 80 تا 240mA
    • Deep Sleep: 10 تا 150µA
## STM32

مشخصات سخت‌افزاری STM32 (مدل رایج: STM32F103C8T6)

  • CPU: هسته ARM Cortex-M3 با فرکانس 72MHz
  • Flash: حجم 64KB (گاهی 128KB)
  • RAM: حدود 20KB SRAM
  • ADC: دقت 12 بیتی، تا 10 کانال
  • DAC: ندارد (در این مدل خاص)
  • GPIO: حدود 37 پایه روی برد Blue Pill
  • USART/UART: تا 3 عدد
  • SPI: تا 2 عدد
  • I²C: تا 2 عدد
  • USB: پشتیبانی USB Full-Speed
  • CAN Bus: یک واحد کنترلر CAN
  • Timers: چند تایمر 16بیتی + یک تایمر 32بیتی
  • PWM: پشتیبانی روی چند کانال
  • RTC: دارای ساعت واقعی داخلی
  • ولتاژ کاری: 2.0V تا 3.6V (ورودی برد معمولاً 5V)
  • مصرف انرژی: دارای حالت‌های Sleep، Stop، Standby
## Arduino (Uno / Mega / Nano)

مشخصات سخت‌افزاری Arduino Uno

  • میکروکنترلر: ATmega328P
  • فرکانس کاری: 16MHz
  • Flash: 32KB
  • RAM: 2KB
  • EEPROM: 1KB
  • GPIO: تعداد 14 پین دیجیتال
  • ورودی آنالوگ: 6 پین (ADC 10 بیتی)
  • PWM: تعداد 6 خروجی PWM
  • UART: یک عدد
  • I²C: پشتیبانی می‌شود
  • SPI: پشتیبانی می‌شود
  • ولتاژ کاری هسته: 5V
  • ولتاژ ورودی برد: 7 تا 12 ولت

مشخصات سخت‌افزاری Arduino Mega 2560

  • میکروکنترلر: ATmega2560
  • فرکانس کاری: 16MHz
  • Flash: حجم 256KB
  • RAM: حجم 8KB
  • EEPROM: حجم 4KB
  • GPIO: تعداد 54 پین دیجیتال
  • ورودی‌های آنالوگ: 16 پین (ADC 10 بیتی)
  • PWM: تعداد 15 خروجی PWM
  • UART: تعداد 4 عدد
  • I²C: پشتیبانی می‌شود
  • SPI: پشتیبانی می‌شود
  • ولتاژ کاری هسته: 5V
  • ولتاژ ورودی برد: 7 تا 12 ولت

مشخصات سخت‌افزاری Arduino Nano

  • میکروکنترلر: ATmega328P
  • فرکانس کاری: 16MHz
  • Flash: حجم 32KB
  • RAM: حجم 2KB
  • EEPROM: حجم 1KB
  • GPIO: تعداد 14 پین دیجیتال
  • ورودی‌های آنالوگ: 8 پین (ADC 10 بیتی)
  • PWM: تعداد 6 خروجی PWM
  • UART: یک عدد
  • I²C: پشتیبانی می‌شود
  • SPI: پشتیبانی می‌شود
  • ولتاژ کاری هسته: 5V
  • ولتاژ ورودی (VIN): بین 7 تا 12 ولت
1️⃣ فصل سوم پروژه ها
# مدار چشمک‌زن (Blinker) با میکروکنترلر STM32 هدف از انجام این پروژه، آشنایی عملی با میکروکنترلرهای خانواده ARM سری STM32 و نحوه پیکربندی و برنامه‌نویسی پورت‌های ورودی/خروجی (GPIO) می‌باشد. در این آزمایش، از میکروکنترلر مدل STM32F103C8T6 استفاده شده است. مراحل انجام پروژه شامل پیکربندی سخت‌افزاری در محیط نرم‌افزاری STM32CubeMX، طراحی شماتیک و شبیه‌سازی در نرم‌افزار Proteus و در نهایت پیاده‌سازی الگوریتم کنترلی به زبان C با بهره‌گیری از کتابخانه‌های استاندارد HAL است. خروجی نهایی، کنترل وضعیت روشن و خاموش شدن یک دیود نوری (LED) با فواصل زمانی معین می‌باشد.
پیکربندی اولیه در محیط STM32CubeMX به منظور آماده‌سازی میکروکنترلر، ابتدا در نرم‌افزار CubeMX تنظیمات اولیه اعمال گردید. همان‌طور که در تصویر مشاهده می‌شود، پین شماره PA1 به عنوان خروجی دیجیتال (GPIO_Output) تعریف شده است. این پین وظیفه ارسال سیگنال کنترلی به مدار درایور LED را بر عهده دارد. سایر تنظیمات مربوط به کلاک و دیباگ در حالت پیش‌فرض حفظ شده‌اند تا شرایط برای تولید کد اولیه فراهم گردد.
شماتیک و شبیه‌سازی مدار در Proteus پس از تولید کد و فایل اجرایی، عملکرد مدار در محیط شبیه‌سازی مورد ارزیابی قرار گرفت. در این مدار، میکروکنترلر U1 به عنوان واحد پردازش مرکزی عمل می‌کند. یک عدد LED (با شناسه D1) به پایه PA1 متصل شده است. سمت کاتد LED جهت تکمیل مدار به زمین (GND) متصل گردیده است. با اعمال سطح منطقی "یک" (High) به پایه PA1، جریان در مدار برقرار شده و LED روشن می‌گردد. همچنین اتصالات مربوط به تغذیه (VSS/VDD) جهت راه‌اندازی شبیه‌سازی برقرار شده‌اند.
پیاده‌سازی نرم‌افزاری و حلقه اصلی برنامه این تصویر بخشی از کد منبع (Source Code) برنامه در محیط IDE را نمایش می‌دهد. منطق کنترلی در داخل حلقه نامتناهی while(1) پیاده‌سازی شده است که شامل مراحل زیر می‌باشد: فعال‌سازی خروجی: با فراخوانی تابع HAL_GPIO_WritePin و ارسال پارامتر GPIO_PIN_SET، سطح ولتاژ پایه PA1 به وضعیت High تغییر یافته و LED روشن می‌شود. ایجاد تأخیر: توسط تابع HAL_Delay، وقفه‌ای به مدت ۲۰۰ میلی‌ثانیه در اجرای برنامه ایجاد می‌گردد تا وضعیت روشن بودن LED قابل مشاهده باشد. غیرفعال‌سازی خروجی: مجدداً با استفاده از تابع نوشتن در پین و ارسال پارامتر GPIO_PIN_RESET، ولتاژ پایه قطع و LED خاموش می‌شود. تأخیر مجدد: یک وقفه ۲۰۰ میلی‌ثانیه‌ای دیگر جهت تکمیل سیکل چشمک‌زن اعمال می‌شود # ماشین‌حساب دیجیتال با استفاده از میکروکنترلر Arduino Mega 2560 این پروژه با هدف طراحی و شبیه‌سازی یک سیستم محاسباتی (ماشین‌حساب) بر پایه پلتفرم آردوینو انجام شده است. در این مدار، از برد Arduino Mega 2560 به عنوان واحد پردازش مرکزی (CPU) استفاده شده است که وظیفه مدیریت ورودی‌ها و خروجی‌ها را بر عهده دارد.
ورودی: یک کی‌پد ماتریسی ۴×۴ که به کاربر امکان وارد کردن اعداد (۰ تا ۹) و عملگرهای اصلی ریاضی (جمع، تفریق، ضرب، تقسیم) را می‌دهد. خروجی: یک نمایشگر LCD کاراکتری ۱۶×۲ که برای نمایش اعداد وارد شده و نتیجه نهایی محاسبات به کار می‌رود. در مرکز این شبیه‌سازی، برد توسعه Arduino Mega 2560 قرار دارد. این برد به دلیل داشتن تعداد پین‌های ورودی/خروجی دیجیتال (Digital I/O) زیاد، انتخاب مناسبی برای پروژه‌هایی است که نیاز به اتصال همزمان کی‌پد و نمایشگر دارند. اتصالات: پین‌های دیجیتال شماره ۶ تا ۱۳ به سطرها و ستون‌های کی‌پد متصل شده‌اند تا عملیات اسکن کلیدها را انجام دهند. همچنین پین‌های ارتباطی (Communication Pins) شماره ۱۴ تا ۱۹ برای ارسال داده‌ها به نمایشگر LCD پیکربندی شده‌اند. واحد ورودی (Keypad 4x4) این قطعه رابط بین کاربر و سیستم است. کی‌پد استفاده شده از نوع ماتریسی ۴×۴ بوده که شامل ۱۶ کلید است. عملکرد: این کی‌پد شامل اعداد ۰-۹، چهار عملگر اصلی ریاضی، دکمه ON/C (برای روشن کردن یا پاک کردن صفحه) و دکمه تساوی است. آردوینو با روش "اسکن سطری و ستونی" (Scanning) تشخیص می‌دهد که کدام کلید فشرده شده است. واحد نمایشگر (LCD LM016L) برای نمایش اطلاعات از یک LCD کاراکتری مدل LM016L با ابعاد ۱۶ ستون در ۲ سطر استفاده شده است. عملکرد: این نمایشگر در حالت ۴-بیتی (4-bit mode) به آردوینو متصل شده است تا تعداد پین‌های کمتری اشغال کند. وظیفه آن نمایش لحظه‌ای اعدادی است که کاربر تایپ می‌کند و همچنین نمایش نتیجه نهایی پس از انجام محاسبات توسط آردوینو.
```C #include #include const int rs = 14, en = 15, d4 = 16, d5 = 17, d6 = 18, d7 = 19; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); #define Relay 5 const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = { {'7', '8', '9', '/'}, {'4', '5', '6', '*'}, {'1', '2', '3', '-'}, {'O', '0', '=', '+'} }; byte rowPins[ROWS] = {13, 12, 11, 10}; //connect to the row pinouts of the keypad byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup() { Serial.begin(9600); pinMode(Relay , OUTPUT) ; } String STR = "" ; void loop() { char customKey = customKeypad.getKey(); if (customKey && customKey != '=') { STR += customKey ; lcd.clear(); lcd.setCursor(0, 0); lcd.print(STR); } else if (customKey == '=') { if (STR.indexOf('+') != -1) { int idx = STR.indexOf('+') ; String str = STR ; str.remove(idx); // first number int Number1 = str.toInt(); str = STR ; str.remove(0 , idx + 1); int Number2 = str.toInt(); int Number3 = Number1 + Number2 ; lcd.print('='); lcd.print(Number3); STR = "" ; } if (STR.indexOf('*') != -1) { int idx = STR.indexOf('*') ; String str = STR ; str.remove(idx); // first number int Number1 = str.toInt(); str = STR ; str.remove(0 , idx + 1); int Number2 = str.toInt(); int Number3 = Number1 * Number2 ; lcd.print('='); lcd.print(Number3); STR = "" ; } if (STR.indexOf('-') != -1) { int idx = STR.indexOf('-') ; String str = STR ; str.remove(idx); // first number int Number1 = str.toInt(); str = STR ; str.remove(0 , idx + 1); int Number2 = str.toInt(); int Number3 = Number1 - Number2 ; lcd.print('='); lcd.print(Number3); STR = "" ; } if (STR.indexOf('/') != -1) { int idx = STR.indexOf('/') ; String str = STR ; str.remove(idx); // first number int Number1 = str.toInt(); str = STR ; str.remove(0 , idx + 1); int Number2 = str.toInt(); double Number3 = (double)Number1 / Number2 ; lcd.print('='); lcd.print(Number3); STR = "" ; } } } ```
# ارتباط سریال بین دو میکروکنترلر Arduino Uno با استفاده از پروتکل I2C این بخش از پروژه به شبیه‌سازی ارتباط داده میان دو پردازنده مستقل می‌پردازد. هدف اصلی، کنترل ادوات خروجی متصل به یک میکروکنترلر (Slave) توسط فرامین صادر شده از میکروکنترلر دیگر (Master) است. برای برقراری این ارتباط از پروتکل I2C (Inter-Integrated Circuit) استفاده شده است که یک استاندارد ارتباطی سریال همزمان و دو‌سیمه می‌باشد. در این سناریو، برد سمت چپ به عنوان Master (ارباب) وظیفه خواندن وضعیت ورودی (دکمه) و ارسال فرمان را دارد و برد سمت راست به عنوان Slave (برده) وظیفه دریافت فرمان و کنترل عملگر نهایی (LED) را ایفا می‌کند. این ساختار در سیستم‌های توزیع‌شده و اتوماسیون صنعتی کاربرد فراوان دارد.
واحد Master (فرمان‌دهنده) برد Arduino Uno سمت چپ به عنوان واحد کنترل مرکزی پیکربندی شده است. وظیفه: این برد وضعیت پین دیجیتال شماره ۴ را (که به یک دکمه متصل است) به صورت مداوم پایش می‌کند. به محض تغییر وضعیت دکمه، یک بایت داده حاوی فرمان روشن یا خاموش شدن را از طریق باس I2C به آدرس اختصاصی Slave ارسال می‌کند. پورت سریال: پین‌های TX و RX این برد به یک ترمینال مجازی متصل هستند تا وضعیت ارسال داده‌ها را برای دیباگ کردن (Debug) گزارش دهند. واحد Slave (اجراکننده) برد Arduino Uno سمت راست با یک آدرس I2C مشخص برنامه‌ریزی شده و در حالت گوش‌به‌زنگ (Listening) قرار دارد. وظیفه: به محض دریافت داده از Master، آن را پردازش کرده و بر اساس مقدار دریافتی، وضعیت پین دیجیتال شماره ۴ خود را تغییر می‌دهد که منجر به روشن یا خاموش شدن LED می‌شود. پروتکل ارتباطی (I2C Bus) ارتباط فیزیکی بین دو برد از طریق دو خط برقرار شده است: SDA (Serial Data): متصل به پین A4 هر دو برد برای انتقال داده‌ها. SCL (Serial Clock): متصل به پین A5 هر دو برد برای همزمان‌سازی (Clocking) ارتباط. این روش امکان اتصال چندین Slave به یک Master را تنها با دو سیم فراهم می‌کند. مدار ورودی و خروجی (Button & LED) مدار ورودی (سمت Master): یک کلید فشاری (Push Button) همراه با یک مقاومت Pull-down (R1 با مقدار 1k) به پین ۴ متصل است. این آرایش تضمین می‌کند که در حالت عادی ورودی صفر منطقی (LOW) و در زمان فشردن کلید، یک منطقی (HIGH) باشد. مدار خروجی (سمت Slave): یک LED قرمز رنگ با یک مقاومت محدودکننده جریان (R2 با مقدار 220 اهم) به پین ۴ متصل شده است تا با فرمان Master روشن شود. ## کد Master (فرستنده)
```C #include const int buttonPin = 4; int buttonState = 0; void setup() { Wire.begin(); Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); Wire.beginTransmission(8); if (buttonState == HIGH) { Wire.write(1); Serial.println("1"); } else { Wire.write(0); Serial.println("0"); } Wire.endTransmission(); delay(100); } ```
## کد Slave (گیرنده)
```C #include const int ledPin = 4; int receivedValue = 0; void setup() { Wire.begin(8); Wire.onReceive(receiveEvent); pinMode(ledPin, OUTPUT); } void loop() { delay(100); } void receiveEvent(int howMany) { while (Wire.available()) { receivedValue = Wire.read(); if (receivedValue == 1) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } } ```
# قفل امنیتی دیجیتال با رله (Digital Lock System) این پروژه یک سیستم امنیتی ساده (مانند قفل درب هوشمند) را شبیه‌سازی می‌کند. کاربر باید رمز عبور صحیح را از طریق صفحه کلید وارد کند. ورودی رمز: کاربر اعداد را روی Keypad فشار می‌دهد. آردوینو این اعداد را خوانده و با رمز ذخیره شده در حافظه مقایسه می‌کند. پردازش و نمایش: نتایج (مانند "رمز صحیح" یا "خطا") بر روی Virtual Terminal نمایش داده می‌شود.
عملگر نهایی (Relay): اگر رمز صحیح باشد، آردوینو پین متصل به رله را تحریک می‌کند. رله (که یک کلید الکترومغناطیسی است) تغییر وضعیت داده و مدار لامپ (LED) را وصل می‌کند. استفاده از رله نشان می‌دهد که این مدار قابلیت کنترل وسایل برقی واقعی (مانند قفل برقی درب یا موتور) را دارد. Keypad 4x4: برای دریافت ورودی کاربر. سطرها و ستون‌های آن به پین‌های دیجیتال ۶ تا ۱۳ متصل شده‌اند. رله (Relay): به پین دیجیتال ۵ متصل است. وظیفه آن ایزوله کردن مدار فرمان (آردوینو) از مدار قدرت (LED) است. ترمینال مجازی: متصل به پین‌های ۰ و ۱ (TX/RX) برای تعامل متنی با کاربر.
```C #include const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'7','8','9','/'}, {'4','5','6','*'}, {'1','2','3','-'}, {'C','0','=','+'} }; byte rowPins[ROWS] = {13, 12, 11, 10}; byte colPins[COLS] = {9, 8, 7, 6}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); const int relayPin = 5; String correctPass = "1234"; String inputPass = ""; void setup() { Serial.begin(9600); pinMode(relayPin, OUTPUT); digitalWrite(relayPin, LOW); Serial.println("System Ready. Enter Password:"); } void loop() { char key = keypad.getKey(); if (key) { if (key == 'C') { inputPass = ""; Serial.println("\nInput Cleared."); } else if (key == '=') { Serial.println(); if (inputPass == correctPass) { Serial.println("Access GRANTED"); digitalWrite(relayPin, HIGH); delay(3000); digitalWrite(relayPin, LOW); inputPass = ""; } else { Serial.println("Access DENIED"); inputPass = ""; } } else { inputPass += key; Serial.print("*"); } } } ```