Inhoudsopgave:
- Stap 1: Onderdelen & Accessoires
- Stap 2: Onderdelenbeschrijving: Sense Hat
- Stap 3: Montage: Impact Recorder
- Stap 4: Montage: Impact Recorder op het dashboard van de auto
- Stap 5: Impact Recoder: Werken & Toepassingen
- Stap 6: Softwarebeschrijving: Knooppunt Rood
- Stap 7: Node-red Basics
- Stap 8: Knooppunt-rood: Flow _1a
- Stap 9: Knooppunt Rood: Flow_1b
- Stap 10: Knooppunt Rood: Flow_2a
- Stap 11: Knooppunt Rood: Flow_2b
- Stap 12: Knooppunt Rood; Stroom_3
- Stap 13: MQTT
- Stap 14: MQTT: Abonnee
- Stap 15: MQTT: Eigenschappen bewerken in Node-red
- Stap 16: De Python-code:
- Stap 17: De definitieve code
- Stap 18: Live video monitoren
Video: Impact Recorder voor voertuigen: 18 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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
- 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
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
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
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
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
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
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
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
De MQTT-applicatie draait op mobiel (Android-versie)
De gedetecteerde impact op pi wordt teruggestuurd
Stap 15: 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:
Maak je eigen Spy Bug (Arduino Voice Recorder): 5 stappen (met afbeeldingen)
Maak je eigen Spy Bug (Arduino Voice Recorder): In dit project laat ik je zien hoe ik een Arduino Pro Mini combineerde met een aantal complementaire componenten om een voicerecorder te maken die ook misbruikt kan worden als spionagebug. Het heeft een looptijd van ongeveer 9 uur, is klein en supergemakkelijk te
Parkeeralarmsysteem voor voertuigen met PIR-sensor - DIY - Ajarnpa
Parkeeralarmsysteem voor voertuigen met PIR-sensor - DIY: heb je ooit problemen gehad tijdens het parkeren van een voertuig zoals een auto, vrachtwagen, motor of iets anders, dan laat ik je in deze instructable zien hoe je dit probleem kunt oplossen met behulp van een eenvoudig parkeeralarm voor voertuigen systeem met behulp van PIR-sensor. In dit systeem w
Motortemperatuursensor/meter met draadloze sonde voor klassieke voertuigen - Ajarnpa
Motortemperatuursensor/meter met draadloze sonde voor klassieke voertuigen: ik heb deze sonde gemaakt voor mijn mooie Çipitak. Een fiat 126 auto met een 2 cilinder luchtgekoelde motor onder de achterkap. De ipitak heeft geen temperatuurmeter die aangeeft hoe warm de motor is, dus ik dacht dat een sensor nuttig zou zijn. Ik wilde ook dat de sensor draad zou zijn
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Bereid enkele overtollige PIR-sensoren voor robotica voor: 3 stappen (met afbeeldingen)
Bereid wat overtollige PIR-sensoren voor robotica voor: ik vond een aantal PIR-sensoren op eBay. Ze zijn gemonteerd op een print die is gemaakt voor een handsfree set voor mobiele telefoons. Ik beschrijf hier graag hoe je de sensor voorbereidt voor gebruik in robotica-projecten. Als je niet weet wat een PIR-sensor is