ردیاب GPS، SIM800L و SMS یعنی چه؟ (برای مبتدی)
تصور کنید ماشین RC یا پهپاد شما گم شود. اگر یک ردیاب GPS داشته باشید، کافی است یک پیامک بفرستید و موقعیت دقیق دستگاه را بدانید. این پروژه دقیقاً همین کار را میکند. SIM800L یک ماژول GSM/GPRS کوچک است که مثل یک گوشی موبایل ساده کار میکند — به آن یک سیمکارت میدهید و میتواند SMS بفرستد و دریافت کند. قیمتش خیلی ارزان است (زیر ۳۰۰ هزار تومان) و با آردوینو راحت کار میکند.
وقتی این ماژول را با NEO-6M GPS ترکیب میکنید، یک سیستم ردیابی کامل میسازید: GPS موقعیت را پیدا میکند، آردوینو داده را پردازش میکند، و SIM800L یک پیامک با لینک Google Maps مستقیم میفرستد. گیرنده SMS فقط روی لینک کلیک میکند و موقعیت را روی نقشه میبیند.
نکته مهم: SIM800L به ۳.۷ تا ۴.۲ ولت نیاز دارد و هنگام ارسال SMS جریان زیادی میکشد (تا ۲ آمپر پیک). از رگولاتور قوی یا باتری LiPo 1S مستقیم تغذیه کنید.
محصولی که میسازید
یک ردیاب GPS مستقل که با یک پیامک، لینک دقیق Google Maps موقعیت دستگاه را میفرستد. قابل نصب روی UGV، ماشین RC، دوچرخه یا کوله.
- زمان: ۳ تا ۴ ساعت
- هزینه: ۸۰۰ هزار تا ۱.۲ میلیون تومان
- نیاز: سیمکارت ایرانسل یا همراه اول با اعتبار فعال
قطعات لازم (BOM)
| قطعه | مدل | نقش |
|---|---|---|
| میکروکنترلر | Arduino Nano V3 | مغز |
| ماژول GPS | NEO-6M با آنتن سرامیکی | موقعیت |
| ماژول GSM | SIM800L V2 | ارسال SMS |
| رگولاتور | LM2596 یا باتری 1S LiPo | تغذیه SIM800L |
| خازن | 1000μF / 6.3V | جذب پیک جریان SIM800L |
| سیمکارت | ایرانسل یا همراه اول | شبکه GSM |
اتصالات سیمکشی
| قطعه | پین | آردوینو |
|---|---|---|
| NEO-6M | TX | D4 (SoftSerial RX) |
| SIM800L | TX | D7 (SoftSerial RX) |
| SIM800L | RX | D8 (SoftSerial TX) + مقاومت تقسیم ولتاژ |
| SIM800L | VCC | 3.7-4.2V مستقیم از LiPo/LM2596 |
⚠ پین RX سیمکارت ۸۰۰L فقط ۲.۸V تحمل دارد. از مقسم ولتاژ (۱۰k و ۱۵k) استفاده کنید تا ۵V آردوینو را به ۲.۸V تبدیل کنید.
کد کامل
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
SoftwareSerial gpsSerial(4, 3); // GPS RX, TX
SoftwareSerial simSerial(7, 8); // SIM800L RX, TX
TinyGPSPlus gps;
const String MY_NUMBER = "+989XXXXXXXXX"; // شماره گوشی شما
void sendSMS(String number, String text) {
simSerial.println("AT+CMGF=1");
delay(1000);
simSerial.print("AT+CMGS=\""); simSerial.print(number); simSerial.println("\"");
delay(1000);
simSerial.print(text);
delay(100);
simSerial.write(26); // Ctrl+Z برای ارسال
delay(5000);
Serial.println("SMS sent!");
}
void setup() {
Serial.begin(9600);
gpsSerial.begin(9600);
simSerial.begin(9600);
delay(5000);
simSerial.println("AT"); delay(1000);
simSerial.println("AT+CMGF=1"); delay(1000);
Serial.println("System ready. Waiting for GPS fix...");
}
void loop() {
// خواندن GPS
gpsSerial.listen();
unsigned long start = millis();
while (millis() - start < 2000) {
while (gpsSerial.available()) gps.encode(gpsSerial.read());
}
// بررسی دستور SMS ورودی (هر ۳۰ ثانیه)
simSerial.listen();
delay(100);
if (simSerial.available()) {
String incoming = simSerial.readString();
if (incoming.indexOf("TRACK") >= 0) {
if (gps.location.isValid()) {
String lat = String(gps.location.lat(), 6);
String lon = String(gps.location.lng(), 6);
String msg = "موقعیت من:\nhttps://maps.google.com/?q=" + lat + "," + lon;
msg += "\nسرعت: " + String(gps.speed.kmph(), 1) + " km/h";
sendSMS(MY_NUMBER, msg);
} else {
sendSMS(MY_NUMBER, "GPS هنوز Fix نگرفته. لطفاً ۲ دقیقه صبر کنید.");
}
}
}
delay(30000); // بررسی هر ۳۰ ثانیه
}
چکلیست تست
| تست | نتیجه |
|---|---|
| دستور AT در Serial Monitor جواب «OK» میدهد؟ | بله — SIM800L کار میکند |
| LED چشمکزن SIM800L آهسته است؟ (هر ۳ ثانیه) | بله — به شبکه وصل است |
| ارسال SMS دستی موفق؟ | پیامک رسید |
| بعد از ارسال «TRACK»، لینک Maps درست است؟ | موقعیت درست نمایش داده میشود |