آردوینو سیم کارت GSM - GPRS پروژه های آردوینو

طراحی و پیاده سازی محافظ برق DC تنظیم ولتاژ و هشدار پیامک SIM800L

create-dc-voltage-protection-system-with-lm2596-arduino-and-sim800l-sms-digispark
نوشته شده توسط معین صابری

نوسانات برق همواره یکی از عوامل جدی در آسیب رساندن به تجهیزات برقی به شمار رفته است. با افزایش و یا کاهش ولتاژ، حتی برای چند لحظه، دستگاه های مختلف آسیب های بسیار جدی خواهند دید. همانطور که اطلاع دارید، وسایل برقی مختلف دارای بازه ولتاژ کاری مشخصی هستند. به عنوان نمونه یک موتور الکتریکی را در نظر بگیرید. این موتور در یک ولتاژ تعریف شده، بیشترین بهره وری و ایمن ترین وضعیت کاری را خواهد داشت. حال در صورت افزایش ولتاژ موتور، به طوریکه این ولتاژ از مقدار توصیه شده بیشتر شود، موتور با سرعت بیشتری شروع به حرکت می کند. در نهایت با ادامه این روند، موتور دچار آسیب جدی و سوختگی خواهد شد. به طور مشابه، با کاهش ولتاژ تغذیه موتور، موتور جهت غلبه بر نیروی وزن بار، چرخش غیر متعارف داشته و همین موضوع سبب آسیب جدی به آن خواهد شد. جهت جلوگیری از این موضوع، محافط های برق نقشی کلیدی در محافظت قطعات در برابر افزایش و یا کاهش ولتاژ دارند. این قطعات با رصد ولتاژ، چنانچه این پارامتر از حد مجازی بالاتر یا پایین تر رود، خروجی ولتاژ قطع خواهد شد. پیشتر در آموزشی به طراحی و پیاده سازی محافظ برق AC پرداخته ایم. این محافظ برای بازه ثابت ولتاژی در حدود ۱۹۰ الی ۲۴۰ ولت کار می کند. این آموزش با کلیک بر روی این لینک قابل دسترسی است. در این پروژه اما به طراحی و پیاده سازی محافظ برق DC می پردازیم. این محافظ برق در صورت خارج شدن ولتاژ از محدوده مجاز، ضمن قطع جریان به کاربر از طریق پیامک مورد را اطلاع خواهد داد. در کنار این، بازه ولتاژ قابل قبول برای این محافظ برق از طریق پیامک برای سیستم، قابل تعریف است. در ادامه با مرجع تخصصی آردوینو به زبان فارسی و مرجع تخصصی ماژول سیم کارت به زبان فارسی، دیجی اسپارک همراه باشید.

 


ساز و کار سیستم محافظ برق DC با قابلیت تنظیم از طریق پیامک


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

مکانیزم عملکرد پروژه محافظ برق DC با آردوینو - دیجی اسپارک

 

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

 


نقش هر ماژول در محافظ برق DC


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

اقلام پروژه محافظ برق DC با آردوینو - دیجی اسپارک

 

پس از آشنایی با ساز و کار کلی کار، نوبت به بررسی شماتیک و اتصالات پروژه می رسد. قسمت بعد به این موضوع اختصاص دارد.

 


شماتیک و اتصالات پروژه محافظ برق DC


پس از بررسی ساز و کار کلی پروژه، نوبت به شماتیک و اتصالات آن می رسد. ابتدا به تصویر زیر که فرم کلی اتصالات را نمایش می دهد، دقت کنید.

شماتیک و اتصالات پروژه محافظ برق DC با آردوینو - دیجی اسپارک

 

در ادامه، اتصالات مدار فوق را در پیش می گیریم. توجه داشته باشید که در این پروژه ما از یک آداپتور ۱۲V با قابلیت جریان دهی ۵ آمپر جهت تغذیه کل مدار استفاده می کنیم. این آداپتور به جک آردوینو متصل شده و تغذیه کل مدار فراهم خواهد شد. به همین ترتیب، اتصالات ماژول کاهنده ولتاژ lm2596 به شکل زیر خواهد بود.

  • اتصال پایه مثبت ورودی LM2596 به پایه VIN آردوینو
  • اتصال پایه منفی ورودی LM2596 به پایه GND آردوینو

 پس از برقراری اتصالات ورودی، نوبت به اتصالات خروجی ماژول می رسد. پیش از اتصال، به کمک مولتی ترن آبی رنگ(ولوم) روی ماژول، ولتاژ خروجی را بر روی ۴ تنظیم کنید. پس از تنظیم ولتاژ، به شکل زیر عمل کنید.

  • اتصال پایه مثبت خروجی lm2596 به پایه VCC ماژول SIM800L
  • اتصال پایه منفی خروجی LM2596 به پایه GND ماژول SIM800L

در ادامه اتصالات بین ماژول SIM800L و آردوینو UNO را به شکل زیر اجرا کنید.

  • اتصال پایه TX ماژول SIM800L به پایه RX برد آردوینو
  • اتصال پایه TX برد آردوینو به کمک تقسیم مقاومتی(هر مقاومت ۱ کیلو اهم) به پایه RX ماژول SIM800L

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

  • اتصال پایه GND ماژول رله به GND آردوینو
  • اتصال پایه VIN ماژول رله به پایه ۵V آردوینو
  • اتصال پایه SIGNAL و یا IN ماژول رله به پایه GPIO4 برد آردوینو

توجه داشته باشید که جهت اندازه گیری ولتاژ منبع تغذیه دستگاه مد نظر، ما از یک تقسیم مقاومتی استفاده می کنیم. مطابق تصویر شماتیک، در این تقسیم مقاومتی، مقاومت R2 برابر با یک کیلو و مقاومت R1 برابر با ۱۰ کیلو است. همچنین گراند این منبع تغذیه به صورت مشترک است.

 


کدهای پروژه محافظ برق DC


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

#define relay 4  //تعریف پایه شماره به عنوان خروجی برای اتصال به رله
int low_v = 0, high_v = 0;  //متغیر جهت ولتاژ های آستانه بالا و پایین
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);  //تعیین باودریت سریال جهت ارتباط با ماژول SIM800L
  delay(500);
  Serial.print("AT\r\n");  //راسال دستور جهت تشخیص خودکار باودریت توسط SIM800L
  delay(500);
  pinMode(relay, OUTPUT);  //تعیین پایه ۴ به عنوان خروجی جهت اتصال رله
  digitalWrite(relay, LOW);  //از آنجاییکه رله با سیگنال LOW فعال می شود، این پایه به صورت پیشفرض LOW می شود.
  check_connect();  //انتطار برای اتصال به شبکه GSM
  Serial.print("AT+CMGF=1\r\n");  //تعیین فرمت متن برای پیامک ها
  delay(500);
  Serial.print("AT+CSMP=17,167,0,0\r\n");  //تنظیمات مرکز پیام برای ارسال پیامک
  delay(500);
  Serial.print("AT+CMGD=1,4\r\n");  //پاک کردن پیامک های پیشین از حافظه سیم کارت
  delay(500);
}

void loop() {
  read_sms();  //چک کردن دریافت پیامک و خواندن متن پیامک
  if (high_v != 0 && low_v != 0)  //در صورتیکه ولتاژ های حد بالا و پایین غیر از صفر باشند
    ctrl_volt(low_v, high_v);  //اجرای تابع کنترل ولتاژ

}
void check_connect() {
  Serial.readString();
  while (true) {
    Serial.print("AT+CCALR?\r\n");  //در صورتیکه ماژول به شبکه متصل شود، در پاسخ به دستور روبه رو عبارت ۱:CCALR+ را بر می گرداند.
    delay(500);
    if (Serial.readString().indexOf("+CCALR: 1") >= 0)     //به کمک تابع indexOf می توانیم وجود یک رشته یا کاراکتر را در رشته دیگر تشخیص دهیم. توجه داشته باشید که با تابع
    //readString پاسخ موجود در سریال خوانده می شود.
      break;
  }
}
void read_sms() {
  if (Serial.readString().indexOf("+CMTI") >= 0) {  //در صورتیکه پیامکی دریافت گردد، عبارت CMTI+ توسط ماژول ارسال می گردد.
    String data = "";
    Serial.readString();  //پاک کردن بافر از داده های پیشین
    Serial.print("AT+CMGR=1\r\n");  //خواندن پیام
    while (Serial.available() == 0);  //انتطار برای دریافت پاسخ از سوی ماژول
    data = Serial.readString();  //ذخیره پاسخ ماژول در متغیر
    Serial.print("AT+CMGD=1,4\r\n");  //پاک کردن پیام ها
    delay(500);
    data = data.substring(data.indexOf("!") + 1, data.indexOf("#"));   //از آنجاییکه دستور کاربر بین دو کاراکتر ! و # قرار می گیرد.، لذا موقعیت این دو کاراکتر توسط تابع indexOf یافت شده 
    //و توسط تابع subString رشته مورد نظر از رشته اصلی جدا می شود.
    low_v = data.substring(0, data.indexOf(",")).toInt();   //مقدار حد پایین ولتاژ از ابتدای رشته (رشته ای که در مرحله قبل که بین ! و # است)از ابتدای رشته تا ویرگول قرار میگیرد.
    high_v = data.substring(data.indexOf(",") + 1).toInt(); //مقدار حد بالای ولتاژ در موقعیت بعد از ویرگول تا انتهای رشته قرار می گیرد.
  }
}
void ctrl_volt(int v_low, int v_high) {
  float volt = analogRead(A0);  //خواندن مقدار adc
  volt = (float) (volt * 5) / 1023;  //تبدیل مقدار دیجیتال معادل به مقدار آنالوگ واقعی
  volt = (float)volt * 11;  //از آنجاییکه از تقسیم مقاومتی استفاده کرده ایم و ولتآژ را با این تقسیم مقاومتی بر ۱۱ تقسیم کرده ایم، مقدار را در ۱۱ ضرب می کنیم تا به ولتاز اصلی برسیم
  if ( !(volt >= v_low && volt <= v_high)) {  //در صوتریکه ولتاژ اندازه گیری شده در بازه مد نظر نباشد.
    digitalWrite(relay, HIGH);  //قطع کردن رله 
    send_sms();  //ارسال پیامک هشدار
    while(1);  //توقف برنامه
  }
}
void send_sms(){
  Serial.readString();
  Serial.print("AT+CMGS=\"+989***************\"\r\n");  //به جایستاره ها شماره موبایل خود را قرار دهید. صفر شماره وارد نمی شود مثل ۹۱۲۱۲۳۴۵۶۷
  delay(700);
  Serial.print("ALARM!Main power supply is out of order!");  //متن پیامک
  delay(500);
  Serial.write(0x1a);  //کاراکتر CTRL+Z جهت ارسال پیام
  delay(500);
}

 


اجرای پروژه محافظ برق DC


پس از آپلود کدها، نوبت به اجرای پروژه می رسد. در ابتدا کمی صبر کنید تا ماژول مخابراتی به شبکه متصل گردد. پس از اتصال به شبکه، ابتدا باید بازه ولتاژ مد نظر را وارد کنید. توجه: منبع تغذیه جهت سنجش ولتاژ توسط ADC آردوینو به هیچ عنوان نباید بیش از ۵۰ ولت باشد. جهت تعیین بازه ولتاژ مجاز از طریق پیامک، باید کمترین و بیشترین ولتاژ مجاز را تعیین نمایید. اما جهت ارسال این دو مقدار، باید فرمت خاصی را رعایت نمایید. این فرمت به شکل زیر تعریف می گردد.

!low,high#

مطابق فرمت فوق، کمترین و بیشترین مقدار به کمک ویرگول از یکدیگر جدا می گردند. سپس کل عبارت با ! شروع و با # پایان می یابد. به عنوان مثال برای تعیین بازه مجاز ولتاژ در محدوده ۱۰ الی ۲۵ ولت، باید به صورت زیر به دستگاه پیامک بفرستیم.

!۱۰,۲۵#

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

پیامک هشدار محافظ برق DC - دیجی اسپارک

 

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

 


تحلیل کدهای پروژه محافظ برق DC


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

شرح تابع
انتظار برای اتصال به شبکه GSM check_connect
کنترل دریافت و خواندن پیامک read_sms
کنترل ولتاژ و قطع کردن خروجی در صورت خروج از محدوده مجاز ولتاژ ctrl_volt
ارسال پیامک هشدار به کاربر send_sms

 


لوازم مورد نیاز


برد آردویینو UNO

ماژول SIM800L

ماژول رله

ماژول کاهنده ولتاژ LM2596

مقاومت یک کیلو اهمی

مقاومت ده کیلو اهمی

برد بورد و کابل

 


جمع بندی


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

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۰ دیدگاه

  • سلام خسته نباشید
    دوتا عرض داشتم .اولین سوالم این که این مابه خروجی ماژول رله باید دوتا سیم برق بزنیم .
    دوم اینکه اون جایی که نوشتهpower suply باید آداپتور سیستم و آردوینو وصل بشه

      • ببخشید من متوجه نشدم اینکه اگه خروجی رله تغذیه آردوینو باشه پس چطوری این سیستم برق را قطع میکنه .
        کارکرد دقیق این سیستم چطوریه

        • ببنید تغذیه اردوینو به صورت جداگانه از طریق آداپتور صورت می گیرد. تغذیه وسیله برقی باید جدا بوده و رله به صورت سری در تغذیه دستگاه قرار می گیرد.

    • باسلام
      من یه محافظ برق dc ( ۴۸ ولت ) میخوام که ولتاژ زیر ۴۸ بیاد قطع کنه
      چطوری و چه جوری سفارش باید بدم ممنون