INHOUDSOPGAWE:
- Stap 1: Onderdele en bykomstighede
- Stap 2: Onderdele Beskrywing: Sense Hat
- Stap 3: Montering: Impact Recorder
- Stap 4: Montering: Impact Recorder op die dashboard van die motor
- Stap 5: Impact Recoder: Working & Applications
- Stap 6: Beskrywing van sagteware: Node Red
- Stap 7: Node-rooi basiese beginsels
- Stap 8: Node-rooi: Flow _1a
- Stap 9: Node Rooi: Flow_1b
- Stap 10: Node Rooi: Flow_2a
- Stap 11: Knooprooi: Flow_2b
- Stap 12: Node Rooi; Vloei_3
- Stap 13: MQTT
- Stap 14: MQTT: intekenaar
- Stap 15: MQTT: Wysiging van eienskappe in Node-rooi
- Stap 16: Die Python -kode:
- Stap 17: Die finale kode
- Stap 18: Monitor live video
Video: Impakopnemer vir voertuie: 18 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Impact Recorder is ontwerp om die impak wat die voertuig opdoen tydens die bestuur of stil te hou. Die impak word in die databasis gestoor in die vorm van lesings sowel as video/prentjie. Met 'n eksterne impakgebruiker kan u intyds geverifieer word, en 'n afstandgebruiker kan die gestoorde video kyk of toegang tot die pi -kamera neem en die gebeure dienooreenkomstig kyk.
Stap 1: Onderdele en bykomstighede
(1) Raspberry Pi 3 of beter: Rekenaarkrag benodig
(2) Framboos pi sense hoed
(3) Framboos -pi -kamera / USB -kamera
(4) Geheue kaart met die nuutste raspbian -beeld (Moet node rooi ondersteun, byna elke nuutste beeld doen)
(5) Kragtoevoer ten minste 2,1 A (ek het 'n batterybank gebruik vir selfstandige werking in die motor)
Stap 2: Onderdele Beskrywing: Sense Hat
Die Sense HAT het 'n 8 × 8 RGB LED-matriks, 'n joystick met vyf knoppies en bevat die volgende sensors:
- Gyroscoop
- Versnellingsmeter
- Magnetometer
- Temperatuur
- Barometries
- druk
- Humiditeit
Meer inligting oor die werk met sinhoed kan verkry word uit die volgende skakels: Sense_Hat
API vir sense hat word aangebied by: Sense_hat_API
Kode vir sin-hoedprogrammering word in latere stappe behandel. Sense hoed kode kan ook gesimuleer word op 'n simulator wat aangebied word by: Sense-hat simulator
Stap 3: Montering: Impact Recorder
- Die samestelling is eenvoudiger, aangesien die hoed oor die pi gestapel moet word (aangewese monteerboute word voorsien van 'n hoed).
- USB -kamera of pi -kamera kan gekoppel word. In die tutoriaal word pi -kamera oorweeg en dienooreenkomstig word kodering daarvoor uitgevoer.
- Plaas die geheue kaart en konfigureer python -kode en node -red (konfigurasie en kode word in verdere stappe behandel)
Die foto hierbo toon die pi-kamera wat deur 'n plat lintkabel aan die pi gekoppel is
Stap 4: Montering: Impact Recorder op die dashboard van die motor
Vir die montering van die blokfluit gebruik ek dubbelzijdige band; die voordeel is dat die blokfluit maklik in 'n ander posisie kan verskuif, wat die beste by u motor pas.
Die verdere kamera word vertikaal gemonteer soos aangedui met dieselfde dubbelband, Volgende in die ry is om 'n kragbron (10 000 mAH kragbank) aan te sluit, tesame met 'n gereed internetverbinding
Internetverbinding is nodig vir die MQTT -toepassing (die besonderhede vir MQTT word in verdere stappe behandel)
Stap 5: Impact Recoder: Working & Applications
Vanuit die hoed word versnelling en gyroscoop gebruik om te kyk of die rou waardes die vasgestelde limiet in die kode oorskry.
Versnellingsmeter: Die versnellingsmeter vertel die hoeveelheid gravitasiekrag (G-krag) wat op elk van die x-, y & z-as inwerk, as enige as meer as 1G krag meet, kan vinnige beweging waargeneem word. (let op dat die as wat afwaarts wys, 'n waarde van 1 g sal hê, en dat dit dienooreenkomstig in die python -kode in ag geneem moet word).
Gyroscoop; Die gyroscoop word gebruik om hoekbeweging te meet, dws tydens 'n skerp draai kan die sensor geaktiveer word (hang af van die instelling in die kode), sodat 'n persoon wat die voertuig skerp draai, vasgevang sal word !!
Enige aktivering van die vasgestelde limiet word ook op die LED -matriks van die hoed vertoon as "!" in rooi vir versnelling en groen vir aktivering van die gyroscoop
Stap 6: Beskrywing van sagteware: Node Red
Node-RED is 'n vloei-gebaseerde programmeerhulpmiddel, oorspronklik ontwikkel deur IBM's Emerging Technology Servicesteam en nou deel van die JS Foundation.
Meer inligting oor knooprooi kan verkry word deur die volgende skakel: node-red
In ons geval gebruik ons node -rooi vir die volgende aktiwiteite
(1) Interaksie met die joysticks om kamerafunksies te begin
(2) Monitering van die impak op die voertuig en die oordrag van die inligting aan die eindgebruiker deur MQTT te gebruik en die eindgebruiker se opdragte verder deur MQTT te aanvaar en die nodige toepassing op pi te begin
(3) Uitvoer van 'n paar basiese dinge soos die afsluiting van pi
Die verdere stappe gee die gedetailleerde inligting vir die vloeidiagram geïmplementeer op knooprooi
Let asseblief daarop dat die knooprooi vloeidiagramme met die luislangkode in wisselwerking tree, dus dek die laaste deel die aspekte van die luislangkode
Stap 7: Node-rooi basiese beginsels
Sekere basiese stappe word uitgelig om Node-rooi vinnig te begin, maar ja, node-rooi is te eenvoudig om programme te begin en uit te werk.
- Begin Node-red: https:// localhost: 1880.
- Begin Node-red wanneer pi aan die internet gekoppel is https:// ip adres>: 1880
Stap 8: Node-rooi: Flow _1a
Die Flow _1a monitor alle veranderinge in die CSV -lêer en op grond van die veranderinge, dit wil sê die impak wat opgespoor word, die opname van die kameravideo is ingestel op die modus en verder word die gebruiker via die internet ingelig dat 'n impak plaasgevind het
Stap 9: Node Rooi: Flow_1b
In die genoemde stroom kan video -opname op enige tydstip begin word deur net op die joystick te druk
Stap 10: Node Rooi: Flow_2a
In die genoemde vloei, wanneer enige nuwe prentjie of video na die gids gestoor/opgelaai word, word die inligting via die internet aan die geregistreerde gebruiker oorgedra
Stap 11: Knooprooi: Flow_2b
Hierdie vloei is hoofsaaklik ontwerp vir die afstandgebruiker om die toestel op die volgende manier te beheer
(a) afsluittoestel
(b) neem foto's
(c) Neem video's op
(d) begin hoofkode (dataloggerkode is die hoofkode wat die impak bereken)
Stap 12: Node Rooi; Vloei_3
Die stroom is ontwerp vir plaaslike toegang om die hoofkode of afsluitingstoestel te begin
Stap 13: MQTT
MQTT (Message Queuing Telemetry Transport) is 'n TCP/IP -protokol, waarin uitgewer en intekenaar interaksie het.
In ons geval is Pi 'n uitgewer, terwyl die toepassing wat in ons mobiel/rekenaar geïnstalleer is, die intekenaar is.
Op hierdie manier word inligting op afstand na die gebruiker oorgedra ('n werkende internetverbinding is noodsaaklik)
Meer inligting oor MQTT is verkrygbaar vanaf die volgende skakel: MQTT
Om MQTT te begin gebruik, moet ons eers registreer; vir die handleiding wat ek cloudmqtt (www.cloudmqtt.com) gebruik het, is daar 'n gratis plan onder 'cute cat', dit is alles.
Na registrasie, skep 'n instansie en sê 'pi', waarna u die volgende besonderhede kry
- Bediener naam
- hawe
- gebruikersnaam
- wagwoord
Bogenoemde word vereis tydens die inskrywing via mobiele/rekenaar
Vir my aansoek het ek die MQTT -toepassing van die Google Play -winkel gebruik (Android -weergawe)
Stap 14: MQTT: intekenaar
Die MQTT -toepassing op mobiele toestelle (Android -weergawe)
Die impak wat op pi opgespoor word, word teruggee
Stap 15: MQTT: Wysiging van eienskappe in Node-rooi
In node-rooi nadat die MQTT-knoop gekies is, moet die "bedienernaam" en "onderwerp" genoem word. Dit moet dieselfde wees op die einde van die intekenaar
Stap 16: Die Python -kode:
Die kodefunksies is volgens aangehegde vloeidiagram
Stap 17: Die finale kode
Die luislangkode is aangeheg
Om ons python -script vanaf die terminale te laat loop, moet ons dit uitvoerbaar maak as chmod +x datalogger.py, maar verder moet die bokant van die kode die volgende "shebang" -reël #bevat! /usr/bin/python3 (dit is nodig om funksies uit node-rooi uit te voer)
#!/usr/bin/python3 // shebang line from sense_hat import SenseHat from datetime import datetime from csv import writer import RPi. GPIO as GPIO from time import sleep
sense = SenseHat ()
invoer csv
tydstempel = datetime.now ()
vertraging = 5 // vertraging word gedefinieer om data in data.csv -lêer te stoor rooi = (255, 0, 0) groen = (0, 255, 0) geel = (255, 255, 0)
#GPIO.setmodus (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"])
gee sense_impact terug
def impact (): // funksie om impak op te spoor #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) versnelling = sense.get_accelerometer_raw () x = versnelling ['x'] y = versnelling ['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)
impak = get_sense_impact ()
as x> 1.5 of y> 1.5 of z> 1.5: // die waardes gestel word nadat iterasie op die werklike pad dienooreenkomstig verander kan word vir verskillende tipes en bestuursvaardighede met oop ('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. uitvoer (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", rooi) data_writer.writerow (impak)
elif gyrox> 1.5 of gyroy> 1.5 of gyroz> 1.5: // die waardes word ingestel om te kyk na die snelheid waarmee draaie met open ('impact.csv', 'w', newline = '') begin as f: data_writer = skrywer (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 (impak)
anders:
# GPIO.output (4, GPIO. LOW) sense.clear ()
def get_sense_data (): // funksie om waardes van sensor sense_data op te teken en op te slaan =
sense_data.append (sense.get_temperature ()) sense_data.append (sense.get_pressure ()) sense_data.append (sense.get_humidity ())
oriëntasie = sense.get_orientation ()
sense_data.append (oriëntasie ["yaw"]) sense_data.append (oriëntasie ["pitch"]) sense_data.append (oriëntasie ["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 ())
stuur sense_data terug
met open ('data.csv', 'w', newline = '') as f:
data_writer = skrywer (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 '])
terwyl dit waar is:
print (get_sense_data ()) vir gebeurtenis in sense.stick.get_events (): # Kyk of die joystick ingedruk is as event.action == "ingedruk": # Kyk in watter rigting event.direction == "up": # sense.show_letter ("U") # Opwaartse pylversnelling = sense.get_accelerometer_raw () x = versnelling ['x'] y = versnelling ['y'] z = versnelling ['z'] x = rondte (x, 0) y = rond (y, 0) z = rond (z, 0)
# Werk die rotasie van die skerm op, afhangende van watter rigting die if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) anders: sense.set_rotation (0) sense.clear () t = sense.get_temperature () t = rond (t, 1) boodskap = "T:" + str (t) sense.show_message (boodskap, teks_kleur = rooi, scroll_speed = 0.09) elif event.direction == "af": versnelling = sense.get_accelerometer_raw () x = versnelling ['x'] y = versnelling ['y'] z = versnelling ['z'] x = rond (x, 0) y = rond (y, 0) z = rond (z, 0)
# Werk die rotasie van die skerm op, afhangende van watter rigting die if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) anders: sense.set_rotation (0) # sense.show_letter ("D") # pyltjie omlaag sense.clear () h = sense.get_humidity () h = round (h, 1) message = "H:" + str (h) sense.show_message (boodskap, text_colour = groen, scroll_speed = 0.09) p = sense.get_pressure () p = round (p, 1) message = "P:" + str (p) sense.show_message (boodskap, text_colour = geel, rolspoed = 0,09)
# elif event.direction == "links":
#versnelling = sense.get_accelerometer_raw () #x = versnelling ['x'] #y = versnelling ['y'] #z = versnelling ['z'] #x = rond (x, 0) #y = rond (y, 0) #z = rond (z, 0)
#Werk die rotasie van die skerm op, afhangende van watter kant op die // Nie gebruik nie en beheer deur knooprooi #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") # Pyl na links # elif event.direction == "regs": # sense.show_letter ("K") # Pyl regs # elif event.direction == "middel": # sense.clear ()
impak ()
data = get_sense_data ()
dt = data [-1] - tydstempel as dt.sekondes> vertraging: data_writer.writerow (data) tydstempel = datetime.now ()
Stap 18: Monitor live video
Impact Recorder kan ook gebruik word om lewendige video te monitor, aangesien video altyd en oral deur MQTT begin kan word
ons gebruik VLC-speler om video's te stroom, standaard in die nuutste raspbian is die VLC vooraf geïnstalleer, anders installeer vlc soos hieronder
Meer inligting oor die kyk na netwerkstroom is verkrygbaar via die VLC -netwerkstroom
Dankie dat u gelees het !!
Die impakopnemer kan veel meer doen..
Pas die volgende ruimte op vir magnetiese veldanalise by die uitvoering van hindernis kartering
Aanbeveel:
Xpedit - Toestemming vir atmosfeermonitering vir stap en trekking: 12 stappe (met foto's)
Xpedit - Atmosfeermonitoringsapparaat vir stap en trekking: as u van plan is om 'n avontuurlike reis of in die natuur te onderneem, is dit noodsaaklik om 'n toestel in u rugsak te hê wat u help om die omgewing te verstaan. Vir my komende avontuurreis was ek van plan om 'n draagbare toestel te bou wat help
Muurhouer vir iPad as bedieningspaneel vir tuisautomatisering, met behulp van servo -beheerde magneet om die skerm te aktiveer: 4 stappe (met foto's)
Muurhouer vir iPad as 'n bedieningspaneel vir tuisautomatisering, met behulp van 'n servo -beheerde magneet om die skerm te aktiveer: Ek het die afgelope tyd baie tyd spandeer om dinge in en om my huis te outomatiseer. Ek gebruik Domoticz as my Home Automation -toepassing, sien www.domoticz.com vir meer inligting. In my soeke na 'n dashboard -toepassing wat alle Domoticz -inligting saam wys
ForgetMeNot - platform vir kennisgewings vir slim huise: 14 stappe (met foto's)
ForgetMeNot - platform vir kennisgewings vir slim huise: As besige kollege studente wat rondloop tussen klasse, werk en gesinsverpligtinge, is ons geneig om die klein dingetjies te vergeet. 'N Verjaarsdag kom en gaan sonder dat ons dit agterkom, 'n belangrike sperdatum word misgeloop vanweë blote vergeetagtigheid en soms, net
Motortemperatuursensor/meter met draadlose sonde vir klassieke voertuie: 7 stappe
Motortemperatuursensor/meter met draadlose sonde vir klassieke voertuie: ek het hierdie sonde gemaak vir my lieflike Çipitak. 'N Fiat 126 -motor met 'n tweesilinder -lugverkoelde enjin onder die agterste enjinkap
Laserwyser vir brille gemonteer vir mense met bewegingsgestremdhede: 9 stappe (met foto's)
Laserwyser vir brille vir mense met bewegingsgestremdhede: Mense met ernstige bewegingsgestremdhede soos serebrale gestremdheid het dikwels ingewikkelde kommunikasiebehoeftes. Dit kan van hulle verwag word om borde met die alfabet te gebruik of woorde wat gereeld daarop gedruk word om kommunikasie te vergemaklik. Baie