- ส่วนประกอบที่จำเป็น
- โมดูล GPS
- ตรึงจาก STM32F103C8
- แผนภาพวงจรและการเชื่อมต่อ
- การเขียนโปรแกรม STM32F103C8 สำหรับการเชื่อมต่อโมดูล GPS
- ค้นหาละติจูดและลองจิจูดด้วย GPS และ STM32
GPS ย่อมาจาก Global Positioning System และใช้ในการตรวจจับละติจูดและลองจิจูดของตำแหน่งใด ๆ บนโลกด้วยเวลา UTC ที่แน่นอน (Universal Time Coordinated) อุปกรณ์นี้รับพิกัดจากดาวเทียมเป็นรายวินาทีพร้อมเวลาและวันที่ GPS ให้ความแม่นยำสูงและยังให้ข้อมูลอื่น ๆ นอกเหนือจากพิกัดตำแหน่ง
เราทุกคนทราบดีว่า GPS เป็นอุปกรณ์ที่มีประโยชน์และนิยมใช้ในโทรศัพท์มือถือและอุปกรณ์พกพาอื่น ๆ เพื่อติดตามตำแหน่ง มีแอพพลิเคชั่นที่หลากหลายในทุกสาขาตั้งแต่การเรียกแท็กซี่ที่บ้านของคุณเพื่อติดตามระดับความสูงของเครื่องบิน นี่คือโครงการที่เกี่ยวข้องกับ GPS ที่มีประโยชน์ซึ่งเราสร้างไว้ก่อนหน้านี้:
- ระบบติดตามยานพาหนะ
- นาฬิกา GPS
- ระบบแจ้งเตือนการตรวจจับอุบัติเหตุ
- การสอนการเชื่อมต่อโมดูล Raspberry Pi GPS
- การเชื่อมต่อโมดูล GPS กับไมโครคอนโทรลเลอร์ PIC
ในบทช่วยสอนนี้เราจะเชื่อมต่อโมดูล GPS กับไมโครคอนโทรลเลอร์ STM32F103C8เพื่อค้นหาพิกัดตำแหน่งและแสดงบนจอ LCD 16x2
ส่วนประกอบที่จำเป็น
- STM32F103C8 ไมโครคอนโทรลเลอร์
- โมดูล GPS
- จอ LCD 16x2
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
โมดูล GPS
เป็นโมดูล GPS GY-NEO6MV2 XM37-1612 โมดูล GPS นี้มีสี่ขา + 5V, GND, TXD และ RXD มันสื่อสารโดยใช้พิน Serial และสามารถเชื่อมต่อกับพอร์ต Serial ของ STM32F103C8 ได้อย่างง่ายดาย
โมดูล GPS ส่งข้อมูลในรูปแบบ NMEA (ดูภาพหน้าจอด้านล่าง) รูปแบบ NMEA ประกอบด้วยหลายประโยคซึ่งเราต้องการเพียงประโยคเดียว ประโยคนี้เริ่มต้นจาก $ GPGGA และมีพิกัดเวลาและข้อมูลที่เป็นประโยชน์อื่น ๆ นี้ GPGGA จะเรียกว่า Global Positioning System แก้ไขข้อมูล เรียนรู้เพิ่มเติมเกี่ยวกับการอ่านข้อมูล GPS และสตริงที่นี่
ด้านล่างนี้คือตัวอย่าง $ GPGGA String พร้อมกับคำอธิบาย:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47
$ GPGGA, HHMMSS.SSS, ละติจูด, N, ลองจิจูด, E, FQ, NOS, HDP, ความสูง, M, ความสูง, M, ข้อมูลการตรวจสอบ
แต่ที่นี่ในบทช่วยสอนนี้เรากำลังใช้ ไลบรารี TinyGPSPlus GPS ซึ่งดึงข้อมูลที่จำเป็นทั้งหมดออกจากประโยค NMEA และเราต้องเขียนโค้ดง่ายๆเพื่อรับละติจูดและลองจิจูดซึ่งเราจะเห็นในบทช่วยสอนในภายหลัง.
ตรึงจาก STM32F103C8
STM32F103C8 (BLUE PILL) พอร์ตการสื่อสารแบบอนุกรมของ USART แสดงอยู่ในภาพขาออกด้านล่าง เหล่านี้เป็นสีน้ำเงินที่มี (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11-RX3) มีสามช่องทางการสื่อสารดังกล่าว
แผนภาพวงจรและการเชื่อมต่อ
การเชื่อมต่อวงจรระหว่างโมดูล GPS และ STM32F103C8
โมดูล GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
การเชื่อมต่อระหว่าง 16x2 LCD และ STM32F103C8
หมายเลขขา LCD |
ชื่อพิน LCD |
ชื่อพิน STM32 |
1 |
พื้นดิน (Gnd) |
พื้นดิน (G) |
2 |
VCC |
5V |
3 |
วี |
Pin จาก Center of Potentiometer |
4 |
ลงทะเบียนเลือก (RS) |
PB11 |
5 |
อ่าน / เขียน (RW) |
พื้นดิน (G) |
6 |
เปิดใช้งาน (EN) |
PB10 |
7 |
บิตข้อมูล 0 (DB0) |
ไม่มีการเชื่อมต่อ (NC) |
8 |
บิตข้อมูล 1 (DB1) |
ไม่มีการเชื่อมต่อ (NC) |
9 |
บิตข้อมูล 2 (DB2) |
ไม่มีการเชื่อมต่อ (NC) |
10 |
บิตข้อมูล 3 (DB3) |
ไม่มีการเชื่อมต่อ (NC) |
11 |
บิตข้อมูล 4 (DB4) |
PB0 |
12 |
บิตข้อมูล 5 (DB5) |
PB1 |
13 |
บิตข้อมูล 6 (DB6) |
พีซี 13 |
14 |
บิตข้อมูล 7 (DB7) |
พีซี 14 |
15 |
LED เป็นบวก |
5V |
16 |
LED เชิงลบ |
พื้นดิน (G) |
การตั้งค่าทั้งหมดจะมีลักษณะดังนี้:
การเขียนโปรแกรม STM32F103C8 สำหรับการเชื่อมต่อโมดูล GPS
โปรแกรมที่สมบูรณ์สำหรับการค้นหาตำแหน่งโดยใช้โมดูล GPS โดยใช้ STM32 มีให้ในตอนท้ายของโครงการนี้ STM32F103C8 สามารถตั้งโปรแกรมโดยใช้ Arduino IDE ได้เพียงแค่เชื่อมต่อกับพีซีผ่านพอร์ต USB อย่าลืมถอดพิน TX และ RX ออกในขณะที่อัปโหลดโค้ดและเชื่อมต่อหลังจากอัปโหลด
ในการเชื่อมต่อ GPS กับ STM32 ก่อนอื่นเราต้องดาวน์โหลดไลบรารีจากลิงก์ GitHub TinyGPSPlus หลังจากดาวน์โหลดไลบรารีแล้วสามารถรวมไว้ใน Arduino IDE โดยไปที่Sketch -> รวมไลบรารี -> เพิ่ม. zip Library สามารถใช้ไลบรารีเดียวกันเพื่อเชื่อมต่อ GPS กับ Arduino
ก่อนอื่นให้รวมไฟล์ไลบรารีที่จำเป็นและกำหนดพินสำหรับ LCD 16x2:
# รวม
จากนั้นสร้างวัตถุชื่อ gps ของคลาส TinyGPSPlus
TinyGPSPlus จีพีเอส;
ถัดไปในการ ตั้งค่าโมฆะ เริ่มการสื่อสารแบบอนุกรมกับโมดูล GPS โดยใช้ Serial1.begin (9600) Serial1 ใช้เป็นพอร์ต Serial 1 (Pins-PA9, PA10) ของ STM32F103C8
Serial1.begin (9600);
จากนั้นแสดงข้อความต้อนรับเป็นระยะเวลาหนึ่ง
lcd.begin (16,2); lcd.print ("วงจรย่อย"); lcd.setCursor (0,1); lcd.print ("STM32 พร้อม GPS"); ล่าช้า (4000); lcd.clear ();
ถัดไปใน void loop () เรารับละติจูดและลองจิจูดจาก GPS และตรวจสอบว่าข้อมูลที่ได้รับนั้นถูกต้องหรือไม่และแสดงข้อมูลในจอภาพอนุกรมและ LCD
ตรวจสอบว่าข้อมูลตำแหน่งที่มีอยู่นั้นถูกต้องหรือไม่
loc_valid = gps.location.isValid ();
รับข้อมูลละติจูด
lat_val = gps.location.lat ();
รับข้อมูลลองจิจูด
lng_val = gps.location.lng ();
หากได้รับข้อมูลที่ไม่ถูกต้องจะแสดง“ *****” ในจอภาพแบบอนุกรมและแสดงคำว่า“ waiting” ใน LCD
ถ้า (! loc_valid) { lcd.print ("กำลังรอ"); Serial.print ("ละติจูด:"); Serial.println ("*****"); Serial.print ("ลองจิจูด:"); Serial.println ("*****"); ล่าช้า (4000); lcd.clear (); }
หากได้รับข้อมูลที่ถูกต้องละติจูดและลองจิจูดจะแสดงบนจอภาพอนุกรมเช่นเดียวกับบนจอ LCD
lcd.clear (); Serial.println ("การอ่าน GPS:"); Serial.print ("ละติจูด:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("ลองจิจูด:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("ยาว:"); lcd.print (lng_val, 6); ล่าช้า (4000);
ฟังก์ชันต่อไปนี้ให้ความล่าช้าในการอ่านข้อมูล มันคอยค้นหาข้อมูลบนพอร์ตอนุกรม
โมฆะแบบคงที่ GPSDelay (ms ยาวที่ไม่ได้ลงนาม) { ไม่ได้ลงนาม long start = millis (); ทำ { while (Serial1.available ()) gps.encode (Serial1.read ()); } ในขณะที่ (มิลลิวินาที () - เริ่ม <ms); }
ค้นหาละติจูดและลองจิจูดด้วย GPS และ STM32
หลังจากสร้างการตั้งค่าและอัปโหลดรหัสตรวจสอบให้แน่ใจว่าได้วางโมดูล GPS ในพื้นที่เปิดเพื่อรับสัญญาณอย่างรวดเร็ว บางครั้งอาจใช้เวลาสองถึงสามนาทีในการรับสัญญาณดังนั้นโปรดรอสักครู่ ไฟ LED จะเริ่มกะพริบในโมดูล GPS เมื่อเริ่มรับสัญญาณและพิกัดตำแหน่งจะแสดงบนจอ LCD
คุณสามารถตรวจสอบเส้นรุ้งและเส้นแวงของตำแหน่งโดยใช้ Google Maps เพียงไปที่ Google maps โดยเปิด GPS แล้วคลิกที่จุดสีน้ำเงิน มันจะแสดงที่อยู่พร้อมละติจูดและลองจิจูดดังแสดงในภาพด้านล่าง
สมบูรณ์รหัสและวิดีโอสาธิตได้รับด้านล่าง