Turinys:

Transporto priemonių smūgio registratorius: 18 žingsnių (su nuotraukomis)
Transporto priemonių smūgio registratorius: 18 žingsnių (su nuotraukomis)

Video: Transporto priemonių smūgio registratorius: 18 žingsnių (su nuotraukomis)

Video: Transporto priemonių smūgio registratorius: 18 žingsnių (su nuotraukomis)
Video: NEW KET 24 pamoka Specialiųjų transporto priemonių eismo ypatumai 2024, Lapkritis
Anonim
Transporto priemonių smūgių registratorius
Transporto priemonių smūgių registratorius

Smūgio registratorius skirtas užfiksuoti smūgį, patiriamą transporto priemonei vairuojant ar stovint. Poveikis saugomas duomenų bazėje rodmenų, taip pat vaizdo įrašų/paveikslėlių pavidalu. Po smūgio nuotolinis vartotojas gali būti patikrintas realiuoju laiku, o nuotolinis vartotojas gali žiūrėti išsaugotą vaizdo įrašą arba nuotoliniu būdu pasiekti pi kamerą ir atitinkamai žiūrėti įvykius..

1 žingsnis: dalys ir priedai

(1) „Raspberry Pi 3“arba geresnė: reikalinga skaičiavimo galia

(2) Raspberry pi sense skrybėlė

(3) Raspberry pi kamera / USB kamera

(4) Atminties kortelė su naujausiu raspbian vaizdu (turėtų palaikyti raudoną mazgą, beveik kiekvienas naujausias vaizdas veikia)

(5) Maitinimo šaltinis ne mažesnis kaip 2,1 A (aš naudoju akumuliatoriaus banką savarankiškam darbui automobilyje)

2 žingsnis: dalių aprašymas: „Sense Hat“

Dalių aprašymas: Sense Hat
Dalių aprašymas: Sense Hat

„Sense HAT“turi 8 × 8 RGB LED matricą, penkių mygtukų vairasvirtę ir apima šiuos jutiklius:

  • Giroskopas
  • Akselerometras
  • Magnetometras
  • Temperatūra
  • Barometrinis
  • spaudimas
  • Drėgmė

Daugiau informacijos apie darbą su „sense hat“galite gauti iš šių nuorodų: „Sense_Hat“

„Sense“skrybėlių API yra prieinama adresu: Sense_hat_API

„Sense-hat“programavimo kodas aprašytas vėlesniuose žingsniuose. Sense hat kodą taip pat galima imituoti simuliatoriuje, esančiame adresu: Sense-hat simulator

3 žingsnis: Surinkimas: smūgio registratorius

Surinkimas: smūgio registratorius
Surinkimas: smūgio registratorius
Surinkimas: smūgio registratorius
Surinkimas: smūgio registratorius
Surinkimas: smūgio registratorius
Surinkimas: smūgio registratorius
Surinkimas: smūgio registratorius
Surinkimas: smūgio registratorius
  • Surinkimas yra paprastesnis, nes skrybėlę reikia sukrauti virš pi (paskirti tvirtinimo varžtai pateikiami kartu su skrybėlėmis).
  • Galima prijungti USB ar pi kamerą. Pamokoje atsižvelgiama į pi kamerą ir atitinkamai koduojama.
  • Įdėkite atminties kortelę ir sukonfigūruokite python kodą bei mazgą raudoną (konfigūracija ir kodas aprašyti tolesniuose veiksmuose)

Aukščiau esančiame paveikslėlyje parodyta pi-kamera, prijungta plokščiu juostiniu kabeliu prie pi

4 žingsnis: Surinkimas: smūgio registratorius ant automobilio prietaisų skydelio

Surinkimas: smūgio registratorius ant automobilio prietaisų skydelio
Surinkimas: smūgio registratorius ant automobilio prietaisų skydelio

Diktofono montavimui naudojau dvipusę juostą, privalumas yra tas, kad diktofoną galima lengvai perkelti į skirtingą padėtį, atsižvelgiant į tai, kas geriausiai tinka jūsų automobiliui.

Kita kamera sumontuota vertikaliai, kaip parodyta, naudojant tą pačią dvigubą šoninę juostą, Kitas žingsnis yra prijungti maitinimo šaltinį (10 000 mAH maitinimo banką) ir paruoštą interneto ryšį

Norint naudotis MQTT, reikalingas interneto ryšys (išsami informacija apie MQTT pateikiama tolesniuose veiksmuose)

5 žingsnis: Poveikio atkūrimo įrenginys: darbas ir programos

Iš jutiklio skrybėlės, pagreičio ir giroskopo naudojami patikrinti, ar neapdorotos vertės neviršija nustatytos kodo ribos.

Akselerometras: Akselerometras nurodo gravitacinės jėgos (G jėgos), veikiančios kiekvieną x, y ir z ašį, kiekį, jei kuri nors ašis matuoja daugiau nei 1G jėgą, nei galima aptikti greitą judesį. (atkreipkite dėmesį, kad ašis, nukreipta žemyn, turėtų 1 g reikšmę ir į ją reikia atsižvelgti python kodu).

Giroskopas; Giroskopas naudojamas kampiniam judesiui matuoti, t. Y. Staigaus posūkio metu jutiklis gali būti suaktyvintas (priklauso nuo kodo nustatymo), todėl žmogus, staigiai sukdamasis transporto priemone, bus sugautas!

Bet koks nustatytos ribos aktyvinimas taip pat rodomas „sense hat“LED matricoje kaip „!“raudona - pagreitis, o žalia - giroskopui įjungti

6 veiksmas: programinės įrangos aprašymas: Raudonas mazgas

„Node-RED“yra srautinis programavimo įrankis, kurį iš pradžių sukūrė „IBM Emerging Technology Servicesteam“ir dabar yra „JS Foundation“dalis.

Daugiau informacijos apie mazgą raudoną galima gauti per šią nuorodą: node-red

Mūsų atveju toliau veiklai naudosime mazgą -red

(1) Sąveika su kreiptukais, kad paleistumėte fotoaparato funkcijas

(2) Poveikio transporto priemonei stebėjimas ir informacijos perdavimas galutiniam vartotojui naudojant MQTT ir toliau priimant galutinio vartotojo komandas per MQTT ir paleidžiant reikiamą programą pi

(3) Atlikite keletą pagrindinių dalykų, pvz., „Pi“išjungimą

Tolesniuose veiksmuose pateikiama išsami informacija apie srauto schemą, įdiegtą raudoname mazge

Atkreipkite dėmesį, kad mazgo raudonojo srauto diagramos sąveikauja su python kodu, todėl paskutinė dalis apima python kodo aspektus

7 veiksmas: raudonos mazgo pagrindai

Raudonos mazgo pagrindai
Raudonos mazgo pagrindai
Raudonos mazgo pagrindai
Raudonos mazgo pagrindai
Raudonos mazgo pagrindai
Raudonos mazgo pagrindai

Tam tikri pagrindiniai veiksmai yra paryškinti, kad žaibiškai prasidėtų raudonas mazgas, bet taip, raudonas mazgas yra per paprastas, kad būtų galima pradėti ir dirbti su programomis.

  • Pradedant raudoną mazgą: https:// localhost: 1880.
  • Raudonojo mazgo paleidimas, kai pi yra prijungtas prie interneto https:// ip address>: 1880

8 žingsnis: raudonas mazgas: srautas _1a

Raudonas mazgas: srautas _1a
Raudonas mazgas: srautas _1a

„Flow _1a“stebi visus CSV failo pakeitimus ir, remdamasis pakeitimais, t. Y. Aptiktu poveikiu, vaizdo įrašymas fotoaparatu yra įjungtas ir toliau vartotojas informuojamas internetu, kad įvyko poveikis.

9 veiksmas: mazgas raudonas: srautas_1b

Raudonas mazgas: srautas_1b
Raudonas mazgas: srautas_1b

Esant minėtam srautui, vaizdo įrašymą galima pradėti bet kuriuo metu, tiesiog paspaudus vairasvirtę

10 veiksmas: mazgas raudonas: srautas_2a

Raudonas mazgas: srautas_2a
Raudonas mazgas: srautas_2a

Minėtame sraute, kai bet kuri nauja nuotrauka ar vaizdo įrašas yra saugomas/įkeliamas į katalogą, informacija perduodama registruotam vartotojui internetu

11 veiksmas: mazgas raudonas: srautas_2b

Raudonas mazgas: srautas_2b
Raudonas mazgas: srautas_2b

Šis srautas pirmiausia skirtas nuotoliniam vartotojui, kad būtų galima valdyti įrenginį taip

a) išjungimo įtaisas

b) fotografuoti

c) įrašyti vaizdo įrašus

d) pradžios pagrindinis kodas (duomenų registravimo kodas yra pagrindinis kodas, kuris apskaičiuoja poveikį)

12 žingsnis: mazgas raudonas; Srautas_3

Mazgas raudonas; Srautas_3
Mazgas raudonas; Srautas_3

Srautas skirtas vietinei prieigai, kad būtų galima paleisti pagrindinį kodą arba išjungimo įrenginį

13 žingsnis: MQTT

MQTT (Message Queuing Telemetry Transport) yra TCP/IP protokolas, kuriame leidėjas ir abonentas sąveikauja.

Mūsų atveju Pi yra leidėjas, o mūsų mobiliajame telefone/kompiuteryje įdiegta programa yra abonentas.

Tokiu būdu, sukuriant bet kokį poveikį, informacija nuotoliniu būdu perduodama vartotojui (būtinas veikiantis interneto ryšys)

Daugiau informacijos apie MQTT galite rasti šioje nuorodoje: MQTT

Norėdami pradėti naudoti MQTT, pirmiausia turime užsiregistruoti, nes pamoka, kurią naudojau „cloudmqtt“(www.cloudmqtt.com), yra nemokamas planas „miela katė“, viskas.

Užregistravę sukurkite egzempliorių, pasakykite „pi“, po kurio gausite šią informaciją

  • Serverio pavadinimas
  • uostas
  • Vartotojo vardas
  • Slaptažodis

Pirmiau nurodyti privalomi prenumeruojant per mobilųjį/kompiuterį

Savo programai naudojau MQTT programą iš „Google Play“parduotuvės („Android“versija)

14 žingsnis: MQTT: abonentas

MQTT: Prenumeratorius
MQTT: Prenumeratorius

„MQTT“programa, veikianti mobiliajame telefone („Android“versija)

Pi aptiktas poveikis perduodamas atgal

15 veiksmas: MQTT: ypatybių redagavimas raudonu mazgu

MQTT: ypatybių redagavimas raudonu mazgu
MQTT: ypatybių redagavimas raudonu mazgu

Raudoname mazge pasirinkus MQTT mazgą reikia paminėti „Serverio pavadinimą“ir „temą“. Tai turėtų būti tas pats abonento gale

16 veiksmas: „Python“kodas:

Kodo funkcionalumas atitinka pridėtą schemą

17 žingsnis: galutinis kodas

Python kodas pridedamas

Kad mūsų „python“scenarijus būtų paleistas iš terminalo, turime padaryti, kad jie būtų vykdomi kaip chmod +x datalogger.py, o toliau kodo viršuje turėtų būti ši „shebang“eilutė #! /usr/bin/python3 (tai reikalinga norint atlikti funkcijas iš mazgo raudono)

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

jausmas = „SenseHat“()

importuoti csv

timestamp = datetime.now ()

uždelsimas = 5 // uždelsimas yra nustatytas duomenims saugoti duomenyse. csv failas raudonas = (255, 0, 0) žalias = (0, 255, 0) geltonas = (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"])

giroskopas = sense.get_gyroscope_raw ()

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

grįžti sense_impact

def impact (): // funkcija aptikti smūgį #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) pagreitis = sense.get_accelerometer_raw () x = pagreitis ['x'] y = pagreitis ['y'] z = pagreitis ['z'] x = abs (x) y = abs (y) z = abs (z)

giroskopas = sense.get_gyroscope_raw ()

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

gyrox = apvalus (gyrox, 2)

gyroy = apvalus (gyroy, 2) gyroz = apvalus (gyroz, 2)

poveikis = get_sense_impact ()

jei x> 1,5 arba y> 1,5 arba z> 1,5: // reikšmės nustatomos po iteracijos realiame kelyje gali būti atitinkamai pakeistos, atsižvelgiant į skirtingus tipus ir vairavimo įgūdžius, esant atviram ('impact.csv', 'w', newline = ' ') kaip f: data_writer = rašytojas (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' gyro x ',' gyro y ',' gyro z ']) #GPIO. išvestis (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", raudona) data_writer.writerow (poveikis)

elif gyrox> 1.5 arba gyroy> 1.5 arba gyroz> 1.5: // vertės nustatomos atsižvelgiant į greitį, kuriuo posūkiai pradedami atidarius ('impact.csv', 'w', newline = '') kaip f: data_writer = rašytojas (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 ("!", Žalia) data_writer.writerow (poveikis)

Kitas:

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

def get_sense_data (): // funkcija, skirta įrašyti ir saugoti vertes iš jutiklio sense_data =

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

orientacija = sense.get_orientation ()

sense_data.append (orientacija ["yaw"]) sense_data.append (orientacija ["pitch"]) sense_data.append (orientacija ["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"])

giroskopas = sense.get_gyroscope_raw ()

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

sense_data.append (datetime.now ())

grąžinti sense_data

su atvira ('data.csv', 'w', newline = '') kaip f:

duomenų_rašytojas = rašytojas (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 '])

nors tiesa:

print (get_sense_data ()) įvykiui sense.stick.get_events (): # Patikrinkite, ar buvo paspausta vairasvirtė, jei event.action == "press": # Patikrinkite, kuria kryptimi, jei event.direction == "up": # sense.show_letter ("U") # Rodyklės aukštyn pagreitis = sense.get_accelerometer_raw () x = pagreitis ['x'] y = pagreitis ['y'] z = pagreitis ['z'] x = apvalus (x, 0) y = apvalus (y, 0) z = apvalus (z, 0)

# Atnaujinkite ekrano sukimąsi, priklausomai nuo to, į kurią pusę aukštyn, jei 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 (pranešimas, text_colour = raudona, scroll_speed = 0.09) elif event.direction == "žemyn": pagreitis = sense.get_accelerometer_raw () x = pagreitis ['x'] y = pagreitis ['y'] z = pagreitis ['z'] x = apvalus (x, 0) y = apvalus (y, 0) z = apvalus (z, 0)

# Atnaujinkite ekrano sukimąsi priklausomai nuo to, į kurią pusę aukštyn, jei 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") # Rodyklė žemyn sense.clear () h = sense.get_humidity () h = round (h, 1) message = "H:" + str (h) sense.show_message (pranešimas, text_colour = žalia, scroll_speed = 0.09) p = sense.get_pressure () p = round (p, 1) message = "P:" + str (p) sense.show_message (pranešimas, text_colour = geltona, slinkties greitis = 0,09)

# elif event.direction == "left":

#pagreitis = sense.get_accelerometer_raw () #x = pagreitis ['x'] #y = pagreitis ['y'] #z = pagreitis ['z'] #x = apvalus (x, 0) #y = apvalus (y, 0) #z = apvalus (z, 0)

#Atnaujinkite ekrano sukimąsi, priklausomai nuo to, į kurią pusę aukštyn // Nenaudojama ir valdoma mazgo -raudono #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") # Rodyklė į kairę # elif event.direction == "right": # sense.show_letter ("K") # rodyklė į dešinę # elif event.direction == "middle": # sense.clear ()

poveikis ()

duomenys = get_sense_data ()

dt = duomenys [-1] - laiko žyma, jei dt.seconds> delay: data_writer.writerow (data) timestamp = datetime.now ()

18 veiksmas: tiesioginio vaizdo stebėjimas

„Impact Recorder“taip pat gali būti naudojamas tiesioginiam vaizdo įrašo stebėjimui, nes vaizdo įrašą galima pradėti bet kada ir bet kur per MQTT

vaizdo įrašams transliuoti naudosime VLC grotuvą, pagal numatytuosius nustatymus naujausioje raspbian sistemoje VLC yra iš anksto įdiegta, kitaip įdiekite vlc, kaip nurodyta

Daugiau informacijos apie tinklo srauto peržiūrą galima pasiekti naudojant „VLC Network stream“

Ačiū, kad skaitėte!!

Smūgio registratorius gali padaryti daug daugiau.

Saugokitės kitos erdvės magnetinio lauko analizei atliekant kliūčių kartografavimą

Rekomenduojamas: