در این پست قصد داریم به نحوه ساخت یک دستگاه هشدار دهنده نشتی گاز شهری توسط برد آردوینو Arduino Uno بپردازیم. عملکرد این دستگاه پس از اتمام عملیات ساخت آن به این صورت است که، در صورت نشتی و یا پخش شدن گاز شهری در محیط، دستگاه ضمن پخش آلارم، این موضوع را از طریق تماس تلفنی به شخص مورد نظر ما، اعلام می کند.
از ویژگی های اصلی این پروژه عدم نیاز به خط تلفن ثابت برای برقراری تماس تلفنی در مواقع اضطراری است، چراکه در این پروژه برای برقراری تماس تلفنی از ماژول سیم کارت استفاده شده است. همچنین لازم به ذکر است در طراحی این پروژه برای شناسایی نشتی گاز از ماژول تشخیص گاز متان MQ-4 استفاده شده است، که دارای دقت و پایداری بسیار بالایی می باشد.
لیست قطعات مورد نیاز
برد آردوینو Arduino UNO R3 مدل DIP | 1 عدد |
ماژول بازر اکتیو Active Buzzer | 1 عدد |
ماژول تشخیص گاز متان MQ4 | 1 عدد |
ماژول مخابراتی SIM800L به همراه برد راه انداز | 1 عدد |
لامپ LED قرمز سایز 5mm میلی متر مدل مات | 1 عدد |
مقاومت 220 اهم با توان 0.25 وات و تلرانس 5 درصد | 1 عدد |
سیم جامپر برد بوردی مدل یک سر نری - مادگی (سری 40تایی) | 1 عدد |
آداپتور 5V ولت 2A آمپر | 1 عدد |
مرحله اول : اتصال ماژول گاز MQ-4 به برد آردوینو
1- ابتدا پایه GND ماژول را به یکی از پایه های GND بر روی برد آردوینو متصل کنید.
2- پایه VCC ماژول گاز MQ4 را به پایه دیجیتال شماره 8 بر روی برد آردوینو متصل کنید.
3- پایه DO ماژول سنسور گاز MQ-4 را به پایه دیجیتال شماره 9 بر روی برد آردوینو متصل کنید.
4- پایه AO ماژول MQ-4 به جایی متصل نمی شود.
مرحله دوم : اتصال ماژول Buzzer به برد آردوینو
1- پایه GND ماژول بازر را به یکی از پایه های GND بر روی برد آردوینو متصل کنید.
2- پایه VCC ماژول Buzzer را به پایه دیجیتال شماره 13 بر روی برد آردوینو متصل کنید.
3- پایه I/O ماژول بازر را به پایه دیجیتال شماره 12 بر روی برد آردوینو متصل کنید.
مرحله سوم : اتصال ماژول سیم کارت SIM800L به برد آردوینو
1- پایه GND ماژول SIM800L را به یکی از پایه های GND بر روی برد آردوینو متصل کنید.
2- پایه VCC ماژول GSM را به پایه 5V بر روی برد آردوینو متصل کنید.
3- پایه TXD ماژول سیم کارت را به پایه دیجیتال شماره 2 بر روی برد آردوینو متصل کنید.
3- پایه RXD ماژول SIM800L را به پایه دیجیتال شماره 3 بر روی برد آردوینو متصل کنید.
مرحله چهارم : اتصال لامپ LED به برد آردوینو
در این پروژه برای نمایش وضعیت صحیح و وضعیت خطا از یک لامپ LED پنج میلی متری استفاده شده است، که توسط یک مقاومت 220 اهمی، طبق نقشه شماتیک زیر به برد آردوینو متصل می شود. همچنین عملکرد این لامپ ال.ای.دی به این صورت است، زمانیکه لامپ LED در حالت چشمک زدن است یعنی هنوز ماژول سیم کارت به شبکه GSM متصل نشده و دستگاه آماده کار نیست و زمانیکه لامپ LED به صورت ثابت برای حداقل 15 ثانیه روشن ماند یعنی دستگاه به موفقیت به شبکه GSM متصل شده است و آماده کار می باشد.
1- پایه منفی لامپ LED را به پایه دیجیتال شماره 7 برد آردوینو متصل کنید. همچنین می توانید این پایه را به پایه GND بر روی برد آردوینو نیز متصل کنید.
2- پایه مثبت لامپ LED را به واسطه یک مقاومت 220 اهمی به پایه دیجیتال شماره 6 بر روی برد آردوینو متصل کنید.
مرحله پنجم : پروگرام کردن برنامه بر روی برد آردوینو
1- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید، اگر بار اول است که با برد Arduino کار می کنید و این نرم افزار را بر روی سیستم خود ندارید، می توانید نرم افزار آردوینو و نحوه نصب آن را از اینجا دریافت نمائید.
2- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید.
3- پس از اجرای نرم افزار آردوینو، از طریق منوی File بر روی گزینه New کلیک کنید.
4- تمامی کدهای زیر را کپی کنید و در پنجره جدید باز شده بچسبانید (Paste).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
#include <SoftwareSerial.h> const byte RX_PIN = 2; const byte TX_PIN = 3; SoftwareSerial SIM(RX_PIN, TX_PIN); const byte PIN_VCC_Buzzer = 13; const byte PIN_Trigger_Buzzer = 12; const byte PIN_VCC_MQ4 = 8; const byte PIN_Digital_MQ4 = 9; const byte PIN_VCC_LED = 6; const byte PIN_GND_LED = 7; int _timeout; int ErrorTime; int BuzzerState; String _buffer; String MobileNumber = "";//Enter your mobile number const long interval = 500; unsigned long previousMillis = 0; void setup() { SIM.begin(9600); _buffer.reserve(255); pinMode(PIN_VCC_Buzzer, OUTPUT); pinMode(PIN_Trigger_Buzzer, OUTPUT); pinMode(PIN_VCC_MQ4, OUTPUT); pinMode(PIN_Digital_MQ4, INPUT); pinMode(PIN_VCC_LED, OUTPUT); pinMode(PIN_GND_LED, OUTPUT); digitalWrite(PIN_VCC_Buzzer, HIGH); digitalWrite(PIN_Trigger_Buzzer, HIGH); digitalWrite(PIN_VCC_MQ4, HIGH); digitalWrite(PIN_VCC_LED, HIGH); digitalWrite(PIN_GND_LED, HIGH); SerialOk(); GsmOk(); BasicSettings(); digitalWrite(PIN_GND_LED, LOW); } void loop() { if (digitalRead(PIN_Digital_MQ4) == 0) { Error(); } } void SerialOk() { digitalWrite(PIN_GND_LED, LOW); while (_readSerial("AT").indexOf("OK") == -1) { digitalWrite(PIN_GND_LED, HIGH); delay(1000); digitalWrite(PIN_GND_LED, LOW); } digitalWrite(PIN_GND_LED, HIGH); } void GsmOk() { digitalWrite(PIN_GND_LED, LOW); while (_readSerial("AT+CGREG?").indexOf("+CGREG: 0,1") == -1) { digitalWrite(PIN_GND_LED, HIGH); delay(1000); digitalWrite(PIN_GND_LED, LOW); } digitalWrite(PIN_GND_LED, HIGH); } void BasicSettings() { digitalWrite(PIN_GND_LED, LOW); while (_readSerial("ATE0").indexOf("OK") == -1) { digitalWrite(PIN_GND_LED, HIGH); delay(1000); digitalWrite(PIN_GND_LED, LOW); } digitalWrite(PIN_GND_LED, LOW); while (_readSerial("AT+CMGF=1").indexOf("OK") == -1) { digitalWrite(PIN_GND_LED, HIGH); delay(1000); digitalWrite(PIN_GND_LED, LOW); } digitalWrite(PIN_GND_LED, LOW); while (_readSerial("AT+MORING=1").indexOf("OK") == -1) { digitalWrite(PIN_GND_LED, HIGH); delay(1000); digitalWrite(PIN_GND_LED, LOW); } digitalWrite(PIN_GND_LED, LOW); while (_readSerial("AT+CSMP=17,167,0,0").indexOf("OK") == -1) { digitalWrite(PIN_GND_LED, HIGH); delay(1000); digitalWrite(PIN_GND_LED, LOW); } } void Error() { if (MobileNumber != "") { digitalWrite(PIN_Trigger_Buzzer, LOW); BuzzerState = LOW; SIM.println ("ATH"); delay (1000); SIM.print ("ATD"); SIM.print (MobileNumber); SIM.println (";"); delay (3000); ErrorTime = 0; while (ErrorTime < 70) { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; ErrorTime++; if (BuzzerState == LOW) { BuzzerState = HIGH; } else { BuzzerState = LOW; } digitalWrite(PIN_Trigger_Buzzer, BuzzerState); } } digitalWrite(PIN_Trigger_Buzzer, HIGH); SIM.println ("ATH"); } } String _readSerial(String _print) { SIM.flush(); if (SIM.readString() != "") { while (SIM.readString() != "") { } } _buffer = ""; if (_print != "") { SIM.println (_print); _timeout = 0; while (!SIM.available() && _timeout < 12000 ) { delay(1); _timeout++; } if (SIM.available()) { _buffer = SIM.readString(); } } return _buffer; } |
5- در خط شماره 15 برنامه شماره موبایل مورد نظر خود را که قصد دارید در هنگام تشخیص گاز دستگاه با آن تماس بگیرد را وارد نمائید.
6- حال از طریق منوی File گزینه Save را انتخاب کنید و برنامه را در محل دلخواه خود ذخیره کنید.
7- پس از ذخیره برنامه از طریق منوی Tools به زیر منوی Board رفته و از لیست کشویی باز شده آیتم Arduino/Genuino Uno را انتخاب کنید.
8- دوباره از طریق همان منوی Tools به زیر منوی Port رفته و از لیست کشویی باز شده شماره پورت USB که از طریق آن برد آردینو به کامپیوتر متصل شده است را انتخاب کنید.
9- در پایان برای انتقال برنامه به برد آردوینو کافیست تا بر روی آیکون در نرم افزار آردوینو کلیک کنید.
مرحله ششم : راه اندازی پروژه
1- مطمئن شوید قبل از پروگرام کردن برنامه بر روی برد آردوینو در خط شماره 15 برنامه شماره موبایل مورد نظر خود را جهت دریافت هشدار وارد کرده باشید.
2- برد آردوینو را به صورت کامل از کامپیوتر جدا کنید.
3- یک سیم کارت که مطمئن هستید اعتبار ریالی دارد و سالم است را در سوکت سیم کارت ماژول SIM800L قرار دهید.
4- توسط یک آداپتور 5 ولت DC با حداقل جریان 2 آمپر برد آردوینو را راه اندازی کنید.
5- منتظر بمانید تا لامپ LED به صورت ثابت روشن بماند و هیچگونه چشمکی نزند.
6- ماژول گاز MQ-4 را در مجاورت گاز شهری قرار دهید، همچنین می توانید از فندک برای انجام آزمایش استفاده کنید.
7- پس از تشیخص گاز توسط دستگاه، باید ماژول بازر فعال شود و سپس پس از چند ثانیه شماره تلفنی که در برنامه وارد کرده اید، زنگ بخورد.
ممنون از راهنمایی شما
با سلام و احترام ما میخوایم فقد تماش برقرار کنیم میشه کد که فقد برای تماس هست برای ما بفرستید
سلام آقای اکبری
من تمام پروژه رو کامل طبق اون چیزی که تو سایت نوشتید انجام دادم ولی با مشکل مواجه شدم. لازم به ذکر هست که کامنت های قدیمی رو هم نگاه کردم چند نفر مشکلشون به مشکل من شبیه بود ولی دقیقا عین مشکل خودم رو در کامنت ها پیدا نکردم. ممنون میشم اگر راهنمایی کنید.
مشکل من این هست که توی ویدیویی که از انجام پروژه تو سایت گذاشتید ، پس از اتصال آداپتور به برد آردوینو ، ال ای دی 5 میلی متری روشن می شود و سپس خاموش می شود و دوباره روشن می شود ولی من وقتی آداپتور رو به برد آردوینو متصل می کنم ، ال ای دی 5 میلی متری بلافاصله روشن می شود و ثابت می ماند و وقتی گاز فندک را به ماژول mq4 نزدیک می کنم ، ماژول ، گاز را سنس می کند ولی بازر اصلا بوق نمیزند و تماسی نیز برقرار نمی شود. در ضمن سلامت ماژول mq4 و بازر را هم طبق چیزی که در کامنت ها گفته بودید چک کردم و هردو سالم هستند. همچنین وقتی با موبایل به سیم کارت داخل ماژول sim800l تماس میگیرم بوق میزنه و در شبکه هست. اتصالات رو هم چندین بار چک کردم و همه چیز درست هست.
ممنون میشم اگه راهنمایی کنید.
با سلام و احترام
برای یافتن مشکل در مدار خود پیشنهاد می کنیم ماژول MQ4 را از مدار خارج کنید و سپس پایه دیجیتال شماره 9 آردوینو را توسط یک مقاومت 4.7 یا 10 کیلو اهمی به پایه +5v آردوینو متصل کنید. حال برد را راه اندازی کنید و منتظر بمانید لامپ ال ای دی به صورت ثابت روشن بماند، پس از آن توسط یک تکه سیم پایه شماره 9 برد آردوینو را برای مدت کوتاهی به منفی تغذیه یا همان پایه GND آردوینو متصل کنید و نتیجه را بررسی کنید.
سلام خسته نباشید من مدار رو طبق چیزی ک هست بستم ولی گوشیم موقع راه اندازی مدار زنگ نمی خوره .
با سلام و احترام
لطفا دیدگاه های قدیمی تر را مطالعه فرمایید به سوالات مشابه سوال شما پاسخ داده شده است.