เครื่องติดตาม GPS แบบทำเองโดยใช้ GY-NEO6M นั้นเป็นเรื่องง่าย คำอธิบายโดยย่อของหน้าต่างการตั้งค่า Arduino GPS tracker Hattire Arduino

หลังจากการทดลองกับ Arduino หลายครั้ง ฉันตัดสินใจสร้างเครื่องติดตาม GPS ที่เรียบง่ายและไม่แพงมากพร้อมพิกัดที่ส่งผ่าน GPRS ไปยังเซิร์ฟเวอร์
Arduino Mega 2560 มือสอง ( อาร์ดูโน่ อูโน่), 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

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

การพัฒนา.

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

หลังจากการทดลองกับ 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

แผนภาพโครงการ:

สวัสดีเพื่อนๆ เรามียานอวกาศจำนวนมากที่บินอยู่เหนือหัวของเรา ในจำนวนนั้นมีดาวเทียมนำทางที่มีประโยชน์อย่างยิ่งประมาณ 90 ดวงจากระบบ GPS ของอเมริกา, GLONASS ของรัสเซีย, กาลิเลโอของยุโรปและเป่ยโต่วของจีน และวันนี้เราจะจับสัญญาณจากพวกเขาได้

ประการแรก ทฤษฎีเล็กๆ น้อยๆ: ระบบนำทางด้วยดาวเทียมเป็นเครือข่ายของยานอวกาศที่บินไปตามเส้นทางที่รู้จักก่อนหน้านี้ สังเกตวงโคจรและวิถีของมันอย่างแม่นยำ หรือตั้งอยู่ที่จุดที่หยุดนิ่งที่รู้จักในวงโคจรค้างฟ้าหรือธรณีซิงโครนัส ดาวเทียมบินโดยเฉลี่ยที่ระดับความสูงประมาณ 20,000 กิโลเมตร และแต่ละดวงเป็นนาฬิกาอะตอมที่มีความแม่นยำสูงเป็นพิเศษซึ่งถ่ายทอดเวลาอย่างต่อเนื่องไปทั่วโลก เวลาปัจจุบัน.

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

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

การวัดระยะทางของดาวเทียมแต่ละดวงที่ตามมาจะเพิ่มความแม่นยำของตำแหน่ง และปัจจุบันมีระยะตั้งแต่ 1 ถึง 3 เมตร โดยมีทัศนวิสัยมาตรฐานของดาวเทียมนำทางประมาณ 10 ดวง

เราได้แยกทฤษฎีออกแล้ว เรามาฝึกฝนกันต่อ ปัจจุบันโมดูลการนำทางต่างๆ จำหน่ายแยกต่างหาก ดาวเทียมที่ง่ายและเก่าแก่ที่สุดรองรับเฉพาะสัญญาณจากระบบสังเกตการณ์ GPS ของอเมริกา โดยเฉลี่ย 5-7 ดาวเทียม โมดูลขั้นสูงยังสามารถรับสัญญาณจากกลุ่มดาว GLONASS ของรัสเซียได้ ทำให้จำนวนดาวเทียมทั้งหมดที่สังเกตได้โดยเฉลี่ยเพิ่มขึ้นสองเท่า นอกจากนี้ยังมีโมดูลลดราคาที่รวมกับเข็มทิศซึ่งใช้สำหรับการนำทางที่แม่นยำและการบำรุงรักษาเส้นทาง

ดาวเทียมของระบบนำทางต่างๆ สามารถมองเห็นได้บนหน้าจอโทรศัพท์ของฉัน วงกลมคือ GPS สามเหลี่ยมคือ GLONASS และดวงดาวคือ BeiDou ของจีน ดังนั้นโทรศัพท์ของฉันจึงรองรับสามแบบที่แตกต่างกัน ระบบนำทางและการรวมสัญญาณจากสิ่งเหล่านั้นจะช่วยเพิ่มความแม่นยำในการกำหนดตำแหน่ง ตอนนี้มีดาวเทียม 28 ดวงอยู่เหนือหัวของฉันและสัญญาณใช้ได้ตั้งแต่ 7 เท่านั้นนั่นคือ โทรศัพท์ของฉันรู้ล่วงหน้าแล้วว่าดาวเทียมแต่ละดวงอยู่ที่ไหน และสัญญาณที่หายไปจากดาวเทียม 21 ดวง หมายความว่าไม่อยู่ในสายตา สัญญาณการนำทางอ่อนมากจากคำว่า VASCHE แทบจะไม่สะท้อนเลยถูกปิดกั้นโดยภูมิประเทศอาคารหลังคารถ - โลหะใด ๆ ที่อยู่เหนือศีรษะหรือด้านข้าง แม้แต่หิมะตกนอกหน้าต่างก็ยังรบกวนการรับสัญญาณที่ดี

ในการดำเนินโครงการคุณจะต้องมีโมดูลอิเล็กทรอนิกส์จำนวนหนึ่ง: แพลตฟอร์ม Arduino Nano ที่ตั้งโปรแกรมได้, หน้าจอ OLED 128 x 32 จุด (เชื่อมต่อผ่านบัส I2C), โมดูล GPS สำหรับเชื่อมต่อผ่าน UART ใด ๆ แบตเตอรี่ลิเธียมด้วยความจุสูงกว่า 200 มิลลิแอมป์ โมดูลชาร์จแบบป้องกันสำหรับลิเธียม และบูสต์คอนเวอร์เตอร์เพื่อรับไฟ 5 โวลต์ ฉันมีสามประเภทที่แตกต่างกันที่นี่ ใครๆ ก็ทำ ฉันยังวางแผนที่จะใช้ไฟ LED RGB สีเพื่อระบุสถานะ แต่ละทิ้งสิ่งนี้ไปเมื่อโครงการดำเนินไป

เราเชื่อมต่อหน้าจอกับ Arduino และพบกับปัญหาแรก ห้องสมุดมาตรฐานหน้าจอ OLED ใช้พื้นที่ 20 kB ซึ่งเป็น 70% ของหน่วยความจำของไมโครคอนโทรลเลอร์ และแทบไม่มีที่ว่างสำหรับโปรแกรม ก่อนหน้านี้ฉันกำลังประกอบเครื่องวัดระยะสูงและต้องเผชิญกับความจริงที่ว่าบรรทัดใหม่ของโค้ดนำไปสู่หน่วยความจำล้นและไมโครคอนโทรลเลอร์ค้างระหว่างการทำงาน ดังนั้นฉันจะใช้มากขึ้น ห้องสมุดแสง. ใช้งานไม่ได้กับกราฟิกและแสดงเฉพาะข้อความบนหน้าจอ OLED เท่านั้น และใช้หน่วยความจำเพียง 1 KB

ฉันเชื่อมต่อโมดูล GPS เข้ากับเขียงหั่นขนมและดูข้อมูลการนำทางแรก - สัญญาณจากอวกาศถูกจับและประมวลผลแล้ว ตอนนี้ฉันแสดงข้อมูลบนหน้าจอ ระดับ! เห็นดาวเทียม 4 ดวง ตอนนี้ 3 และอีกครั้ง 4 เป็น 5 แล้ว! เพื่อการรับสัญญาณ GPS ที่ดีขึ้น โมดูลจะแขวนไว้บนสายไฟนอกหน้าต่าง

ในระหว่างการพัฒนาโครงการ ฉันใช้โมดูล GPS ประเภทต่างๆ. GPS แบบธรรมดาและ GPS แบบรวมเข้ากับ Glonass เราต้องทำการทดลองหลายชั่วโมงต่อเนื่องกันเพื่อตรวจสอบความเสถียรของการทำงาน โมดูลกลับกลายเป็นว่าใช้งานได้ แต่ด้วย ไลบรารีซอฟต์แวร์ฉันต้องคนจรจัด ลองมาหลายตัวแล้ว ห้องสมุดที่แตกต่างกันและ TinyGPS+ เป็นเพียงเครื่องเดียวที่ทำงานร่วมกับโมดูล GPS ทั้งหมดในคราวเดียว

โดยทั่วไป ไลบรารีจะแยกวิเคราะห์โปรโตคอล NMEA เพียงแยกวิเคราะห์ข้อมูลที่โมดูล GPS พ่นออกมาสองครั้งต่อวินาที นี่คือลักษณะของสตรีมข้อมูลที่ยังไม่ได้ประมวลผล

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

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

ถัดไปต้องเพิ่มแรงดันไฟฟ้า หน้าจอและโมดูล GPS ใช้พลังงาน 5 โวลต์ เราจะทำสิ่งนี้โดยใช้ตัวแปลงแรงดันไฟฟ้าเพิ่ม โดยปกติจะติดตั้งไว้ในพาวเวอร์แบงค์เพื่อเพิ่มแรงดันไฟฟ้าจาก 3.7 เป็น 5 โวลต์ ฉันจะใช้โมดูลสีเขียวขนาดเล็ก ซึ่งสามารถส่งออกได้สูงสุด 300mA และเพียงพอสำหรับโปรเจ็กต์นี้

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

ฉันวัดขนาดของโมดูลทั้งหมดและพยายามจัดเรียงให้กะทัดรัดที่สุดเท่าที่จะเป็นไปได้ แต่ไม่ว่าฉันพยายามแค่ไหน หน้าจอบางก็ไม่พอดีกับจอกว้าง เครื่องรับ GPSโอห์ม ดังนั้นฉันจึงตัดสินใจเปลี่ยนหน้าจอด้วย OLED 128x64 พิกเซลอีกอัน ทำให้ออกแบบตามหลักสรีรศาสตร์มากขึ้นและช่วยให้มีปุ่มที่ใหญ่ขึ้น หน้าจอ OLED เข้ากันได้อย่างสมบูรณ์และต้องมีการแก้ไขโค้ดเพียงเล็กน้อย ดังนั้นเฟิร์มแวร์จะมีให้ใช้กับอุปกรณ์ทั้งสองเวอร์ชันที่มีหน้าจอขนาดเล็กและขนาดใหญ่

แผนภาพการประกอบนั้นเรียบง่าย คุณต้องเชื่อมต่อหน้าจอกับบัส I2C ซึ่งเป็นพิน A4 และ A5 โมดูล gps เชื่อมต่อกับพอร์ตอนุกรมของซอฟต์แวร์บนพิน D3 และ D4 ปุ่มบนพิน D7 พลังงานแบตเตอรี่ผ่าน โมดูลป้องกันลากไปที่สวิตช์จากนั้นไปที่บูสต์คอนเวอร์เตอร์แล้วเชื่อมต่อ Arduino กับ 5 โวลต์

เพื่อความสะดวกในการจัดวางส่วนประกอบ ฉันจะใช้เขียงหั่นขนมสีเขียวขนาด 7 x 3 เซนติเมตร เพื่อป้องกันไม่ให้หน้าจอแขวนอยู่บนขั้วต่อ ฉันจึงติดตั้งบนขาตั้งพลาสติกที่มีสเปเซอร์ขนาด 5 มม. จะมีตัวรับสัญญาณ GPS อยู่ระหว่างหน้าจอกับปุ่ม ที่ด้านหลังของบอร์ดจะมีตัวควบคุม Arduino แบตเตอรี่ และแผงป้องกัน แบตเตอรี่จะใช้ลิเธียมบาง 350 มิลลิแอมป์ ถ้าจำไม่ผิด ใช้กับบุหรี่ไฟฟ้า แต่อย่างที่ผมบอกไปว่าจะใช้แบตเตอรี่ลิเธียมอะไรก็ได้

ฉันวัดทุกอย่างอีกครั้ง วัดและเตรียมการออกแบบตัวเรือนสำหรับการพิมพ์บนเครื่องพิมพ์ 3D ใช้เวลาเพียง 15 นาทีบนเว็บไซต์ TinkerCAD และโปรเจ็กต์ก็พร้อมที่จะพิมพ์ ฉันถ่ายโอนไฟล์ไปยังแฟลชไดรฟ์ เปิดใช้งานแล้วไปกันเลย เวลาในการพิมพ์ประมาณ 40 นาที นี่เป็นตัวเล็งตัวแรกสำหรับการลองวางโมดูล

บอร์ดและปุ่มเข้าที่พอดี แต่หน้าจอสั้นเพียง 1 มิลลิเมตร และขาตั้งภายในก็ขวางทาง ดังนั้นทุกอย่างลงตัวและติดตั้งเข้าที่ เยี่ยมมาก ฉันแก้ไขโปรเจ็กต์และพิมพ์ รุ่นสุดท้ายที่อยู่อาศัยสีส้ม หลังจากพิมพ์เสร็จต้องให้เวลาโต๊ะเย็นแล้วจึงฉีกส่วนออกเท่านั้น จากนั้นด้านหน้าจะเรียบและไม่ขยับ

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

บอร์ดพอดีกับเคสอย่างสมบูรณ์, ตัวยึดอยู่ในแนวเดียวกัน, ปุ่มไม่ติด ปลายด้านหนึ่งมีรูสำหรับขั้วต่อ Arduino Nano และอีกด้านหนึ่งสำหรับชาร์จแบตเตอรี่ มันแคบลงเล็กน้อยดังนั้นฉันจึงขยายมันด้วยมีดผ่าตัด

แผงชาร์จมีส่วนยื่นออกมาตามขอบ ป้องกันไม่ให้ขั้วต่อลึก ดังนั้นฉันจึงบดมันด้วยตะไบเข็ม ตอนนี้บอร์ดอยู่ในตำแหน่งที่ดีแล้ว

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

ฉันแยกสวิตช์ออกจากกันโดยใช้มีดผ่าตัดเจาะรูเหนือปุ่ม มันฝังอยู่ในร่างกายและจะไม่รบกวน

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

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

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

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

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

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

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

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

ฉันประสานโมดูลป้องกันและยึดให้เข้าที่ด้วยกาวร้อน

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

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

ฉันติดตั้งคอนโทรลเลอร์เข้าที่ เปิดแหล่งจ่ายไฟอัตโนมัติ... iiiiiiiii... ไม่มีอะไรเลย ไฟ LED เพาเวอร์บน Arduino เปิดอยู่ แต่หน้าจอไม่เปิด และนั่นคือสิ่งที่เกิดขึ้น เหตุผลที่ฉันยังไม่รู้ ฉันใช้เวลาหลายชั่วโมงในการทำงานเพื่อให้ตัวติดตามทำงานโดยอัตโนมัติจากแบตเตอรี่ในตัว

ตอนแรกฉันคิดว่าตัวแปลงไฟแบบสเต็ปอัพขนาดเล็กคือตัวการ แต่การตรวจสอบด้วยมัลติมิเตอร์พบว่ามีแรงดันไฟฟ้า 5 โวลต์คงที่ ต่อไป ฉันเชื่อมต่อโมดูลพลังงานอัตโนมัติที่ฉันเหลือจากโปรเจ็กต์อื่น มันถูกสร้างขึ้นบนบูสต์คอนเวอร์เตอร์ขนาดใหญ่ - และแท้จริงแล้ว ตัวติดตามเริ่มทำงาน แต่ค้างหลังจากนั้นไม่กี่วินาที

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

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

เพียงเท่านี้ฉันก็บิดสายไฟเป็นผมเปียเพื่อหลีกเลี่ยงการรบกวน อ่า... ไอ้เวรนี่ไม่เปิดอีกเลย แม่นยำยิ่งขึ้นคือเปิดขึ้นและค้างทันทีพร้อมกับสิ่งประดิษฐ์บนหน้าจอ ทำงานหลายชั่วโมงและเปล่าประโยชน์เลย การเปลี่ยนตัวแปลงไม่ได้ช่วยอะไร

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

เมื่อใช้วิธีการปิดเครื่องตามลำดับ ฉันสามารถพบว่าหน้าจอ OLED ต้องตำหนิในเรื่องนี้ แต่ฉันก็ยังไม่เข้าใจว่าทำไม พบวิธีแก้ปัญหาอย่างกะทันหัน ในระหว่างการตรวจสอบแหล่งจ่ายไฟอัตโนมัติครั้งต่อไป ฉันจ่ายไฟ 5 โวลต์ไปที่พิน VIN โดยไม่ได้ตั้งใจ ฉันสังเกตว่าพินนี้! ไม่! ออกแบบให้จ่ายไฟ 5 โวลต์ และต้องใช้แรงดันไฟฟ้า 7 ถึง 12 โวลต์

แต่อย่างไรก็ตาม ตัวติดตามก็เริ่มทำงานทันทีและเริ่มทำงานได้อย่างเสถียร เหล่านั้น. ปรากฎว่าโคลงขนาดเล็กไม่ใช่สาเหตุของปัญหา แต่เป็นอย่างอื่น

ในขณะเดียวกันฉันก็ตัดสินใจตรวจสอบปริมาณการใช้กระแสไฟ จากไฟ 5 โวลต์ ตัวติดตามกินไฟประมาณ 70 มิลลิแอมป์ และจาก 4 โวลต์ผ่านบูสต์คอนเวอร์เตอร์กลายเป็นประมาณ 110 มิลลิแอมป์ ดังนั้นแบตเตอรี่ขนาดเล็ก 350 มิลลิแอมป์ของฉันจะใช้งานได้นานสามชั่วโมง อายุการใช้งานแบตเตอรี่. และฉันยังไม่ได้ปรับแหล่งจ่ายไฟให้เหมาะสม คุณสามารถตัดไฟ LED ที่เปิดตลอดเวลาและยังคงประหยัดแบตเตอรี่ได้

ตัวติดตามเริ่มทำงานอย่างเสถียรโดยสมบูรณ์ ฉันทิ้งมันไว้ที่หน้าต่าง และหลังจากนั้นไม่กี่นาที มันก็จับดาวเทียมได้ 4 ดวง ยอดเยี่ยม

หากคุณสนใจที่จะช่วยให้ฉันเข้าใจสาเหตุของพฤติกรรมแปลกๆ ของ Arduino ต่อไปนี้เป็นคำแนะนำ:

1 – ตัวติดตามทำงานได้หากขับเคลื่อนผ่านขั้วต่อ Arduino USB

2 – ตัวติดตามค้างและไม่เปิดหากคุณจ่ายไฟผ่านพิน Arduino 5V โดยใช้แรงดันไฟฟ้า 5 โวลต์จากแหล่งพลังงานใดๆ

3 – ตัวติดตามค้างและไม่เปิดหากใช้ไฟ 7 โวลต์ขึ้นไปผ่านพิน Arduino VIN

4 – ตัวติดตามทำงานได้หากใช้พลังงาน 5 โวลต์ที่ไม่ได้มาตรฐานผ่านพิน VIN เดียวกัน

อุปกรณ์ที่เสร็จสมบูรณ์แล้วคือมาตรวัดความเร็วอัตโนมัติแบบสากล, เรนจ์ไฟนเนอร์, มาตรวัดระยะทางและนาฬิกาบอกเวลาที่แม่นยำผ่านดาวเทียมในตัวเครื่องเดียว

บนหน้าจอหลักหลังจากโหลดเวลาปัจจุบันใน Greenwich จะแสดงที่ด้านบน บรรทัดที่สองคือความเร็วปัจจุบัน 0.3 กิโลเมตรต่อชั่วโมงและค่าความเร็วสูงสุดที่บันทึกไว้นับตั้งแต่เวลาที่เปิดเครื่อง - 26 กิโลเมตรต่อชั่วโมง ในบรรทัดที่สาม ระยะทางปัจจุบันถึงจุดศูนย์คือ 530 เมตร และระยะทางสูงสุดที่ทำได้ตั้งแต่เปิดเครื่องคือ 580 เมตร ในบรรทัดที่สี่ มาตรวัดระยะทางแสดง 923 เมตร และจำนวนดาวเทียมที่ใช้

ตัวอักษรบรรทัดล่างคือจำนวนข้อมูลที่ได้รับจากโมดูล GPS

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

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

มาดูการทดสอบกันดีกว่า ตอนนี้ตัวติดตามเห็นดาวเทียม 12 ดวง ฉันตั้งค่าจุดศูนย์ในปัจจุบันและรีเซ็ตมาตรวัดระยะทางเป็นศูนย์ ฉันทำสิ่งเดียวกันกับมาตรวัดระยะทางของรถยนต์ เมื่อเดินทาง 1.2 กิโลเมตรตามมาตรวัดความเร็วของรถ ฉันเห็น 1205 เมตรเดียวกันบนตัวติดตาม GPS ระยะทางปัจจุบันถึงจุดศูนย์ในแนวตรงคือ 0.93 กิโลเมตร และตามแผนที่นั้น 930 เมตรเท่ากัน จนถึงตอนนี้ทุกอย่างถูกต้อง

ฉันตัดสินใจวัดระยะทางที่ไกลขึ้น ฉันรีเซ็ตการอ่านบนตัวติดตามและรถยนต์เป็นศูนย์อีกครั้ง เมื่อเดินทางไปแล้ว 8.4 กิโลเมตร ฉันพบเครื่องติดตามว่าระยะทางสั้นกว่า - เพียง 7974 เมตร ในกรณีนี้ ระยะทางปัจจุบันถึงจุดศูนย์คือ 4,930 เมตร ลองดูในแผนที่ว่าแม่นมาก 4,930 เมตรเท่าเดิม ยังไม่ชัดเจน แต่ทำไมมาตรวัดระยะทางจึงอยู่ที่ 400 เมตร และมาตรวัดระยะทางตัวใดที่วางอยู่บนรถหรือ GPS

เอาล่ะ ถึงเวลาพิมพ์แล้ว ปกหลังและเราจะทดสอบอีกครั้ง ฉันกำลังปิด. น้ำหนักของอุปกรณ์ที่เสร็จแล้วกลายเป็น 55 กรัม มาก แต่ไม่สำคัญ - ในตอนท้ายฉันจะแสดงวิธีลดน้ำหนักให้คุณ

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

มาทำแบบทดสอบครั้งสุดท้ายด้วย โทรศัพท์มือถือ. โทรศัพท์เห็นดาวเทียม 7 ดวงและเครื่องติดตาม 9 ฉันเริ่มบันทึกและรีเซ็ตมาตรวัดระยะทางบนตัวติดตาม เอาล่ะ...ไปกันเลย หลังจากขับรถไปได้สามกิโลเมตร โทรศัพท์และตัวติดตามก็แสดงค่าที่เหมือนกันบนมาตรวัดระยะทาง 3017 เทียบกับ 3021 เมตรเป็นผลลัพธ์ที่ยอดเยี่ยม ฉันไม่ได้คาดหวังความแม่นยำเช่นนี้

แต่มาตรวัดระยะทางเกิดข้อผิดพลาดมากถึง 12,000 กิโลเมตร ไม่เปรี้ยว ก่อนหน้านี้เมื่อทำการดีบั๊กโปรแกรมฉันพบข้อผิดพลาดดังกล่าวแล้วและตัวติดตามก็ถูกย้ายไปทันที 7,000 กิโลเมตร เมื่อฉันกลับถึงบ้าน ฉันสร้างจุดใน Google โดยมีละติจูดและลองจิจูดเป็นศูนย์ ปรากฎว่าตั้งอยู่ในมหาสมุทรแอตแลนติกซึ่งอยู่ไม่ไกลจากชายฝั่งกานา เมื่อวัดระยะทางจากจุดนั้นถึงตำแหน่งของฉัน ฉันก็ไปได้ 7,000 กิโลเมตรเท่าเดิม ปรากฎว่าบางครั้งโมดูล GPS ข้ามศูนย์ไปตามพิกัด สิ่งนี้สามารถแก้ไขได้อย่างง่ายดายโดยการเพิ่มเงื่อนไขเดียวให้กับโค้ดโปรแกรม และไม่พบข้อผิดพลาดนี้ในระหว่างการทดสอบ

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

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

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

เพียงเท่านี้สำหรับวันนี้ หากคุณชอบวิดีโอนี้ ฉันแน่ใจว่าคุณจะต้องชอบและแชร์ลิงก์ไปยังวิดีโอกับเพื่อนของคุณ

ขอบคุณที่รับชม ขอให้โชคดีทุกคน และพบกันในวิดีโอใหม่! ลาก่อน!

ข้อมูลจะถูกบันทึกในสเปรดชีต 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" ) ; ) )