- ส่วนประกอบที่ต้องการ:
- โมดูล GPS และการทำงาน:
- โมดูล GSM:
- มาตรความเร่ง:
- คำอธิบายวงจร:
- คำอธิบายการทำงาน:
- คำอธิบายการเขียนโปรแกรม:
ในบทช่วยสอนก่อนหน้านี้เราได้เรียนรู้เกี่ยวกับวิธีเชื่อมต่อโมดูล GPS กับคอมพิวเตอร์วิธีสร้างนาฬิกา GPS Arduino และวิธีติดตามยานพาหนะโดยใช้ GSM และ GPS ที่นี่ในโครงการนี้เราจะไปสร้างArduino ตามระบบการแจ้งเตือนอุบัติเหตุรถโดยใช้ GPS, GSM และ accelerometer Accelerometer ตรวจจับการเปลี่ยนแปลงอย่างกะทันหันในแกนของยานพาหนะและโมดูล GSM จะส่งข้อความแจ้งเตือนไปยังโทรศัพท์มือถือของคุณพร้อมตำแหน่งที่เกิดอุบัติเหตุ ตำแหน่งที่เกิดอุบัติเหตุจะถูกส่งในรูปแบบของลิงก์ Google Map ซึ่งได้มาจากละติจูดและลองจิจูดจากโมดูล GPS ข้อความยังระบุความเร็วของยานพาหนะเป็นนอต ดูวิดีโอสาธิตในตอนท้าย โครงการแจ้งเตือนอุบัติเหตุทางรถยนต์นี้ยังสามารถใช้เป็นระบบติดตามและอื่น ๆ อีกมากมายโดยทำการเปลี่ยนแปลงฮาร์ดแวร์และซอฟต์แวร์เพียงเล็กน้อย
ส่วนประกอบที่ต้องการ:
- Arduino Uno
- โมดูล GSM (SIM900A)
- โมดูล GPS (SIM28ML)
- มาตรความเร่ง (ADXL335)
- 16x2 LCD
- พาวเวอร์ซัพพลาย
- การเชื่อมต่อสายไฟ
- 10 กพ
- Breadboard หรือ PCB
- แหล่งจ่ายไฟ 12v 1amp
ก่อนที่จะเข้าสู่ Project เราจะพูดคุยเกี่ยวกับ GPS, GSM และ Accelerometer
โมดูล GPS และการทำงาน:
GPS ย่อมาจาก Global Positioning System และใช้เพื่อตรวจจับละติจูดและลองจิจูดของตำแหน่งใด ๆ บนโลกโดยมีเวลา UTC ที่แน่นอน (Universal Time Coordinated) โมดูล GPS ใช้เพื่อติดตามตำแหน่งที่เกิดอุบัติเหตุในโครงการของเรา อุปกรณ์นี้รับพิกัดจากดาวเทียมเป็นรายวินาทีพร้อมเวลาและวันที่ ก่อนหน้านี้เราได้แยก สตริง$ GPGGAในระบบติดตามยานพาหนะเพื่อค้นหาพิกัดละติจูดและลองจิจูด
โมดูล 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 สำหรับ echo off AT + CNMI = 2,2,0,0,0
(หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโมดูล GSM ตรวจสอบโครงการ GSM ต่างๆของเราด้วยไมโครคอนโทรลเลอร์ต่างๆที่นี่)
มาตรความเร่ง:
คำอธิบายพินของ accelerometer:
- แหล่งจ่ายไฟ Vcc 5 โวลต์ควรเชื่อมต่อที่ขานี้
- X-OUT พินนี้ให้เอาต์พุตอนาล็อกในทิศทาง x
- Y-OUT พินนี้ให้เอาต์พุตอนาล็อกในทิศทาง y
- Z-OUT พินนี้ให้เอาต์พุตอนาล็อกในทิศทาง z
- GND กราวด์
- ST พินนี้ใช้สำหรับตั้งค่าความไวของเซ็นเซอร์
ตรวจสอบโครงการอื่น ๆ ของเราโดยใช้ Accelerometer: Ping Pong Game โดยใช้ Arduino และ Accelerometer Based Hand Gesture Controlled Robot
คำอธิบายวงจร:
การเชื่อมต่อวงจรของโครงการระบบแจ้งเตือนอุบัติเหตุของ ยานพาหนะ นี้ทำได้ง่าย ที่นี่ Tx pin ของโมดูล GPSเชื่อมต่อโดยตรงกับพินดิจิตอลหมายเลข 10 ของ Arduino เมื่อใช้ Software Serial Library ที่นี่เราอนุญาตให้มีการสื่อสารแบบอนุกรมบนพิน 10 และ 11 และทำให้เป็น Rx และ Tx ตามลำดับและเปิดพิน Rx ของโมดูล GPS ไว้ โดยค่าเริ่มต้น Pin 0 และ 1 ของ Arduino จะใช้สำหรับการสื่อสารแบบอนุกรม แต่ด้วยการใช้ไลบรารี SoftwareSerial เราสามารถอนุญาตการสื่อสารแบบอนุกรมบนพินดิจิทัลอื่น ๆ ของ Arduino แหล่งจ่ายไฟ 12 โวลต์ใช้เพื่อจ่ายไฟให้กับโมดูล GPS
หมุด Tx และ Rx ของโมดูล GSMเชื่อมต่อโดยตรงกับพิน D2 และ D3 ของ Arduino สำหรับการเชื่อมต่อ GSM เราได้ใช้ไลบรารีอนุกรมซอฟต์แวร์ด้วย โมดูล GSM ยังใช้พลังงานจากแหล่งจ่ายไฟ 12v หมุดข้อมูลของ LCD ที่เป็นอุปกรณ์เสริม D4, D5, D6 และ D7 เชื่อมต่อกับพินหมายเลข 6, 7, 8 และ 9 ของ Arduino ขาคำสั่ง RS และ EN ของ LCD เชื่อมต่อกับพินหมายเลข 4 และ 5 ของ Arduino และขา RW เชื่อมต่อโดยตรงกับกราวด์ โพเทนชิออมิเตอร์ยังใช้สำหรับตั้งค่าคอนทราสต์หรือความสว่างของ LCD
Accelerometerจะถูกเพิ่มในระบบนี้สำหรับการตรวจสอบการเกิดอุบัติเหตุและ x ของมัน, y, z และแกนหมุดเอาท์พุท ADC เชื่อมต่อโดยตรงกับ Arduino ADC ขา A1, A2 และ A3
คำอธิบายการทำงาน:
ในโครงการนี้ Arduino ถูกนำมาใช้ในการควบคุมกระบวนการทั้งหมดที่มี โมดูลรับ GPS และ GSMตัวรับสัญญาณ GPS ใช้สำหรับตรวจจับพิกัดของยานพาหนะโมดูล GSM ใช้สำหรับส่ง SMS แจ้งเตือนพร้อมพิกัดและลิงก์ไปยัง Google Map Accelerometer คือ ADXL335ใช้สำหรับตรวจจับอุบัติเหตุหรือการเปลี่ยนแปลงอย่างกะทันหันในแกนใด ๆ และยังใช้จอ LCD 16x2 สำหรับแสดงข้อความสถานะหรือพิกัดเราใช้โมดูล GPS SIM28ML และโมดูล GSM SIM900A
เมื่อเราพร้อมกับฮาร์ดแวร์ของเราหลังจากการเขียนโปรแกรมเราสามารถติดตั้งในรถของเราและเปิดเครื่องได้ เมื่อใดก็ตามที่เกิดอุบัติเหตุรถจะเอียงและมาตรความเร่งจะเปลี่ยนค่าแกนของเขา ค่าเหล่านี้อ่านโดย Arduino และตรวจสอบว่ามีการเปลี่ยนแปลงเกิดขึ้นในแกนใดหรือไม่ หากมีการเปลี่ยนแปลงเกิดขึ้น Arduino จะอ่านพิกัดโดยแยก $ GPGGA String จากข้อมูลโมดูล GPS (การทำงานของ GPS ตามที่อธิบายไว้ด้านบน) และส่ง SMS ไปยังหมายเลขที่กำหนดไว้ล่วงหน้าไปยังตำรวจหรือรถพยาบาลหรือสมาชิกในครอบครัวพร้อมพิกัดตำแหน่งของสถานที่เกิดเหตุ ข้อความนี้ยังมีลิงก์ Google Map ไปยังสถานที่เกิดเหตุเพื่อให้สามารถติดตามตำแหน่งได้อย่างง่ายดาย เมื่อเราได้รับข้อความเราจะต้องคลิกที่ลิงค์และเราจะเปลี่ยนเส้นทางไปยังแผนที่ Google จากนั้นเราจะเห็นตำแหน่งที่แน่นอนของรถความเร็วของยานพาหนะเป็นนอต(1.852 KPH) ยังส่งใน SMS และแสดงบนแผง LCD ตรวจสอบวิดีโอสาธิตฉบับเต็มด้านล่างโครงการ
ในโครงการนี้เราสามารถตั้งค่าความไวของ Accelerometer ได้โดยใส่ค่า min และ max ในโค้ด
ที่นี่ในการสาธิตได้ใช้ค่าที่กำหนด:
#define minVal -50 #define MaxVal 50
แต่เพื่อผลลัพธ์ที่ดีกว่าคุณสามารถใช้ 200 แทน 50 หรือจะตั้งค่าตามความต้องการของคุณก็ได้
คำอธิบายการเขียนโปรแกรม:
โปรแกรมที่สมบูรณ์ได้รับด้านล่างในส่วนรหัส; ที่นี่เรากำลังอธิบายการทำงานต่างๆโดยสังเขป
อันดับแรกเราได้รวมไลบรารีหรือไฟล์ส่วนหัวที่จำเป็นทั้งหมดและประกาศตัวแปรต่างๆสำหรับการคำนวณและจัดเก็บข้อมูลชั่วคราว
หลังจากนี้เราได้สร้างฟังก์ชัน เป็นโมฆะ initModule (String cmd, char * res, int t) เพื่อเริ่มต้นโมดูล GSM และตรวจสอบการตอบสนองโดยใช้คำสั่ง AT
เป็นโมฆะ initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); ล่าช้า (100); ในขณะที่ (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); ล่าช้า (t); กลับ; } else {Serial.println ("ข้อผิดพลาด"); }} ล่าช้า (t); }}
หลังจากนี้ในฟังก์ชัน void setup () เราได้เริ่มต้นการสื่อสารแบบอนุกรมของฮาร์ดแวร์และซอฟต์แวร์, LCD, GPS, โมดูล GSM และมาตรความเร่ง
การตั้งค่าเป็นโมฆะ () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("การแจ้งเตือนอุบัติเหตุ"); lcd.setCursor (0,1); lcd.print ("ระบบ"); ล่าช้า (2000); lcd.clear ();…………………
กระบวนการสอบเทียบ Accelerometerยังทำในลูป การตั้งค่า ในสิ่งนี้เราได้นำตัวอย่างบางส่วนแล้วหาค่าเฉลี่ยสำหรับแกน x แกน y และแกน z และเก็บไว้ในตัวแปร จากนั้นเราได้ใช้ค่าตัวอย่างเหล่านี้เพื่ออ่านการเปลี่ยนแปลงของแกนมาตรความเร่งเมื่อรถเอียง (อุบัติเหตุ)
lcd.print ("Callibrating"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); สำหรับ (int i = 0; i
หลังจากนี้ในฟังก์ชัน void loop () เราได้อ่านค่าแกน accelerometer และทำการคำนวณเพื่อแยกการเปลี่ยนแปลงด้วยความช่วยเหลือของตัวอย่างที่นำมาในการสอบเทียบ ตอนนี้หากการเปลี่ยนแปลงใด ๆ มากกว่าหรือน้อยกว่าระดับที่กำหนดไว้แล้ว Arduino จะส่งข้อความไปยังหมายเลขที่กำหนดไว้ล่วงหน้า
โมฆะ loop () {int value1 = analogRead (x); int value2 = analogRead (y); int value3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
ที่นี่เราได้สร้างฟังก์ชั่นอื่น ๆ สำหรับ puposes ต่างๆเช่น void gpsEvent () เพื่อรับพิกัด GPS โมฆะพิกัด 2dec () สำหรับการแยกพิกัดจากสตริง GPS และแปลงเป็นค่าทศนิยม โมฆะ show_coordinate () สำหรับการแสดงค่าผ่านจอภาพแบบอนุกรมและ LCD และสุดท้าย เป็นโมฆะ Send () สำหรับการส่ง SMS แจ้งเตือนไปยังหมายเลขที่กำหนดไว้ล่วงหน้า
รหัสที่สมบูรณ์และวิดีโอสาธิตจะได้รับด้านล่างคุณสามารถตรวจสอบฟังก์ชันทั้งหมดในรหัสได้