در این پروژه قصد داریم، با استفاده از تلفن همراه لوازم خانگی خود را از راه دور کنترل کنیم. قلب تپنده این پروژه ماژول SIM800L میباشد. از این ماژول میتوان در پروژه های هوشمند سازی، اینترنت اشیا، مانیتورینگ و … استفاده کرد. همچنین میتوانید از امکانات تلفن همراه نظیر تماس، پیامک، اینترنت و… بهرهمند شوید.
ماژول SIM800L:
ماژول های GSM همیشه یکی از انتخاب های اصلی در بحث کنترل و مانیتورینگ بوده اند. این ماژول ها با استفاده از یک سیم کارت میتواند تا حدی نیاز های پروژه هوشمند سازی یا مانیتورنیگ شما را برطرف کند.
ماژولی که در اینجا قرار است از آن استفاده کنیم SIM800L است.
هنگامی که این ماژول را با منبع تغذیه 3.8-4.2 ولت روشن می کنیم، LED موجود روی برد شروع به چشمک زدن می کند. اگر خیلی سریع چشمک بزند به این معنی است که ، سیم کارت در هیچ شبکه ای ثبت نشده است. اگر به آرامی چشمک بزند، سیم کارت با موفقیت به شبکه وارد شده است. منبع تعذیه مورد استفاده برای ماژول باید قابلیت جریان دهی حداقل 2 آمپر را داشته باشد.
دیاگرام SIM800L
ویژگی های ماژول SIM800L
- پشتیبانی از 4 باند (850/900/1800/1900MHz)
- امکان ارسال و دریافت دیتا از طریق GPRS
- سوکت مخصوص سیم کارت میکرو
- پشتیبانی و کنترل از طریق دستورات AT Command
- دریافت ایستگاه رادیویی FM
- قابلیت اتصال میکروفون
- قابلیت اتصال بلندگو
- ارسال و دریافت پیامک و برقرای تماس صوتی
المان های مورد نیاز:
- آردوینو UNO
- ماژول SIM800L
- باطری لیتیومی 4.2 ولت
- ماژول رله 5 ولت
- لوازم خانگی ( لامپ)
پروژه
در این پروژه از تلفن همراه خود به ماژول sim800L پیامی ارسال می کنیم . محتوای این پیام شامل یک کلمه است به عنوان مثال برای روشن کردن دستگاه عبارت “on” و برای خاموش کردن دستگاه عبارت “off ” را ارسال می کنیم. دستگاه از طریق یک رله به برد آردوینو متصل می شود.
آردوینو به صورت مداوم داده های دریافتی از ماژول sim800L را بررسی می کند. اگر ماژول sim800L پیامی حاوی عبارت ” on ” دریافت کند ،آردوینو با ارسال سیگنالی به ماژول رله ، دستگاه را روشن می کند و اگر ماژول پیامی حاوی عبارت ” off ” دریافت کند، آردوینو با ارسال سیگنالی به ماژول رله، دستگاه را خاموش می کند.
بلوک دیاگرام :
دیاگرام مدار :
کد نویسی:
نکته مهم قبل از آپلود کد روی برد آردوینو UNO، مطمئن شوید که سیم RX و TX ماژول GSM را جدا کرده اید. بعد از اینکه کد را در برد آردوینو UNO آپلود کردید، سیم RX و TX را از ماژول GSM به برد آردوینو UNO وصل کنید.
1 2 |
int appliance1=2; char gsmData; |
یک متغیر به نام appliance1 ایجاد می کنیم تا شماره پین را در جایی که پین سیگنال رله را وصل کرده ایم ذخیره کند. همچنین متغیر دیگری به نام gsmData ایجاد می کنیم تا داده های دریافتی آردوینو از ماژول GSM را ذخیره کند.
1 2 3 4 5 |
void setup() { // put your setup code here, to run once: Serial.begin(115200); delay(25000); pinMode(appliance1,OUTPUT); |
در () void setup، ابتدا نرخ باود را برای 115200 تنظیم می کنیم. سپس یک delay می دهیم تا GSM با موفقیت به شبکه وارد شود. سپس پایه سیگنال رله را به عنوان ورودی تنظیم می کنیم زیرا آردوینو از این پایه برای ارسال سیگنال به رله استفاده می کند.
1 2 3 4 |
Serial.print("AT+CMGF=1\r"); delay(100); Serial.print("AT+CNMI=2,2,0,0,0\r"); delay(100); |
با استفاده از دستور AT+CMGF=1، حالت پیامک را در متن تنظیم می کنیم. سپس 100 میلی ثانیه تاخیر می دهیم ، سپس با استفاده از دستور AT+CNMI=2,2,0,0,0 محتوای SMS را به پورت سریال ارسال می کنیم.
1 |
digitalWrite(appliance1,HIGH); |
منطق HIGH را به پین سیگنال رله ارسال می کنیم تا ابتدا آن را خاموش کند.
1 2 3 4 5 |
void loop() { // put your main code here, to run repeatedly: if(Serial.available()>0) { gsmData=Serial.read(); |
در حلقه () void، ابتدا با استفاده از دستور () available بررسی می کنیم که آیا ارتباط سریال موجود است یا خیر. پس از آن داده ها را از ماژول GSM در متغیر gsmData ذخیره می کنیم.
1 2 3 4 5 6 7 8 9 |
if(gsmData=='on') { digitalWrite(appliance1,LOW); } else if(gsmData=='off') { digitalWrite(appliance1,HIGH); } } |
با استفاده از عبارت ifو else-if داده های GSM را بررسی می کنیم. اگر داده ها برابر با”on “باشد ، رله دستگاه را روشن می کند. اگر داده ها برابر با”off “باشد ، رله دستگاه را خاموش می کند.
کد کامل:
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 |
int appliance1=2; char gsmData; void setup() { // put your setup code here, to run once: Serial.begin(115200); delay(25000); pinMode(appliance1,OUTPUT); Serial.print("AT+CMGF=1\r"); delay(100); Serial.print("AT+CNMI=2,2,0,0,0\r"); delay(100); digitalWrite(appliance1,HIGH); } void loop() { // put your main code here, to run repeatedly: if(Serial.available()>0) { gsmData=Serial.read(); if(gsmData=='on') { digitalWrite(appliance1,LOW); } else if(gsmData=='off') { digitalWrite(appliance1,HIGH); } } Serial.print("AT+CMGD=1,4"); } |
ارسال پاسخ