Inhoudsopgave:

Impact Recorder voor voertuigen: 18 stappen (met afbeeldingen)
Impact Recorder voor voertuigen: 18 stappen (met afbeeldingen)

Video: Impact Recorder voor voertuigen: 18 stappen (met afbeeldingen)

Video: Impact Recorder voor voertuigen: 18 stappen (met afbeeldingen)
Video: Rim Protectors | motorloner.shop 2024, December
Anonim
Impactrecorder voor voertuigen
Impactrecorder voor voertuigen

Impact Recorder is ontworpen om de impact op het voertuig vast te leggen tijdens het rijden of stilstaan. De effecten worden in de database opgeslagen in de vorm van metingen en video / foto. Bij impact kan de externe gebruiker in realtime worden geverifieerd, en de externe gebruiker kan dan de opgeslagen video bekijken of op afstand toegang krijgen tot de pi-camera en de gebeurtenissen dienovereenkomstig bekijken.

Stap 1: Onderdelen & Accessoires

(1) Raspberry Pi 3 of beter: rekenkracht vereist

(2) Raspberry Pi Sense-hoed

(3) Raspberry pi-camera / USB-camera

(4) Geheugenkaart met de nieuwste Raspbian-afbeelding (Moet knooppunt rood ondersteunen, bijna elke nieuwste afbeelding doet dat)

(5) Stroomvoorziening minimaal 2,1 A (ik heb een batterijbank gebruikt voor stand-alone gebruik in de auto)

Stap 2: Onderdelenbeschrijving: Sense Hat

Onderdelenbeschrijving: Sense Hat
Onderdelenbeschrijving: Sense Hat

De Sense HAT heeft een 8×8 RGB LED-matrix, een joystick met vijf knoppen en bevat de volgende sensoren:

  • Gyroscoop
  • Versnellingsmeter
  • Magnetometer
  • Temperatuur
  • barometrisch
  • druk
  • Vochtigheid

Meer informatie over het werken met sense hat vindt u via de volgende links: Sense_Hat

API voor sense hat wordt gehost op: Sense_hat_API

Code voor sense-hat-programmering wordt in latere stappen behandeld. Sense hat-code kan ook worden gesimuleerd op een simulator die wordt gehost op: Sense-hat simulator

Stap 3: Montage: Impact Recorder

Montage: Impact Recorder
Montage: Impact Recorder
Montage: Impact Recorder
Montage: Impact Recorder
Montage: Impact Recorder
Montage: Impact Recorder
Montage: Impact Recorder
Montage: Impact Recorder
  • Assembleren is eenvoudiger omdat sense hat over pi moet worden gestapeld (aangewezen montagebouten zijn voorzien van sense hat).
  • USB-camera of pi-camera kan worden aangesloten. In de zelfstudie wordt pi-camera overwogen en dienovereenkomstig wordt hiervoor gecodeerd.
  • Plaats de geheugenkaart en configureer python code en node -red (configuratie & code wordt behandeld in verdere stappen)

Afbeelding hierboven toont pi-camera aangesloten via platte lintkabel op pi

Stap 4: Montage: Impact Recorder op het dashboard van de auto

Montage: Impact Recorder op dashboard van auto
Montage: Impact Recorder op dashboard van auto

Voor het monteren van de recorder heb ik dubbelzijdige tape gebruikt, het voordeel is dat de recorder gemakkelijk in verschillende posities kan worden verschoven, afhankelijk van wat het beste bij uw auto past.

Verdere camera is verticaal gemonteerd zoals afgebeeld, met dezelfde dubbelzijdige tape, De volgende in de rij is het aansluiten van een stroombron (10.000 mAH powerbank) samen met een kant-en-klare internetverbinding

Internetverbinding is vereist voor MQTT-toepassing (de details voor MQTT worden in verdere stappen behandeld)

Stap 5: Impact Recoder: Werken & Toepassingen

Vanuit de sense hat worden versnelling en gyroscoop gebruikt om te controleren of de onbewerkte waarden de ingestelde limiet in de code overschrijden.

Versnellingsmeter: de versnellingsmeter vertelt de hoeveelheid zwaartekracht (G-kracht) die op elk van de x-, y- en z-assen werkt, als een as meer dan 1G-kracht meet, dan kan snelle beweging worden gedetecteerd. (houd er rekening mee dat de as die naar beneden wijst een waarde van 1 g zou hebben en dienovereenkomstig in python-code moet worden beschouwd).

Gyroscoop; De gyroscoop wordt gebruikt om hoekbewegingen te meten, d.w.z. tijdens een scherpe bocht kan de sensor worden geactiveerd (afhankelijk van de instelling in de code), dus een persoon die het voertuig scherp ronddraait, wordt betrapt!!

Elke activering van de ingestelde limiet wordt ook weergegeven op de sense hat LED-matrix als "!" in rood voor acceleratie & groen voor gyroscoop activatie

Stap 6: Softwarebeschrijving: Knooppunt Rood

Node-RED is een op flow gebaseerde programmeertool, oorspronkelijk ontwikkeld door IBM's Emerging Technology Servicesteam en nu onderdeel van de JS Foundation.

Meer informatie over node red kan worden verkregen via de volgende link:node-red

In ons geval zouden we node -red gebruiken voor de volgende activiteiten

(1) Interactie met de joysticks om camerafuncties te starten

(2) De effecten op het voertuig bewaken en de informatie doorgeven aan de eindgebruiker door MQTT te gebruiken en de opdrachten van de eindgebruiker verder te accepteren via MQTT en de vereiste toepassing op pi te starten

(3) Enkele basishandelingen uitvoeren, zoals het afsluiten van pi

De verdere stappen geven de gedetailleerde informatie voor het stroomdiagram geïmplementeerd op node-red

Houd er rekening mee dat de knooppuntrode stroomdiagrammen interageren met de python-code, vandaar dat het laatste deel de aspecten van de python-code behandelt

Stap 7: Node-red Basics

Node-red Basics
Node-red Basics
Node-red Basics
Node-red Basics
Node-red Basics
Node-red Basics

Bepaalde basisstappen worden gemarkeerd om in een oogwenk met Node-red te beginnen, maar ja, node-red is te eenvoudig om applicaties te starten en uit te werken.

  • Node-red starten:
  • Node-red starten wanneer pi is verbonden met internet

Stap 8: Knooppunt-rood: Flow _1a

Knooppunt-rood: Stroom _1a
Knooppunt-rood: Stroom _1a

De Flow _1a bewaakt eventuele wijzigingen in het CSV - bestand en op basis van de wijzigingen, d.w.z. gedetecteerde impact, wordt de video-opname van de camera ingeschakeld en wordt de gebruiker via internet geïnformeerd dat er een impact is opgetreden

Stap 9: Knooppunt Rood: Flow_1b

Knooppunt Rood: Flow_1b
Knooppunt Rood: Flow_1b

In de genoemde stroom kan video-opname op elk moment worden gestart door gewoon op de joystick te drukken

Stap 10: Knooppunt Rood: Flow_2a

Knooppunt Rood: Flow_2a
Knooppunt Rood: Flow_2a

In de genoemde stroom wordt, telkens wanneer een nieuwe foto of video wordt opgeslagen/geupload naar de directory, de informatie via internet naar de geregistreerde gebruiker gestuurd

Stap 11: Knooppunt Rood: Flow_2b

Knooppunt Rood: Flow_2b
Knooppunt Rood: Flow_2b

Deze stroom is voornamelijk ontworpen voor de externe gebruiker, om het apparaat op de volgende manier te bedienen:

(a) afsluitapparaat

(b) foto's maken

(c) Video's opnemen

(d) start hoofdcode (dataloggercode is de hoofdcode die de impact berekent)

Stap 12: Knooppunt Rood; Stroom_3

Knooppunt Rood; Stroom_3
Knooppunt Rood; Stroom_3

De stroom is ontworpen voor lokale toegang, om de hoofdcode of het afsluitapparaat te starten;

Stap 13: MQTT

MQTT (Message Queuing Telemetry Transport) is een TCP/IP-protocol, waarin uitgever en abonnee samenwerken.

In ons geval is Pi de uitgever, terwijl de applicatie die op onze mobiel/pc is geïnstalleerd de abonnee zal zijn.

Op deze manier wordt bij het genereren van enige impact informatie op afstand doorgegeven aan de gebruiker (een werkende internetverbinding is een must)

Meer informatie over MQTT is te vinden via de volgende link: MQTT

Om MQTT te gaan gebruiken, moeten we ons eerst registreren, voor de tutorial die ik cloudmqtt heb gebruikt (www.cloudmqtt.com), is er een gratis abonnement onder "cute cat", dat is alles.

Na het registreren maak je een instantie aan en zeg je "pi", waarna je de volgende details krijgt

  • Server naam
  • haven
  • gebruikersnaam
  • wachtwoord

Het bovenstaande is vereist bij een abonnement via mobiel/pc

Voor mijn applicatie heb ik de MQTT-applicatie van Google Play Store gebruikt (Android-versie)

Stap 14: MQTT: Abonnee

MQTT: Abonnee
MQTT: Abonnee

De MQTT-applicatie draait op mobiel (Android-versie)

De gedetecteerde impact op pi wordt teruggestuurd

Stap 15: MQTT: Eigenschappen bewerken in Node-red

MQTT: Eigenschappen bewerken in Node-red
MQTT: Eigenschappen bewerken in Node-red

In knooppunt-rood na het selecteren van MQTT-knooppunt, "Servernaam" en "onderwerp" moeten worden vermeld. Dit zou hetzelfde moeten zijn aan het einde van de abonnee

Stap 16: De Python-code:

De codefunctionaliteit is volgens bijgevoegd stroomschema

Stap 17: De definitieve code

De python-code is bijgevoegd

Om ons python-script vanaf terminal te laten lopen, moeten we ze uitvoerbaar maken als chmod +x datalogger.py, dan moet de bovenkant van de code de volgende "shebang" regel #! /usr/bin/python3 (dit is vereist om functies vanuit node-red uit te voeren)

#!/usr/bin/python3 // shebang linefrom sense_hat importeer SenseHat van datetime import datetime van csv importeer schrijver importeer RPi. GPIO als GPIO van time import sleep

zin = SenseHat()

import csv

tijdstempel = datumtijd.nu()

vertraging = 5 // vertraging is gedefinieerd om gegevens op te slaan in data.csv-bestand rood = (255, 0, 0) groen = (0, 255, 0) geel = (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"])

gyro = sense.get_gyroscope_raw()

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

return sense_impact

def impact(): // functie om impact te detecteren #GPIO.setmode(GPIO. BCM) #GPIO.setup(4, GPIO. OUT) acceleratie = sense.get_accelerometer_raw() x = acceleratie['x'] y = acceleratie['y'] z = versnelling['z'] x=abs(x) y=abs(y) z=abs(z)

gyro = sense.get_gyroscope_raw()

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

gyrox = rond (gyrox, 2)

gyroy = rond (gyroy, 2) gyroz = rond (gyroz, 2)

impact = get_sense_impact()

als x > 1.5 of y > 1.5 of z > 1.5: // de waarden zijn ingesteld na iteratie op de werkelijke weg kunnen dienovereenkomstig worden gewijzigd voor verschillende typen en rijvaardigheid met open('impact.csv', 'w', newline=' ') as 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("!", red) data_writer.writerow(impact)

elif gyrox > 1.5 of gyroy > 1.5 of gyroz > 1.5: // de waarden worden ingesteld kijkend naar de snelheid waarmee bochten worden gestart met open('impact.csv', 'w', newline='') als f: data_writer = writer(f) data_writer.writerow(['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output(4, GPIO. HOOG) sense.clear() sense.show_letter("!", groen) data_writer.writerow(impact)

anders:

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

def get_sense_data (): // functie om waarden van sensor sense_data = vast te leggen en op te slaan

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

oriëntatie = sense.get_orientation()

sense_data.append(oriëntatie["yaw"]) sense_data.append(oriëntatie["pitch"]) sense_data.append(oriëntatie["roll"])

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"])

gyro = sense.get_gyroscope_raw()

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

sense_data.append(datetime.now())

return sense_data

met open('data.csv', 'w', newline='') als f:

data_writer = schrijver(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'])

terwijl waar:

print(get_sense_data()) voor event in sense.stick.get_events(): # Controleer of de joystick is ingedrukt if event.action == "pressed": # Controleer welke richting if event.direction == "up": # sense.show_letter("U") # Pijl omhoog versnelling = sense.get_accelerometer_raw() x = versnelling['x'] y = versnelling['y'] z = versnelling['z'] x=round(x, 0) y =rond(y, 0) z=rond(z, 0)

# Werk de rotatie van het scherm bij, afhankelijk van de richting naar boven if 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 = rood, scroll_speed=0.09) elif event.direction == "down": acceleratie = sense.get_accelerometer_raw() x = acceleratie['x'] y = acceleratie['y'] z = acceleratie['z'] x=round(x, 0) y=rond(y, 0) z=rond(z, 0)

# Werk de rotatie van het scherm bij, afhankelijk van de richting naar boven if 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") # Pijl omlaag sense.clear() h = sense.get_humidity() h = round(h, 1) message = "H: " + str(h) sense.show_message(message, text_colour = green, scroll_speed=0.09) p = sense.get_pressure() p = round(p, 1) message = "P: " + str(p) sense.show_message(message, text_colour = geel, scroll_speed=0.09)

# elif event.direction == "links":

# versnelling = sense.get_accelerometer_raw() # x = versnelling['x'] #y = versnelling['y'] #z = versnelling['z'] #x=round(x, 0) #y=round(y, 0) #z=rond(z, 0)

# Werk de rotatie van het scherm bij, afhankelijk van welke kant naar boven de // Niet gebruikt en gecontroleerd door node-red #if 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") # Pijl naar links # elif event.direction == "rechts": # sense.show_letter ("K") # Pijl naar rechts # elif event.direction == "middle": # sense.clear()

gevolg()

data = get_sense_data()

dt = data[-1] - tijdstempel als dt.seconden > vertraging: data_writer.writerow(data) timestamp = datetime.now()

Stap 18: Live video monitoren

Impact Recorder kan ook worden gebruikt om live video te monitoren, omdat video altijd en overal kan worden gestart via MQTT

we zouden VLC-speler gebruiken om video's te streamen, standaard in de nieuwste raspbian is de VLC vooraf geïnstalleerd, anders installeer vlc zoals onder

Meer informatie over het bekijken van netwerkstreams is toegankelijk via VLC Network stream

Bedankt voor het lezen!!

Er is veel meer dat de impactrecorder kan doen..

Let op de volgende ruimte voor magnetische veldanalyse bij het uitvoeren van het in kaart brengen van obstakels

Aanbevolen: