پروژه الکترونیکپروژه خانه هوشمندپروژه های آردوینو

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

سلام. پروژه آردوینو خانه هوشمند با اس ام اس (GSM Sim900 , Arduino , SMS) را آماده کردیم. برای این پروژه هیچ نیازی به یک گوشی هوشمند جدید نیست و حتی با قدیمی ترین گوشی هایی که از GSM پشتیبانی میکنند هم میتوانیم وسایل را کنترل کنیم. فیلم عملکرد مدار را از دست ندید !

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

پروژه آردوینو خانه هوشمند با اس ام اس (GSM Sim900 , Arduino , SMS)
پروژه آردوینو خانه هوشمند با اس ام اس (GSM Sim900 , Arduino , SMS)

وقتی که ما دستورات را از طریق اس ام اس به ماژول GSM موبایل ارسال میکنیم ، GSM Sim900 این دستورات را دریافت میکند و آن ها را به آردوینو میفرستد. در این هنگام آردوینو این متن را میخواند و دستور مطابق با آن را اجرا میکند و طبق آن دستور یکی از رله ها را فعال میکند. همچنین نتیجه به ال سی دی کاراکتری 16*2 که در مدار قرار دادیم ارسال و نمایش داده میشود. ما در اینجا بجای وسایل خانه از 3 لامپ استفاده کردیم که هر کدام نشان دهنده فن ، لامپ و تلویزیون است.

نحوه ارسال دستورات با SMS به آردوینو

در این پروژه ما از یک برد آردوینو برای کنترل کل فرآیند استفاده کردیم .در اینجا ما از دستوراتی مثل :

#A.light on* یا #A.light off*

این دستورات به برد Sim900 فرستاده میشود و سپس آردوینو این دستورات رو میخواند و عمل مناسب با آن دستورات را انجام میدهد.(با توجه به دستور رله مورد نظر را فعال / غیر فعال میکند).

در اینجا ما برای دستورات یک پیشوند #A استفاده کردیم. این پیشوند را برای شناسایی شروع فرمان استفاده میکنیم. و در انتهای پیام * رو قرار میدهیم تا انتهای دستور مشخص شود.

این پروژه آردوینو از 3 لامپ کوچک 3 وات به عنوان وسایل خانه استفاده شده است. که نشان دهنده فن، لامپ و تلویزیون است.
لیست دستورات رو میتوانید در جدول زیر ببینید :

شماره پیام ارسالی عملکرد
1 #A.fan on* فن روشن
2 #A.fan off* فن خاموش
3 #A.light on* لامپ روشن
4 #A.light off* لامپ خاموش
5 #A.tv on* تلویزیون روشن
6 #A.tv off* تلویزیون خاموش
7 #A.all on* همه روشن
8 #A.all off* همه خاموش
توجه داشته باشید که میتوانید هر دستگاه دیگر و هر کد و دستور دیگری را برای این پروژه تعریف کنید !

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

شماتیک کامل مدار در فایل دانلودی قرار داده شده است. اتصالات مدار خانه هوشمند مبتنی بر GSM بسیار ساده است ، در اینجا از یک نمایشگر ال سی دی کاراکتری برای نمایش وضعیت لوازم خانگی استفاده کرده ایم که به طور مستقیم در حالت 4 بیتی به آردوینو متصل می شود. پین های داده ال سی دی یعنی RS، EN، D4، D5، D6، D7 به پین دیجیتالی آردوینو شماره 6 ، 7 ، 8 ، 9 ، 10 ، 11 وصل می شوند. رله های 5 ولت SPDT 3 برای کنترل لامپ ، فن و تلویزیون استفاده به ترتیب به پین شماره 3 ، 4 و 5 از طریق درایور رله ULN2003 وصل می شوند.

قطعات مورد نیاز این پروژه خانه هوشمند

شماتیک خانه هوشمند با SMS برد آردوینو

  • آردوینو Uno
  • ترانزیستور ULN2003
  • رله 5V
  • ماژول GSM Sim900
  • لامپ
  • ال سی دی کاراکتری 16*2
  • تلفن همراه
  • کامپایلر آردوینو : دانلود آردوینو

همچنین ببینید : پروژه آردوینو خانه هوشمند کنترل وسایل خانه با بلوتوث

اگر میخواهید آردوینو را به صورت اصولی و پروژه محور (برنامه نویسی حرفه ای، ارتباط آردوینو با اندروید، ساخت ربات با آردوینو) یاد بگیرید، روی دوره آموزش آردوینو کلیک کنید.

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

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

#include<LiquidCrystal.h> // کتابخانه ال سی دی کاراکتری
LiquidCrystal lcd(6,7,8,9,10,11); //پین های ال سی دی کاراکتری
#define Fan 3 // تنظیم پین فن
#define Light 4 // تنظیم پین لامپ
#define TV 5 // تنظیم پین تلویزیون

همانطور که در بالا تر توضیح دادیم ، ما برای شروع دستور از #A. و برای پایان دستور * را استفاده میکنیم. با این قسمت از کد شما میتوانید دستور آغازی و پایانی را تغییر دهید :

    if(Serial.find("#A.")) // ارسال دستور #A.
    {
      digitalWrite(led, HIGH); // ال ای دی روشن شود
      delay(1000); // به مدت یک ثانیه
      digitalWrite(led, LOW); // سپس ال ای دی خاموش شود
      while (Serial.available()) 
      {
      char inChar=Serial.read();
      str[i++]=inChar;
      if(inChar=='*') // دستور پایان *
      {
        temp=1;
        return;
      }

نحوه تعریف یک دستگاه در کد برای روشن و خاموش کردن

کد زیر برای قسمت روشن و خاموش کردن تلویزیون استفاده میشود. ما تعریف میکنیم که :

void check()
{
   if(!(strncmp(str,"tv on",5))) //هنگامی که دستور ارسال شد tv on
    {
      digitalWrite(TV, HIGH); // پین که برای تلویزیون تعریف کردیم روشن شود
      lcd.setCursor(13,1); // مکان نمایش روی ال سی دی
      lcd.print("ON    "); کلمه on
      delay(200);
    }  
   
   else if(!(strncmp(str,"tv off",6))) // هنگامی که دستور ارسال شد tv off
    {
      digitalWrite(TV, LOW); // پین که برای تلویزیون تعریف کردیم خاموش شود
      lcd.setCursor(13,1);  // مکان نمایش روی ال سی دی
      lcd.print("OFF    "); // کلمه off
      delay(200);
    }

به همین ترتیب میتوانید دستگاه ها و دستورات آن ها را تغییر دهید و اضافه کنید !

موارد موجود در فایل : شماتیک کامل ، فایل Hex ، فایل آردوینو ، و …

پروژه ها رایگان هستند. برای دانلود فایل های پروژه باید در سایت عضو باشید. ثبت نام / ورود

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

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

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. مالکیتی بر مطالب ارائه شده ندارم. اکثر فعالیت بنده در زمینه ترجمه است. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

29 نظر

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

    1. سلام جناب. از چه مدل ماژول GSM استفاده میکنید و اتصالات رو دقیقا مشابه متصل کردید؟ همچنین لطف کنید با اکانتی که پروژه رو دانلود کردید در سایت وارد بشید و سپس سوالتون رو بفرمایید.

      1. آقای مهندس عزیز از ماژول sim900a استفاده کردم . و اتصالات دقیقا همانطور استفاده شده است

        1. جناب دستورات ارسالی رو به دو صورت زیر امتحان کنید.
          #A.fan on*
          *A.fan on#

        2. آقای مهندس … مشکل این نیست من حتی کنترل #A. و * را عوض کردم ودر مرحله ای اونا را حذف کردم . یعنی بدون هر گونه کنترل دستورات رو خوندم . فقط یکبار دستور اجرا میشه و اگر بار دوم دستوری رو ارسال کنیم اون دستور توسط ماژول sim900 بوسیله چشمک led مشخصه که دریافت میشه ولی توسط آردوینو اجرا نمیشه . در صورتیکه آردوینو رو ریست کنیم و یک پیام جدید بفرستیم بجای اجرا این دستور ، دستور قبلی که توی مرحله اول مرنبه دوم ارسال کردیم ، اجرا میشه .
          دستور Serial.println(“AT+CMGDA=DEL ALL”);
          رو هم آخر تابع check و تو یه مرحله انتهای setup قرار دادم تا sms های موجود رو پاک کنه و sms های جدید رو دریافت و اجرا کنه بازم نشد .

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

        3. دوستان زیادی از این کد استفاده کردند و من این مشکل رو تا بحال مشاهده نکردم. خب مشکل شما باید حل بشه اما حقیقتا من دارم فکر میکنم و راه حلی به ذهنم نمیرسه.

        4. سلام مجدد و ممنون از زحمت
          کارهایی که انجام داده ام:
          1-من سیم کارت ایرانسل داشتم اونرو با رایتل عوض کردم … فرقی نکرد.
          2- از sim800l استفاده کردم … فرقی نکرد.
          3- از اداپتور 7 ولت 3 امپر + ماژول کاهنده lm2596 و کاهش ولتاژ به 5 ولت و در مورد sim800l
          کاهش ولتاژ به حدود 4 ولت استفاده کردم … فرقی نکرد.
          ** جالبه که با هر دو ماژول 800 و 900 sim و سیم کارت و از طریق مبدل ttl به usb ویا از طریق همین آردوینو میشه sms ارسال و یا دریافت کرد.
          تنها موردی که ذهنمو مشغول کرده تعویض آردوینو uno هست (ممکنه تاثیر داشته باشه ), که ندارم و یه برد آردوینو nano دارم اگه بشه از اون استفاده کنم .
          لطفا اگر موردی جهت راهنمایی بود بفرمایید .
          موفق باشید

        5. سلام جناب. به ذهنم مورد خاصی نمیرسه. سعی میکنم این پروژه رو با کد جدید در سایت قرار بدم و خدمتتون اعلام خواهم کرد.

  2. سلام مهندس ممنون از جواب .
    فقط یک سوال دیگر اینکه میشه رله ها را لحظه ای کرد کجای کد را باید تغییر دهیم

    1. منظورتون رو متوجه نشدم، منظورتون از رله لحظه ای چیه؟

      1. منظورم از رله لحظه ای این است که
        مثلاً من پیامک را ارسال کنم رله فقط برای 2 ثانیه روشن بشه و بعد خاموش بشه

        1. فقط باید یک دستور
          delay(3000)
          را به شرط اضافه کنید.

        2. من واقعا عذر خواهی میکنم که تعداد سوالات زیادی از شما میپرسم .
          ببخشید من برنامه نویسی زیاد بلد نیستم .
          میشه شما خودتان در قسمتی از کد که قرار است رله 1 بصورت لحظه ای روشن شود را ایجاد کنید و برام بفرستید .
          که من هم طبق کاری که در کد انجام دادید بقیه رله ها را مطابق با سلیقه خودم لحظه ای کنم .

        3. جناب در حال حاضر درگیر دوره آموزش آردوینو هستم و حقیقتا وقت نمیکنم. تغییر زیادی در کد نیاز نیست فقط بایستی دستور delay رو به قسمت به طور مثال tv on اضافه کنید.

  3. سلام مهندس
    من یک سوال داشتم .
    میخواستم بدونم که اگر من فرمان روشن کردن رله اول را برای مدار بفرستم .
    بعد از اینکه مدار فرمان را گرفت و رله اول را روشن کرد .
    ایل برای من پیامکی مبنی بر اینکه رله اول روشن شد میفرستد ؟؟

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

        1. میشه بگید فقط باید کجای کد چه چیزی بنویسم و تغییر دهم تا خودم انجام دهم

        2. توابع برنامه نویسی آردوینو برای sim900 رو بررسی کنید. در کد حلقه های if هست که با توجه به نوع پیام دریافتی، یک رله رو فعال میکنه. شما باید در اون قسمت، کد ارسال پیام تایید به شماره تعیین شده رو قرار بدید.

  4. سلام جناب رحیمی صفحه پرداخت کار نمیکنه شماره کارت بزارین . با چندین مرورگر امتحان کردم نشد .. ممنونم

    1. سلام . چک کردم کار میکنه ، اگه فیلتر شکن دارید خاموشش کنید و اگه حل نشد با اینترنت دیگه ای امتحان کنید

  5. سلام خسته نباشید بی زحمت فایل پروتیوس رو هم برام ارسال کنید برای تحویل پروژه لازم دارم ممنون

  6. سلام
    اگر خواسته باشیم با ماژول GSM800 کار کنم توی برنامه چه تغییری باید بدم .ممنون

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

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