ข้อมูลจะถูกบันทึกในสเปรดชีต dataGPS.csv ซึ่งมีรูปแบบที่สอดคล้องกับข้อกำหนดของบริการ Google แผนที่ของฉัน.

    ภาษาการเขียนโปรแกรม: Arduino (C++)

คำแนะนำวิดีโอ

สิ่งที่คุณต้องการ

วิธีการประกอบ

gps-tracker.ino // ไลบรารีสำหรับการทำงานกับอุปกรณ์ผ่าน SPI#รวม // ห้องสมุดสำหรับการทำงานกับการ์ด SD#รวม // ห้องสมุดสำหรับการทำงานกับอุปกรณ์ GPS#รวม // สร้างอ็อบเจ็กต์ของคลาส GPS และส่งอ็อบเจ็กต์ Serial1 ไปให้จีพีเอส จีพีเอส(อนุกรม1); // พิน LED#กำหนด LED_PIN A0 // ปักหมุดปุ่ม #กำหนด BUTTON_PIN 13 // ปักหมุดการ์ด CS micro-sd#กำหนด CHIP_SELECT_PIN 9 // ช่วงเวลาในการเขียนข้อมูลลงการ์ด#กำหนดช่วงเวลา 5000 // กำหนดขนาดอาร์เรย์สำหรับเวลา วันที่ ละติจูด และลองจิจูด#กำหนด MAX_SIZE_MASS 16 // อาร์เรย์เพื่อเก็บเวลาปัจจุบันเวลาถ่าน [MAX_SIZE_MASS]; // บันทึกสถานะบูล stateRec = false ; // จำเวลาปัจจุบันเริ่มต้นยาวMillis = มิลลิวินาที() ; การตั้งค่าเป็นโมฆะ () ( // เปิดพอร์ตอนุกรมเพื่อตรวจสอบการกระทำในโปรแกรมอนุกรม.เริ่มต้น(115200); // รอจนกระทั่งมอนิเตอร์พอร์ตอนุกรมเปิดขึ้น // เพื่อติดตามเหตุการณ์ทั้งหมดในโปรแกรม// ในขณะที่ (!Serial) ( // ) Serial.print ("Serial init OK \ร\n") ; // เปิดการเชื่อมต่อแบบอนุกรมกับโมดูล GPS Serial1.begin(115200); // ตั้งค่า LED เป็นโหมดเอาท์พุต pinMode(LED_PIN, เอาท์พุต); // ตั้งค่าปุ่มเป็นโหมดเข้าสู่ระบบ pinMode(BUTTON_PIN, INPUT_PULLUP) ; // ข้อมูลเอาต์พุตเกี่ยวกับการเริ่มต้นไปยังพอร์ตอนุกรม Serial.println("กำลังเริ่มต้นการ์ด SD...") ; // เริ่มต้นการ์ด SDในขณะที่ (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("การ์ดล้มเหลวหรือไม่มีอยู่" ) ; ล่าช้า (1000 ) ; ) // ข้อมูลส่งออกไปยังพอร์ตอนุกรม Serial.println("การ์ดเตรียมใช้งานแล้ว"); // สร้างวัตถุ dataFile ของคลาส File เพื่อทำงานกับไฟล์ไฟล์ dataFile = SD.open("dataGPS.csv" , FILE_WRITE); // ถ้ามีไฟล์อยู่ถ้า (dataFile) ( // เขียนชื่อของข้อมูลในอนาคตลงในการ์ดหน่วยความจำ dataFile.println("เวลา, พิกัด, ความเร็ว"); //ปิดไฟล์ dataFile.ปิด(); Serial.println("บันทึกตกลง"); ) else ( Serial.println ("เกิดข้อผิดพลาดในการเปิด test.csv" ) ; ) ) void loop() ( // บันทึกการกดปุ่มถ้า (! digitalRead(BUTTON_PIN) ) ( // เปลี่ยนสถานะ "กำลังบันทึก" / "ไม่ได้เขียน" ไปยังการ์ดหน่วยความจำ stateRec = ! stateRec; // เปลี่ยนสถานะของไฟ LED แสดงสถานะ digitalWrite (LED_PIN, stateRec); - // ถ้าข้อมูลมาจากโมดูล GPSถ้า (gps.available()) ( // อ่านข้อมูลและแยกวิเคราะห์ gps.readParsing(); // ตรวจสอบสถานะของโมดูล GPSสวิตช์ (gps.getState () ) ( // ทุกอย่างโอเคกรณี ​​GPS_OK: Serial.println ("GPS ไม่เป็นไร" ); // หากเลยระยะเวลาที่กำหนดไปแล้วถ้า (มิลลิวินาที() - startMillis > ช่วงเวลา && stateRec) ( // บันทึกข้อมูลลงการ์ดหน่วยความจำบันทึก SD() ; //จำเวลาปัจจุบัน startMillis = มิลลิวินาที() ; ) หยุดพัก ; // กรณีข้อผิดพลาดของข้อมูล GPS_ERROR_DATA: Serial.println ("ข้อมูลข้อผิดพลาด GPS" ); หยุดพัก ; // ไม่มีการเชื่อมต่อกับดาวเทียมกรณี GPS_ERROR_SAT: Serial.println ( "GPS ไม่เชื่อมต่อกับดาวเทียม"- หยุดพัก ; - // ฟังก์ชั่นบันทึกข้อมูลลงในการ์ดหน่วยความจำเป็นโมฆะ saveSD() ( ไฟล์ dataFile = SD.open("dataGPS.csv" , FILE_WRITE); // หากไฟล์นั้นมีอยู่และถูกเปิดแล้วถ้า (dataFile) ( // อ่านเวลาปัจจุบัน gps.getTime(เวลา, MAX_SIZE_MASS); // เขียนเวลาลงในการ์ดหน่วยความจำ dataFile.print(" \" " - dataFile.print (เวลา); dataFile.print(" \" " - dataFile.print (" ) ; dataFile.print(" \" " ) ; // อ่านและเขียนพิกัดละติจูดและลองจิจูดลงในการ์ดหน่วยความจำ dataFile.print(gps.getLatitudeBase10(), 6); dataFile.print (" ) ; dataFile.print(gps.getLongitudeBase10(), 6); dataFile.print(" \" " - dataFile.print (" ) ; dataFile.print(gps.getSpeedKm()); dataFile.println("กม./ชม."); dataFile.ปิด(); Serial.println("บันทึกตกลง"); ) else ( Serial.println ("ข้อผิดพลาดในการเปิด test.csv" ) ; ) )

ระบบระบุตำแหน่งทั่วโลกด้วย GPS ได้กลายเป็นส่วนหนึ่งของชีวิตของเราไปแล้ว ปัจจุบันเป็นเรื่องยากที่จะจินตนาการถึงโทรศัพท์มือถือที่ไม่มีโมดูล GPS ในตัว ระบบนำทางด้วยดาวเทียมนี้ช่วยให้คุณติดตามวัตถุใด ๆ กำหนดพิกัดและความเร็วในการเคลื่อนที่ ขณะนี้ GPS สามารถใช้งานได้ไม่เฉพาะกับบริษัทที่พัฒนาอุปกรณ์ที่เกี่ยวข้องเท่านั้น แต่ยังรวมถึงนักวิทยุสมัครเล่นทั่วไปที่ใช้บอร์ด Arduino ยอดนิยมอย่างเต็มศักยภาพอยู่แล้ว เนื้อหานี้จะกล่าวถึงการเชื่อมต่อเครื่องติดตาม GPS ขนาดเล็กกับบอร์ด Arduino Pro Mini ตัวติดตาม PG03 MiniGPS ถูกใช้เป็นตัวทดสอบ



เครื่องติดตามนี้นอกเหนือจากพิกัดทางภูมิศาสตร์โดยตรงแล้ว ยังแสดงทิศทางการเคลื่อนที่ ระยะทางที่เดินทาง และความเร็วของการเคลื่อนที่ น่าเสียดายที่มันไม่ได้บันทึกข้อมูล ดังนั้นเมื่อเชื่อมต่อกับ Arduino คุณจะสามารถเข้าถึงข้อมูลนี้และทำทุกอย่างที่คุณต้องการได้


ขั้นแรก ต้องถอดประกอบตัวติดตามออก ด้านล่างนี้คือรูปภาพของเครื่องติดตาม GPS แบบถอดประกอบ




หัวใจของเครื่องติดตามคือชิป GPS Venus638FLP พินที่ 44 เป็นเอาต์พุตของอินเทอร์เฟซ UART (TxD) คุณสามารถบัดกรีสายไฟเข้ากับพินนี้ได้โดยตรง หรือคุณสามารถหาพินทดสอบบนบอร์ดที่มีพินนี้เชื่อมต่ออยู่ด้วย ด้านล่างนี้คือรูปภาพตำแหน่งพินของไมโครวงจรและวิธีการเชื่อมต่อกับพินที่ต้องการ





ตอนนี้เรามาดูบอร์ด Arduino Pro Mini ขนาดกะทัดรัดและโมดูลการ์ด SD เพื่อบันทึกข้อมูลโปรโตคอล NMEA แผนภาพการเชื่อมต่อสำหรับ Arduino Pro Mini และโมดูลการ์ด SD มีดังนี้:



การเชื่อมต่อพินโมดูลสำหรับการ์ด SD:


GND เป็น GND
วีซีซีถึง 3.3V
มิโซะเพื่อปักหมุด 12
MOSI เพื่อปักหมุด 11
SCK เพื่อปักหมุด 13
CS เพื่อปักหมุด 10

การเชื่อมต่อพินตัวติดตาม GPS:


GND เป็น GND
พิน 2 (Arduino) ถึงพิน 44 (GPS)

ควรใช้พลังงานจากตัวติดตาม GPS (3.7 V) จะดีกว่า เนื่องจากแบตเตอรี่มีความจุพลังงานต่ำ จึงควรเชื่อมต่อแบตเตอรี่ภายนอก เช่น จากโทรศัพท์มือถือขนาด 1400 mAh ดังที่แสดงในภาพใดภาพหนึ่งด้านบน


ตอนนี้คุณต้องดาวน์โหลดไลบรารี TinyGPS คุณจะต้องมีไลบรารีสำหรับการทำงานกับการ์ด SD และไลบรารี SoftwareSerial ซึ่งสามารถพบได้ใน Arduino\libraries



ในโค้ดต่อไปนี้ คุณสามารถเลือกข้อมูลที่จะเขียนได้:


เป็นโมฆะ gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // ความเร็วเป็น km/hr float falt = gps.f_altitude(); // +/- ระดับความสูง หน่วยเป็นเมตร (จริงๆ แล้วดูเหมือนสูง) float fc = gps.f_course(); // Course ในหน่วยองศาที่ไม่ได้ลงชื่อ gps.f_get_position(&flat, &flon, &age); (flat, 4); " lon "); Serial.print(" kms "); .print(fc); Serial.print(" ระดับความสูง "); //////////////////////////////////////////////// ////////////////////

อัปโหลดภาพร่างไปยัง Arduino ใส่การ์ด SD ที่ฟอร์แมตตาม FAT32 และมีไฟล์ log.txt อยู่ในรูท เปิด Serial Monitor แล้วคุณจะเห็นข้อมูลที่กำลังเขียนลงในการ์ด SD



หลังจากการทดลองกับ Arduino หลายครั้ง ฉันตัดสินใจสร้างเครื่องติดตาม GPS ที่เรียบง่ายและไม่แพงมากพร้อมพิกัดที่ส่งผ่าน GPRS ไปยังเซิร์ฟเวอร์
ใช้ Arduino Mega 2560 (Arduino Uno), SIM900 - โมดูล GSM/GPRS (สำหรับส่งข้อมูลไปยังเซิร์ฟเวอร์), เครื่องรับ GPS SKM53 GPS

ทุกอย่างถูกซื้อบน ebay.com รวมประมาณ 1,500 รูเบิล (ประมาณ 500 รูเบิลสำหรับ Arduino น้อยกว่าเล็กน้อยสำหรับโมดูล GSM และอีกเล็กน้อยสำหรับ GPS)

เครื่องรับ GPS

ก่อนอื่นคุณต้องเข้าใจวิธีการทำงานกับ GPS ก่อน โมดูลที่เลือกเป็นหนึ่งในโมดูลที่ถูกที่สุดและง่ายที่สุด อย่างไรก็ตามผู้ผลิตสัญญาว่าจะใช้แบตเตอรี่เพื่อประหยัดข้อมูลดาวเทียม ตามเอกสารข้อมูล การสตาร์ทขณะเย็นควรใช้เวลา 36 วินาที อย่างไรก็ตาม ในสภาพของฉัน (ชั้น 10 จากขอบหน้าต่าง ไม่มีอาคารอยู่ใกล้ๆ) ใช้เวลามากถึง 20 นาที อย่างไรก็ตาม การเริ่มต้นครั้งถัดไปเป็นเวลา 2 นาทีแล้ว

พารามิเตอร์ที่สำคัญของอุปกรณ์ที่เชื่อมต่อกับ Arduino คือการใช้พลังงาน หากคุณโอเวอร์โหลดตัวแปลง Arduino มากเกินไป มันอาจจะไหม้ได้ สำหรับเครื่องรับที่ใช้ การสิ้นเปลืองพลังงานสูงสุดคือ 45mA @ 3.3v เหตุใดข้อกำหนดควรระบุความแรงของกระแสที่แรงดันไฟฟ้าอื่นนอกเหนือจากที่ต้องการ (5V) จึงเป็นปริศนาสำหรับฉัน อย่างไรก็ตาม ตัวแปลง Arduino จะทนกระแสไฟได้ 45 mA

การเชื่อมต่อ
GPS ไม่ได้ถูกควบคุมแม้ว่าจะมีพิน RX ก็ตาม โดยไม่ทราบจุดประสงค์อะไร สิ่งสำคัญที่คุณสามารถทำได้กับเครื่องรับนี้คือการอ่านข้อมูลผ่านโปรโตคอล NMEA จากพิน TX ระดับ - 5V เฉพาะสำหรับ Arduino ความเร็ว - 9600 บอด ฉันเชื่อมต่อ VIN กับ VCC ของ arduino, GND ถึง GND, TX ถึง RX ของอนุกรมที่เกี่ยวข้อง ฉันอ่านข้อมูลด้วยตนเองก่อน จากนั้นจึงใช้ไลบรารี TinyGPS น่าแปลกที่ทุกอย่างสามารถอ่านได้ หลังจากเปลี่ยนมาใช้ Uno ฉันต้องใช้ SoftwareSerial จากนั้นปัญหาก็เริ่มขึ้น - อักขระข้อความบางตัวหายไป สิ่งนี้ไม่สำคัญมากนัก เนื่องจาก TinyGPS ตัดข้อความที่ไม่ถูกต้องออกไป แต่ก็ไม่เป็นที่พอใจนัก: คุณสามารถลืมความถี่ 1Hz ได้เลย

หมายเหตุโดยย่อเกี่ยวกับ SoftwareSerial: ไม่มีพอร์ตฮาร์ดแวร์บน Uno (นอกเหนือจากพอร์ตที่เชื่อมต่อกับ USB Serial) ดังนั้นคุณต้องใช้ซอฟต์แวร์ ดังนั้นจึงสามารถรับข้อมูลบนพินที่บอร์ดรองรับการขัดจังหวะเท่านั้น ในกรณีของ Uno จะเป็น 2 และ 3 นอกจากนี้ พอร์ตดังกล่าวเพียงพอร์ตเดียวเท่านั้นที่สามารถรับข้อมูลได้ในแต่ละครั้ง

นี่คือลักษณะของ "ม้านั่งทดสอบ"

เครื่องรับ/ส่งสัญญาณ GSM


ตอนนี้มาถึงส่วนที่น่าสนใจมากขึ้น โมดูล GSM - SIM900 รองรับระบบ GSM และ GPRS ไม่รองรับ EDGE และโดยเฉพาะ 3G สำหรับการส่งข้อมูลพิกัดนี่น่าจะดี - จะไม่มีความล่าช้าหรือปัญหาในการสลับระหว่างโหมดต่างๆ แถมตอนนี้ GPRS ก็สามารถใช้งานได้เกือบทุกที่แล้ว อย่างไรก็ตาม สำหรับการใช้งานที่ซับซ้อนกว่านี้อาจไม่เพียงพอ

การเชื่อมต่อ
โมดูลยังถูกควบคุมผ่านพอร์ตอนุกรมด้วยระดับเดียวกัน - 5V และที่นี่เราต้องการทั้ง RX และ TX โมดูลเป็นแบบชีลด์นั่นคือติดตั้งบน Arduino นอกจากนี้ยังเข้ากันได้กับทั้ง mega และ uno ความเร็วเริ่มต้นคือ 115200

เราประกอบมันบน Mega และนี่คือความประหลาดใจอันไม่พึงประสงค์ประการแรกรอเราอยู่: พิน TX ของโมดูลตกลงบนพินที่ 7 ของ Mega ไม่มีการขัดจังหวะบนพินที่ 7 ของ mega ซึ่งหมายความว่าคุณจะต้องเชื่อมต่อพินที่ 7 เช่นกับพินที่ 6 ซึ่งอาจเกิดการหยุดชะงักได้ ดังนั้นเราจะเสียพิน Arduino ไปหนึ่งอัน สำหรับเมก้ามันไม่น่ากลัวมาก - ท้ายที่สุดก็มีหมุดเพียงพอ แต่สำหรับ Uno สิ่งนี้ซับซ้อนกว่าอยู่แล้ว (ฉันเตือนคุณว่ามีเพียง 2 พินที่รองรับการขัดจังหวะ - 2 และ 3) เพื่อเป็นแนวทางแก้ไขปัญหานี้ เราไม่แนะนำให้ติดตั้งโมดูลบน Arduino แต่ให้เชื่อมต่อด้วยสายไฟ จากนั้นคุณสามารถใช้ Serial1

หลังจากเชื่อมต่อแล้ว เราพยายาม "พูดคุย" กับโมดูล (อย่าลืมเปิดใช้งาน) เราเลือกความเร็วพอร์ต - 115200 และจะดีถ้าพอร์ตอนุกรมในตัวทั้งหมด (4 บนเมกะ, 1 บน uno) และพอร์ตซอฟต์แวร์ทั้งหมดทำงานด้วยความเร็วเท่ากัน ด้วยวิธีนี้คุณสามารถถ่ายโอนข้อมูลที่มีเสถียรภาพมากขึ้น ฉันไม่รู้ว่าทำไมถึงแม้ฉันจะเดาได้

ดังนั้นเราจึงเขียนโค้ดดั้งเดิมสำหรับการส่งต่อข้อมูลระหว่างพอร์ตอนุกรม ส่ง atz และรับความเงียบในการตอบสนอง เกิดอะไรขึ้น? อ่า คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ATZ เราโอเค ไชโย โมดูลสามารถได้ยินเรา คุณควรโทรหาเราด้วยความอยากรู้หรือไม่? ATD +7499... โทรศัพท์บ้านดังขึ้น มีควันออกมาจาก Arduino แล็ปท็อปปิดลง ตัวแปลง Arduino ไฟไหม้ เป็นความคิดที่ดีที่จะป้อนไฟ 19 โวลต์ถึงแม้จะมีเขียนไว้ว่าสามารถทำงานได้ตั้งแต่ 6 ถึง 20V แต่ก็แนะนำ 7-12V เอกสารข้อมูลสำหรับโมดูล GSM ไม่ได้กล่าวถึงการใช้พลังงานภายใต้โหลด เมก้าไปที่โกดังอะไหล่ ฉันเปิดแล็ปท็อปซึ่งได้รับ +19V ผ่านสาย +5V จาก USB ด้วยความที่หายใจไม่ออก มันใช้งานได้และแม้แต่ USB ก็ไม่หมด ขอบคุณ Lenovo ที่ปกป้องเรา

หลังจากที่คอนเวอร์เตอร์หมด ฉันมองหาปริมาณการใช้กระแสไฟ ดังนั้นจุดสูงสุด - 2A โดยทั่วไป - 0.5A เห็นได้ชัดว่าเกินความสามารถของตัวแปลง Arduino ต้องใช้อาหารแยกต่างหาก

การเขียนโปรแกรม
โมดูลนี้มีความสามารถในการถ่ายโอนข้อมูลที่กว้างขวาง เริ่มจากการโทรด้วยเสียงและ SMS และปิดท้ายด้วย GPRS นั่นเอง นอกจากนี้ ในระยะหลัง ยังสามารถดำเนินการร้องขอ HTTP โดยใช้คำสั่ง AT คุณจะต้องส่งหลายรายการ แต่ก็คุ้มค่า: คุณไม่ต้องการสร้างคำขอด้วยตนเองจริงๆ มีความแตกต่างสองสามประการในการเปิดช่องทางการรับส่งข้อมูลผ่าน GPRS - จำ AT+CGDCONT=1, “IP”, “apn” แบบคลาสสิกได้ไหม ดังนั้นจึงจำเป็นต้องมีสิ่งเดียวกันที่นี่ แต่มีไหวพริบมากกว่านี้เล็กน้อย

หากต้องการรับเพจจาก URL ที่ระบุ คุณต้องส่งคำสั่งต่อไปนี้:
AT+SAPBR=1,1 //ผู้ให้บริการเปิด (ผู้ให้บริการ) AT+SAPBR=3,1,"CONTYPE", "GPRS" // ประเภทการเชื่อมต่อ - GPRS AT + SAPBR = 3,1, "APN", "อินเทอร์เน็ต" //APN สำหรับ Megafon - อินเทอร์เน็ต AT+HTTPINIT // เริ่มต้น HTTP AT+HTTPPARA="CID",1 // ID ผู้ให้บริการที่จะใช้ AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" // URL จริง หลังจาก sprintf พร้อมพิกัด AT+HTTPACTION=0 // ขอข้อมูลโดยใช้วิธี GET //รอการตอบสนอง AT+HTTPTERM //หยุด HTTP

ส่งผลให้หากมีการเชื่อมต่อเราจะได้รับการตอบสนองจากเซิร์ฟเวอร์ ที่จริงแล้วเรารู้วิธีส่งข้อมูลพิกัดแล้วหากเซิร์ฟเวอร์ได้รับผ่าน GET

โภชนาการ
เนื่องจากฉันพบว่าการเปิดโมดูล GSM จากตัวแปลง Arduino เป็นความคิดที่ไม่ดี จึงตัดสินใจซื้อตัวแปลง 12v->5v, 3A บน ebay เดียวกัน อย่างไรก็ตามโมดูลไม่ชอบแหล่งจ่ายไฟ 5V ไปแฮ็กกันเถอะ: เชื่อมต่อ 5V เข้ากับพินที่ 5V มาจาก Arduino จากนั้นตัวแปลงในตัวของโมดูล (มีประสิทธิภาพมากกว่าตัวแปลง Arduino, MIC 29302WU) จะสร้างจาก 5V ตามที่โมดูลต้องการ

เซิร์ฟเวอร์

เซิร์ฟเวอร์เขียนอันดั้งเดิม - จัดเก็บพิกัดและวาดบน Yandex.maps ในอนาคต เป็นไปได้ที่จะเพิ่มคุณสมบัติต่างๆ รวมถึงการรองรับผู้ใช้จำนวนมาก สถานะ "ติดอาวุธ/ไม่มีอาวุธ" สถานะของระบบยานพาหนะ (ระบบจุดระเบิด ไฟหน้า ฯลฯ) และอาจถึงขั้นควบคุมระบบของยานพาหนะด้วยซ้ำ แน่นอนว่าด้วยการสนับสนุนที่เหมาะสมสำหรับตัวติดตามซึ่งจะกลายเป็นระบบเตือนภัยเต็มรูปแบบได้อย่างราบรื่น

การทดสอบภาคสนาม

นี่คือลักษณะของอุปกรณ์ที่ประกอบโดยไม่มีเคส:

หลังจากติดตั้งตัวแปลงไฟและวางไว้ในเคสจากโมเด็ม DSL ที่ใช้งานไม่ได้ ระบบจะมีลักษณะดังนี้:

ฉันบัดกรีสายไฟและลบหน้าสัมผัสหลายอันออกจากบล็อก Arduino พวกเขามีลักษณะเช่นนี้:

ฉันเชื่อมต่อไฟ 12V ในรถ ขับรถไปรอบๆ มอสโกว และได้เส้นทาง:


จุดติดตามค่อนข้างไกลจากกัน เหตุผลก็คือการส่งข้อมูลผ่าน GPRS ใช้เวลานานพอสมควรและระหว่างนี้พิกัดจะไม่ถูกอ่าน นี่เป็นข้อผิดพลาดในการเขียนโปรแกรมอย่างชัดเจน ประการแรกจะได้รับการปฏิบัติโดยการส่งแพ็กเก็ตของพิกัดทันทีเมื่อเวลาผ่านไป และประการที่สองโดยการทำงานแบบอะซิงโครนัสกับโมดูล GPRS

เวลาในการค้นหาดาวเทียมในที่นั่งผู้โดยสารของรถยนต์คือสองสามนาที

ข้อสรุป

การสร้างตัวติดตาม GPS บน Arduino ด้วยมือของคุณเองนั้นเป็นไปได้แม้ว่าจะไม่ใช่งานเล็กน้อยก็ตาม คำถามหลักตอนนี้คือจะซ่อนอุปกรณ์ในรถได้อย่างไรเพื่อไม่ให้สัมผัสกับปัจจัยที่เป็นอันตราย (น้ำ, อุณหภูมิ) ไม่ถูกปกคลุมด้วยโลหะ (มีเกราะป้องกัน GPS และ GPRS) และไม่ได้สังเกตเห็นได้ชัดเจนเป็นพิเศษ สำหรับตอนนี้มันอยู่ในห้องโดยสารและเชื่อมต่อกับช่องเสียบที่จุดบุหรี่เท่านั้น

เรายังต้องแก้ไขโค้ดเพื่อให้แทร็กราบรื่นขึ้น แม้ว่าตัวติดตามจะทำงานหลักอยู่แล้วก็ตาม

อุปกรณ์ที่ใช้แล้ว

  • อาร์ดูโน่ เมก้า 2560
  • อาร์ดูโน่ อูโน่
  • จีพีเอส สกายแล็บ SKM53
  • ชิลด์ GSM/GPRS ที่ใช้ SIM900
  • ตัวแปลงไฟ DC-DC 12v->5v 3A

หลังจากการทดลองกับ Arduino หลายครั้ง ฉันตัดสินใจสร้างเครื่องติดตาม GPS ที่เรียบง่ายและไม่แพงมากพร้อมพิกัดที่ส่งผ่าน GPRS ไปยังเซิร์ฟเวอร์
ใช้ Arduino Mega 2560 (Arduino Uno), SIM900 - โมดูล GSM/GPRS (สำหรับส่งข้อมูลไปยังเซิร์ฟเวอร์), เครื่องรับ GPS SKM53 GPS

ทุกอย่างถูกซื้อบน ebay.com รวมประมาณ 1,500 รูเบิล (ประมาณ 500 รูเบิลสำหรับ Arduino น้อยกว่าเล็กน้อยสำหรับโมดูล GSM และอีกเล็กน้อยสำหรับ GPS)

เครื่องรับ GPS

ก่อนอื่นคุณต้องเข้าใจวิธีการทำงานกับ GPS ก่อน โมดูลที่เลือกเป็นหนึ่งในโมดูลที่ถูกที่สุดและง่ายที่สุด อย่างไรก็ตามผู้ผลิตสัญญาว่าจะใช้แบตเตอรี่เพื่อประหยัดข้อมูลดาวเทียม ตามเอกสารข้อมูล การสตาร์ทขณะเย็นควรใช้เวลา 36 วินาที อย่างไรก็ตาม ในสภาพของฉัน (ชั้น 10 จากขอบหน้าต่าง ไม่มีอาคารอยู่ใกล้ๆ) ใช้เวลามากถึง 20 นาที อย่างไรก็ตาม การเริ่มต้นครั้งถัดไปเป็นเวลา 2 นาทีแล้ว

พารามิเตอร์ที่สำคัญของอุปกรณ์ที่เชื่อมต่อกับ Arduino คือการใช้พลังงาน หากคุณโอเวอร์โหลดตัวแปลง Arduino มากเกินไป มันอาจจะไหม้ได้ สำหรับเครื่องรับที่ใช้ การสิ้นเปลืองพลังงานสูงสุดคือ 45mA @ 3.3v เหตุใดข้อกำหนดควรระบุความแรงของกระแสที่แรงดันไฟฟ้าอื่นนอกเหนือจากที่ต้องการ (5V) จึงเป็นปริศนาสำหรับฉัน อย่างไรก็ตาม ตัวแปลง Arduino จะทนกระแสไฟได้ 45 mA

การเชื่อมต่อ

GPS ไม่ได้ถูกควบคุมแม้ว่าจะมีพิน RX ก็ตาม โดยไม่ทราบจุดประสงค์อะไร สิ่งสำคัญที่คุณสามารถทำได้กับเครื่องรับนี้คือการอ่านข้อมูลผ่านโปรโตคอล NMEA จากพิน TX ระดับ - 5V เฉพาะสำหรับ Arduino ความเร็ว - 9600 บอด ฉันเชื่อมต่อ VIN กับ VCC ของ arduino, GND ถึง GND, TX ถึง RX ของอนุกรมที่เกี่ยวข้อง ฉันอ่านข้อมูลด้วยตนเองก่อน จากนั้นจึงใช้ไลบรารี TinyGPS น่าแปลกที่ทุกอย่างสามารถอ่านได้ หลังจากเปลี่ยนมาใช้ Uno ฉันต้องใช้ SoftwareSerial จากนั้นปัญหาก็เริ่มขึ้น - อักขระข้อความบางตัวหายไป สิ่งนี้ไม่สำคัญมากนัก เนื่องจาก TinyGPS ตัดข้อความที่ไม่ถูกต้องออกไป แต่ก็ไม่เป็นที่พอใจนัก: คุณสามารถลืมความถี่ 1Hz ได้เลย

หมายเหตุโดยย่อเกี่ยวกับ SoftwareSerial: ไม่มีพอร์ตฮาร์ดแวร์บน Uno ดังนั้นคุณต้องใช้ซอฟต์แวร์ดังกล่าว ดังนั้นจึงสามารถรับข้อมูลบนพินที่บอร์ดรองรับการขัดจังหวะเท่านั้น ในกรณีของ Uno จะเป็น 2 และ 3 นอกจากนี้ พอร์ตดังกล่าวเพียงพอร์ตเดียวเท่านั้นที่สามารถรับข้อมูลได้ในแต่ละครั้ง

นี่คือลักษณะของ "ม้านั่งทดสอบ"


เครื่องรับ/ส่งสัญญาณ GSM


ตอนนี้มาถึงส่วนที่น่าสนใจมากขึ้น โมดูล GSM - SIM900 รองรับระบบ GSM และ GPRS ไม่รองรับ EDGE และโดยเฉพาะ 3G สำหรับการส่งข้อมูลพิกัดนี่น่าจะดี - จะไม่มีความล่าช้าหรือปัญหาในการสลับระหว่างโหมดต่างๆ แถมตอนนี้ GPRS ก็สามารถใช้งานได้เกือบทุกที่แล้ว อย่างไรก็ตาม สำหรับการใช้งานที่ซับซ้อนกว่านี้อาจไม่เพียงพอ

การเชื่อมต่อ

โมดูลยังถูกควบคุมผ่านพอร์ตอนุกรมด้วยระดับเดียวกัน - 5V และที่นี่เราต้องการทั้ง RX และ TX โมดูลเป็นแบบชีลด์นั่นคือติดตั้งบน Arduino นอกจากนี้ยังเข้ากันได้กับทั้ง mega และ uno ความเร็วเริ่มต้นคือ 115200

เราประกอบมันบน Mega และนี่คือความประหลาดใจอันไม่พึงประสงค์ประการแรกรอเราอยู่: พิน TX ของโมดูลตกลงบนพินที่ 7 ของ Mega ไม่มีการขัดจังหวะบนพินที่ 7 ของ mega ซึ่งหมายความว่าคุณจะต้องเชื่อมต่อพินที่ 7 เช่นกับพินที่ 6 ซึ่งอาจเกิดการหยุดชะงักได้ ดังนั้นเราจะเสียพิน Arduino ไปหนึ่งอัน สำหรับเมก้ามันไม่น่ากลัวมาก - ท้ายที่สุดก็มีหมุดเพียงพอ แต่สำหรับ Uno สิ่งนี้ซับซ้อนกว่าอยู่แล้ว (ฉันเตือนคุณว่ามีเพียง 2 พินที่รองรับการขัดจังหวะ - 2 และ 3) เพื่อเป็นแนวทางแก้ไขปัญหานี้ เราไม่แนะนำให้ติดตั้งโมดูลบน Arduino แต่ให้เชื่อมต่อด้วยสายไฟ จากนั้นคุณสามารถใช้ Serial1

หลังจากเชื่อมต่อแล้ว เราพยายาม "พูดคุย" กับโมดูล (อย่าลืมเปิดใช้งาน) เราเลือกความเร็วพอร์ต - 115200 และจะดีถ้าพอร์ตอนุกรมในตัวทั้งหมด (4 บนเมกะ, 1 บน uno) และพอร์ตซอฟต์แวร์ทั้งหมดทำงานด้วยความเร็วเท่ากัน ด้วยวิธีนี้คุณสามารถถ่ายโอนข้อมูลที่มีเสถียรภาพมากขึ้น ฉันไม่รู้ว่าทำไมถึงแม้ฉันจะเดาได้

ดังนั้นเราจึงเขียนโค้ดดั้งเดิมสำหรับการส่งต่อข้อมูลระหว่างพอร์ตอนุกรม ส่ง atz และรับความเงียบในการตอบสนอง เกิดอะไรขึ้น? อ่า คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ATZ เราโอเค ไชโย โมดูลสามารถได้ยินเรา คุณควรโทรหาเราด้วยความอยากรู้หรือไม่? ATD +7499... โทรศัพท์บ้านดังขึ้น มีควันออกมาจาก Arduino แล็ปท็อปปิดลง ตัวแปลง Arduino ไฟไหม้ เป็นความคิดที่ดีที่จะป้อนไฟ 19 โวลต์ถึงแม้จะมีเขียนไว้ว่าสามารถทำงานได้ตั้งแต่ 6 ถึง 20V แต่ก็แนะนำ 7-12V เอกสารข้อมูลสำหรับโมดูล GSM ไม่ได้กล่าวถึงการใช้พลังงานภายใต้โหลด เมก้าไปที่โกดังอะไหล่ ฉันเปิดแล็ปท็อปซึ่งได้รับ +19V ผ่านสาย +5V จาก USB ด้วยความที่หายใจไม่ออก มันใช้งานได้และแม้แต่ USB ก็ไม่หมด ขอบคุณ Lenovo ที่ปกป้องเรา


หลังจากที่คอนเวอร์เตอร์หมด ฉันมองหาปริมาณการใช้กระแสไฟ ดังนั้นจุดสูงสุด - 2A โดยทั่วไป - 0.5A เห็นได้ชัดว่าเกินความสามารถของตัวแปลง Arduino ต้องใช้อาหารแยกต่างหาก

การเขียนโปรแกรม

โมดูลนี้มีความสามารถในการถ่ายโอนข้อมูลที่กว้างขวาง เริ่มจากการโทรด้วยเสียงและ SMS และปิดท้ายด้วย GPRS นั่นเอง นอกจากนี้ ในระยะหลัง ยังสามารถดำเนินการร้องขอ HTTP โดยใช้คำสั่ง AT คุณจะต้องส่งหลายรายการ แต่ก็คุ้มค่า: คุณไม่ต้องการสร้างคำขอด้วยตนเองจริงๆ มีความแตกต่างสองสามประการในการเปิดช่องทางการรับส่งข้อมูลผ่าน GPRS - จำ AT+CGDCONT=1, “IP”, “apn” แบบคลาสสิกได้ไหม ดังนั้นจึงจำเป็นต้องมีสิ่งเดียวกันที่นี่ แต่มีไหวพริบมากกว่านี้เล็กน้อย

หากต้องการรับเพจจาก URL ที่ระบุ คุณต้องส่งคำสั่งต่อไปนี้:

AT+SAPBR=1,1 //ผู้ให้บริการเปิด (ผู้ให้บริการ) AT+SAPBR=3,1,"CONTYPE", "GPRS" // ประเภทการเชื่อมต่อ - GPRS AT + SAPBR = 3,1, "APN", "อินเทอร์เน็ต" //APN สำหรับ Megafon - อินเทอร์เน็ต AT+HTTPINIT // เริ่มต้น HTTP AT+HTTPPARA="CID",1 // ID ผู้ให้บริการที่จะใช้ AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" // URL จริง หลังจาก sprintf พร้อมพิกัด AT+HTTPACTION=0 // ขอข้อมูลโดยใช้วิธี GET //รอการตอบสนอง AT+HTTPTERM //หยุด HTTP

ส่งผลให้หากมีการเชื่อมต่อเราจะได้รับการตอบสนองจากเซิร์ฟเวอร์ ที่จริงแล้วเรารู้วิธีส่งข้อมูลพิกัดแล้วหากเซิร์ฟเวอร์ได้รับผ่าน GET

โภชนาการ

เนื่องจากฉันพบว่าการเปิดโมดูล GSM จากตัวแปลง Arduino เป็นความคิดที่ไม่ดี จึงตัดสินใจซื้อตัวแปลง 12v->5v, 3A บน ebay เดียวกัน อย่างไรก็ตามโมดูลไม่ชอบแหล่งจ่ายไฟ 5V ไปแฮ็กกันเถอะ: เชื่อมต่อ 5V เข้ากับพินที่ 5V มาจาก Arduino จากนั้นตัวแปลงในตัวของโมดูล (มีประสิทธิภาพมากกว่าตัวแปลง Arduino, MIC 29302WU) จะสร้างจาก 5V ตามที่โมดูลต้องการ

เซิร์ฟเวอร์

เซิร์ฟเวอร์เขียนอันดั้งเดิม - จัดเก็บพิกัดและวาดบน Yandex.maps ในอนาคต เป็นไปได้ที่จะเพิ่มคุณสมบัติต่างๆ รวมถึงการรองรับผู้ใช้จำนวนมาก สถานะ "ติดอาวุธ/ไม่มีอาวุธ" สถานะของระบบยานพาหนะ (ระบบจุดระเบิด ไฟหน้า ฯลฯ) และอาจถึงขั้นควบคุมระบบของยานพาหนะด้วยซ้ำ แน่นอนว่าด้วยการสนับสนุนที่เหมาะสมสำหรับตัวติดตามซึ่งจะกลายเป็นระบบเตือนภัยเต็มรูปแบบได้อย่างราบรื่น

การทดสอบภาคสนาม

นี่คือลักษณะของอุปกรณ์ที่ประกอบโดยไม่มีเคส:


หลังจากติดตั้งตัวแปลงไฟและวางไว้ในเคสจากโมเด็ม DSL ที่ใช้งานไม่ได้ ระบบจะมีลักษณะดังนี้:

ฉันบัดกรีสายไฟและลบหน้าสัมผัสหลายอันออกจากบล็อก Arduino พวกเขามีลักษณะเช่นนี้:

ฉันเชื่อมต่อไฟ 12V ในรถ ขับรถไปรอบๆ มอสโกว และได้เส้นทาง:


แทร็กกลายเป็นฉีกขาด เหตุผลก็คือการส่งข้อมูลผ่าน GPRS ใช้เวลานานพอสมควรและระหว่างนี้พิกัดจะไม่ถูกอ่าน นี่เป็นข้อผิดพลาดในการเขียนโปรแกรมอย่างชัดเจน ประการแรกจะได้รับการปฏิบัติโดยการส่งแพ็กเก็ตของพิกัดทันทีเมื่อเวลาผ่านไป และประการที่สองโดยการทำงานแบบอะซิงโครนัสกับโมดูล GPRS

เครื่องส่ง GPS ส่วนบุคคล

ปัจจุบัน ความก้าวหน้ากำลังดำเนินไปอย่างรวดเร็วจนอุปกรณ์ที่ก่อนหน้านี้มีขนาดใหญ่ มีราคาแพง และมีความเชี่ยวชาญสูงสูญเสียขนาด น้ำหนัก และราคาไปอย่างรวดเร็ว แต่กลับได้รับฟังก์ชันใหม่ๆ มากมาย

นี่คือวิธีที่อุปกรณ์ที่ใช้เทคโนโลยี GPS เข้าถึงอุปกรณ์พกพาและตั้งถิ่นฐานอย่างมั่นคงที่นั่น ทำให้ผู้คนมีโอกาสใหม่ ๆ คุ้มค่าอย่างยิ่งที่จะเน้นไปที่เครื่องส่งสัญญาณ GPS แต่ละตัว

โดยพื้นฐานแล้ว สิ่งเหล่านี้คือเครื่องติดตาม GPS แบบเดียวกัน ซึ่งออกแบบมาเพื่อการใช้งานที่ไม่ได้อยู่บนยานพาหนะเท่านั้น แต่โดยบุคคลในชีวิตประจำวัน

สามารถรวมอุปกรณ์ต่างๆ หลายชิ้นไว้ในตัวเครื่องเดียวได้ ทั้งนี้ขึ้นอยู่กับรุ่น ในรูปแบบที่ง่ายที่สุด มันเป็นเพียงกล่องเล็กๆ ที่ไม่มีจอแสดงผล ซึ่ง ช่วยให้คุณควบคุมการเคลื่อนไหวของเด็ก สัตว์ หรือวัตถุอื่น ๆ ได้ซึ่งได้รับการแก้ไขแล้ว

ภายในเป็นโมดูล GPS ที่กำหนดพิกัดภาคพื้นดิน โมดูล GSM/GPRS ที่ส่งข้อมูลและรับคำสั่งควบคุม ตลอดจนแหล่งพลังงานที่ช่วยให้การทำงานอัตโนมัติเป็นเวลานาน

การทำงานของเครื่องส่งสัญญาณ GPS

เมื่อฟังก์ชันเพิ่มขึ้น ความสามารถต่อไปนี้ของอุปกรณ์จะปรากฏขึ้น:


ตัวเลือกสำหรับเครื่องส่งสัญญาณ GPS

ขึ้นอยู่กับการกำหนดค่า ตัวเรือนเครื่องส่งสัญญาณอาจแตกต่างกันอย่างมาก มีให้เลือกหลากหลายรุ่นทั้งโทรศัพท์มือถือ เครื่องนำทางแบบคลาสสิก หรือแม้แต่นาฬิกาข้อมือ

การออกแบบที่มีสีสันของรุ่นพิเศษและการเพิ่มเติมที่มีประโยชน์ช่วยให้เด็ก ๆ ปฏิบัติต่ออุปกรณ์เหล่านี้ไม่ใช่ "สายลับของผู้ปกครอง" แต่เป็นอุปกรณ์ที่ทันสมัยและใช้งานได้จริง

ข้อดีคือควรกล่าวถึงความจริงที่ว่าอุปกรณ์หลายเวอร์ชันทำงานได้ดีโดยไม่มีค่าธรรมเนียมการสมัครสมาชิกสำหรับบริการของผู้ให้บริการเฉพาะทางและข้อมูลที่จำเป็นทั้งหมดจะถูกส่งไปยังลูกค้าโดยตรงผ่านทางอินเทอร์เน็ตหรือข้อความ SMS ซึ่งช่วยให้ประหยัดได้มาก ในการบำรุงรักษาอุปกรณ์ดังกล่าว

บทความเกี่ยวกับเครื่องติดตาม GPS

ในบทความนี้ ฉันจะแสดงวิธีใช้โมดูล gsm กับ arduino โดยใช้ sim800L เป็นตัวอย่าง คำแนะนำเดียวกันนี้ค่อนข้างเหมาะสมสำหรับการใช้โมดูล GSM อื่น ๆ เช่น sim900 เป็นต้น เนื่องจากโมดูลทั้งหมดทำงานในลักษณะเดียวกันโดยประมาณ - นี่คือการแลกเปลี่ยนคำสั่ง AT ผ่านพอร์ต

ฉันจะแสดงการใช้งานโมดูลกับ Arduino โดยใช้ตัวอย่างการถ่ายทอด SMS ซึ่งสามารถใช้เพื่อควบคุมอุปกรณ์จากระยะไกลผ่านคำสั่ง SMS สามารถใช้ร่วมกับสัญญาณเตือนรถ ฯลฯ

โมดูลเชื่อมต่อกับ Arduino ผ่านทางอินเทอร์เฟซ UART ของพอร์ตอนุกรมซอฟต์แวร์ที่ทำงานบนพินดิจิทัล 2 และ 3 ของ Arduino nano

การทำงานของ Arduino กับโมดูล GSM

ในการจ่ายไฟให้กับโมดูลจำเป็นต้องใช้แรงดันไฟฟ้าในช่วงตั้งแต่ 3.6V ถึง 4.2V ซึ่งหมายความว่าคุณจะต้องใช้ตัวปรับแรงดันไฟฟ้าเพิ่มเติมเนื่องจาก Arduino มีการติดตั้งตัวปรับแรงดันไฟฟ้า 3.3 โวลต์ซึ่งไม่เหมาะสำหรับการจ่ายไฟให้กับโมดูล เหตุผลที่สองในการติดตั้งโคลงเพิ่มเติมคือโมดูล GSM มีภาระงานหนักเนื่องจากมีเครื่องส่งสัญญาณที่อ่อนแอซึ่งให้การสื่อสารที่เสถียรกับสถานีเซลลูล่าร์ พลังงานสำหรับ Arduino nano จ่ายให้กับพิน VIN ซึ่งเป็นตัวปรับเสถียรที่ติดตั้งใน Arduino เพื่อให้แน่ใจว่าโมดูลจะทำงานในช่วงแรงดันไฟฟ้าที่กว้าง (6-10V) โมดูลรีเลย์เชื่อมต่อตามข้อความโปรแกรมที่กำหนดเพื่อปักหมุด 10 ของ Arduino nano และสามารถเปลี่ยนเป็นโมดูลอื่นที่ทำงานเป็นเอาต์พุตดิจิทัลได้อย่างง่ายดาย

มันทำงานดังนี้: เราติดตั้งซิมการ์ดในโมดูล GSM เปิดเครื่องและส่ง SMS ไปยังหมายเลขซิมการ์ดพร้อมข้อความ "1" เพื่อเปิดรีเลย์ของเราเพื่อปิดเราส่ง SMS โดยมีข้อความ “0”

#รวม
ซอฟต์แวร์อนุกรม gprsSerial (2, 3); // ตั้งค่าพิน 2 และ 3 สำหรับพอร์ตซอฟต์แวร์
int LedPin = 10; // สำหรับรีเลย์

การตั้งค่าเป็นโมฆะ ()
{
gprsSerial.begin(4800);
pinMode(LedPin, เอาท์พุต);

//ตั้งค่าการรับข้อความ

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
ล่าช้า (500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
ล่าช้า (500); // หน่วงเวลาสำหรับการประมวลผลคำสั่ง
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
ล่าช้า(700);
}

สตริง currStr = "";
// หากบรรทัดนี้เป็นข้อความ ตัวแปรก็จะรับค่า True
isStringMessage บูลีน = false;

เป็นโมฆะวน()
{
ถ้า (!gprsSerial.available())
กลับ;

ถ่าน currSymb = gprsSerial.read();
ถ้า ('\r' == currSymb) (
ถ้า (isStringMessage) (
// หากบรรทัดปัจจุบันเป็นข้อความแสดงว่า...
ถ้า (!currStr.compareTo("1")) (
digitalWrite (LedPin, สูง);
) อื่น ๆ ถ้า (!currStr.compareTo("0")) (
digitalWrite (LedPin, ต่ำ);
}
isStringMessage = เท็จ;
) อื่น (
ถ้า (currStr.startsWith("+CMT")) (
// หากบรรทัดปัจจุบันขึ้นต้นด้วย “+CMT” แสดงว่าข้อความถัดไป
isStringMessage = จริง;
}
}
currStr = "";
) อย่างอื่นถ้า ('\n' != currSymb) (
currStr += สตริง (currSymb);
}
}

เวอร์ชันวิดีโอของบทความ:

แท็ก: #Arduino, #SIM800L

เครื่องหมายของคุณ:

ผลิตภัณฑ์ที่ใช้ในบทความนี้:

← เครื่องบันทึก GPS บน arduino | รีเลย์ควบคุมผ่านพอร์ต COM →

เครื่องสแกน GSM บน RTL-SDR

| บ้าน- อังกฤษ | การพัฒนา | คำถามที่พบบ่อย |

ลักษณะสำคัญของสแกนเนอร์

เครื่องสแกน GSM จะสแกนช่องสัญญาณ GSM แบบดาวน์สตรีมและแสดงข้อมูลเกี่ยวกับระดับสัญญาณและช่องนั้นเป็นของหนึ่งในสามของผู้ให้บริการโทรศัพท์มือถือหลักคือ MTS, Beeline และ Megafon หรือไม่ เครื่องสแกนช่วยให้คุณบันทึกรายการตัวระบุสถานีฐาน MCC, MNC, LAC และ CI สำหรับช่องที่สแกนทั้งหมดตามผลงาน
เครื่องสแกน GSM สามารถใช้เพื่อประเมินระดับของสัญญาณ GSM, เปรียบเทียบคุณภาพสัญญาณของผู้ปฏิบัติงานที่แตกต่างกัน, ประเมินความครอบคลุมของวิทยุ, เมื่อตัดสินใจติดตั้งเครื่องขยายสัญญาณโทรศัพท์มือถือและปรับพารามิเตอร์เพื่อวัตถุประสงค์ทางการศึกษา ฯลฯ
เครื่องสแกนทำงานบน Windows และใช้ตัวรับที่เรียบง่ายและราคาถูก - RTL-SDR คุณสามารถอ่านเกี่ยวกับ RTL-SDR ได้ที่:
RTL-SDR (RTL2832U) และซอฟต์แวร์กำหนดข่าวและโครงการวิทยุ
RTL-SDR – OsmoSDR,
RTL-SDR ในภาษารัสเซีย
พารามิเตอร์ RTL-SDR จะกำหนดคุณลักษณะหลักของเครื่องสแกน แน่นอนว่าเครื่องสแกนระบบ GSM ไม่สามารถทดแทนอุปกรณ์ตรวจวัดทั่วไปได้
สแกนเนอร์แจกฟรี โดยไม่มีข้อจำกัดในการใช้งาน
เวอร์ชันปัจจุบันรองรับย่านความถี่ GSM 900 และไม่รองรับ GSM 1800 ซึ่งพิจารณาจากข้อเท็จจริงที่ว่าความถี่ในการทำงานของ RTL-SDR พร้อมจูนเนอร์ R820T นั้นถูกจำกัดไว้ที่ 1760 MHz มีความหวังว่าการใช้ไดรเวอร์ RTL-SDR รุ่นทดลองจะช่วยให้สามารถทำงานได้ในช่วงความถี่ 1800 MHz เป็นอย่างน้อย

การเปิดตัวสแกนเนอร์

สามารถดาวน์โหลดสแกนเนอร์เวอร์ชันล่าสุดได้จากลิงค์นี้ เพียงแตกไฟล์ไปยังตำแหน่งที่สะดวกแล้วเรียกใช้ gsmscan.exe
เครื่องสแกนเวอร์ชันก่อนหน้า ลิงก์ไปยังพื้นที่เก็บข้อมูลพร้อมแหล่งที่มาและข้อมูลอื่น ๆ ที่เกี่ยวข้องกับการพัฒนาจะอยู่ที่หน้าการพัฒนา
เพื่อให้สแกนเนอร์ทำงานได้ จำเป็นต้องติดตั้งไดรเวอร์ RTL-SDR หากยังไม่ได้ติดตั้ง สามารถทำได้สะดวกโดยใช้โปรแกรม Zadig เพื่ออธิบายขั้นตอนการติดตั้ง

การใช้เครื่องสแกน

ด้านล่างนี้เป็นมุมมองของหน้าต่างโปรแกรมสแกนเนอร์:

แกนนอนจะแสดงหมายเลขช่องสัญญาณ GSM ในรูปแบบ ARFCN หรือเป็น MHz และแกนแนวตั้งจะแสดงระดับสัญญาณเป็น dBm ความสูงของเส้นแสดงความแรงของสัญญาณ

โมดูล GSM NEOWAY M590 สื่อสารกับ Arduino

หากถอดรหัสตัวระบุ BS ได้สำเร็จ และสอดคล้องกับตัวระบุของผู้ให้บริการโทรคมนาคมหลักสามราย เส้นจะถูกวาดด้วยสีที่สอดคล้องกัน
รายการแบบเลื่อนลงที่ด้านบนของหน้าจอทำให้คุณสามารถเลือกเครื่องรับ SDR หากมีการเชื่อมต่อหลายเครื่อง ช่วงการทำงาน GSM 900 หรือ GSM 1800 และหน่วยการวัดตามแกนนอน ARFCN หรือ MHz
ปุ่มต่างๆ ช่วยให้คุณบันทึกรายงานการทำงานของเครื่องสแกนในรูปแบบของรายการสถานีฐานที่ถอดรหัส ล้างผลการถอดรหัส BS และรับข้อมูลเกี่ยวกับโปรแกรม

หลักการและคุณสมบัติของงาน

ในระหว่างการดำเนินการโปรแกรมจะสแกนช่วงความถี่การทำงานด้วยขั้นตอน 2.0 MHz (10 ช่องสัญญาณ GSM) และแปลงสัญญาณดิจิทัลด้วยความถี่สุ่มตัวอย่าง 2.4 MHz กระบวนการสแกนประกอบด้วยการส่งผ่านอย่างรวดเร็วตลอดทั้งช่วงเพื่อวัดความแรงของสัญญาณ และการส่งผ่านอย่างช้าๆ เพื่อถอดรหัสตัวระบุ BS

ขั้นตอนการถอดรหัสหนึ่งขั้นตอนจะดำเนินการหลังจากสำรวจช่วงทั้งหมดเพื่อวัดกำลัง ดังนั้นในช่วง GSM 900 ระดับสัญญาณจะได้รับการอัปเดตประมาณทุกๆ 2 วินาที และการถอดรหัสที่สมบูรณ์จะใช้เวลาประมาณ 1 นาที
เนื่องจากสัญญาณที่ได้รับจาก RTL-SDR มีคุณภาพไม่ดี ความน่าจะเป็นในการถอดรหัสข้อมูลระบบ (SI) ของช่องสัญญาณควบคุมการออกอากาศ BS (BCCH) อย่างถูกต้องจึงไม่สูง ความผันผวนของระดับสัญญาณอันเป็นผลมาจากการแพร่กระจายแบบหลายเส้นทางยังช่วยลดโอกาสในการถอดรหัสข้อมูลระบบอีกด้วย ด้วยเหตุผลเหล่านี้ เพื่อให้ได้รับตัวระบุ BS เครื่องสแกนจึงจำเป็นต้องรวบรวมข้อมูลในช่วงเวลาประมาณ 10 นาที แต่ในกรณีนี้ ไม่ใช่ทุกช่องสัญญาณที่จะให้ระดับสัญญาณและคุณภาพเพียงพอในตำแหน่งที่กำหนดสำหรับการถอดรหัสแม้จะใช้เครื่องรับที่เหมาะสมที่สุดก็ตาม นอกจากนี้ช่อง GSM บางส่วนไม่ได้ถูกใช้ในการทำงานตามมาตรฐาน GSM ดังที่เห็นในรูปด้านบน Megafon จะใช้ช่อง 975 - 1,000 เพื่อให้ทำงานตามมาตรฐาน UMTS
ระหว่างการทำงาน เครื่องสแกนจะเพิ่มข้อมูลระบบเกี่ยวกับช่องสัญญาณที่ถอดรหัสใหม่ให้กับอาร์เรย์ข้อมูลทั่วไปของช่องสัญญาณ แต่ข้อมูลเกี่ยวกับช่องสัญญาณที่ถอดรหัสก่อนหน้านี้จะไม่ถูกลบเมื่อข้อมูลระบบไม่ได้ถูกถอดรหัสในขั้นตอนนี้ และยังคงอยู่ในอาร์เรย์ หากต้องการล้างข้อมูลนี้ ให้ใช้ปุ่มเพื่อล้างผลการถอดรหัส BS
เมื่อคุณคลิกที่ปุ่มบันทึกรายงาน ผลลัพธ์ที่สะสมจะถูกบันทึกลงในไฟล์ข้อความพร้อมชื่อที่ประกอบด้วยชื่อของโปรแกรม วันที่และเวลาที่บันทึกข้อมูล ด้านล่างนี้เป็นตัวอย่างส่วนหนึ่งของไฟล์รายงาน:
สแกนเนอร์ได้รับการออกแบบให้ทำงานภายใต้ Windows 7, 8.1 และ 10 งานได้รับการทดสอบด้วย RTL-SDR สามชุดพร้อมจูนเนอร์ R820T ไม่ได้ทดสอบ
โปรแกรมเวอร์ชันพิเศษได้รับการคอมไพล์ให้ทำงานภายใต้ Windows XP โดยทำงานช้ากว่าเวอร์ชันมาตรฐานหลายเท่า

การพัฒนา.

โปรแกรมสแกนเนอร์มีให้ตามที่เป็นอยู่ โดยไม่มีการรับประกันหรือความรับผิดใดๆ หากคุณมีความคิดที่สมเหตุสมผลเกี่ยวกับวิธีการขยายฟังก์ชันการทำงานหรือปรับปรุงประสิทธิภาพของเครื่องสแกน เราพร้อมที่จะหารือเกี่ยวกับความเป็นไปได้ของการนำไปปฏิบัติ
คุณสามารถมีส่วนร่วมในการพัฒนาเครื่องสแกนได้ โดยไปที่หน้าการพัฒนา
มีการวางแผนพัฒนาเครื่องสแกน GSM เพิ่มเติมโดยอาจมีส่วนร่วมของคุณ