Πίνακας περιεχομένων:

Καταγραφέας κρούσης για οχήματα: 18 βήματα (με εικόνες)
Καταγραφέας κρούσης για οχήματα: 18 βήματα (με εικόνες)

Βίντεο: Καταγραφέας κρούσης για οχήματα: 18 βήματα (με εικόνες)

Βίντεο: Καταγραφέας κρούσης για οχήματα: 18 βήματα (με εικόνες)
Βίντεο: Καταγραφέας DBLab 2024, Νοέμβριος
Anonim
Καταγραφέας κρούσης για οχήματα
Καταγραφέας κρούσης για οχήματα

Το Impact Recorder έχει σχεδιαστεί για να καταγράφει πρόσκρουση στο όχημα κατά την οδήγηση ή τη στάση. Οι επιπτώσεις αποθηκεύονται στη βάση δεδομένων με τη μορφή αναγνώσεις, καθώς και βίντεο/εικόνας. Μετά από πρόσκρουση, ο απομακρυσμένος χρήστης μπορεί να επαληθευτεί σε πραγματικό χρόνο και ο απομακρυσμένος χρήστης μπορεί να παρακολουθήσει το αποθηκευμένο βίντεο ή να αποκτήσει απομακρυσμένη πρόσβαση στην κάμερα pi και να παρακολουθήσει ανάλογα τα συμβάντα Το

Βήμα 1: Ανταλλακτικά και αξεσουάρ

(1) Raspberry Pi 3 ή καλύτερο: Απαιτείται υπολογιστική ισχύς

(2) Raspberry pi sense hat

(3) Raspberry pi camera / Usb camera

(4) Κάρτα μνήμης με την τελευταία raspbian εικόνα (Πρέπει να υποστηρίζει κόκκινο κόμβο, σχεδόν κάθε τελευταία εικόνα)

(5) Τροφοδοσία τουλάχιστον 2,1 A (έχω χρησιμοποιήσει τράπεζα μπαταριών για αυτόνομη λειτουργία στο αυτοκίνητο)

Βήμα 2: Περιγραφή ανταλλακτικών: Sense Hat

Περιγραφή ανταλλακτικών: Sense Hat
Περιγραφή ανταλλακτικών: Sense Hat

Το Sense HAT διαθέτει μήτρα LED 8 × 8 RGB, χειριστήριο πέντε κουμπιών και περιλαμβάνει τους ακόλουθους αισθητήρες:

  • Γυροσκόπιο
  • Επιταχυνσιόμετρο
  • Μαγνητόμετρο
  • Θερμοκρασία
  • Βαρομετρικός
  • πίεση
  • Υγρασία

Περισσότερες πληροφορίες σχετικά με την εργασία με το καπέλο λογικής μπορούν να αντληθούν από τους ακόλουθους συνδέσμους: Sense_Hat

Το API για το καπέλο λογικής φιλοξενείται στη διεύθυνση: Sense_hat_API

Ο κώδικας για προγραμματισμό με καπέλα καλύπτεται σε επόμενα βήματα. Ο κώδικας Sense hat μπορεί επίσης να προσομοιωθεί σε έναν προσομοιωτή που φιλοξενείται στο: Sense-hat προσομοιωτή

Βήμα 3: Συναρμολόγηση: Καταγραφέας κρούσης

Συναρμολόγηση: Καταγραφέας κρούσης
Συναρμολόγηση: Καταγραφέας κρούσης
Συναρμολόγηση: Καταγραφέας κρούσης
Συναρμολόγηση: Καταγραφέας κρούσης
Συναρμολόγηση: Καταγραφέας κρούσης
Συναρμολόγηση: Καταγραφέας κρούσης
Συναρμολόγηση: Καταγραφέας κρούσης
Συναρμολόγηση: Καταγραφέας κρούσης
  • Η συναρμολόγηση είναι απλούστερη καθώς το καπέλο της αίσθησης πρέπει να στοιβάζεται πάνω από το πι (τα καθορισμένα μπουλόνια στερέωσης παρέχονται με καπέλο αίσθησης).
  • Μπορεί να συνδεθεί κάμερα USB ή κάμερα pi. Στο σεμινάριο, η κάμερα pi λαμβάνεται υπόψη και κατά συνέπεια η κωδικοποίηση πραγματοποιείται για την ίδια.
  • Εισαγάγετε την κάρτα μνήμης και διαμορφώστε τον κώδικα python και τον κόμβο -κόκκινο (η διαμόρφωση και ο κώδικας καλύπτονται σε περαιτέρω βήματα)

Η παραπάνω εικόνα δείχνει pi-camera που συνδέεται μέσω καλωδίου επίπεδης κορδέλας στο pi

Βήμα 4: Συναρμολόγηση: Impact Recorder στο Dash Board of Car

Συναρμολόγηση: Impact Recorder στο Dash Board of Car
Συναρμολόγηση: Impact Recorder στο Dash Board of Car

Για την τοποθέτηση της συσκευής εγγραφής, έχω χρησιμοποιήσει ταινία διπλής όψης, το πλεονέκτημα είναι ότι η συσκευή εγγραφής μπορεί εύκολα να μετατοπιστεί σε διαφορετική θέση, όποια ταιριάζει καλύτερα στο αυτοκίνητό σας.

Περαιτέρω κάμερα είναι τοποθετημένη κάθετα όπως φαίνεται, χρησιμοποιώντας την ίδια διπλή πλαϊνή ταινία, Στη συνέχεια, πρέπει να συνδέσετε μια πηγή ενέργειας (τράπεζα ισχύος 10.000 mAH) μαζί με μια έτοιμη σύνδεση στο Διαδίκτυο

Απαιτείται σύνδεση στο Διαδίκτυο για την εφαρμογή MQTT (οι λεπτομέρειες για το MQTT καλύπτονται σε περαιτέρω βήματα)

Βήμα 5: Impact Recoder: Working & Applications

Από το καπέλο της αίσθησης, η επιτάχυνση και το γυροσκόπιο χρησιμοποιούνται για να ελέγξουν εάν οι ακατέργαστες τιμές είναι πέρα από το καθορισμένο όριο στον κώδικα.

Επιταχυνσιόμετρο: Το επιταχυνσιόμετρο λέει την ποσότητα της βαρυτικής δύναμης (δύναμη G) που ενεργεί σε καθένα από τους άξονες x, y & z, εάν οποιοσδήποτε άξονας μετρά περισσότερο από 1G δύναμη, από την ταχεία κίνηση μπορεί να ανιχνευθεί. (σημειώστε ότι ο άξονας που δείχνει προς τα κάτω θα έχει τιμή 1g και πρέπει να εξεταστεί ανάλογα στον κώδικα python).

Γυροσκόπιο; Το γυροσκόπιο χρησιμοποιείται για τη μέτρηση της γωνιακής κίνησης, δηλαδή κατά την απότομη στροφή ο αισθητήρας μπορεί να ενεργοποιηθεί (εξαρτάται από τη ρύθμιση στον κώδικα), οπότε ένα άτομο που στροβιλίζεται απότομα το όχημα θα πιαστεί !!

Οποιαδήποτε ενεργοποίηση του καθορισμένου ορίου εμφανίζεται επίσης στη μήτρα LED αίσθησης καπέλου ως "!" με κόκκινο χρώμα για επιτάχυνση & πράσινο για ενεργοποίηση γυροσκοπίου

Βήμα 6: Περιγραφή λογισμικού: Κόμβος Κόκκινο

Το Node-RED είναι ένα εργαλείο προγραμματισμού βασισμένο στη ροή, που αναπτύχθηκε αρχικά από την Emerging Technology Servicesteam της IBM και τώρα αποτελεί μέρος του Ιδρύματος JS.

Περισσότερες πληροφορίες για τον κόκκινο κόμβο μπορείτε να λάβετε μέσω του ακόλουθου συνδέσμου: κόμβος-κόκκινος

Για την περίπτωσή μας, θα χρησιμοποιούσαμε το node -red για τις ακόλουθες δραστηριότητες

(1) Αλληλεπίδραση με τα χειριστήρια για την εκκίνηση των λειτουργιών της κάμερας

(2) Παρακολούθηση των επιπτώσεων στο όχημα και μετάδοση των πληροφοριών στον τελικό χρήστη χρησιμοποιώντας MQTT και περαιτέρω αποδοχή εντολών τελικού χρήστη μέσω MQTT και εκκίνηση της απαιτούμενης εφαρμογής στο pi

(3) Εκτέλεση ορισμένων βασικών υλικών όπως κλείσιμο του pi

Τα περαιτέρω βήματα δίνουν τις λεπτομερείς πληροφορίες για το διάγραμμα ροής που εφαρμόζεται στο κόκκινο κόμβο

Λάβετε υπόψη ότι τα διαγράμματα ροής κόμβου-κόκκινου αλληλεπιδρούν με τον κώδικα python, επομένως το τελευταίο μέρος καλύπτει τις πτυχές του κώδικα python

Βήμα 7: Βασικά στοιχεία Κόμβου-κόκκινου

Κόμβος-κόκκινα Βασικά
Κόμβος-κόκκινα Βασικά
Κόμβος-κόκκινα Βασικά
Κόμβος-κόκκινα Βασικά
Κόμβος-κόκκινα Βασικά
Κόμβος-κόκκινα Βασικά

Ορισμένα βασικά βήματα επισημαίνονται για την έναρξη του Κόκκινου κόμβου, αλλά ναι, το Κόκκινο Κόμβου είναι πολύ απλό για να ξεκινήσετε και να επεξεργαστείτε εφαρμογές.

  • Έναρξη Κόμβου-κόκκινο: https:// localhost: 1880.
  • Εκκίνηση Κόκκινου Κόμβου όταν το pi είναι συνδεδεμένο στο διαδίκτυο https:// ip address>: 1880

Βήμα 8: Κόκκινος κόμβος: Ροή _1α

Κόμβος-κόκκινο: Ροή _1α
Κόμβος-κόκκινο: Ροή _1α

Το Flow _1a, παρακολουθεί τυχόν αλλαγές στο αρχείο CSV και βάσει των αλλαγών, δηλαδή ανίχνευση επιπτώσεων, η εγγραφή βίντεο κάμερας τίθεται σε λειτουργία και περαιτέρω ο χρήστης ενημερώνεται μέσω διαδικτύου ότι έχει συμβεί

Βήμα 9: Κόκκινος κόμβος: Flow_1b

Κόκκινος κόμβος: Flow_1b
Κόκκινος κόμβος: Flow_1b

Στην εν λόγω ροή, η εγγραφή βίντεο μπορεί να ξεκινήσει σε οποιοδήποτε σημείο απλά πατώντας το χειριστήριο

Βήμα 10: Κόκκινος κόμβος: Flow_2a

Κόμβος Κόκκινος: Flow_2a
Κόμβος Κόκκινος: Flow_2a

Στην εν λόγω ροή, κάθε φορά που οποιαδήποτε νέα εικόνα ή βίντεο αποθηκεύεται/μεταφορτώνεται στον κατάλογο, οι πληροφορίες μεταφέρονται στον εγγεγραμμένο χρήστη μέσω διαδικτύου

Βήμα 11: Κόκκινος κόμβος: Flow_2b

Κόμβος Κόκκινος: Flow_2b
Κόμβος Κόκκινος: Flow_2b

Αυτή η ροή έχει σχεδιαστεί αρχικά για τον απομακρυσμένο χρήστη, έτσι ώστε να ελέγχει τη συσκευή με τον ακόλουθο τρόπο

(α) συσκευή τερματισμού λειτουργίας

(β) λήψη φωτογραφιών

(γ) Εγγραφή βίντεο

(δ) έναρξη κύριου κωδικού (ο κωδικός καταγραφής δεδομένων είναι ο κύριος κώδικας που υπολογίζει τον αντίκτυπο)

Βήμα 12: Κόμβος Κόκκινο. Ροή_3

Κόμβος Κόκκινο? Ροή_3
Κόμβος Κόκκινο? Ροή_3

Η ροή έχει σχεδιαστεί για τοπική πρόσβαση, έτσι ώστε να ξεκινήσει ο κύριος κωδικός ή η συσκευή τερματισμού λειτουργίας

Βήμα 13: MQTT

Το MQTT (Message Queuing Telemetry Transport) είναι ένα πρωτόκολλο TCP/IP, όπου ο εκδότης και ο συνδρομητής αλληλεπιδρούν.

Στην περίπτωσή μας το Pi είναι εκδότης, ενώ η εφαρμογή που είναι εγκατεστημένη στο moblile/PC μας θα είναι ο συνδρομητής.

Με αυτόν τον τρόπο για τη δημιουργία οποιουδήποτε αντίκτυπου, οι πληροφορίες μεταφέρονται από απόσταση στον χρήστη (απαιτείται σύνδεση στο Διαδίκτυο)

Μπορείτε να έχετε περισσότερες πληροφορίες σχετικά με το MQTT από τον ακόλουθο σύνδεσμο: MQTT

Για να αρχίσουμε να χρησιμοποιούμε το MQTT, πρέπει πρώτα να εγγραφούμε, για το σεμινάριο που έχω χρησιμοποιήσει το cloudmqtt (www.cloudmqtt.com), υπάρχει ένα δωρεάν σχέδιο κάτω από την "χαριτωμένη γάτα", αυτό είναι όλο.

Αφού εγγραφείτε δημιουργήστε ένα παράδειγμα πείτε "pi" μετά το οποίο θα λάβετε τις ακόλουθες λεπτομέρειες

  • Ονομα διακομιστή
  • Λιμάνι
  • όνομα χρήστη
  • Κωδικός πρόσβασης

Τα παραπάνω απαιτούνται κατά την εγγραφή μέσω κινητού/υπολογιστή

Για την εφαρμογή μου, έχω χρησιμοποιήσει την εφαρμογή MQTT από το google play store (έκδοση Android)

Βήμα 14: MQTT: Συνδρομητής

MQTT: Συνδρομητής
MQTT: Συνδρομητής

Η εφαρμογή MQTT που εκτελείται σε κινητά (έκδοση Android)

Ο αντίκτυπος που εντοπίστηκε στο pi αναμεταδίδεται

Βήμα 15: MQTT: Επεξεργασία ιδιοτήτων με κόκκινο κόμβο

MQTT: Επεξεργασία ιδιοτήτων με κόκκινο κόμβο
MQTT: Επεξεργασία ιδιοτήτων με κόκκινο κόμβο

Σε κόκκινο κόμβο μετά την επιλογή κόμβου MQTT, πρέπει να αναφερθεί το "Όνομα διακομιστή" και "θέμα". Αυτό θα πρέπει να είναι το ίδιο στο τέλος του συνδρομητή

Βήμα 16: Ο κώδικας Python:

Η λειτουργικότητα του κώδικα είναι σύμφωνα με το συνημμένο διάγραμμα ροής

Βήμα 17: Ο Τελικός Κώδικας

Επισυνάπτεται ο κώδικας python

Για να εκτελέσουμε το σενάριο python από τερματικό, πρέπει να τα κάνουμε εκτελέσιμα ως chmod +x datalogger.py, παρά στο επάνω μέρος του κώδικα θα πρέπει να περιέχει την ακόλουθη γραμμή "shebang" #! /usr/bin/python3 (αυτό απαιτείται για την εκτέλεση συναρτήσεων από τον κόμβο-κόκκινο)

#!/usr/bin/python3 // shebang linefrom sense_hat import SenseHat from datetime import datetime time from csv import writer import RPi. GPIO as GPIO from time import sleep sleep

αίσθηση = SenseHat ()

εισαγωγή csv

timestamp = datetime.now ()

καθυστέρηση = 5 // η καθυστέρηση ορίζεται για την αποθήκευση δεδομένων στα δεδομένα.csv αρχείο κόκκινο = (255, 0, 0) πράσινο = (0, 255, 0) κίτρινο = (255, 255, 0)

#GPIO.setmode (GPIO. BCM)

#GPIO.setup (17, GPIO. OUT)

def get_sense_impact ():

sense_impact = acc = sense.get_accelerometer_raw () sense_impact.append (acc ["x"]) sense_impact.append (acc ["y"]) sense_impact.append (acc ["z"])

γυροσκόπιο = sense.get_gyroscope_raw ()

sense_impact.append (gyro ["x"]) sense_impact.append (gyro ["y"]) sense_impact.append (gyro ["z"])

επιστροφή sense_impact

def impact (): // λειτουργία για τον εντοπισμό αντίκτυπου #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) επιτάχυνση = sense.get_accelerometer_raw () x = επιτάχυνση ['x'] y = επιτάχυνση ['y'] z = επιτάχυνση ['z'] x = abs (x) y = abs (y) z = abs (z)

γυροσκόπιο = sense.get_gyroscope_raw ()

gyrox = gyro ["x"] gyroy = gyro ["y"] gyroz = gyro ["z"]

γυροξ = στρογγυλος (γυροξ, 2)

γύρο = στρογγυλό (γύρο, 2) γύροζ = στρογγυλό (γύροζ, 2)

αντίκτυπος = get_sense_impact ()

εάν x> 1.5 ή y> 1.5 ή z> 1.5: // οι τιμές ορίζονται μετά την επανάληψη στον πραγματικό δρόμο μπορούν να αλλάξουν ανάλογα για διαφορετικούς τύπους και ικανότητες οδήγησης με ανοιχτό ('impact.csv', 'w', newline = ' ') ως f: data_writer = writer (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' gyro x ',' gyro y ',' gyro z ']) #GPIO έξοδος (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", κόκκινο) data_writer.writerow (αντίκτυπος)

elif gyrox> 1.5 ή gyroy> 1.5 ή gyroz> 1.5: // οι τιμές ορίζονται εξετάζοντας την ταχύτητα με την οποία ξεκινούν οι στροφές με ανοικτό ('impact.csv', 'w', newline = '') ως f: data_writer = Writer (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output (4, GPIO HIGH) sense.clear () sense.show_letter ("!", Green) data_writer.writerow (αντίκτυπος)

αλλού:

# GPIO.output (4, GPIO. LOW) sense.clear ()

def get_sense_data (): // λειτουργία για εγγραφή και αποθήκευση τιμών από αισθητήρια αισθητήρια =

sense_data.append (sense.get_temperature ()) sense_data.append (sense.get_pressure ()) sense_data.append (sense.get_humidity ())

προσανατολισμός = sense.get_orientation ()

sense_data.append (προσανατολισμός ["yaw"]) sense_data.append (προσανατολισμός ["βήμα"]) sense_data.append (προσανατολισμός ["κύλιση"])

acc = sense.get_accelerometer_raw ()

sense_data.append (acc ["x"]) sense_data.append (acc ["y"]) sense_data.append (acc ["z"]) mag = sense.get_compass_raw () sense_data.append (mag ["x"]) sense_data.append (mag ["y"]) sense_data.append (mag ["z"])

γυροσκόπιο = sense.get_gyroscope_raw ()

sense_data.append (gyro ["x"]) sense_data.append (gyro ["y"]) sense_data.append (gyro ["z"])

sense_data.append (datetime.now ())

επιστροφή sens_data

με ανοιχτό ('data.csv', 'w', newline = ') ως f:

data_writer = συγγραφέας (f)

data_writer.writerow (['temp', 'pres', 'hum', 'yaw', 'pitch', 'roll', 'acc x', 'acc y', 'acc z', 'mag x', ' mag y ',' mag z ',' gyro x ',' gyro y ',' gyro z ',' datetime '])

ενώ True:

εκτύπωση (get_sense_data ()) για εκδήλωση στο sense.stick.get_events (): # Ελέγξτε αν το joystick πατήθηκε εάν event.action == "πιεστεί": # Ελέγξτε ποια κατεύθυνση εάν event.direction == "up": # sense.show_letter ("U") # Επάνω βέλος επιτάχυνση = sense.get_accelerometer_raw () x = επιτάχυνση ['x'] y = επιτάχυνση ['y'] z = επιτάχυνση ['z'] x = γύρος (x, 0) y = γύρος (y, 0) z = γύρος (z, 0)

# Ενημερώστε την περιστροφή της οθόνης ανάλογα με το προς τα πάνω αν x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) else: sense.set_rotation (0) sense.clear () t = sense.get_temperature () t = round (t, 1) message = "T:" + str (t) sense.show_message (message, text_colour = red, scroll_speed = 0.09) elif event.direction == "down": επιτάχυνση = sense.get_accelerometer_raw () x = επιτάχυνση ['x'] y = επιτάχυνση ['y'] z = επιτάχυνση ['z'] x = γύρος (x, 0) y = γύρος (y, 0) z = γύρος (z, 0)

# Ενημερώστε την περιστροφή της οθόνης ανάλογα με το προς τα πάνω αν x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) else: sense.set_rotation (0) # sense.show_letter ("D") # Down arrow sense.clear () h = sense.get_humidity () h = round (h, 1) message = "H:" + str (η) sense.show_message (μήνυμα, text_colour = πράσινο, scroll_speed = 0.09) p = sense.get_pressure () p = round (p, 1) message = "P:" + str (p) sense.show_message (message, text_colour = κίτρινο, ταχύτητα κύλισης = 0,09)

# elif event.direction == "left":

#επιτάχυνση = sense.get_accelerometer_raw () #x = επιτάχυνση ['x'] #y = επιτάχυνση ['y'] #z = επιτάχυνση ['z'] #x = γύρος (x, 0) #y = γύρος (y, 0) #z = γύρος (z, 0)

#Ενημερώστε την περιστροφή της οθόνης ανάλογα με την πορεία προς τα επάνω // Δεν χρησιμοποιείται και δεν ελέγχεται με κόμβο -κόκκινο #εάν x == -1: sense.set_rotation (90) #elif y == 1: sense.set_rotation (270) #elif y == -1: sense.set_rotation (180) #else: sense.set_rotation (0) # sense.show_letter ("L") # Αριστερό βέλος # elif event.direction == "right": # sense.show_letter ("Κ") # Δεξί βέλος # elif event.direction == "μέση": # sense.clear ()

επίπτωση()

δεδομένα = get_sense_data ()

dt = data [-1] - timestamp if dt.seconds> delay: data_writer.writerow (data) timestamp = datetime.now ()

Βήμα 18: Παρακολούθηση ζωντανού βίντεο

Το Impact Recorder μπορεί επίσης να χρησιμοποιηθεί για την παρακολούθηση ζωντανού βίντεο, καθώς το βίντεο μπορεί να ξεκινήσει οποιαδήποτε στιγμή οπουδήποτε μέσω του MQTT

θα χρησιμοποιούσαμε το VLC player για ροή βίντεο, από προεπιλογή στο πιο πρόσφατο raspbian το VLC είναι προεγκατεστημένο, αλλιώς εγκαταστήστε το vlc ως κάτω

Μπορείτε να έχετε πρόσβαση σε περισσότερες πληροφορίες σχετικά με την προβολή ροής δικτύου μέσω της ροής δικτύου VLC

Ευχαριστούμε που το διαβάσατε!!

Υπάρχουν πολλά περισσότερα που μπορεί να κάνει ο καταγραφέας κρούσης..

Προσέξτε τον επόμενο χώρο για ανάλυση μαγνητικού πεδίου κατά την εκτέλεση χαρτογράφησης εμποδίων

Συνιστάται: