🎓 پروژه پایانی دانشگاه با میکروکنترلر: از انتخاب موضوع تا دفاع (برای دانشجوی برق، کامپیوتر و مکاترونیک)
ترم آخر است و باید پروژه پایانی دانشگاه را انتخاب کنی؛ چیزی که هم ساخته شود، هم گزارش خوبی از آن دربیاید و هم جلوی داورها بشود از آن دفاع کرد. این راهنما برای دانشجوهای کاردانی و کارشناسی برق، کامپیوتر و مکاترونیک نوشته شده که میخواهند یک پروژه دانشجویی میکروکنترلر انجام دهند: از انتخاب موضوع و محدوده تا بلوک دیاگرام، فصلبندی گزارش، ارائه، و در آخر دوازده موضوع مشخص با سطح سختی.
یک پروژهی پایانی خوب چه ویژگیای دارد؟
- یک مسئلهی واقعی را حل میکند: «آبیاری گلخانه بدون حضور کشاورز» بهتر از «کار با سنسور رطوبت» است. داور اول میپرسد «این به چه درد میخورد؟».
- قابل اندازهگیری است: میشود عدد گزارش کرد: دقت، زمان پاسخ، مصرف جریان، درصد خطا. بدون عدد، فصل نتایج خالی میماند.
- محدودهاش مشخص است: میدانی چه چیزی جزو پروژه است و چه چیزی نیست.
- نمایشدادنی است: در ده دقیقهی دفاع میشود روشنش کرد و نشان داد کار میکند.
- سهم خودت در آن روشن است: اگر کل پروژه کپی یک ویدئوی آماده باشد، اولین سؤال داور لویش میدهد.
انتخاب موضوع بر اساس رشته
| رشته | تمرکز پیشنهادی | نمونه |
|---|---|---|
| برق (الکترونیک و قدرت) | طراحی مدار، تغذیه، اندازهگیری دقیق، کنترل | کنتور هوشمند، کنترل دمای PID، ردیاب خورشید |
| کامپیوتر (سختافزار و نرمافزار) | معماری نرمافزار، شبکه، پایگاه داده، امنیت | خانهی هوشمند MQTT، حضور و غیاب RFID با وبسرور |
| مکاترونیک | حرکت، موتور، سنسور و کنترل همزمان | ربات مسیریاب PID، بازوی رباتیک، پارکینگ هوشمند |
یک ترفند ساده: موضوع را از درس یا کارآموزیای انتخاب کن که در آن قویتری. اگر درس کنترل خطی را خوب گذراندهای، یک پروژهی PID انتخاب کن تا فصل مبانی نظریات عمیق شود.
کدام برد؟ AVR، آردوینو، ESP32 یا STM32
در خیلی از دانشگاههای ایران هنوز میکروکنترلر AVR (مثل ATmega32) با CodeVision درس داده میشود و بعضی استادها همین را میخواهند. آردوینو اونو خودش یک ATmega328 است، پس فاصلهی زیادی با AVR ندارد. اگر پروژه وایفای یا وبسرور لازم دارد، ESP32 انتخاب طبیعی است. STM32 برای پروژههایی خوب است که سرعت و تایمرهای پیشرفته میخواهند. قانون طلایی: قبل از خرید، برد را با استاد راهنما قطعی کن. مقایسهی ESP32 و آردوینو اونو و اونو، نانو یا مگا کمک میکند انتخابت را در گزارش هم توجیه کنی.
محدودهبندی: سه لایهی «حداقل، خوب، عالی»
بزرگترین اشتباه دانشجوها موضوع خیلی بزرگ است. پروژه را از اول در سه لایه بنویس و فقط لایهی اول را قول بده:
| لایه | مثال: گلخانهی هوشمند |
|---|---|
| حداقل (حتماً تحویل میدهی) | خواندن رطوبت خاک و دما، روشن کردن پمپ و فن با آستانه، نمایش روی سریال یا LCD |
| خوب (هدف اصلی) | صفحهی وب زنده، حالت دستی و خودکار، محدودیت زمانی ایمنی پمپ |
| عالی (اگر وقت ماند) | ثبت داده روی SD و نمودار مصرف آب، اعلان در گوشی، بدنهی چاپ سهبعدی |
این جدول را در پروپوزال هم بگذار. اگر به لایهی سوم نرسیدی، در فصل «پیشنهادها» مینشیند و نقطهضعف حساب نمیشود.
اول شبیهسازی، بعد خرید
قبل از اینکه پول قطعه بدهی، مدار و کد را در شبیهساز بساز. این کار سه فایده دارد: اشتباه سیمکشی قطعه نمیسوزاند، کد را با ابزارهایی مثل سریال مانیتور، نمودار و دیباگر قدمبهقدم بررسی میکنی، و فهرست قطعهها قبل از خرید قطعی میشود. در تینکرکد فارسی آردوینو اونو و نانو رایگاناند و ESP32، آردوینو مگا و ماژولهای حرفهای با اشتراک Plus اجرا میشوند؛ ابزار «چرا کار نمیکند؟» هم اشکالهای سیمکشی را به فارسی توضیح میدهد. اگر اولین بار است، آموزش شروع کار با شبیهساز و برای دیباگ، دیباگ کد آردوینو در شبیهساز را ببین.
جریان کار پیشنهادی این است:
- هر ماژول را جدا در شبیهساز راه بینداز: سنسور، نمایشگر، موتور.
- ماژولها را یکییکی در یک پروژه جمع کن و هر بار تست کن.
- قطعه بخر و همان مدار را روی بردبورد بساز. نتیجهی واقعی را با شبیهسازی مقایسه کن؛ همین مقایسه یک بخش خوب برای فصل نتایج است.
- در آخر، اگر وقت بود، PCB طراحی کن. راهنمای طراحی PCB آنلاین نقطهی شروع خوبی است.
بلوک دیاگرام: قلب فصل طراحی
هر پروژهی میکروکنترلری از چند بلوک ثابت ساخته میشود. قبل از نوشتن حتی یک خط کد، این جدول را برای پروژهات پر کن و بعد آن را به شکل جعبه و فلش بکش:
| بلوک | سؤالی که جواب میدهد | نمونه در گلخانه |
|---|---|---|
| ورودیها (سنسورها) | دستگاه از دنیا چه چیزی را حس میکند؟ | رطوبت خاک، DHT22، LDR |
| پردازش | کدام میکروکنترلر و چه منطقی؟ | ESP32، ماشین حالت با هیسترزیس |
| خروجیها (عملگرها) | دستگاه چه کاری انجام میدهد؟ | رلهی پمپ، رلهی فن، LED رشد |
| رابط کاربر | کاربر چطور میبیند و فرمان میدهد؟ | صفحهی وب، LCD، دکمه |
| ارتباطات | با چه چیزی و با چه پروتکلی حرف میزند؟ | وایفای، HTTP، MQTT |
| تغذیه | برق از کجا میآید و هر بخش چقدر جریان میکشد؟ | آداپتور ۱۲ ولت، رگولاتور ۵ و ۳٫۳ ولت |
بخش تغذیه را جدی بگیر؛ بیشتر پروژههایی که روز دفاع ریست میشوند، مشکلشان تغذیهی موتور یا رله از همان پایهی ۵ ولت برد است. ابزار محاسبهی عمر باتری برای پروژههای باتریدار به کار میآید.
اسکلت کد پیشنهادی
کد پروژهی پایانی باید خوانا و قابل توضیح باشد. این اسکلت برای آردوینو اونو نوشته شده و سه قانون را رعایت میکند: بدون delay طولانی، هر کار در تابع خودش، و وضعیت دستگاه در یک ماشین حالت. سنسور و خروجی خودت را جای مثالها بگذار.
// Final-project skeleton: non-blocking tasks + a small state machine.
const int SENSOR_PIN = A0;
const int OUTPUT_PIN = 7;
const int LED_PIN = 13;
enum State { IDLE, ACTIVE, FAULT };
State state = IDLE;
int sensorValue = 0;
const int ON_LEVEL = 600; // hysteresis: switch on above this
const int OFF_LEVEL = 500; // and off below this
unsigned long lastRead = 0, lastLog = 0, lastBlink = 0;
void readSensors() {
sensorValue = analogRead(SENSOR_PIN);
}
void updateState() {
if (sensorValue < 5 || sensorValue > 1018) { state = FAULT; return; } // wire cut or shorted
if (state != ACTIVE && sensorValue > ON_LEVEL) state = ACTIVE;
else if (state != IDLE && sensorValue < OFF_LEVEL) state = IDLE;
}
void applyOutputs() {
digitalWrite(OUTPUT_PIN, state == ACTIVE ? HIGH : LOW);
}
void logData() {
Serial.print("value:");
Serial.print(sensorValue);
Serial.print(" state:");
Serial.println(state);
}
void setup() {
Serial.begin(9600);
pinMode(OUTPUT_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
unsigned long now = millis();
if (now - lastRead >= 100) { lastRead = now; readSensors(); updateState(); applyOutputs(); }
if (now - lastLog >= 1000) { lastLog = now; logData(); }
if (now - lastBlink >= 500) { // heartbeat LED: the program is alive
lastBlink = now;
digitalWrite(LED_PIN, digitalRead(LED_PIN) == HIGH ? LOW : HIGH);
}
}
خروجی logData به شکل نام:عدد است تا در نمودار سریال رسم شود و تصویرش مستقیم به فصل نتایج برود. وضعیت FAULT هم یک نکتهی امتیازآور است: نشان میدهد به خرابی سنسور فکر کردهای. برای کار با سریال مانیتور و نمودار، سریال مانیتور و پلاتر را ببین.
زمانبندی یک ترم
| هفته | کار |
|---|---|
| ۱ تا ۲ | انتخاب موضوع، فرم تعریف پروژه، تأیید استاد راهنما و برد |
| ۳ تا ۴ | مطالعه، کارهای مشابه، بلوک دیاگرام و انتخاب قطعه |
| ۵ تا ۷ | شبیهسازی مدار و کد، تست جداگانهی هر ماژول |
| ۸ تا ۱۰ | خرید قطعه، ساخت روی بردبورد، تست واقعی |
| ۱۱ تا ۱۲ | یکپارچهسازی، بدنه یا ماکت، PCB در صورت نیاز |
| ۱۳ تا ۱۴ | آزمایشها و جمعآوری عدد، نوشتن گزارش |
| ۱۵ تا ۱۶ | اسلاید، فیلم پشتیبان، تمرین دفاع |
فصلبندی گزارش پروژه
هر دانشگاه قالب خودش را دارد، پس اول قالب دانشکدهات را بگیر. ولی ساختار رایج گزارش پروژهی کارشناسی در ایران تقریباً این است:
- بخشهای آغازین: صفحهی عنوان، تقدیر، چکیدهی یکصفحهای با چهار تا شش کلیدواژه، فهرست مطالب، شکلها و جدولها.
- فصل اول، کلیات: مقدمه، بیان مسئله، اهداف، محدودهی پروژه (همان جدول سهلایه) و ساختار گزارش.
- فصل دوم، مبانی نظری و پیشینه: اصول کار سنسورها و عملگرها، پروتکلها (I2C، SPI، HTTP یا MQTT)، و مرور چند کار مشابه با مقایسهی آنها.
- فصل سوم، طراحی سختافزار: بلوک دیاگرام، شماتیک، دلیل انتخاب هر قطعه، محاسبات تغذیه و مقاومتها، جدول اتصال پایهها.
- فصل چهارم، طراحی نرمافزار: فلوچارت یا نمودار ماشین حالت، توضیح هر تابع، و قطعهکدهای کلیدی (نه کل کد).
- فصل پنجم، پیادهسازی و نتایج: عکس نمونه، جدول اندازهگیریها، نمودارها، مقایسه با هدفها، مشکلاتی که پیش آمد و راهحلشان.
- فصل ششم، نتیجهگیری و پیشنهادها: چه چیزی به دست آمد و لایهی «عالی» که فرصت نشد.
- منابع و پیوستها: کد کامل، فهرست قطعات (BOM) و بخشهای مهم دیتاشیتها.
برای شکلهای فصل سوم، نمای شماتیک و خروجی فهرست قطعات خود شبیهساز کار را سریع میکند. فقط حواست باشد هر شکل شماره و زیرنویس داشته باشد و در متن به آن ارجاع بدهی.
ارائه و دفاع
- ده تا چهارده اسلاید کافی است: مسئله، هدف، بلوک دیاگرام، سختافزار، نرمافزار، نتایج با عدد، جمعبندی. متن کم، شکل زیاد.
- نمایش زنده را تمرین کن: دستگاه را از شب قبل روشن و تست کن، باتری یا آداپتور اضافه بیاور و یک فیلم پشتیبان از کار کردنش داشته باش.
- در دو دقیقهی اول بگو چه ساختهای و چرا مهم است. داورها اگر از اول بفهمند، بقیه را با حوصله گوش میدهند.
- سهم خودت را صریح بگو: کدام کتابخانه آماده بود و کدام بخش طراحی خودت است.
سؤالهایی که تقریباً همیشه پرسیده میشوند:
- چرا این میکروکنترلر را انتخاب کردی و نه یکی دیگر؟
- مصرف جریان مدار چقدر است و تغذیه را چطور حساب کردی؟
- اگر سنسور خراب شود یا سیمش قطع شود، دستگاه چه میکند؟
- دقت اندازهگیری چقدر است و با چه چیزی مقایسهاش کردی؟
- این پروژه چه فرقی با نمونههای آمادهی اینترنتی دارد؟
۱۲ موضوع پیشنهادی با سطح سختی
| # | موضوع | برد | قطعههای اصلی | سختی |
|---|---|---|---|---|
| ۱ | گلخانهی هوشمند با پایش وب | ESP32 | رطوبت خاک، DHT22، رله | متوسط |
| ۲ | سیستم اعلام حریق و نشت گاز چندسطحی | آردوینو | MQ-2، سنسور دما، بازر، رله | متوسط |
| ۳ | پارکینگ هوشمند با شمارش ظرفیت | آردوینو | دو اولتراسونیک، سروو، LCD | متوسط |
| ۴ | قفل هوشمند RFID و کیپد با ثبت ورود | آردوینو یا ESP32 | RC522، کیپد ۴×۴، EEPROM | متوسط |
| ۵ | دیتالاگر چندکاناله با SD و ساعت واقعی | آردوینو | کارت SD، DS3231، سنسورها | متوسط |
| ۶ | کنترل دمای انکوباتور با PID | آردوینو یا ESP32 | DHT22 یا DS18B20، گرمکن، ماسفت | سخت |
| ۷ | ردیاب خورشید دومحوره و مقایسهی توان | آردوینو | چهار LDR، دو سروو، پنل | سخت |
| ۸ | ربات مسیریاب با کنترل PID | آردوینو | سنسورهای مادون قرمز، L298N، موتور | سخت |
| ۹ | بازوی رباتیک با ضبط و پخش حرکت | آردوینو | چهار سروو، پتانسیومتر، EEPROM | سخت |
| ۱۰ | خانهی هوشمند چندبردی با MQTT | ESP32 | چند ESP32، رله، سنسورها | سخت |
| ۱۱ | سامانهی حضور و غیاب RFID با وبسرور | ESP32 | RC522، RTC، LittleFS | سخت |
| ۱۲ | کنتور هوشمند مصرف برق | ESP32 | سنسور جریان ACS712 یا PZEM، نمایشگر | خیلی سخت |
چند نکته دربارهی این فهرست: موضوع ۱ تا ۳ را با کد کامل نوشتهایم: گلخانه هوشمند با ESP32، اعلام حریق با آردوینو و پارکینگ هوشمند. اینها نقطهی شروعاند، نه پروژهی تحویلی؛ لایهی «خوب» و «عالی» و آزمایشها باید کار خودت باشد. برای موضوع ۷ و ۶ پروژههای آمادهی ردیاب خورشید و کنترل دما با فن (PID) را ببین و برای موضوع ۸، ربات مسیریاب. موضوع ۱۲ با برق شهر سروکار دارد؛ بخش ولتاژ بالا را فقط با نظارت استاد آزمایشگاه بساز. ایدههای بیشتر در ۳۰ ایده پروژه اینترنت اشیا است.
اشتباههای رایج دانشجوها
- موضوع بزرگ، زمان کم: «خانهی هوشمند کامل با هوش مصنوعی» در یک ترم تمام نمیشود. جدول سهلایه را جدی بگیر.
- خرید قطعه قبل از طراحی: نیمی از قطعهها بیاستفاده میمانند و قطعهی لازم را نداری.
- همهچیز در
loopباdelay: دستگاه به دکمه دیر جواب میدهد و داور متوجه میشود. - گزارش در هفتهی آخر: از هفتهی اول عکس بگیر، عددها را ثبت کن و مشکلات را یادداشت کن؛ گزارش خودش جمع میشود.
- بدون فیلم پشتیبان: یک سیم شل روز دفاع کل زحمت را بیاثر میکند.
سؤالهای رایج
آیا استاد راهنما پروژه با آردوینو را قبول میکند؟
بستگی به دانشکده دارد. بیشتر استادها مشکلی با آردوینو یا ESP32 ندارند به شرطی که سهم طراحی خودت روشن باشد: محاسبات، ماشین حالت، آزمایش و تحلیل نتایج. قبل از شروع این را صریح بپرس و اگر AVR یا STM32 خواستند، همان منطق را روی آن پیاده کن.
چقدر زمان برای پروژهی پایانی لازم است؟
برای یک پروژهی متوسط حدود یک ترم با چند ساعت کار در هفته کافی است، به شرط اینکه از هفتهی اول شروع کنی و دو هفتهی آخر را فقط برای گزارش و تمرین دفاع کنار بگذاری.
شبیهسازی کافی است یا باید نمونهی واقعی بسازم؟
برای پروژهی پایانی معمولاً نمونهی واقعی خواسته میشود. شبیهسازی را برای طراحی، دیباگ و ساختن فصلهای طراحی گزارش استفاده کن و بعد مدار را روی بردبورد یا PCB بساز و نتایج اندازهگیری واقعی را گزارش کن.