- Απαιτούμενα στοιχεία:
- Ενότητα GPS και η λειτουργία του:
- Ενότητα GSM:
- Επιταχυνσιόμετρο:
- Επεξήγηση κυκλώματος:
- Επεξήγηση εργασίας:
- Επεξήγηση προγραμματισμού:
Στα προηγούμενα μαθήματά μας, μάθαμε για τον τρόπο διασύνδεσης της μονάδας GPS με τον υπολογιστή, τον τρόπο δημιουργίας ενός ρολογιού GPS Arduino και τον τρόπο παρακολούθησης οχήματος με χρήση GSM και GPS. Εδώ σε αυτό το έργο, πρόκειται να δημιουργήσουμε ένα σύστημα ειδοποίησης ατυχημάτων οχημάτων με βάση το Arduino χρησιμοποιώντας GPS, GSM και επιταχυνσιόμετρο. Το επιταχυνσιόμετρο εντοπίζει την ξαφνική αλλαγή στους άξονες του οχήματος και η μονάδα GSM στέλνει το μήνυμα ειδοποίησης στο κινητό σας τηλέφωνο με την τοποθεσία του ατυχήματος. Η τοποθεσία του ατυχήματος αποστέλλεται με τη μορφή συνδέσμου χάρτη Google, που προέρχεται από το γεωγραφικό πλάτος και μήκος από τη μονάδα GPS. Το μήνυμα περιέχει επίσης την ταχύτητα του οχήματος σε κόμπους. Δείτε το βίντεο επίδειξηςστο τέλος. Αυτό το έργο ειδοποίησης για ατυχήματα οχήματος μπορεί επίσης να χρησιμοποιηθεί ως σύστημα παρακολούθησης και πολλά άλλα, κάνοντας λίγες μόνο αλλαγές στο υλικό και το λογισμικό.
Απαιτούμενα στοιχεία:
- Arduino Uno
- Ενότητα GSM (SIM900A)
- Ενότητα GPS (SIM28ML)
- Επιταχυνσιόμετρο (ADXL335)
- LCD 16x2
- Παροχή ηλεκτρικού ρεύματος
- Σύνδεση καλωδίων
- 10 Κ-ΠΟΤ
- Breadboard ή PCB
- Τροφοδοσία 12v 1amp
Πριν πάμε στο Project, θα συζητήσουμε για το GPS, το GSM και το Accelerometer.
Ενότητα GPS και η λειτουργία του:
Το GPS σημαίνει Global Positioning System και χρησιμοποιείται για την ανίχνευση του γεωγραφικού πλάτους και μήκους οποιασδήποτε θέσης στη Γη, με ακριβή ώρα UTC (Universal Time Coordinated). Η μονάδα GPS χρησιμοποιείται για την παρακολούθηση της θέσης του ατυχήματος στο έργο μας. Αυτή η συσκευή λαμβάνει τις συντεταγμένες από τον δορυφόρο για κάθε δευτερόλεπτο, με ώρα και ημερομηνία. Στο παρελθόν έχουμε εξαγάγει συμβολοσειρά $ GPGGA στο Vehicle Tracking System για να βρούμε τις συντεταγμένες γεωγραφικού πλάτους και μήκους.
Η μονάδα GPS στέλνει τα δεδομένα που σχετίζονται με τη θέση παρακολούθησης σε πραγματικό χρόνο και στέλνει τόσα πολλά δεδομένα σε μορφή NMEA (δείτε το στιγμιότυπο οθόνης παρακάτω). Η μορφή NMEA αποτελείται από αρκετές προτάσεις, στις οποίες χρειαζόμαστε μόνο μία πρόταση. Αυτή η πρόταση ξεκινά από $ GPGGA και περιέχει τις συντεταγμένες, την ώρα και άλλες χρήσιμες πληροφορίες. Αυτό το GPGGA αναφέρεται σε δεδομένα επιδιόρθωσης συστήματος καθολικής τοποθέτησης. Μάθετε περισσότερα σχετικά με τις προτάσεις NMEA και την ανάγνωση δεδομένων GPS εδώ.
Μπορούμε να εξαγάγουμε συντεταγμένες από συμβολοσειρά $ GPGGA μετρώντας τα κόμματα στη συμβολοσειρά. Ας υποθέσουμε ότι βρείτε τη συμβολοσειρά $ GPGGA και την αποθηκεύετε σε έναν πίνακα, τότε το Latitude μπορεί να βρεθεί μετά από δύο κόμματα και το μήκος μπορεί να βρεθεί μετά από τέσσερα κόμματα. Τώρα, αυτό το γεωγραφικό πλάτος και μήκος μπορεί να τοποθετηθεί σε άλλους πίνακες.
Ακολουθεί η συμβολοσειρά $ GPGGA, μαζί με την περιγραφή της:
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 = Ανατολή, Δ = Δυτικά |
FQ |
Διορθώστε τα δεδομένα ποιότητας |
NOS |
Αριθμός δορυφόρων που χρησιμοποιούνται |
HDP |
Οριζόντια αραίωση ακριβείας |
Υψόμετρο |
Υψόμετρο (μέτρα πάνω από την επιφάνεια της θάλασσας) |
Μ |
Μετρητής |
Υψος |
Υψος |
Checksum |
Δεδομένα Checksum |
Ενότητα GSM:
Το SIM900 είναι μια ολοκληρωμένη μονάδα GSM / GPRS Quad-band, η οποία μπορεί να ενσωματωθεί εύκολα από τον πελάτη ή τον χόμπι. Το SIM900 GSM Module παρέχει μια διεπαφή βιομηχανικού επιπέδου. Το SIM900 παρέχει απόδοση GSM / GPRS 850/900/1800 / 1900MHz για φωνή, SMS, δεδομένα με χαμηλή κατανάλωση ενέργειας. Είναι εύκολα διαθέσιμο στην αγορά.
- SIM900 σχεδιασμένο με χρήση επεξεργαστή ενός τσιπ που ενσωματώνει πυρήνα AMR926EJ-S
- Τετραπλή ζώνη GSM / GPRS module σε μικρό μέγεθος.
- Το GPRS ενεργοποιήθηκε
Εντολή AT:
AT σημαίνει ΠΡΟΣΟΧΗ. Αυτή η εντολή χρησιμοποιείται για τον έλεγχο της μονάδας GSM. Υπάρχουν ορισμένες εντολές για κλήσεις και ανταλλαγή μηνυμάτων που έχουμε χρησιμοποιήσει σε πολλά από τα προηγούμενα έργα GSM με το Arduino. Για τη δοκιμή της μονάδας GSM χρησιμοποιήσαμε την εντολή AT. Αφού λάβετε AT Command GSM Module απαντήστε με ΟΚ. Αυτό σημαίνει ότι η μονάδα GSM λειτουργεί καλά. Ακολουθούν μερικές εντολές AT που χρησιμοποιήσαμε εδώ σε αυτό το έργο:
ATE0 Για απενεργοποίηση ηχούς AT + CNMI = 2,2,0,0,0
(Για να μάθετε περισσότερα για την ενότητα GSM, δείτε τα διάφορα έργα GSM με διάφορους μικροελεγκτές εδώ)
Επιταχυνσιόμετρο:
Καρφίτσα Περιγραφή του επιταχυνσιόμετρου:
- Η παροχή Vcc 5 volt πρέπει να συνδεθεί σε αυτόν τον πείρο.
- X-OUT Αυτός ο πείρος δίνει μια αναλογική έξοδο σε κατεύθυνση x
- Y-OUT Αυτός ο ακροδέκτης δίνει αναλογική έξοδο προς την κατεύθυνση y
- Z-OUT Αυτή η ακίδα δίνει αναλογική έξοδο σε κατεύθυνση z
- Γείωση GND
- ST Αυτός ο πείρος χρησιμοποιείται για καθορισμένη ευαισθησία του αισθητήρα
Ελέγξτε επίσης τα άλλα έργα μας χρησιμοποιώντας το Επιταχυνσιόμετρο: Παιχνίδι Πινγκ Πονγκ χρησιμοποιώντας το Arduino και το Ρεμπότ ελεγχόμενης χειρονομίας με βάση το επιταχυνσιόμετρο
Επεξήγηση κυκλώματος:
Οι συνδέσεις κυκλώματος αυτού του έργου συστήματος ειδοποίησης ατυχημάτων οχήματος είναι απλές. Εδώ η καρφίτσα Tx της μονάδας GPS συνδέεται απευθείας με τον ψηφιακό αριθμό pin 10 του Arduino. Χρησιμοποιώντας εδώ το λογισμικό Serial Library, επιτρέψαμε τη σειριακή επικοινωνία στους ακροδέκτες 10 και 11, και τους κάναμε Rx και Tx αντίστοιχα και αφήσαμε τον ακροδέκτη Rx του GPS Module ανοιχτό. Από προεπιλογή, τα Pin 0 και 1 του Arduino χρησιμοποιούνται για σειριακή επικοινωνία, αλλά χρησιμοποιώντας τη βιβλιοθήκη SoftwareSerial, μπορούμε να επιτρέψουμε τη σειριακή επικοινωνία σε άλλες ψηφιακές καρφίτσες του Arduino. Η παροχή 12 Volt χρησιμοποιείται για την τροφοδοσία της μονάδας GPS.
Οι ακροδέκτες Tx και Rx της μονάδας GSM συνδέονται απευθείας με τους ακροδέκτες D2 και D3 του Arduino. Για διασύνδεση GSM, εδώ έχουμε χρησιμοποιήσει επίσης σειριακή βιβλιοθήκη λογισμικού. Η μονάδα GSM τροφοδοτείται επίσης από τροφοδοσία 12v. Οι προαιρετικές καρφίτσες δεδομένων LCD D4, D5, D6 και D7 συνδέονται με τον αριθμό pin 6, 7, 8 και 9 του Arduino. Ο πείρος εντολών RS και EN της LCD συνδέονται με τον αριθμό pin 4 και 5 του Arduino και ο πείρος RW συνδέεται απευθείας με τη γείωση. Ένα ποτενσιόμετρο χρησιμοποιείται επίσης για τη ρύθμιση της αντίθεσης ή της φωτεινότητας της οθόνης LCD.
Σε αυτό το σύστημα προστίθεται ένα επιταχυνσιόμετρο για την ανίχνευση ενός ατυχήματος και οι ακροδέκτες εξόδου ADC του άξονα x, y και z συνδέονται απευθείας με τους ακροδέκτες Arduino ADC A1, A2 και A3.
Επεξήγηση εργασίας:
Σε αυτό το έργο, το Arduino χρησιμοποιείται για τον έλεγχο ολόκληρης της διαδικασίας με μια μονάδα GPS Receiver και GSM. Ο δέκτης GPS χρησιμοποιείται για την ανίχνευση συντεταγμένων του οχήματος, η μονάδα GSM χρησιμοποιείται για την αποστολή SMS ειδοποίησης με τις συντεταγμένες και τον σύνδεσμο προς το Google Map. Το επιταχυνσιόμετρο ADXL335 χρησιμοποιείται για την ανίχνευση ατυχήματος ή ξαφνικής αλλαγής σε οποιονδήποτε άξονα. Και μια προαιρετική οθόνη LCD 16x2 χρησιμοποιείται επίσης για την εμφάνιση μηνυμάτων κατάστασης ή συντεταγμένων. Έχουμε χρησιμοποιήσει GPS Module SIM28ML και GSM Module SIM900A.
Όταν είμαστε έτοιμοι με το υλικό μας μετά τον προγραμματισμό, μπορούμε να το εγκαταστήσουμε στο όχημά μας και να το ενεργοποιήσουμε. Τώρα όποτε υπάρχει ατύχημα, το αυτοκίνητο παίρνει κλίση και το επιταχυνσιόμετρο αλλάζει τις τιμές του άξονα. Αυτές οι τιμές διαβάζονται από τον Arduino και ελέγχουν εάν υπάρχει οποιαδήποτε αλλαγή σε οποιονδήποτε άξονα. Εάν προκύψει οποιαδήποτε αλλαγή, τότε το Arduino διαβάζει συντεταγμένες εξάγοντας $ GPGGA String από δεδομένα μονάδας GPS (το GPS λειτουργεί εξηγείται παραπάνω) και στείλτε SMS στον προκαθορισμένο αριθμό στην αστυνομία ή ασθενοφόρο ή μέλος της οικογένειας με τις συντεταγμένες θέσης του τόπου ατυχήματος. Το μήνυμα περιέχει επίσης έναν σύνδεσμο Χάρτη Google για την τοποθεσία του ατυχήματος, έτσι ώστε η τοποθεσία να μπορεί να εντοπιστεί εύκολα. Όταν λάβουμε το μήνυμα, τότε χρειάζεται μόνο να κάνουμε κλικ στον σύνδεσμο και θα ανακατευθυνθούμε στον χάρτη Google και έπειτα μπορούμε να δούμε την ακριβή τοποθεσία του οχήματος. Ταχύτητα οχήματος, σε κόμβους(1.852 KPH), αποστέλλεται επίσης στο SMS και εμφανίζεται στην οθόνη LCD. Δείτε το πλήρες Demo Video κάτω από το Έργο.
Εδώ σε αυτό το έργο, μπορούμε να ορίσουμε την ευαισθησία του Επιταχυνσιόμετρου τοποθετώντας την ελάχιστη και τη μέγιστη τιμή στον κώδικα.
Εδώ στο demo έχουν χρησιμοποιηθεί δεδομένες τιμές:
#define minVal -50 #define MaxVal 50
Αλλά για καλύτερα αποτελέσματα μπορείτε να χρησιμοποιήσετε 200 αντί των 50 ή να ρυθμίσετε σύμφωνα με τις απαιτήσεις σας.
Επεξήγηση προγραμματισμού:
Το πλήρες πρόγραμμα έχει δοθεί παρακάτω στην ενότητα κώδικα. Εδώ εξηγούμε εν συντομία τις διάφορες λειτουργίες του.
Πρώτα έχουμε συμπεριλάβει όλες τις απαιτούμενες βιβλιοθήκες ή αρχεία κεφαλίδων και δηλώσαμε διάφορες μεταβλητές για υπολογισμούς και αποθήκευση δεδομένων προσωρινά.
Μετά από αυτό, έχουμε δημιουργήσει μια συνάρτηση void initModule (String cmd, char * res, int t) για να αρχικοποιήσετε τη μονάδα GSM και να ελέγξετε την απόκρισή της χρησιμοποιώντας εντολές AT.
void initModule (String cmd, char * res, int t) {ενώ (1) {Serial.println (cmd); Serial1.println (cmd); καθυστέρηση (100); ενώ (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); καθυστέρηση (t); ΕΠΙΣΤΡΟΦΗ; } αλλιώς {Serial.println ("Σφάλμα"); }} καθυστέρηση (t); }}
Μετά από αυτό, σε λειτουργία κενής ρύθμισης () , έχουμε αρχικοποιήσει σειριακή επικοινωνία υλικού και λογισμικού, LCD, GPS, μονάδα GSM και επιταχυνσιόμετρο.
άκυρη ρύθμιση () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Ειδοποίηση ατυχήματος"); lcd.setCursor (0,1); lcd.print ("Σύστημα"); καθυστέρηση (2000); lcd.clear ();…………………
Η διαδικασία βαθμονόμησης του επιταχυνσιόμετρου γίνεται επίσης στο βρόχο ρύθμισης . Σε αυτό, έχουμε λάβει μερικά δείγματα και στη συνέχεια βρίσκουμε τις μέσες τιμές για τον άξονα x, τον άξονα y και τον άξονα z. Και αποθηκεύστε τα σε μια μεταβλητή. Στη συνέχεια, χρησιμοποιήσαμε αυτές τις τιμές δείγματος για να διαβάσουμε τις αλλαγές στον άξονα του επιταχυνσιόμετρου όταν το όχημα έχει κλίση (ατύχημα).
lcd.print ("Βαθμονόμηση"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); για (int i = 0; i
Μετά από αυτό, στη συνάρτηση void loop () , έχουμε διαβάσει τις τιμές του άξονα του επιταχυνσιόμετρου και πραγματοποιήσαμε έναν υπολογισμό για να εξαγάγουμε αλλαγές με τη βοήθεια δειγμάτων που λαμβάνονται στο Calibration. Τώρα, εάν οποιεσδήποτε αλλαγές είναι περισσότερο ή λιγότερο από το καθορισμένο επίπεδο, τότε το Arduino στέλνει ένα μήνυμα στον προκαθορισμένο αριθμό.
void 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, void coordinate2dec () για εξαγωγή συντεταγμένων από τη συμβολοσειρά GPS και να τις μετατρέψουμε σε δεκαδικές τιμές, void show_coordinate () για την εμφάνιση τιμών μέσω σειριακής οθόνης και LCD και τέλος το κενό Send () για αποστολή SMS ειδοποίησης στον προκαθορισμένο αριθμό.
Ο πλήρης κώδικας και το βίντεο επίδειξης δίνονται παρακάτω, μπορείτε να ελέγξετε όλες τις λειτουργίες του κώδικα.