ในบทช่วยสอนก่อนหน้านี้เราได้เรียนรู้เกี่ยวกับวิธีเชื่อมต่อโมดูล GPS กับคอมพิวเตอร์และวิธีติดตามยานพาหนะโดยใช้ GSM และ GPS นอกจากนี้เรายังสร้างระบบแจ้งเตือนอุบัติเหตุรถยนต์โดยใช้ Arduino และมาตรความเร่ง ที่นี่เรากำลังสร้างโครงการเดียวกันอีกครั้ง แต่คราวนี้จะใช้แผ่นเปิดตัวMSP430 และเซ็นเซอร์การสั่นสะเทือนเพื่อตรวจจับอุบัติเหตุทางรถยนต์ ดังนั้นโครงการนี้จะบอกเกี่ยวกับการเชื่อมต่อเซ็นเซอร์การสั่นสะเทือนกับ MSP430 launchpad คุณสามารถค้นหาโครงการ MSP430 เพิ่มเติมได้ที่นี่
โมดูลเซ็นเซอร์การสั่นสะเทือนจะตรวจจับการสั่นสะเทือนของยานพาหนะและส่งสัญญาณไปยัง MSP430 Launchpad จากนั้น MSP430 จะดึงข้อมูลจากโมดูล GPS และส่งไปยังโทรศัพท์มือถือของผู้ใช้ผ่าน SMS โดยใช้โมดูล GSM นอกจากนี้ไฟ LED จะเรืองแสงเป็นสัญญาณแจ้งเตือนอุบัติเหตุ LED นี้สามารถแทนที่ได้ด้วยสัญญาณเตือนบางอย่าง ตำแหน่งที่เกิดอุบัติเหตุจะถูกส่งในรูปแบบของลิงก์ Google Mapซึ่งได้มาจากละติจูดและลองจิจูดจากโมดูล GPS ดู วิดีโอสาธิต ในตอนท้าย
โมดูล GPS ส่งข้อมูลที่เกี่ยวข้องกับตำแหน่งการติดตามแบบเรียลไทม์และส่งข้อมูลจำนวนมากในรูปแบบ NMEA (ดูภาพหน้าจอด้านล่าง) รูปแบบ NMEA ประกอบด้วยหลายประโยคซึ่งเราต้องการเพียงประโยคเดียว ประโยคนี้เริ่มต้นจาก $ GPGGA และมีพิกัดเวลาและข้อมูลที่เป็นประโยชน์อื่น ๆ นี้ GPGGA จะเรียกว่า Global Positioning System แก้ไขข้อมูล เรียนรู้เพิ่มเติมเกี่ยวกับประโยค NMEA และอ่านข้อมูล GPS ที่นี่
เราสามารถแยกพิกัดจากสตริง $ GPGGA โดยการนับลูกน้ำในสตริง สมมติว่าคุณพบสตริง $ GPGGA และเก็บไว้ในอาร์เรย์แล้วละติจูดสามารถพบได้หลังจากพบเครื่องหมายจุลภาคสองตัวและลองจิจูดหลังจากสี่ลูกน้ำ ทีนี้ละติจูดและลองจิจูดนี้สามารถใส่ในอาร์เรย์อื่นได้
ด้านล่างนี้คือ$ 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, ข้อมูลการตรวจสอบ
ตัวระบุ |
คำอธิบาย |
$ GPGGA |
ข้อมูลการแก้ไขระบบกำหนดตำแหน่งบนพื้นโลก |
HHMMSS.SSS |
เวลาเป็นชั่วโมงนาทีวินาทีและรูปแบบมิลลิวินาที |
ละติจูด |
ละติจูด (พิกัด) |
น |
ทิศทาง N = เหนือ, S = ใต้ |
ลองจิจูด |
ลองจิจูด (พิกัด) |
จ |
ทิศทาง E = ตะวันออก, W = ตะวันตก |
FQ |
แก้ไขข้อมูลคุณภาพ |
NOS |
จำนวนดาวเทียมที่ใช้ |
HDP |
การเจือจางความแม่นยำในแนวนอน |
ระดับความสูง |
ระดับความสูง (เมตรเหนือระดับน้ำทะเล) |
ม |
เมตร |
ความสูง |
ความสูง |
เช็คซัม |
ข้อมูล Checksum |
โมดูล GSM
SIM900 เป็นโมดูล GSM / GPRS Quad-band ที่สมบูรณ์ซึ่งสามารถฝังใช้โดยลูกค้าหรือมือสมัครเล่นได้อย่างง่ายดาย SIM900 GSM Module มีอินเทอร์เฟซมาตรฐานอุตสาหกรรม SIM900 ให้ประสิทธิภาพ GSM / GPRS 850/900/1800 / 1900MHz สำหรับเสียง SMS ข้อมูลที่ใช้พลังงานต่ำ หาได้ง่ายในตลาด
- SIM900 ออกแบบโดยใช้หน่วยประมวลผลแบบชิปเดี่ยวที่รวม AMR926EJ-S core
- โมดูล GSM / GPRS แบบ Quad-band ขนาดเล็ก
- เปิดใช้ GPRS
คำสั่ง AT
AT หมายถึงความสนใจ คำสั่งนี้ใช้เพื่อควบคุมโมดูล GSM มีคำสั่งบางอย่างสำหรับการโทรและการส่งข้อความที่เราเคยใช้ในโครงการ GSM ก่อนหน้านี้กับ Arduino สำหรับการทดสอบโมดูล GSM เราใช้คำสั่ง AT หลังจากได้รับ AT Command GSM Module ตอบสนองด้วย OK หมายความว่าโมดูล GSM ทำงานได้ดี ด้านล่างนี้คือ คำสั่ง AT ที่ เราใช้ที่นี่ในโครงการนี้:
ATE0 สำหรับปิดเสียงสะท้อน
ที่ + CNMI = 2,2,0,0,0
ATD
ที่ + CMGF = 1
AT + CMGS =” หมายเลขโทรศัพท์มือถือ”
>> ตอนนี้เราสามารถเขียนข้อความของเราได้แล้ว
>> หลังจากเขียนข้อความ
Ctrl + Z ส่งคำสั่งข้อความ (26 ในฐานสิบ)
ENTER = 0x0d ใน HEX
(หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโมดูล GSM ตรวจสอบโครงการ GSM ต่างๆของเราด้วยไมโครคอนโทรลเลอร์ต่างๆที่นี่)
โมดูลเซ็นเซอร์การสั่นสะเทือน
ในโครงการMSP430 Accident Alert Systemเราได้ใช้โมดูลเซ็นเซอร์การสั่นสะเทือนซึ่งตรวจจับการสั่นสะเทือนหรือการปรับเปลี่ยนอย่างกะทันหัน โมดูลเซ็นเซอร์การสั่นสะเทือนให้ลอจิกสูง / ต่ำเอาต์พุตดิจิตอลขึ้นอยู่กับโมดูล ในกรณีของเราเราได้ใช้โมดูลเซ็นเซอร์การสั่นสะเทือนตรรกะสูงที่ใช้งานอยู่ หมายความว่าเมื่อใดก็ตามที่เซ็นเซอร์ตรวจจับการสั่นสะเทือนตรวจจับการสั่นสะเทือนมันจะให้ตรรกะสูงแก่ไมโครคอนโทรลเลอร์
คำอธิบายวงจร
การเชื่อมต่อวงจรของโครงการระบบแจ้งเตือนอุบัติเหตุของ ยานพาหนะ นี้ทำได้ง่าย ที่นี่ Tx พินของ โมดูล GPS เชื่อมต่อโดยตรงกับหมายเลขพินดิจิทัล P1_1 ของ MSP430 Launchpad (อนุกรมฮาร์ดแวร์) และ 5v ใช้เพื่อจ่ายไฟให้กับโมดูล GPS โดยการใช้ซอฟท์แวอนุกรมห้องสมุดที่นี่เราได้รับอนุญาตให้การสื่อสารแบบอนุกรมบนขา P_6 และ P1_7 และทำให้พวกเขา Rx Tx และตามลำดับและเชื่อมต่อกับโมดูล GSM แหล่งจ่ายไฟ 12 โวลต์ใช้เพื่อจ่ายไฟให้กับโมดูล GSM สั่นสะเทือนเซ็นเซอร์มีการเชื่อมต่อที่ P1_3 นอกจากนี้ยังใช้ LED เพื่อระบุการตรวจจับอุบัติเหตุ การเชื่อมต่อที่เหลือจะแสดงในแผนภาพวงจร
คำอธิบายการเขียนโปรแกรม
การเขียนโปรแกรมสำหรับโครงการนี้ทำได้ง่ายยกเว้นส่วน GPS รหัสที่สมบูรณ์จะได้รับเมื่อสิ้นสุดโครงการ ในการเขียนหรือรวบรวมโค้ดใน MSP430 เราได้ใช้ Energia IDE ซึ่งเข้ากันได้กับ Arduino ฟังก์ชัน Arduino IDE ส่วนใหญ่สามารถใช้งานได้โดยตรงใน Energia IDE นี้
ก่อนอื่นเราได้รวมไลบรารีที่จำเป็นและประกาศพินและตัวแปร
# รวม
ฟังก์ชั่นที่ได้รับจะใช้สำหรับสัญญาณเซ็นเซอร์อ่านการสั่นสะเทือนฟังก์ชั่นนี้จะกรองการสั่นขนาดเล็กหรือผิดพลาดด้วย
#define count_max 25 char SensorRead (พิน int) // อ่านsw พร้อม debounce { char count_low = 0, count_high = 0; ทำ { ล่าช้า (1); ถ้า (digitalRead (พิน) == สูง) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } ในขณะที่ (count_low <count_max && count_high <count_max); ถ้า (count_low> = count_max) ส่งคืน LOW; อื่น กลับสูง; }
ฟังก์ชันด้านล่างนี้จะตรวจจับการสั่นสะเทือนและเรียกใช้ ฟังก์ชัน gpsEvent () เพื่อรับพิกัด GPS และสุดท้ายเรียกฟังก์ชัน Send () เพื่อส่ง SMS
โมฆะ loop () { if (SensorRead (VibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); ส่ง(); digitalWrite (led, LOW); ล่าช้า (2000); } }
Given Function มีหน้าที่รับสาย GPS จากโมดูล GPSดึงพิกัดจากพวกมันและแปลงเป็นรูปแบบองศาทศนิยม
เป็นโมฆะ gpsEvent () { ถ่าน gpsString; การทดสอบถ่าน = "RMC"; ฉัน = 0; ในขณะที่ (1) { while (Serial.available ()) // Serial incomming data from GPS { char inChar = (char) Serial.read (); gpsString = inChar; // จัดเก็บข้อมูลการรวมจาก GPS ไปยังสตริง temparary str i ++; ถ้า (i <4) { if (gpsString! = test) // ตรวจสอบสตริงที่ถูกต้อง i = 0; }
int องศา = 0; องศา = gpsString-48; องศา * = 10; องศา + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minut_dec = 0; minut_dec + = (gpsString-48) * 10,000; minut_dec + = (gpsString-48) * 1,000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minut_dec + = (gpsString-48); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; ละติจูด = ((ลอย) องศา + นาที);
และสุดท้ายฟังก์ชั่น Send () ใช้เพื่อส่ง SMS ไปยังหมายเลขผู้ใช้ที่ใส่ไว้ในส่วนนี้ของรหัส
เป็นโมฆะ Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // ป้อนหมายเลขโทรศัพท์มือถือของคุณ GSM.println ('"'); ล่าช้า (500); // GSM.print ("ละติจูด:"); // GSM.println (ละติจูด); GSM.println ("อุบัติเหตุที่เกิดขึ้น"); ล่าช้า (500); // GSM.print ("ลองจิจูด:"); // GSM.println (ตรรกะ); GSM.println ("คลิกที่ลิงค์เพื่อดูตำแหน่ง"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (ละติจูด 6); GSM.print ("+"); GSM.print (ตรรกะ 6); GSM.write (26); ล่าช้า (4000); }
รหัสที่สมบูรณ์และวิดีโอสาธิต จะได้รับด้านล่างคุณสามารถตรวจสอบฟังก์ชันทั้งหมดในรหัสได้