پروژه آردوینو خانه هوشمند با SMS (کنترل وسایل پیامکی)

در دنیای امروز، خانههای هوشمند به سرعت در حال فراگیر شدن هستند. یکی از سادهترین و اقتصادیترین روشها برای کنترل وسایل خانه، استفاده از آردوینو و پیامک (SMS) است. با این روش، حتی بدون اینترنت میتوانید وسایل برقی خود را از راه دور روشن یا خاموش کنید. این مقاله شما را با اصول، سختافزار مورد نیاز و نحوه پیادهسازی این سیستم آشنا میکند.
کنترل وسایل خانه با SMS چند مزیت مهم دارد:
- دسترسی بدون اینترنت: برخلاف سیستمهای مبتنی بر Wi-Fi، پیامک نیاز به اینترنت ندارد و تقریباً از هر نقطهای قابل استفاده است.
- سادگی و هزینه کم: با استفاده از آردوینو و ماژول GSM میتوانید سیستم هوشمند سادهای بسازید که هزینه بسیار کمتری نسبت به خانههای هوشمند کامل دارد.
- کنترل چندگانه: با ارسال پیامکهای متفاوت میتوان چندین وسیله مختلف را کنترل کرد، مانند چراغها، فنها یا سیستمهای امنیتی.
پروژه نمونه کنترل وسایل پیامکی آردوینو
هدف از این پروژه، کنترل وسایل الکتریکی از طریق پیامک با استفاده از ماژول GSM و برد Arduino است. در این سامانه، کاربر میتواند با ارسال پیامکهایی شامل دستورهای مشخص (مانند RELAY1 ON یا RELAY2 OFF) دو خروجی مختلف (به عنوان مثال دو رله) را روشن یا خاموش نماید. آردوینو با دریافت پیامک از طریق ماژول GSM، متن آن را تحلیل کرده و بر اساس محتوای پیام، فرمان مناسب را به پایههای خروجی ارسال میکند. در نهایت نیز سیستم پاسخی حاوی تأیید انجام عملیات برای فرستنده ارسال مینماید.
این نوع سیستمها در هوشمندسازی منازل، کنترل از راه دور تجهیزات، و کاربردهای صنعتی سبک بسیار رایجاند.
سختافزار مورد نیاز
- آردوینو Uno یا Mega
- ماژول GSM (SIM800/SIM900)
- ماژول رله 2 کاناله (دو وسیله قابل کنترل)
- سیمکشی و منبع تغذیه مناسب
سیم کشی پروژه
تصویر زیر اتصالات این پروژه را نشان میدهد. اتصالات نسبتا ساده است و میتوانید به اندازه مورد نیاز رله اضافه کنید. سپس میتوانید دستگاه های منزل خود را به رله متصل کنید. برای یادگیری نحوه اتصال وسایل به رله، مقاله آموزش رله را مشاهده کنید.

- پایه D2 آردوینو → ورودی رله 1
- پایه D3 آردوینو → ورودی رله 2
- پایه TX ماژول GSM → RX آردوینو
- پایه RX ماژول GSM → TX آردوینو
- GND و VCC ماژول GSM به آردوینو و منبع تغذیه
کد پروژه خانه هوشمند با SMS آردوینو
کد کامل پروژه در فایل دانلودی انتهای صفحه قرار داده شده است. در این جا قسمت های مهم کد را توضیح میدهیم تا درک آن برای شما آسان باشد و بتوانید مطابق نیاز خود آن را شخصی سازی کنید.
1. فراخوانی کتابخانهها و تعریف پایهها
#include <GSM.h> #define PINNUMBER "" #define RELAY1 2 #define RELAY2 3
- دستور
#include <GSM.h>کتابخانهی رسمی آردوینو برای کار با ماژولهای GSM را فراخوانی میکند. این کتابخانه شامل توابعی برای اتصال به شبکه، ارسال و دریافت پیامک، و برقراری ارتباط داده است. PINNUMBERدر صورتی استفاده میشود که سیمکارت دارای قفل PIN باشد؛ در غیر این صورت، رشتهی خالی قرار میگیرد.- پایههای دیجیتال
2و3به عنوان خروجی برای کنترل رلهها (یا سایر تجهیزات) تعریف شدهاند.
2. ایجاد اشیاء برای مدیریت ارتباط GSM و پیامک
GSM gsmAccess;
GSM_SMS sms;
دو آبجکت از کلاسهای موجود در کتابخانه GSM تعریف میشود:
gsmAccess: وظیفهی مدیریت اتصال به شبکه GSM (راهاندازی ماژول و ثبت در شبکه).sms: برای ارسال و دریافت پیامکها بهکار میرود.
3. تابع راهاندازی (setup)
void setup() {
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
Serial.begin(9600);
boolean notConnected = true;
while(notConnected) {
if(gsmAccess.begin(PINNUMBER) == GSM_READY) {
notConnected = false; }
else {
Serial.println("در حال تلاش برای اتصال...");
delay(1000); }
}
Serial.println("GSM متصل شد. آماده دریافت پیامک.");
} - پایههای خروجی برای رلهها در حالت خروجی (
OUTPUT) تنظیم میشوند. - در ابتدای کار، هر دو خروجی خاموش نگه داشته میشوند تا از روشن شدن ناخواستهی وسایل جلوگیری شود.
- ارتباط سریال با سرعت 9600 بیتبرثانیه برای نمایش وضعیت در مانیتور سریال فعال میشود.
- حلقهی
while(notConnected)تا زمانی ادامه دارد که ماژول GSM به شبکه متصل نشده باشد. پس از موفقیت در ثبت در شبکه، پیام “GSM متصل شد” در خروجی سریال چاپ میشود.
4. حلقهی اصلی برنامه (loop)
تابع sms.available() بررسی میکند که آیا پیامک جدیدی دریافت شده است یا خیر.
در صورت وجود پیامک، کاراکترهای آن بهصورت حلقهای خوانده میشوند و در متغیر textMessage ذخیره میگردند.
پس از خواندن، تابع sms.flush() حافظهی موقت پیام را پاک میکند تا آمادهی دریافت پیام بعدی باشد.
دستور trim() فاصلههای خالی ابتدا و انتهای متن را حذف میکند.
متن پیامک با چهار دستور قابل قبول مقایسه میشود:
"RELAY1 ON"→ فعالسازی خروجی شماره 1"RELAY1 OFF"→ غیرفعالسازی خروجی شماره 1"RELAY2 ON"→ فعالسازی خروجی شماره 2"RELAY2 OFF"→ غیرفعالسازی خروجی شماره 2
در هر مورد، علاوه بر تغییر وضعیت خروجی، پیام تأییدی با استفاده از تابع sendReply() برای فرستنده ارسال میگردد.
5. تابع ارسال پاسخ به فرستنده
void sendReply(String message) {
sms.beginSMS(sms.remoteNumber());
sms.print(message);
sms.endSMS();
Serial.println("پاسخ ارسال شد: " + message);
} - تابع
sms.remoteNumber()شمارهی فرستندهی آخرین پیام دریافتی را برمیگرداند. - با استفاده از توابع
beginSMS(),print(), وendSMS()متن پاسخ برای همان شماره ارسال میشود. - برای اهداف عیبیابی، متن پاسخ در مانیتور سریال نیز چاپ میگردد.
نکات فنی و بهبودهای پیشنهادی
- کنترل دسترسی: میتوان بررسی شمارهی فرستنده را اضافه کرد تا فقط شمارههای مجاز توانایی کنترل داشته باشند.
- بیتفاوتی نسبت به حروف کوچک و بزرگ: بهتر است قبل از مقایسه، از دستور
textMessage.toUpperCase()استفاده شود. - ذخیرهی امن شمارهی فرستنده: پیش از اجرای
sms.flush()شمارهی فرستنده در متغیری جدا ذخیره گردد تا از حذف ناگهانی آن جلوگیری شود. - پایداری حافظه: استفادهی طولانی از نوع دادهی
Stringممکن است منجر به تکهتکه شدن حافظه در بردهای دارای رم محدود مانند آردوینو Uno شود. - تغذیهی ماژول GSM: منبع تغذیه باید قادر به تأمین جریان لحظهای تا حدود 2 آمپر باشد تا از ریست ناگهانی جلوگیری شود.
- سازگاری با انواع رله: در برخی ماژولها، رله در حالت منطقی LOW فعال میشود. بنابراین قبل از اتصال بار اصلی، باید این مورد تست گردد.
نکات امنیتی
هنگامی که وسایل برقی از راه دور کنترل میشوند، رعایت نکات ایمنی ضروری است:
- هرگز سیمهای برق مستقیم را بدون استفاده از رله به آردوینو متصل نکنید.
- مطمئن شوید که سیمکشی و اتصالات عایقبندی شده باشند.
- برای جلوگیری از کنترل غیرمجاز، میتوانید شمارههای خاصی را مجاز به ارسال فرمان کنید.
توسعه و بهبود سیستم
پس از راهاندازی اولیه، میتوانید امکانات بیشتری به سیستم اضافه کنید:
- کنترل چند وسیله: با استفاده از چند رله، میتوان چندین وسیله برقی را با پیامک کنترل کرد.
- زمانبندی خودکار: برنامهنویسی برای روشن یا خاموش کردن وسایل در ساعات مشخص.
- سیستم هشدار: با سنسورهای دما یا دود میتوان هشدارهای امنیتی از طریق پیامک دریافت کرد.
مزایای عملی این سیستم
- دسترسی فوری: حتی زمانی که خارج از خانه هستید، میتوانید چراغها یا سیستم گرمایش را روشن کنید.
- صرفهجویی در انرژی: میتوانید وسایل را تنها در مواقع نیاز روشن کنید و از هدر رفتن انرژی جلوگیری کنید.
- قابلیت سفارشیسازی: با تغییر برنامه آردوینو، میتوانید سیستم را دقیقاً مطابق نیاز خود شخصیسازی کنید.

جمعبندی
کنترل وسایل خانه با پیامک و آردوینو یک راهکار اقتصادی و کاربردی برای هوشمندسازی خانه است. با استفاده از آردوینو، ماژول GSM و رلهها، میتوان از راه دور وسایل برقی را روشن و خاموش کرد و حتی سیستم هشدار دریافت نمود. این روش برای افرادی که به دنبال راهحل کمهزینه و بدون نیاز به اینترنت هستند، ایدهآل است.
راهاندازی این سیستم علاوه بر کاربردی بودن، فرصتی مناسب برای یادگیری میکروکنترلرها، برنامهنویسی و الکترونیک عملی فراهم میکند و میتواند اولین قدم شما در مسیر خانههای هوشمند باشد.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود










سلام برای این پروژه همون ولتاژ اردینو برا ماژول سیم کارت کافیه؟ برا ساخت این پروژه این روش پاسخ گوست؟
با توجه به آنتن دهی منطقه شما و اپراتور ممکن است کافی باشد و ممکن است خیر
سلام ماژول سیم کارت ازتون خریدم برا تست پروژه از خود اردینو به ماژول تغذیه بدم کافیه؟
سلام عزیز
برای تست دستورات AT مناسب است ولی برای اتصال به شبکه و برقراری تماس پیشنهاد میشود از منبع تغذیه خارجی استفاده کنید.
برای کار آزمایش گاهی پاسخ گو هس؟
با توجه به آنتن دهی منطقه شما و اپراتور ممکن است پاسخگو باشد و ممکن است خیر
سلام تو نقشه ماژول به تغذیه آردوینو وصل شده مگه آردوینو 2 آمپر میده ؟؟؟!!
سلام عزیز
برای اهداف تست پروژه کافی است.
کتابخانه gsm رو اد میکنم بازم همون ارور میده خواهشن کمک کنیداینم ایدی تلگرامم هزینه اش هم باشه میدم فقط کمک کنید rezathop
متن ارور را ارسال کنید
متن ارور این
C:\Users\Reza\OneDrive\تصاویر\sketch_nov1a\sketch_nov1a.ino:1:10: fatal error: GSM.h: No such file or directory
compilation terminated.
exit status 1
Compilation error: GSM.h: No such file or directory
کتابخانه رو از داخل خود برنامه اردینو دان کردم فکر کنم ولی باز این خطا میده البته از توی اون سایت که گفتید نتونستم دانلود کنم شما به ایدی تلگرامم یه پیام بدید راهنمایی کنید هزنیشم میدم ولی واسه فردا لازم دارم.
سلام عزیز
نام پوشه ها را از فارسی به انگلیسی تغییر بدهید و یکبار دیگر نرم افزار آردوینو را نصب کنید
چطوری تغیر بدم مهندس من فردا باید گزارش بدم خواهشن توی تلگرام بهم پیام بده یا بهم توضیح کامل بده با تشکر فراوان
تغیر دادم هم بازم نشد
بنظر میرسد مشکل از سمت ویندوز شما باشد و باید بررسی بیشتر شود
سلام خسته نباشید این ارور رو میده نمیزاره Compilation error: GSM.h: No such file or directory خواهشن کمک کنید نیاز دارم واسه پس فردا
سلام عزیز
از این لینک دریافت کنید
https://docs.arduino.cc/retired/archived-libraries/GSM/نمیتونم پیدا کنم میشه بیشتر راهنمایی کنید واقعا لازم دارم
کافیست در لینک داده شده کتابخانه را دانلود کنید.
سیم کارت ایرانسل بزارم یا همراه اول؟؟
هر طور خودتان مایل هستید.
سلام از سیم 800L استفاده کنم مشگلی نیست ؟؟به ماژول سیم کارت وقتی سیم کارت داخلش میزارم احتیاجی هست شمارش در برنامه بنویسم یا نه؟ یا اینکه مثال برای هر کدوم از رله ها براخاموش و روشن پیام offو on ارسال کنیم به سیم کارت ماژول؟؟ لطفاً راهنمایی کنید
سلام عزیز
بله میتوانید استفاده کنید
خیر نیازی نیست شماره تعریف کنید
سلام وقت بخیر میخواستم بدونم داخل مدار قسمت منبع سینوسی چی استفاده شده ؟!
یا چیزی استفاده نشده؟!
آیا میشه از ماژول رله آماده استفاده کرد وترانزیستور را حذف کرد اگه میشه بگید ماژول رله چطوری باید نصب بشه؟
سلام عزیز
در تصویر شماتیک از رله استفاده شده است
سلام
من آموزش ساخت یک سیستمی رو میخواستم که مثل یک گوشی ساده باشه و بلوتوث هم داشته باشه و بتونه باهاش تماس بگیرم با اردوینو هم باشه.چنین آموزشی تو سایتتون ندارید.
سلام عزیز، دوره آموزش آردوینو رو مشاهده کنید.
سلام
برقشو کجا وصل کنم؟
این مدار مقاومت ۱۰ کیلو اهم داره یا نه؟چون تو تصویر گوشه چپ بالا دیدم؟
مقاومت 10 کیلو اهم هست
تامین برق از سمت آردوینو انجام میشه
همچنین فکر میکنم این پروژه منسوخ شده باشه
سلام
آردوینو R3،Uno باشه؟
سلام عزیز، تفاوتی بین مدل های مختلف Uno وجود نداره.
سلام،من دو سوال داشتم:
۱:در تصویر شماتیک یک مستطیل شکلی هست که زیرش نوشتسrv1 و در بالاش نوشتس 10k آیا اون خازن ۱۰ کیلو اهم هستش؟
۲:من برقش رو از کجا تامین کنم؟
سلام عزیز
مقاومت 10 کیلو اهم هست
تامین برق از سمت آردوینو انجام میشه
همچنین فکر میکنم این پروژه منسوخ شده باشه
سلام ببخشید میشه در مورد کد strncmp ی توضیحی بدید که چیکار میکنه؟؟؟؟؟؟؟
با سلام و عرض خسته نباشید
احتراما امکان خرید پروژه آردوینو خانه هوشمند با اس ام اس وجود دارد؟ و در صورت امکان هزینه آن چقدر است؟ با تشکر
سلام جناب. تصویر شماتیک و کد پروژه به طور کامل قرار داده شده است. ما پروژه سفارشی انجام نمیدیم فعالیتمون آموزشی هست.
#error directive: alphanumeric lcd library not set in the project configuration
سلام
لطفا کمک کنید ؟
این کد برای آردوینو هست، با کدویژن کار میکنین؟
برای شماره ایرانسل از چه دستوری بنویسم؟ راهنمایی کنید
سلام … خسته نباشید
لطفا بفرمایید به چه علت تنها پیام اول اجرا میگردد و پیامهای بعدی هیچ تغییری در وضعیت هیچکدام از اصطلاحا رله ها نمیدهد ؟ و بعد از ریست آردوینو و فرستادن اس ام اس جدید بجای اجرای اس ام اس جدید ، اس ام اس دوم قبل از ریست کردن آردوینو اجرا میگردد و مجددا اس ام اس های بعدی تا ریست مجدد آردوینو اجرا نمیشود .انگار که اس ام اس های ارسالی در صف قرار میگیرند و با هر بار ریست آردوینو ، اس ام اس بعدی به ترتیب اجرا میگردد.
ممنون از زحمت
سلام جناب. از چه مدل ماژول GSM استفاده میکنید و اتصالات رو دقیقا مشابه متصل کردید؟ همچنین لطف کنید با اکانتی که پروژه رو دانلود کردید در سایت وارد بشید و سپس سوالتون رو بفرمایید.
آقای مهندس عزیز از ماژول sim900a استفاده کردم . و اتصالات دقیقا همانطور استفاده شده است
جناب دستورات ارسالی رو به دو صورت زیر امتحان کنید.
#A.fan on*
*A.fan on#
آقای مهندس … مشکل این نیست من حتی کنترل #A. و * را عوض کردم ودر مرحله ای اونا را حذف کردم . یعنی بدون هر گونه کنترل دستورات رو خوندم . فقط یکبار دستور اجرا میشه و اگر بار دوم دستوری رو ارسال کنیم اون دستور توسط ماژول sim900 بوسیله چشمک led مشخصه که دریافت میشه ولی توسط آردوینو اجرا نمیشه . در صورتیکه آردوینو رو ریست کنیم و یک پیام جدید بفرستیم بجای اجرا این دستور ، دستور قبلی که توی مرحله اول مرنبه دوم ارسال کردیم ، اجرا میشه .
دستور Serial.println(“AT+CMGDA=DEL ALL”);
رو هم آخر تابع check و تو یه مرحله انتهای setup قرار دادم تا sms های موجود رو پاک کنه و sms های جدید رو دریافت و اجرا کنه بازم نشد .
در ضمن اگر صلاح دیدید بدلیل طولانی بودن پیامها ، از دید من ایرادی نداره که اونها رو منتشر نکنین. چون ظاهرا این ایراد شخصی شده و دوستان دیگه مشکلی ندارن .
موفق باشید
دوستان زیادی از این کد استفاده کردند و من این مشکل رو تا بحال مشاهده نکردم. خب مشکل شما باید حل بشه اما حقیقتا من دارم فکر میکنم و راه حلی به ذهنم نمیرسه.
سلام مجدد و ممنون از زحمت
کارهایی که انجام داده ام:
1-من سیم کارت ایرانسل داشتم اونرو با رایتل عوض کردم … فرقی نکرد.
2- از sim800l استفاده کردم … فرقی نکرد.
3- از اداپتور 7 ولت 3 امپر + ماژول کاهنده lm2596 و کاهش ولتاژ به 5 ولت و در مورد sim800l
کاهش ولتاژ به حدود 4 ولت استفاده کردم … فرقی نکرد.
** جالبه که با هر دو ماژول 800 و 900 sim و سیم کارت و از طریق مبدل ttl به usb ویا از طریق همین آردوینو میشه sms ارسال و یا دریافت کرد.
تنها موردی که ذهنمو مشغول کرده تعویض آردوینو uno هست (ممکنه تاثیر داشته باشه ), که ندارم و یه برد آردوینو nano دارم اگه بشه از اون استفاده کنم .
لطفا اگر موردی جهت راهنمایی بود بفرمایید .
موفق باشید
سلام جناب. به ذهنم مورد خاصی نمیرسه. سعی میکنم این پروژه رو با کد جدید در سایت قرار بدم و خدمتتون اعلام خواهم کرد.
و اینکه توضیح کامل دهید که دستور را در کجای کد باید بنویسم
سلام مهندس ممنون از جواب .
فقط یک سوال دیگر اینکه میشه رله ها را لحظه ای کرد کجای کد را باید تغییر دهیم
منظورتون رو متوجه نشدم، منظورتون از رله لحظه ای چیه؟
منظورم از رله لحظه ای این است که
مثلاً من پیامک را ارسال کنم رله فقط برای 2 ثانیه روشن بشه و بعد خاموش بشه
فقط باید یک دستور
delay(3000)را به شرط اضافه کنید.
من واقعا عذر خواهی میکنم که تعداد سوالات زیادی از شما میپرسم .
ببخشید من برنامه نویسی زیاد بلد نیستم .
میشه شما خودتان در قسمتی از کد که قرار است رله 1 بصورت لحظه ای روشن شود را ایجاد کنید و برام بفرستید .
که من هم طبق کاری که در کد انجام دادید بقیه رله ها را مطابق با سلیقه خودم لحظه ای کنم .
جناب در حال حاضر درگیر دوره آموزش آردوینو هستم و حقیقتا وقت نمیکنم. تغییر زیادی در کد نیاز نیست فقط بایستی دستور delay رو به قسمت به طور مثال tv on اضافه کنید.
سلام مهندس
من یک سوال داشتم .
میخواستم بدونم که اگر من فرمان روشن کردن رله اول را برای مدار بفرستم .
بعد از اینکه مدار فرمان را گرفت و رله اول را روشن کرد .
ایل برای من پیامکی مبنی بر اینکه رله اول روشن شد میفرستد ؟؟
سلام جناب. خیر به اینصورت نیست اما میتونید تعیین کنید که پیامی مبنی بر تایید براتون ارسال بشه.
میشه بگید چطوری
و لطفاً در موردش کامل توضیح دهید
ممنون
در حال حاضر روی دوره آموزش آردوینو کار میکنم و وقت ندارم این مسئله رو براتون انجام بدم. خودتون باید تغییرش رو انجام بدید.
میشه بگید فقط باید کجای کد چه چیزی بنویسم و تغییر دهم تا خودم انجام دهم
توابع برنامه نویسی آردوینو برای sim900 رو بررسی کنید. در کد حلقه های if هست که با توجه به نوع پیام دریافتی، یک رله رو فعال میکنه. شما باید در اون قسمت، کد ارسال پیام تایید به شماره تعیین شده رو قرار بدید.
سلام جناب رحیمی صفحه پرداخت کار نمیکنه شماره کارت بزارین . با چندین مرورگر امتحان کردم نشد .. ممنونم
سلام . چک کردم کار میکنه ، اگه فیلتر شکن دارید خاموشش کنید و اگه حل نشد با اینترنت دیگه ای امتحان کنید
سلام خسته نباشید بی زحمت فایل پروتیوس رو هم برام ارسال کنید برای تحویل پروژه لازم دارم ممنون
سلام
فایل پروتئوس نداره ، فقط تصویر شماتیک
سلام
اگر خواسته باشیم با ماژول GSM800 کار کنم توی برنامه چه تغییری باید بدم .ممنون
سلام
سیم 900 بخری دردسرش کمتره !
عالیه ممنون
ممنون خیلی خوب بود
این کد باشیم 800 L میشه انجام داد ؟ شماره تماس کجای کد وارد کنیم؟؟
بله