Σε προηγούμενα μαθήματα, μάθαμε για το πώς να διασυνδέσετε τη μονάδα GPS με τον υπολογιστή και πώς να παρακολουθείτε το όχημα χρησιμοποιώντας GSM και GPS. Κατασκευάσαμε επίσης σύστημα συναγερμού ατυχημάτων οχημάτων χρησιμοποιώντας Arduino και επιταχυνσιόμετρο. Εδώ χτίζουμε και πάλι το ίδιο έργο, αλλά αυτή τη φορά ένα MSP430 launchpad και ένας αισθητήρας δόνησης θα χρησιμοποιηθούν για την ανίχνευση ατυχήματος του οχήματος. Έτσι, αυτό το έργο θα πει επίσης για τη διασύνδεση ενός αισθητήρα δόνησης με το MSP430 launchpad. Μπορείτε να βρείτε περισσότερα έργα MSP430 εδώ.
Εδώ η μονάδα αισθητήρα δόνησης ανιχνεύει τη δόνηση του οχήματος και στέλνει ένα σήμα στο MSP430 Launchpad. Στη συνέχεια, το MSP430 παίρνει δεδομένα από τη μονάδα GPS και τα στέλνει στο κινητό τηλέφωνο χρήστη μέσω SMS χρησιμοποιώντας τη μονάδα GSM. Ένα LED θα ανάψει επίσης ως σήμα ειδοποίησης ατυχήματος, αυτό το LED μπορεί να αντικατασταθεί από κάποιο συναγερμό. Η τοποθεσία του ατυχήματος αποστέλλεται με τη μορφή συνδέσμου Χάρτη Google, που προέρχεται από το γεωγραφικό πλάτος και μήκος από τη μονάδα GPS. Δείτε το Demo Video στο τέλος.
Η μονάδα 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 σε μικρό μέγεθος.
- Το GPRS ενεργοποιήθηκε
Εντολές AT
AT σημαίνει ΠΡΟΣΟΧΗ. Αυτή η εντολή χρησιμοποιείται για τον έλεγχο της μονάδας GSM. Υπάρχουν ορισμένες εντολές για κλήσεις και ανταλλαγή μηνυμάτων που έχουμε χρησιμοποιήσει σε πολλά από τα προηγούμενα έργα GSM με το Arduino. Για τη δοκιμή της μονάδας GSM χρησιμοποιήσαμε την εντολή AT. Αφού λάβετε AT Command GSM Module απαντήστε με ΟΚ. Αυτό σημαίνει ότι η μονάδα GSM λειτουργεί καλά. Ακολουθούν μερικές εντολές AT που χρησιμοποιήσαμε εδώ σε αυτό το έργο:
ATE0 Για απενεργοποίηση της ηχούς
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Αριθμός κινητού"
>> Τώρα μπορούμε να γράψουμε το μήνυμά μας
>> Αφού γράψετε ένα μήνυμα
Ctrl + Z στέλνει εντολή μηνύματος (26 σε δεκαδικό).
ENTER = 0x0d σε HEX
(Για να μάθετε περισσότερα για την ενότητα GSM, δείτε τα διάφορα έργα GSM με διάφορους μικροελεγκτές εδώ)
Μονάδα αισθητήρα δόνησης
Σε αυτό το έργο MSP430 Accident Alert System, χρησιμοποιήσαμε μια μονάδα αισθητήρα δόνησης που ανιχνεύει δονήσεις ή ξαφνικές διαμορφώσεις. Η μονάδα αισθητήρα δόνησης παρέχει μια ψηφιακή λογική υψηλής / χαμηλής εξόδου ανάλογα με τη μονάδα. Στην περίπτωσή μας, έχουμε χρησιμοποιήσει μια ενεργή μονάδα αισθητήρα δόνησης υψηλής λογικής. Αυτό σημαίνει ότι κάθε φορά που ο αισθητήρας δόνησης θα ανιχνεύσει δονήσεις, θα δώσει ΥΨΗΛΗ λογική στον μικροελεγκτή.
Επεξήγηση κυκλώματος
Οι συνδέσεις κυκλώματος αυτού του έργου συστήματος ειδοποίησης ατυχημάτων οχήματος είναι απλές. Εδώ, η καρφίτσα Tx της μονάδας GPS συνδέεται απευθείας με τον ψηφιακό αριθμό pin P1_1 του Launchpad MSP430 (Serial υλικού) και το 5v χρησιμοποιείται για την τροφοδοσία της μονάδας GPS. Χρησιμοποιώντας εδώ το λογισμικό Serial Library, επιτρέψαμε τη σειριακή επικοινωνία στους ακροδέκτες P_6 και P1_7, και τις κάναμε Rx και Tx αντίστοιχα και συνδέθηκαν στη μονάδα GSM. Η τροφοδοσία 12 Volt χρησιμοποιείται για την τροφοδοσία της μονάδας GSM. Ο αισθητήρας δόνησης είναι συνδεδεμένος στο P1_3. Ένα LED χρησιμοποιείται επίσης για την ένδειξη της ανίχνευσης ατυχημάτων. Οι υπόλοιπες συνδέσεις φαίνονται στο διάγραμμα κυκλώματος.
Επεξήγηση προγραμματισμού
Ο προγραμματισμός για αυτό το έργο είναι εύκολος εκτός από το μέρος GPS. Ο πλήρης κωδικός δίνεται στο τέλος του έργου. Για να γράψουμε ή να συντάξουμε τον κώδικα στο MSP430 χρησιμοποιήσαμε το Energia IDE που είναι συμβατό με το Arduino. Το μεγαλύτερο μέρος της λειτουργίας Arduino IDE μπορεί να χρησιμοποιηθεί απευθείας σε αυτό το Energia IDE.
Πρώτα απ 'όλα έχουμε συμπεριλάβει τις απαιτούμενες βιβλιοθήκες και δηλώσαμε pin και μεταβλητές.
#περιλαμβάνω
Η δεδομένη λειτουργία χρησιμοποιείται για την ανάγνωση σήματος αισθητήρα δόνησης. Αυτή η λειτουργία θα φιλτράρει επίσης μικρές ή ψευδείς δονήσεις.
#define count_max 25 char SensorRead (int pin) // read sw with debounce { char count_low = 0, count_high = 0; do { καθυστέρησης (1)? if (digitalRead (pin) == ΥΨΗΛΟΣ) { count_high ++; count_low = 0; } αλλιώς { count_high = 0; count_low ++; } } ενώ (count_low <count_max && count_high <count_max); εάν (count_low> = count_max) επιστρέψτε LOW; αλλιώς επιστρέψτε ΥΨΗΛΗ? }
Η παρακάτω λειτουργία εντοπίζει τη λειτουργία δόνησης και κλήσης gpsEvent () για να πάρει συντεταγμένη GPS και τέλος καλέστε τη λειτουργία Αποστολή () για αποστολή SMS.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Στείλετε(); digitalWrite (led, LOW); καθυστέρηση (2000); } }
Το δεδομένο Function είναι υπεύθυνο για τη λήψη συμβολοσειρών GPS από τη μονάδα GPS, εξαγωγή συντεταγμένων από αυτές και μετατροπή τους σε μορφή δεκαδικού-δεκαδικού.
void gpsEvent () { char gpsString; δοκιμή char = "RMC"; i = 0; while (1) { while (Serial.available ()) // Σειριακά εισερχόμενα δεδομένα από GPS { char inChar = (char) Serial.read (); gpsString = inChar; // αποθήκευση εισερχόμενων δεδομένων από GPS σε προσωρινή συμβολοσειρά str i ++; if (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) * 10000; minut_dec + = (gpsString-48) * 1000; 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; γεωγραφικό πλάτος = ((float) βαθμός + minut);
Και τέλος, η λειτουργία Αποστολή () χρησιμοποιείται για την αποστολή του SMS στον αριθμό χρήστη που έχει εισαχθεί σε αυτό το μέρος του κώδικα.
άκυρη αποστολή () { 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 (logitude, 6); GSM.write (26); καθυστέρηση (4000) }
Ο πλήρης κώδικας και το βίντεο επίδειξης δίνονται παρακάτω, μπορείτε να ελέγξετε όλες τις λειτουργίες του κώδικα.