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

پروژه سیستم اعلام حریق تلفنی ماژول سیم کارت SIM800L و موقعیت یابی

create-location-based-fire-alarm-system-arduino-sim800l-gsm-module-digispark
نوشته شده توسط معین صابری

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

 


عملکرد سیستم اعلام حریق سیم کارتی


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

اعلام حریق موقعیت یاب با آردوینو sim800l - دیجی اسپارک

 

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

اعلام حریق تلفنی با تشخیص موقعیت آتش سوزی - دیجی اسپارک

 

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

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

 


وظیفه برد NODEMCU و ماژول SIM800L


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

برد Nodemcu در پروژه اعلام حریق سیم کارتی - دیجی اسپارک

 

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

ماژول سیم کارت Sim800L در تشخیص حریق و نشت دود - دیجی اسپارک

 

اما تشخیص دود چگونه صورت می گیرد؟ این مورد را در قسمت بعد بررسی می کنیم.

 


اعلام حریق تلفنی با سنسور MQ135


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

  • دود
  • CO2
  • آمونیاک
  • سولفید
  • بنزن

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

اعلام حریق سیم کارتی با سنسور MQ135 - دیجی اسپارک

 

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

 


شماتیک و اتصالات هاب مرکزی


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

هاب مرکزی اعلام حریق تلفنی nodemcu و sim800L - دیجی اسپارک

 

مطابق تصویر فوق، اتصالات را به شکل زیر ادامه می دهیم.

  • اتصال کابل های آداپتور با رعایت پلاریته به ورودی ماژول کاهنده
  • اتصال پایه خروجی مثبت ماژول کاهنده به پایه VCC ماژول SIM800L
  • اتصال پایه خروجی منفی ماژول کاهنده به پایه GND ماژول SIM800L
  • اتصال پایه GND ماژول NODEMCU به پایه GND ماژول SIM800L
  • اتصال پایه TX ماژول SIM800L به پایه RX ماژول NODEMCU
  • اتصال پایه RX ماژول SIM800L به پایه TX ماژول NODEMCU

برای برقراری اتصالات سنسور با برد NODEMCU، باید به شیوه زیر عمل کنیم.

  • اتصال پایه VCC سنسور به پایه VIN برد NODEMCU
  • اتصال پایه GND سنسور به پایه GND برد NODEMCU
  • اتصال پایه DO سنسور به کمک تقسیم مقاومتی به پایه A0 برد NODEMCU

 توجه۱: پیش از برقراری اتصالات، ابتدا ولتاژ خروجی ماژول کاهنده ولتاژ را روی ۴ تنظیم کرده و سپس به ماژول SIM800L متصل کنید.

توجه۲: در این آموزش تغذیه برد NODEMCU از طریق کابل تامین می گردد.

توجه ۳: جهت تغذیه ماژول SIM800L، از یک آداپتور ۱۲ ولت ۵ آمپر استفاده شده است.

توجه۴: در این پروژه تغذیه برد NODEMCU از طریق کابل USB تامین گردیده است. اعمال ولتاژ بیش از ۵ به پایه VIN سبب سوختن سنسور خواهد شد.

 


شماتیک و اتصالات بخش گره


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

شماتیک و اتصالات بخش گره پروژه اعلام حریق تلفنی - دیجی اسپارک

 

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

  • اتصال پایه VCC سنسور به پایه VIN برد NODEMCU
  • اتصال پایه GND سنسور به پایه GND  برد NODEMCU
  • اتصال پایه DO سنسور با تقسیم مقاومتی به پایه A0 برد NODEMCU

توجه: در این پروژه تغذیه برد NODEMCU از طریق کابل USB تامین گردیده است. اعمال ولتاژ بیش از ۵ به پایه VIN سبب سوختن سنسور خواهد شد.

 


کدهای پروژه اعلام حریق تلفنی


پس از بررسی شماتیک و اتصالات، نوبت به کدهای پروژه اعلام حریق تلفنی می رسد. ابتدا کدهای زیر را بر روی برد متصل به SIM800L (هاب مرکزی) آپلود کنید. پیش از آپلود توجه داشته باشید که کابل متصل به پایه RX را از برد NODEMCU جداکنید. هاب مرکزی بخش ارتباط گیرنده با تک تک سنسورهای تشخیص دود است. در این بخش و دیگر بخش ها از برد ESP8266 استفاده می‌کنیم.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

#include "ESP8266WiFi.h"  //کتابخانه وای فای جهت ایجاد AP
#include "ESP8266WebServer.h"  //کتابخانه ایجاد سرور
ESP8266WebServer server(80);  //ایحاد شی و تعریف سرور روی پورت ۸۰
// تابع اجرای سرور، هرگاه کلاینت به سرور درخواست ارسال کند، این تابع اجرا می شود.
String d2_send = ""; //ین متغیر برای تشخیص و دریافت داده از سمت کلاینت تعریف شده است.
void data() {
  server.send(200, "text/html", "data_ok!");   //سرور پاسخ ۲۰۰ به معنای موفقیت آمیز بودن تبادل داده را به کلاینت ارسال می کند. همچنین به کلاینت عبارت data_ok! ارسال می گردد.
  d2_send = "danger"; //در صورتیکه درخواستی از کلاینت به سرور ارسال شود، یعنی اینکه خطری در سمت کلاینت رخ داده است. به همین جهت این متغیر را برابر با danger قرار می دهیم.
}
void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_AP);  //تعریف برد در حالت نقطه دسترسی
  delay(2000);
  WiFi.softAP("SYS_CTRL", "");  //نام نقطه دسترسی تعیین می گردد. رمز ی برای آن قرار نداده ایم.
  delay(2000);
  server.on("/", HTTP_GET, data);   //ایجاد سرور و صفحه دریافت داده روی روت با متد GET و تابع data
  server.begin();   //راه اندازی سرور
  gsm_connect();  //انتظار برای اتصال به شبکه GSM، برنامه تا اتصال به شبکه موبایلی، منتظر باقی خواهد ماند
  Serial.print("AT+CMGF=1\r\n");   //تعیین فرمت پیام در حالت  متن
  delay(1000);
  Serial.print("AT+CSMP=17,167,0,0\r\n");   //تنظیمات مرکز پیام برای ارسال پیامک
  delay(1500);
  Serial.print("AT+CMGD=1,4\r\n");   //پاک کردن کلیه پیام های پیشین
  delay(1500);
  //انتظار برای کالیبراسیون سنسور گاز
  for (int i = 0; i < 200; i++)
    delay(1000);
}
void loop() {
  String status_ = "";  //متغیر جهت تعیین متن پیامک
  server.handleClient();   //اجرای تابع سرور
  //با توجه به تقسیم مقاومتی، در صورتیکه سنسور MQ135 دود را تشخیص دهد، خروجی آنالوگ خوانده شده(معادل دیجیتال سیگنال آنالوگ) کمتر از ۷۰ خواهد بود.
  if (analogRead(A0) <= 70 || d2_send == "danger") { //در صورتیکه مقدار آنالوگ کمتر از ۷۰ و یا اینکه توسط کلاینت اعلام خطر شده باشد
    Serial.print("ATD+989**************;\r\n");  //تماس با شماره تلفن، جای ستاره ها شماره خود را قرار دهید.
    delay(7000);
    delay(7000);
    Serial.print("ATH\r\n");  //قطع تماس
    delay(5000);
    if (d2_send == "danger")  //در صورتیکه خطر از طرف گره(کلاینت) ارسال شده باشد، متن پیام به صورت رو به رو است.
      status_ = "DANGER NUMBER 2";
    else
      status_ = "DANGER NUMBER 1";   //در صورتیکه خطر از جانب هاب میکری تشخیص داده شده باشد.
    send_sms(status_);
  }
}
void send_sms(String text) {  //تابع ارسال پیامک
  Serial.print("AT+CMGS=\"+989***************\"\r\n");  //شماره تماس به جای ستاره ها شماره تماس قرار دهید. شماره تلفن اگر به عنوان مثال به صورت ۰۹۱۲۱۲۳۴۵۶۷است، شما به صورت ۹۸۹۱۲۱۲۳۴۵۶۷+
  //تلفن را قرار دهید.
  delay(500);
  Serial.print(text);  //متن
  delay(500);
  Serial.write(0x1a);  //دستور جهت ارسال پیامک(کاراکتر معادل CTRL+Z)
  delay(7000);
  delay(7000);
}
void gsm_connect() {  //تابع کنترل اتصال به شبکه GSM
  char CCALR[] = {"CCALR: 1"};
  delay(500);
  Serial.print("AT\r\n");
  delay(500);
  // Serial.print("WAITING FOR CONNECT TO NETWORK!\r\n");
  while (Serial.find(CCALR) != true) {   //تا زمانیکه پاسخ CCALR: 1+ را دریافت نکرده ایم، منتظر می مانیم.
    Serial.print("AT+CCALR?\r\n");  //ارسال این دستور برای کنترل شبکه
    delay(500);
  }
}

 

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

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
String url = "http://192.168.4.1/?data=salam"; //ایجاد url جهت ارسال داده، توجه داشته باشید که داده ها به صفحه / در سرور ارسال می شوند. از آنجاییکه هر داده قابل ارسال به سرور است، ما یک اسم
// به نام data تعیین می کنیم.
WiFiClient wifi;   //ایجاد یک شی  جهت ارسال داده به سرور(این مورد از هسته ورژن ۳ به بالا الزامی است)
void setup () {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA); //تعیین مد کاری ماژول
  WiFi.begin("SYS_CTRL", "");
  while (WiFi.status() != WL_CONNECTED) {   //انتظار برای اتصال نقطه دسترسی ایجاد شده توسط برد متصل به SIM800L
    delay(1000);
    Serial.println("Connecting..");
    Serial.flush();
  }
  //انتظار برای کالیبره شدن سنسور گاز
  for(int i=0; i<200;i++)
    delay(1000);
}

void loop() {
  if (analogRead(A0) <= 70) {   //با توجه به تقسیم مقاومتی به کار رفته هرگاه دود احساس شود، مقدار اندازه گیری شده توسط ADC کمتر از ۷۰ خواهد بود توجه کنید که حساسیت سنسور نیز با پتانسیومتر روی آن قابل تنظیم است.
    Serial.println("DANGER!");
    delay(500);
    send_data();  //ارسال داده به سرور و اعلام خطر
  }
}

void send_data() {
  HTTPClient http;  //ایجاد یک نمونه شی از کلاس HTTPClient
  http.begin(wifi, url);   //ارتباط با سرور  ESP و تعیین URL
  int httpCode = http.GET();  //برقراری ارتباط تحت متد GET
  Serial.println(http.getString());
  delay(1000);
  Serial.flush();
  http.end();   //قطع اتصال
}

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 


اجرای پروژه اعلام حریق تلفنی


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

نمونه اولیه پروژه اعلام حریق تلفنی با Nodemcu - دیجی اسپارک

 

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

نمونه پیامک دریافت اعلام حریق تلفنی - دیجی اسپارک

 


تحلیل کدهای پروژه اعلام حریق تلفنی


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

شرح تابع
انتظار برای اتصال به شبکه GSM gsm_connect
ارسال پیامک اعلام موقعیت خطر send_sms
تابع دریافت اعلام خطر از طرف کلاینت data
ارسال اعلام خطر از طرف کلاینت به سرور send_data

 


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


  1.  برد nodemcu
  2. سنسور MQ135
  3. مقاومت ۴٫۷ کیلو اهمی
  4. مقاومت یک کیلو اهمی
  5. فیش آداپتور
  6. ماژول sim800l
  7. ماژول کاهنده ولتاژ lm2596
  8. آداپتور تغذیه ۱۲ ولت با جریان ۵ آمپر

 


جمع بندی


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

 

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

 

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

معین صابری

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

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

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

۲ دیدگاه