SMS کنترلر ها در شرایطی که امکان اتصال به اینترنت وجود ندارد بسیار کاربردی می باشد . در این حالت تنها از طریق ارسال SMS می توانید یک خروجی روشن یا خاموش کنید . در این پروژه می خواهیم به نحوه ساخت SMS کنترلر با آردوینو بپردازیم . به طور کلی مودم های مخابراتی استاندارد از فریمور هایس پشتیبانی می کنند لذا به راحتی از طریق یک ارتباط UART و با استفاده از دستورات AT می توانید آن را کنترل کنید . ماژول های GSM هم از این قاعده مثتسنی نیستند . در این آموزش از یک ماژول SIM800 استفاده خواهیم کرد . ماژول SIM800 از سری های جدید ماژول های شرکت SIMcom می باشد که این ماژول ها مودم های GSM با امکانات و کاربرد های مختلف هستند . برای ارتباط آردوینو با SIM800 از ارتباط سریال نرم افزاری استفاده خواهیم کرد . خوشبختانه کتابخانه های زیادری برای راه اندازی ماژول های GSM وجود دارد که در این کتابخانه های کلیه کامند های مورد نیاز در قالب توابعی پیاده سازی شده اند . نکته مهم راجب به ماژول های SIM800 جریان مصرفی آن می باشد . در لحظه کانکت شدن ماژول با شبکه ممکن است ماژول به جریانی نزدیک به 2 آمپر نیاز داشته باشد . همچنین در زمان برقراری تماس جریان مصرفی آن تا 600 میلی آمپر بالا می رود لزا نمی توان تغذیه آن را از برد آردوینو تامین کرد . برای این کار می توانید تغذیه برد SIM800 را جداگانه به یک منبع تغذیه با ولتاژ 3.7 تا 4.2 ولت با حداکثر آمپر دهی 2 آمپر متصل کنید . همچنی می توانید از باتری های لیپونیز برای تغذیه ماژول SIM800 استفاده کنید .
در تصویر زیر نحوه اتصال SIM800 به آردوینو نشان داده شده است :
کد های آردوینو :
#include <SoftwareSerial.h> SoftwareSerial gsmSerial(7, 8); char incomingByte; String inputString; void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(2, LOW); pinMode(3, LOW); Serial.begin(9600); gsmSerial.begin(9600); while(!gsmSerial.available()){ gsmSerial.println("AT"); delay(1000); Serial.println("Connecting..."); } Serial.println("Connected!"); gsmSerial.println("AT+CMGF=1"); delay(1000); gsmSerial.println("AT+CNMI=1,2,0,0,0"); delay(1000); gsmSerial.println("AT+CMGL=\"REC UNREAD\""); } void loop() { if(gsmSerial.available()){ inputString = ""; delay(1000); while(gsmSerial.available()){ incomingByte = gsmSerial.read(); inputString += incomingByte; } delay(100); //inputString.replace("\n",""); Serial.print("input : "); Serial.print(inputString); Serial.println(" end"); inputString.toUpperCase(); Serial.println("input up : " + inputString); if (inputString.indexOf("ON1") > 0){ pinMode(2, HIGH); } if (inputString.indexOf("ON2") > 0){ pinMode(3, HIGH); } if (inputString.indexOf("OFF1") > 0){ pinMode(2, LOW); } if (inputString.indexOf("OFF2") > 0){ pinMode(3, LOW); } delay(50); if (inputString.indexOf("OK") > -1){ gsmSerial.println("AT+CMGDA=\"DEL ALL\""); delay(1000); } } }
با ارسال ON1 و ON2 می توانید هر کدام از رله ها را روشن کنید . همچنین با ارسال OFF1 و OFF2 نیز می توانید رله ها را خاموش کنید .
خیلی ممنون مطالب این سایت خیلی بهتر از سایر سایت ها بود
سلام.ممنون از مطالب خوبتون.میخواستم بدونم که باهمین مدارمیشه به جای دو رله ازشیلد ۴رله استفاده کنیم.اگه میشه نقشه مدار و برنامه نویسی شوبرام ارسال فرمایید باتشکر از زحمات شما در این راه.
دوست عزیز خیل عالی بود فقط در اینجای کار اشتباهن بجا دیجیتال رایت شما از PINMODE استفاده کردید کلی گیج زدم تا فهمیدم خخ
if (inputString.indexOf(“ON1”) > 0){
pinMode(2, HIGH);
با سلام و خسته نباشید
ممنون از آموزشتون
میخواستم بپرسم چطوری میشه اطلاعات رو به برد فرستاد از طریق وب سایت؟
یعنی داخل وب سایت وضعیت دکمه را خاموش قرار بدیم و دستور به برد ارسال بشه
ممنون میشم جواب بدین
سلام حتما باید برق ماژول از برد آردوینو جدا باشه؟
سلام .کار نمیکنه که این
با سلام و خسته نباشید.
در قسمت کدهای آردوینو، خط ۱۱، ۱۲، ۴۷، ۵۰، ۵۳ و ۵۶ از دستور pinmode استفاده کردهاید که نادرست است و کد درست اجرا نخواهد شد. این دستور را به digitalWrite تغییر بدهید.
امکانش هست وضعیت رله که روشن یا خاموش شد اردوینو پیام بده که لامپ روشن شد
سلام وقت بخیر
من دقیقا مثل شکل شما کار بستم و کد اجرا کردم ولی رله عمل نمیکنه میشه راهنمایی بفرمایید ممنون.
عالی بود ممنون
سلام
میخاستم از شما تشکر کنم – من برای دریافت اطلاعات از ماژول سیم۸۰۰ برنامه ای نوشته بودم که درست عمل نمیکرد – ولی با الگو گرفتن از برنامه شما توانستم مشکل و حل کنم
ممنونم