در این پست قصد داریم به نحوه ساخت یک دستگاه هشدار دهنده نشتی گاز شهری توسط برد آردوینو 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- پس از تشیخص گاز توسط دستگاه، باید ماژول بازر فعال شود و سپس پس از چند ثانیه شماره تلفنی که در برنامه وارد کرده اید، زنگ بخورد.
باسلام و احترام، شما استاد گرامی بردهای هزارسوراخ منظورتونه؟ اگر که اونا مد نظرتون هست که فکر نمیکنم دانشگاه قبول کنن، باید خودم طرحشو روی فیبر مسی چاپ کنم و بعد دریل کاریشو انجام بدم.
ببخشید در آلتیوم ممکن هست این ماژول ها هم داشته باشه برای طرحش درست کنم؟
تشکر از لطفتون.
با سلام و احترام
بله منظور همان بردهای هزارسوراخ است، همچنین می توانید طرح PCB را در یکی از نرم افزارهای مربوط به طراحی PCB رسم و درنهایت چاپ کنید.
اگر کتابخانه یک قطعه یا ماژول در نرم افزار آلتیوم وجود ندارد می توانید آنرا خودتان طراحی و به کتابخانه آلتیوم اضافه کنید.
سلام وقتتوت بخیر ممنون بابت آموزش خوبتون ، امکانش هست کد ها رو توضیح بدین ؟🙏
سلام و احترام من یک سوال دیگه دارم استاد.
من مدار رو طبق راهنمایی شما تو سایت بستم البته نمیخوام از ماژول سیم کارت استفاده کنم .
ی کدی هم گفته بودین که برای ساده شده همین مدار بود (بدون تماس)
اما وقتی اجرا کردم در ابتدا بازر بوق میزد و بعد از تشخیص گاز بوقش قطع و وصل میشد .
چطوری درستش کنم که بوق نزنه در ابتدا؟
ممنون میشم راهنمایی کنید 🙏
سلام میشه هر ماژول سیم کارتی استفاده کرد
با سلام و احترام
من دقیقا متوجه سوال شما نشدم
در صورت صحت اتصال سنسور و عملکرد صحیح آن، نباید مدار در حالت عادی و بدون وجود گاز در محیط آلارم بکشد.
اگر مدار شما برعکس عمل می کند می توانید در برنامه محل دو کد دستوری خط 94 و خط 116 برنامه را با یکدیگر عوض کنید.
سلام و درود فراوان ممنون از این آموزش خوب شما من انجام دادم خیلی به کارم آمد نمیشه با ماژول GSM و کیپد 4×4 کاری کرد که مثل تلفن هر شماره که میخوایم روی کیپد بنویسم و بد # رو بزنیم تماس مثل تلفن برقرار بشه شما میشه به ما راهنمایی کنید آموزش همچین چیزی رو تو سایت الکترونیک ۹۸ دارین
اگر همچین چیزی میشه میشه به ما آموزش بدین چیکار کنیم
ببخشید میشه ما شماره موبایل رو روی کیپد که مینویسم روی یک نمایشگر OLED هم بیاد
با سلام و احترام
شما می توانید با ترکیب کدهای پروژه های مختلف با کدهای این پروژه، آنرا به شکل مورد نیاز خود توسعه دهید. به عنوان مثال ما در سایت آموزش راه اندازی صفحه کلید و یا نمایشگر OLED با آردوینو را آموزش داده ایم که می توانید از آموزش ها و کدهای ارائه شده برای توسعه این پروژه کمک بگیرید.
ما زیاد حرفه ای نیستیم تو این کار نمیتونیم انجام بدیم خیلی چیز هارو باید تعغیر بدیم شما نمیتونید به ما کمک کنین دقیقاً چیکار کنیم
سلام ما اگه بخواین فقط تماس برقرار بشه باید چیکار کنیم ممنون از راهنمایی شما
میخوایم بازر لامپ سنسور از برد ارداینو حرف کنم فقط برد ارداینو به سیستم وصل میکنم ماژول GSM به شماره ای که تو کد ها تعریف کردم تماس بگیره باید کجای کد حذف کنیم شما میشه اون کد قرار بدین ممنون
میشه لطفاً بگین کجای کد حذف کنیم فقط تماس برقرار بشه
با سلام و احترام
برای این منظور می توانید کدهای موجود در حلقه loop() را به صورت کامل حذف کنید و بجای آن کدهای زیر را جاگذاری کنید: