خودروهایی با رانندگی خودکار و وسایل نقلیه متصل، قطعا نحوهی ارتباطات ما را تغییر خواهند داد. امروزه شرکتهایی مانند Tesla صاحبان خودروها را تشویق میکنند تا خودروهای خود را، هنگامی که از آنها استفاده نمیکنند به عنوان روباتهای تاکسی به آنها قرض دهند. مدیر شرکت تسلا، ایلان ماسک اخیراً در توییتر اعلام کرد که تا سال 2020 حدود 1 میلیون تاکسی روباتی در جادهها حضور خواهد داشت.
با وجود خودروهای بدون سرنشین حامل مسافر و کامیونهای حامل محمولههای ارزشمند، وجود یک سیستم مدیریت ناوگان احساس میشود، سیستمی که مکان این خودروها را دنبال کرده و مطمئن گردد که در زمان مناسب در مکان مناسب خواهند بود. در حالت کلی از یک ماژول GPS برای هر نوع مکانیابی استفاده میشود، اما اینجا در این مقاله ما از ماژول GSM SIM800 برای ساخت یک ردیاب مکانی ساده همراه با آردوینو استفاده میکنیم. سیستم ردیابی GPRS از طریق مودم GSM و میکروکنترلر (آردوینو) عمل میکند و روی یک PCB از PCBGOGO ساخته میشود. این سیستم به گونهای عمل میکند که با برقراری تماس تلفنی از ماژول GSM، ماژول مکان را بررسی کرده و آن را به صورت پیام متنی شامل لینک نقشه گوگل، به شمارهای که تماس از آن برقرار شده ارسال میکند. وقتی که لینک روی تلفن باز میشود، مکان مودم روی نقشه گوگل نمایش داده میشود. جالب به نظر میرسد نه؟! با ما همراه باشید.
دیاگرام مدار
سیستم ردیاب خودرو GSM از GPRS ماژول SIM800 GSM استفاده میکند، که به یک میکروکنترلر مانند آردوینو متصل شده است. اگرچه هم آردوینو و هم ماژول GSM به صورت جداگانه قابل تهیه هستند تصمیم گرفتیم که مدار خود را به گونهای تنظیم کنیم که هر دو را روی یک بورد ترکیب کرده تا در فضا و هزینه صرفهجویی شود. بورد را میتوان با یک اداپتور ۱۲ ولتی و یا یک باتری ۱۲ ولتی خودرو/کامیون تغذیه کرد، مبدل باک روی برد ولتاژ را از ۱۲ ولت به ۴ ولت برای ماژول GSM و به ۳.۳ ولت برای آردوینو پایین میآورد. دیاگرام مداری کامل در زیر آمده است.
در زیر بخشهای مختلف مدار را به چند بلوک تقسیم کرده و توضیح میدهیم تا مطمئن گردیم که شما قادر به استفاده و یا ویرایش آنها مطابق نیاز خودتان خواهید بود.
ماژول توان LM2596
ما از آیسی رگولاتور LM2596 Buck، برای فراهم کردن ولتاژ ۴ ولت برای ماژول SIM800 از ورودی ۱۲ ولت استفاده کرده ایم. ماژول SIM800 هنگام راهاندازی اولیه و جستجوی شبکه، به جریان پیک حدود ۲ آمپر نیاز دارد و بنابراین، منبع تغذیه باید بتواند این جریان را تحمل کند در غیر این صورت، ماژول وارد حالت shutdown میشود، به همین دلیل هم آیسی LM2596 انتخاب شده که تا جریان ۳ آمپر را تحمل میکند. مدار رگولاتور منبع تغذیه به صورت زیر است.
ولتاژ ۱۲ ولت تنظیم نشده به پین ۱ اعمال گردیده و ولتاژ تنظیم شده از پین ۲ گرفته میشود، و از یک فلیتر LC با مقدار 100uH و 470uF عبور کرده تا نویزهای سوئیچینگ حذف گردد. ولتاژ خروجی را میتوان با استفاده از مقاومتهای R30 و R29، که یک مقسم ولتاژ ایجاد میکنند و همانند شکل به پین فیدبک متصل هستند تنظیم کرد. فرمول محاسبه ولتاژ خروجی برای LM2596 به صورت زیر است.
Vout = 1.23 * ((R1+R2)/R1)
در دیاگرام ما، مقاومت R29 ،R1 و مقاومت R30 برابر R2 است. برای مقاومت R29 مقدار ۱ کیلواهم و برای مقاومت R29 مقدار ۲.۲ کیلواهم را انتخاب کرده تا به ولتاژ ۴ ولت دست پیدا کنیم. دقت کنید که ماژول SIM800 ولتاژ را بین ۳.۷ ولت تا ۴.۲ ولت مجدداً به دست آورده تا به صورت نرمال کار کند.
تواندهی و ارتباط با آیسی SIM800
مودم SIM800 GSM معمولاً به اندازه مودمهای معمولی در دسترس است، اما ما از آیسی خام استفاده کردیم تا فضا و هزینه برد را کاهش دهیم. استفاده از مودم SIM800 بسیار آسان است، تنها نیاز است که آیسی را از طریق پین VBAT و GND توان دهیم و پین PWR KEY را برای فعال کردن مودم به مدت ۱ ثانیه پایین بکشیم. به صورت پیشفرض، پین از طریق یک مقاومت به صورت داخلی به VBAT بالاکش شده است.
ولتاژ برای VBAT از ولتاژ تنظیم شده (GSM_VCC) آیسی LM2596 میآید. نام پین VBAT است زیرا معمولاً با یک باتری لیتیومی تغذیه میشود، بنابراین اگر از آن بر روی دستگاههای قابل حمل استفاده کنید، در آن صورت میتوانید مدار LM2596 را نادیده گرفته و آن را مستقیماً به باتری لیتیوم پلیمری وصل کنید. پس از آن پینهای شبکه را داریم که به یک جای سیم کارت ۶ پینه وصل شدهاند. پین NETLIGHT به یک LED متصل است. این LED، به عنوان یک LED وضعیت برای نمایش وضعیت شبکه عمل میکند، هرچند استفاده از آن دلخواه است. به صورت مشابه، از پین BT_ANT میتوان برای اتصال یک آنتن به ماژول استفاده کرد تا کار وصل شدن به شبکه را آسانتر گرداند، که باز هم اختیاری است.
درنهایت، پینهای TxD RxD به یک پین هدر متصل شدهاند، این دو پین برای ارتباط با یک میکروکنترلر مانند آردوینو از طریق پروتکل استاندارد UART در 9600 buad rate استفاده میشوند. دیگر اتصالات نشان داده شده در مدار بالا اختیاری بوده و تاثیر چندان مهمی بر این پروژه ندارند.
بخش میکروکنترلری مکاننمای GSM
در سمت میکروکنترلر ما چیپ ATMEGA328P از AVR را داریم، که در آردوینو UNO/Nano به کار میرود، اما در اینجا کنترلر مستقیماً روی برد جاسازی شده تا با ماژول SIM800 ارتباط برقرار کند. از آنجایی که ماژول SIM800 در منطق ۳.۳ ولت عمل میکند، تصمیم گرفتیم از خود چیپ ATmega328 نیز با ۳.۳ ولت استفاده کنیم، زیرا این میکرو خود از دو ولتاژ کاری ۳.۳ ولت و ۵ ولت بهره میگیرد.
همانطور که در بالا میبینید ما از آیسی رگولاتور AMS1117 3.3V برای تنظیم ولتاژ از ورودی ۱۲ ولت استفاده کردهایم و از طریق آن آیسی Atmega328 را تغذیه کردهایم. اگرچه SIM800 با سطح منطق ۳.۳ ولت عمل میکند، میتواند بدون نیاز به هیچ مبدل سطح منطقی، با آردوینو Uno/Nano به صورت خارجی ارتباط برقرار کند. مدار همچنین برخی پینها را به یک پین هدر وصل کرده تا مشابه اردوینو Pro mini در حالت ۳.۳ ولت، بتوانیم از طریق پروگرامر FTDI آیسی Atmega328 را برنامهریزی کنیم.
اتصال برد به اردوینو Nano
هدر روی بورد با برچسب P2 را میتوان مستقیماً به آردوینو Nano متصل کرد. ما پینها را مطابق جدول زیر اتصال دادهایم.
Arduino Nano |
SIM800 |
Pin D12 |
PWR_KY |
Pin D11 |
TxD |
Pin D10 |
RxD |
Gnd |
GND |
Power key متصل به پین D12 برای فعال/غیرفعال کردن ماژول پس از روشن شدن آن استفاده میشود، این کار منجر به ذخیره توان در زمانهایی میشود که از ماژول استفاده نمیگردد. پین D11 و پین D12 به ترتیب به Tx و Rx متصل شدهاند، ما آردوینو را به گونهای برنامهریزی میکنیم که از این پینها برای برقراری ارتباط سریال با بورد استفاده کند. پس از برقراری اتصالات بورد به ترتیب زیر خواهد بود.
برنامهریزی آردوینو برای سیستم ردیابی خودرو GPRS
کل پروژه را میتوان به سه بخش اصلی، یعنی دریافت تماس از کاربر، دریافت مختصات GPS از SIM800، و ارسال دادههای GPS به تماس گیرنده از طریق پیام کوتاه تقسیم کرد. تا اینجا با نحوهی ارسال پیام با استفاده از ماژول GSM و آردوینو و مدیریت تماسها با ماژول GSM آشنا شدیم، بنابراین بیشتر از این راجع به آنها صحبت نخواهیم کرد.
دریافت مختصات جغرافیایی مکانها (طول و عرض) از ماژول SIM800 GSM
دریافت مختصات از GPS در مقایسه با GSM آسانتر میباشد. دستورات AT زیر را برای دریافت اطلاعات مکان در فرمت DD از ماژول SIM800 به کار میبندیم.
توضیح |
دستورAT |
اتصال سیم کارت به GPROS |
AT+CGATT=1 |
فعال کردن پروفایل حامل(bearer profile) با اتصال نوع GPRS |
AT+SAPBR=3,1,”CONTYPE”,”GPRS” |
تعیین VPN برای پروفایل حامل |
AT+SAPBR=3,1,”APN”,”RCMNET” |
بازکردن پروفایل حامل |
AT+SAPBR=1,1 |
گرفتن آدرس IP پروفایل حامل |
AT+SAPBR=2,1 |
درخواست برای مکان پین کد (Pincode)، طول و عرض |
AT+CIPGSMLOC=1,1 |
وقتی که دستورات مستقیماً از طریق پورت سریال اجرا میشوند پاسخی مشابه شکل زیر دارند.
در شکل بالا دور مکان نهایی خط کشیدهایم. همانطور که میبینید پاسخ به دستور «AT+CIPGSMLOC=1,1» چیزی شبیه زیر خواهد بود
+CIPGSMLOC: 0,75.802460,26.848892,2019/04/23,08:32:35
وقتی که پین کد مکان صفر است، (در کشور هند قابل دریافت نیست) ۲۶.۸۴۸۸۸۳۲ عرض و ۷۵.۸۰۲۴۶۰ طول میباشد. بنابراین این مقادیر را از نتایج حاصله جدا کرده و آن را به یک لینک نقشه گوگل اضافه میکنیم تا روی نقشه به این مکان اشاره شود. لینک چیزی شبیه شکل زیر خواهد بود.
https://www.google.com/maps/place/26.8488892,75.802460
از کد اردوینو برای انجام این کار استفاده میکنیم و لینک را هنگام درخواست از طریق SMS به تلفنمان ارسال میکنیم. مانند همیشه برنامه کامل همراه با ویدئو و جزئیات در انتهای صفحه آمده است، اما در اینجا برنامه را در بخشهای کوچک توضیح خواهیم داد تا آن را بهتر درک کنید.
آردوینو به وسیله ارتباط سریال و دستور AT با ماژول SIM800 ارتباط برقرار میکند. برای هر دستور AT که میفرستیم ماژول به صورت کارکتر به کارکتر پاسخ میدهد و اگر نتیجه موفقیتآمیز باشد پیام با OK به پایان میرسد. بنابراین پیش از شروع به نوشتن برنامه، یک تابع با نام SIM800_send مینویسیم که یک دستور AT را به عنوان رشته دریافت کرده و آن را با استفاده از دستور SIM800.println به ماژول GSM میفرستد و با استفاده از تابع ()SIM800.read نتایج حاصله از ماژول SIM800 را گرفته و بازمیگرداند. تابع در زیر آمده است.
String SIM800_send(String incoming) //Function to communicate with SIM800 module { SIM800.println(incoming); delay(100); //Print what is being sent to GSM module String result = ""; while (SIM800.available()) //Wait for result { char letter = SIM800.read(); result = result + String(letter); //combine char to string to get result } return result; //return the result }
درون تابع setup، ارتباط serial monitor و SIM800 را در نرخ 9600 baud آغاز میکنیم و همچنین پین ۱۲ (PWR_KY) را برای فعال کردن ماژول GSM به مدت ۱ ثانیه low میکنیم. سپس از تابعی که در بالا درست کردیم برای ارتباط با ماژول GSM بهره میگیریم. ابتدا اکو را با استفاده از دستور «ATE» فعال کرده و سپس دستوراتی که در بالا لیست شده بود را برای دریافت مختصات از ماژول GSM آغاز میکنیم. بعد از هر دستور AT، پاسخ را در serial monitor با هدف اشکالزدایی چاپ میکنیم، کد مربوطه در زیر آمده است.
void setup() { //PWRKY pin of GSM module has to be pulled low for 1sec to enable the module pinMode(12,OUTPUT); digitalWrite(12, LOW); //Pull-down delay(1000); digitalWrite(12, HIGH); //Release Serial.begin(9600); //Serial COM for debugging SIM800.begin(9600); //Software serial called SIM800 to speak with SIM800 Module delay(1000); //wait for serial COM to get ready responce = SIM800_send("ATE1"); //Enable Echo if not enabled by default Serial.print ("Responce:"); Serial.println(responce); delay(1000); responce = SIM800_send("AT+CGATT=1"); //Set the SIM800 in GPRS mode Serial.print ("Responce:"); Serial.println(responce); delay(1000); responce = SIM800_send("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\" "); //Activate Bearer profile Serial.print ("Responce:"); Serial.println(responce); delay(1000); responce = SIM800_send("AT+SAPBR=3,1,\"APN\",\"RCMNET\" "); //Set VPN options => 'RCMNET' 'www' Serial.print ("Responce:"); Serial.println(responce); delay(2000); responce = SIM800_send("AT+SAPBR=1,1"); //Open bearer Profile Serial.print ("Responce:"); Serial.println(responce); //Open bearer Profile delay(2000); responce = SIM800_send("AT+SAPBR=2,1"); //Get the IP address of the bearer profile Serial.print ("Responce:"); Serial.println(responce); delay(1000); }
دقت کنید که از دستور AT آخر لیست، که در واقع مختصات مکان را اخذ میکند استفاده نکردهایم. زیرا از آن تنها زمانی استفاده میکنیم که یک تماس روی ماژول GSM قرار دارد.
درون تابع loop، بررسی میکنیم که آیا ماژول چیزی برای گفتن دارد یا نه. اگر ماژول یک تماس دریافت کند، «RING» را چاپ خواهد کرد. بنابراین برنامه را به گونهای تنظیم میکنیم که همه کارکترهای خروجیها را برای بررسی عبارت RING به صورت رشته ترکیب کند و آن را مستقیماً با «RING» مقایسه کند. کد در زیر آمده است.
if (SIM800.available()) { //Check if the SIM800 Module is telling anything char a = SIM800.read(); Serial.write(a); //print what the module tells on serial monitor incoming = incoming + String(a); if (a == 13) //check for new line incoming =""; //clear the string if new line is detected incoming.trim(); //Remove /n or /r from the incomind data if (incoming=="RING") //If an incoming call is detected the SIM800 module will say "RING" check for it {
اگر RING تشخیص داده شود، زمان اخذ کردن دادههای مکان است، داده را تریم (trim) کرده و آن را به یک لینک نقشه گوگل تبدیل میکنیم و در نهایت به صورت یک پیام کوتاه ارسال میکنیم. اما پیش از آن باید تماس ورودی را قطع کنیم، برای انجام این کار از دستور «ATH» استفاده میکنیم. سپس اکو را با دستور ATE غیرفعال کرده و با استفاده از دستور «AT+CIPGSMLOC=1,1» دادهی مکانی را از اینترنت میگیریم.
Serial.println ("Sending sms"); delay(1000); responce = SIM800_send("ATH"); //Hand up the incoming call using ATH delay (1000); responce = SIM800_send("ATE0"); //Disable Echo delay (1000); responce = ""; Latitude=""; Longitude=""; //initialise all string to null SIM800.println("AT+CIPGSMLOC=1,1"); delay(5000); //Request for location data
مجددا، از همان روش حلقه while برای تبدیل کارکترهای خروجی به رشته استفاده میکنیم. همانطور که پیش از این صحبت کردیم، این بار رشته شامل پاسخ دستور «AT+CIPGSMLOC=1,1» میباشد که حاوی اطلاعات عرض و طول است. از تابع ()prepare_message برای تریم کردن مقدار عرض و طول استفاده میکنیم. همانطور که در پیام ساده زیر مشاهده میکنید.
+CIPGSMLOC: 0,75.802460,26.848892,2019/04/23,08:32:35
مقدار طول جغرافیایی پس از دستور اول شروع شده و پیش از دستور دوم به پایان میرسد. به طرز مشابه، مقدار عرض جغرافیایی پس از دستور دوم شروع شده و با کامای سوم به پایان میرسد. با استفاده از این ویژگیها میتوان عرض و طول جغرافیایی را با استفاده از کد زیر از برنامه اخذ کرد.
void prepare_message() { //Sample Output for AT+CIPGSMLOC=1,1 ==> +CIPGSMLOC: 0,75.802460,26.848892,2019/04/23,08:32:35 //where 26.8488832 is Lattitude and 75.802460 is longitute int first_comma = responce.indexOf(','); //Find the position of 1st comma int second_comma = responce.indexOf(',', first_comma+1); //Find the position of 2nd comma int third_comma = responce.indexOf(',', second_comma+1); //Find the position of 3rd comma for(int i=first_comma+1; i<second_comma; i++) //Values form 1st comma to 2nd comma is Longitude Longitude = Longitude + responce.charAt(i); for(int i=second_comma+1; i<third_comma; i++) //Values form 2nd comma to 3rd comma is Latitude Latitude = Latitude + responce.charAt(i);
حال که مقادیر عرض و طول جغرافیایی را داریم باید آنها را با یک کامای مابین، به لینک اضافه کنیم. کد در زیر امده است.
Serial.println(Latitude); Serial.println(Longitude); Link = Link + Latitude + "," + Longitude; //Update the Link with latitude and Logitude values
درنهایت، میتوان لینک را به صورت پیام کوتاه به شماره موبایل ارسال کرد. در اینجا ما شماره موبایل را به صورت هارد کد با دستور ”AT+CMGS=”0907923XXXX نوشتهایم، مراقب باشید که آن را با شماره موبایل خود جایگزین کنید.
SIM800.println("AT+CMGF=1"); //Set the module in SMS mode delay(1000); SIM800.println("AT+CMGS=\"907923XXXX\""); //Send SMS to this number delay(1000); SIM800.println(Link); // we have send the string in variable Link delay(1000); SIM800.println((char)26);// ASCII code of CTRL+Z - used to terminate the text message delay(1000);
تست دستگاه ردیابی GPRS
اتصالات را همانند آنچه در بالا صحبت کردیم برقرار کرده و کد را به آردوینو آپلود کنید. سیم کارت را قرار داده و اطمینان حاصل کنید که سیگنال شبکه حاصل شده است. یک راه برای انجام این کار مشاهده LED روی ماژول GSM است، که باید هر ۳ ثانیه چشمک بزند. اکنون monitor serial را باز کرده و باید پیام زیر را در صفحه مشاهده کنید.
این بدان معناست که ماژول GSM برای اخذ مختصات تنظیم شده و آماده دریافت تماسهای ورودی است. میتوان به سادگی به شماره GSM SIM خود از هر شمارهای تماس گرفته و مشاهده کنید که تماس بعد از چند بار زنگ خوردن قطع میشود و یک پیام به شمارهای که در برنامه وارد کرده بودید ارسال میشود. پیام متنی شامل لینک نقشه گوگل به صورت زیر است.
روی لینک کلیک کرده و تلفن به صورت خودکار وارد Google maps شده و مکان دریافتی روی گوشی شما با یک پین قرمز رنگ مشخص میشود. آنگاه میتوان به مکان مراجعه کرده و یا آدرس آن را گرفت. لینک بالا هنگامی که باز میشود مانند تصویر زیر ظاهر میشود.
همانطور که میبینید نقطه آبی مکانی است که GPS گوشی اخذ کرده و علامت قرمز مکانی است که ماژول GSM داده است. همانطور که انتظار میرفت به اندازه GPS دقیق نیست اما برای برخی کاربردها کماکان مناسب است و از آنجایی که از یک ماژول برای ارسال پیام و برقراری تماس استفاده شده است بسیار موثر میباشد. اگر میخواهید ردیابی مکانی با استفاده از GPS را ببنید لینک را دنبال کنید.
عملکرد کامل پروژه را میتوانید در ویدئوی زیر مشاهده کنید. امیدواریم آن را دوست داشته باشید و از ساخت آن لذت برده باشید. اگر هرگونه سوالی داشتید در بخش کامنتها آنها را مطرح کنید و یا از فروم مباحث تخصصی استفاده کنید.
کد
/*Program to send Latitude and Logitute Information from SIM800 to Phone via SMS on call request * Code by: B.Aswinth Raj * For: www.circuitdigest.com * Tr: Melec.ir * Dated:23-04-2019 * Sample Output for AT+CIPGSMLOC=1,1 ==> +CIPGSMLOC: 0,75.802460,26.848892,2019/04/23,08:32:35 //where 26.8488832 is Lattitude and 75.802460 is longitute * Link to send: https://www.google.com/maps/place/26.8488892,75.802460 //where 26.8488832 is Lattitude and 75.802460 is longitute */ #include <SoftwareSerial.h> //Software Serial header to communicate with GSM module SoftwareSerial SIM800(10, 11); // RX, TX String Link = "The current Location is https://www.google.com/maps/place/"; //we will append the Lattitude and longitude value later int the program String responce = ""; String Longitude = ""; String Latitude = ""; String SIM800_send(String incoming) //Function to communicate with SIM800 module { SIM800.println(incoming); delay(100); //Print what is being sent to GSM module String result = ""; while (SIM800.available()) //Wait for result { char letter = SIM800.read(); result = result + String(letter); //combine char to string to get result } return result; //return the result } void setup() { //PWRKY pin of GSM module has to be pulled low for 1sec to enable the module pinMode(12,OUTPUT); digitalWrite(12, LOW); //Pull-down delay(1000); digitalWrite(12, HIGH); //Release Serial.begin(9600); //Serial COM for debugging SIM800.begin(9600); //Software serial called SIM800 to speak with SIM800 Module delay(1000); //wait for serial COM to get ready responce = SIM800_send("ATE1"); //Enable Echo if not enabled by default Serial.print ("Responce:"); Serial.println(responce); delay(1000); responce = SIM800_send("AT+CGATT=1"); //Set the SIM800 in GPRS mode Serial.print ("Responce:"); Serial.println(responce); delay(1000); responce = SIM800_send("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\" "); //Activate Bearer profile Serial.print ("Responce:"); Serial.println(responce); delay(1000); responce = SIM800_send("AT+SAPBR=3,1,\"APN\",\"RCMNET\" "); //Set VPN options => 'RCMNET' 'www' Serial.print ("Responce:"); Serial.println(responce); delay(2000); responce = SIM800_send("AT+SAPBR=1,1"); //Open bearer Profile Serial.print ("Responce:"); Serial.println(responce); //Open bearer Profile delay(2000); responce = SIM800_send("AT+SAPBR=2,1"); //Get the IP address of the bearer profile Serial.print ("Responce:"); Serial.println(responce); delay(1000); } void prepare_message() { //Sample Output for AT+CIPGSMLOC=1,1 ==> +CIPGSMLOC: 0,75.802460,26.848892,2019/04/23,08:32:35 //where 26.8488832 is Lattitude and 75.802460 is longitute int first_comma = responce.indexOf(','); //Find the position of 1st comma int second_comma = responce.indexOf(',', first_comma+1); //Find the position of 2nd comma int third_comma = responce.indexOf(',', second_comma+1); //Find the position of 3rd comma for(int i=first_comma+1; i<second_comma; i++) //Values form 1st comma to 2nd comma is Longitude Longitude = Longitude + responce.charAt(i); for(int i=second_comma+1; i<third_comma; i++) //Values form 2nd comma to 3rd comma is Latitude Latitude = Latitude + responce.charAt(i); Serial.println(Latitude); Serial.println(Longitude); Link = Link + Latitude + "," + Longitude; //Update the Link with latitude and Logitude values Serial.println(Link); } String incoming = ""; void loop() { if (SIM800.available()) { //Check if the SIM800 Module is telling anything char a = SIM800.read(); Serial.write(a); //print what the module tells on serial monitor incoming = incoming + String(a); if (a == 13) //check for new line incoming =""; //clear the string if new line is detected incoming.trim(); //Remove /n or /r from the incomind data if (incoming=="RING") //If an incoming call is detected the SIM800 module will say "RING" check for it { Serial.println ("Sending sms"); delay(1000); responce = SIM800_send("ATH"); //Hand up the incoming call using ATH delay (1000); responce = SIM800_send("ATE0"); //Disable Echo delay (1000); responce = ""; Latitude=""; Longitude=""; //initialise all string to null SIM800.println("AT+CIPGSMLOC=1,1"); delay(5000); //Request for location data while (SIM800.available()) { char letter = SIM800.read(); responce = responce + String(letter); //Store the location information in string responce } Serial.print("Result Obtained as:"); Serial.print(responce); Serial.println("*******"); prepare_message(); delay(1000); //use prepare_message funtion to prepare the link with the obtained LAT and LONG co-ordinates SIM800.println("AT+CMGF=1"); //Set the module in SMS mode delay(1000); SIM800.println("AT+CMGS=\"9612345678\""); //Send SMS to this number delay(1000); SIM800.println(Link); // we have send the string in variable Link delay(1000); SIM800.println((char)26);// ASCII code of CTRL+Z - used to terminate the text message delay(1000); } } if (Serial.available()) { //For debugging SIM800.write(Serial.read()); } }
ویدیو
- منبع: ترجمه از سایت circuitdigest.com
اگر آموزش «ساخت مسیریاب مکانی با استفاده از GSM SIM800 و آردوینو» براتون مفید واقع شده ما را نیز دعا کنید و اگر خواستین میتوانید از محتوای رایگان آموزشی حمایت مالی کنید. همچنین نظرات، پیشنهادات و درخواستهای خود را در کامنتها ⇓ بنویسید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام
ممنون از سایت خوبتون
چند تا نکته راجع به این آموزش
در دستورAT+SAPBR=3,1,”APN”,”RCMNET”
بجای rcmnet برای سیمکارت همراه اول بایستی mcinet و برای ایرانسل mtnirancell قرار دهید.
من نتونستم از AT+CIPGSMLOC=1,1 جواب بگیرم
بجاش از دستور AT+CLBS=1,1 استفاده کردم