Obsah:

Záznamník nárazů pro vozidla: 18 kroků (s obrázky)
Záznamník nárazů pro vozidla: 18 kroků (s obrázky)

Video: Záznamník nárazů pro vozidla: 18 kroků (s obrázky)

Video: Záznamník nárazů pro vozidla: 18 kroků (s obrázky)
Video: Besipky - Náraz v padesátce 2024, Listopad
Anonim
Záznamník nárazů pro vozidla
Záznamník nárazů pro vozidla

Záznamník nárazů je navržen tak, aby zaznamenával nárazy způsobené vozidlu při jízdě nebo stání. Dopady jsou uloženy v databázi ve formě naměřených hodnot a také videa/obrázku. Po dopadu může být vzdálený uživatel ověřen v reálném čase a vzdálený uživatel může sledovat uložené video nebo podle toho vzdáleně přistupovat k pi kameře a sledovat události.

Krok 1: Díly a příslušenství

(1) Raspberry Pi 3 nebo lepší: Je vyžadován výpočetní výkon

(2) Raspberry pi sense hat

(3) Raspberry pi kamera / USB kamera

(4) Paměťová karta s nejnovějším obrázkem raspbian (Měl by podporovat uzel červený, téměř každý nejnovější obrázek ano)

(5) Napájení minimálně 2,1 A (pro samostatný provoz v autě jsem použil bateriový blok)

Krok 2: Popis dílů: Sense Hat

Popis dílů: Sense Hat
Popis dílů: Sense Hat

Sense HAT má matici 8 × 8 RGB LED, joystick s pěti tlačítky a obsahuje následující senzory:

  • Gyroskop
  • Akcelerometr
  • Magnetometr
  • Teplota
  • Barometrický
  • tlak
  • Vlhkost vzduchu

Další informace o práci se sense hat lze získat z následujících odkazů: Sense_Hat

API pro sense hat je hostováno na: Sense_hat_API

Kód pro programování sense-hat je popsán v dalších krocích. Sense hat code lze také simulovat na simulátoru hostovaném na: Sense-hat simulator

Krok 3: Sestavení: Záznamník nárazů

Sestavení: Záznamník nárazů
Sestavení: Záznamník nárazů
Sestavení: Záznamník nárazů
Sestavení: Záznamník nárazů
Sestavení: Záznamník nárazů
Sestavení: Záznamník nárazů
Sestavení: Záznamník nárazů
Sestavení: Záznamník nárazů
  • Sestavení je jednodušší, protože snímací klobouk musí být stohován přes pi (určené montážní šrouby jsou vybaveny snímacím kloboukem).
  • Lze připojit USB kameru nebo pi kameru. V tomto tutoriálu je brána v úvahu kamera pi a podle toho se provádí kódování.
  • Vložte paměťovou kartu a nakonfigurujte kód pythonu a uzel -červený (konfigurace a kód je popsán v dalších krocích)

Na obrázku výše je pi-kamera připojena plochým plochým kabelem k pí

Krok 4: Sestavení: Záznamník nárazů na palubní desku automobilu

Sestavení: Záznamník nárazů na palubní desku automobilu
Sestavení: Záznamník nárazů na palubní desku automobilu

Pro montáž rekordéru jsem použil oboustrannou pásku, výhodou je, že rekordér lze snadno posunout v jiné poloze, podle toho, co nejlépe vyhovuje vašemu vozu.

Další kamera je namontována svisle, jak je znázorněno, pomocí stejné oboustranné pásky, Další na řadě je připojení zdroje energie (power banka 10 000 mAh) spolu s připraveným internetovým připojením

Pro aplikaci MQTT je vyžadováno připojení k internetu (podrobnosti o MQTT jsou popsány v dalších krocích)

Krok 5: Impact Recoder: Práce a aplikace

Ze senzačního klobouku se akcelerace a gyroskop používají ke kontrole, zda jsou surové hodnoty mimo nastavený limit v kódu.

Akcelerometr: Akcelerometr udává množství gravitační síly (síly G) působící na každou z os x, y & z, pokud nějaká osa měří sílu větší než 1 G, pak lze detekovat rychlý pohyb. (mějte na paměti, že osa směřující dolů by měla hodnotu 1g a je třeba ji v kódu pythonu příslušně zvážit).

Gyroskop; Gyroskop se používá k měření úhlového pohybu, tj. Během ostré zatáčky se senzor může aktivovat (závisí na nastavení v kódu), takže by osoba, která prudce víří vozidlem, byla chycena !!

Jakákoli aktivace nastaveného limitu je také zobrazena na matici LED hat hat jako "!" červeně pro zrychlení a zeleně pro aktivaci gyroskopu

Krok 6: Popis softwaru: Node Red

Node-RED je programovací nástroj založený na toku, původně vyvinutý společností IBM Emerging Technology Servicesteam a nyní je součástí nadace JS Foundation.

Další informace o červeném uzlu lze získat prostřednictvím následujícího odkazu: node-red

V našem případě bychom pro následující činnosti používali node -red

(1) Interakce s joysticky pro spuštění funkcí fotoaparátu

(2) Monitorování dopadů na vozidlo a předávání informací koncovému uživateli pomocí MQTT a další přijímání příkazů koncového uživatele prostřednictvím MQTT a spouštění požadované aplikace na pi

(3) Provádění některých základních věcí, jako je vypnutí pí

Další kroky poskytují podrobné informace pro vývojový diagram implementovaný v uzlu-red

Berte prosím na vědomí, že vývojové diagramy červené barvy v uzlu interagují s kódem pythonu, proto druhá část pokrývá aspekty kódu pythonu

Krok 7: Node-red Základy

Node-red Základy
Node-red Základy
Node-red Základy
Node-red Základy
Node-red Základy
Node-red Základy

Některé základní kroky jsou zvýrazněny, aby bylo možné rychle spustit Node-red, ale ano, node-red je příliš jednoduché na zahájení a zpracování aplikací.

  • Spuštění Node-red: https:// localhost: 1880.
  • Spuštění Node-red, když je pi připojeno k internetu https:// IP adresa>: 1880

Krok 8: Node-red: Flow _1a

Node-red: Flow _1a
Node-red: Flow _1a

Flow _1a monitoruje všechny změny v souboru CSV a na základě změn, tj. Detekovaného nárazu, je nahrávání videa z kamery zapnuto a dále je uživatel přes internet informován, že došlo k nárazu

Krok 9: Uzel červený: Flow_1b

Uzel červený: Flow_1b
Uzel červený: Flow_1b

V uvedeném toku lze nahrávání videa zahájit v kterémkoli bodě pouhým stisknutím joysticku

Krok 10: Node Red: Flow_2a

Uzel červený: Flow_2a
Uzel červený: Flow_2a

V uvedeném toku, kdykoli je jakýkoli nový obrázek nebo video uložen/nahrán do adresáře, jsou informace předány registrovanému uživateli přes internet

Krok 11: Uzel červený: Flow_2b

Uzel červený: Flow_2b
Uzel červený: Flow_2b

Tento tok je primárně určen pro vzdáleného uživatele, aby bylo možné zařízení ovládat následujícím způsobem

a) vypínací zařízení

b) fotografovat

(c) Nahrávejte videa

d) spusťte hlavní kód (kód dataloggeru je hlavní kód, který vypočítá dopad)

Krok 12: Node Red; Flow_3

Node Red; Flow_3
Node Red; Flow_3

Tok je navržen pro místní přístup, aby se spustil hlavní kód nebo vypínací zařízení

Krok 13: MQTT

MQTT (Message Queuing Telemetry Transport) je protokol TCP/IP, ve kterém interagují vydavatel a předplatitel.

V našem případě je Pi vydavatelem, zatímco odběratelem bude aplikace nainstalovaná v našem moblile/PC.

Tímto způsobem při generování jakéhokoli dopadu jsou informace vzdáleně předávány uživateli (funkční internetové připojení je nutné)

Další informace o MQTT jsou dostupné z následujícího odkazu: MQTT

Abychom mohli začít používat MQTT, musíme se nejprve zaregistrovat, protože pro tutoriál, který jsem použil cloudmqtt (www.cloudmqtt.com), existuje pod „roztomilá kočka“bezplatný plán, to je vše.

Po registraci vytvořte instanci „pi“, po které získáte následující podrobnosti

  • Název serveru
  • přístav
  • uživatelské jméno
  • Heslo

Výše uvedené jsou vyžadovány při předplatném prostřednictvím mobilu/počítače

Pro svou aplikaci jsem použil aplikaci MQTT z obchodu Google Play (verze pro Android)

Krok 14: MQTT: Předplatitel

MQTT: Předplatitel
MQTT: Předplatitel

Aplikace MQTT běžící na mobilu (verze pro Android)

Zjištěný náraz na pí se přenese zpět

Krok 15: MQTT: Úpravy vlastností v Node-red

MQTT: Úpravy vlastností v Node-red
MQTT: Úpravy vlastností v Node-red

V uzlu červené po výběru uzlu MQTT bude uvedeno „Název serveru“a „téma“. To by mělo být stejné na konci předplatitele

Krok 16: Kód Pythonu:

Funkce kódu je podle přiloženého vývojového diagramu

Krok 17: Konečný kód

Kód pythonu je přiložen

Aby náš skript pythonu mohl běžet z terminálu, musíme jej spustit jako chmod +x datalogger.py, než by horní část kódu měla obsahovat následující řádek #shebang! /usr/bin/python3 (je to nutné pro provádění funkcí z uzlu-červená)

#!/usr/bin/python3 // shebang linefrom sense_hat import SenseHat z datetime import datetime z csv import spisovatel import RPi. GPIO jako GPIO z času import spánku

sense = SenseHat ()

importovat csv

timestamp = datetime.now ()

delay = 5 // zpoždění je definováno pro ukládání dat do souboru data.csv červená = (255, 0, 0) zelená = (0, 255, 0) žlutá = (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"])

gyroskop = sense.get_gyroscope_raw ()

sense_impact.append (gyro

vrátit sense_impact

def impact (): // funkce pro detekci dopadu #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) acceleration = sense.get_accelerometer_raw () x = acceleration ['x'] y = acceleration ['y'] z = zrychlení ['z'] x = abs (x) y = abs (y) z = abs (z)

gyroskop = sense.get_gyroscope_raw ()

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

gyrox = kulatý (gyrox, 2)

gyroy = kulatý (gyroy, 2) gyroz = kulatý (gyroz, 2)

impact = get_sense_impact ()

pokud x> 1,5 nebo y> 1,5 nebo z> 1,5: // hodnoty jsou nastaveny po iteraci na skutečné silnici lze odpovídajícím způsobem změnit pro různé typy a řidičské dovednosti s otevřeným ('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. výstup (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", červený) data_writer.writerow (dopad)

elif gyrox> 1,5 nebo gyroy> 1,5 nebo gyroz> 1,5: // hodnoty jsou nastaveny s ohledem na rychlost, s níž jsou zatáčky zahajovány otevřeně ('impact.csv', 'w', newline = '') jako f: data_writer = Writer (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output (4, GPIO. VYSOKÉ) sense.clear () sense.show_letter ("!", Zelená) data_writer.writerow (dopad)

jiný:

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

def get_sense_data (): // funkce pro záznam a ukládání hodnot ze senzoru sense_data =

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

orientace = sense.get_orientation ()

sense_data.append (orientace ["zatáčení"]) sense_data.append (orientace ["hřiště"]) sense_data.append (orientace ["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"])

gyroskop = sense.get_gyroscope_raw ()

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

sense_data.append (datetime.now ())

vrátit sense_data

s otevřeným ('data.csv', 'w', newline = '') jako f:

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

zatímco pravda:

print (get_sense_data ()) pro událost ve sense.stick.get_events (): # Zkontrolujte, zda byl stisknut joystick, pokud event.action == "stisknuto": # Zkontrolujte, jakým směrem, pokud event.direction == "nahoru": # smysl.show_letter ("U") # Šipka nahoru šipka = sense.get_accelerometer_raw () x = zrychlení ['x'] y = zrychlení ['y'] z = zrychlení ['z'] x = kulatý (x, 0) y = kolo (y, 0) z = kolo (z, 0)

# Aktualizujte otočení displeje podle toho, jakým směrem nahoru 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 = kulatá (t, 1) zpráva = "T:" + str (t) sense.show_message (zpráva, text_colour = červená, scroll_speed = 0,09) elif event.direction == "down": acceleration = sense.get_accelerometer_raw () x = acceleration ['x'] y = acceleration ['y'] z = acceleration ['z'] x = round (x, 0) y = kulatý (y, 0) z = kulatý (z, 0)

# Aktualizujte otočení displeje podle toho, jakým směrem nahoru 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") # Šipka dolů sense.clear () h = sense.get_humidity () h = kulatá (h, 1) zpráva = "H:" + str (h) sense.show_message (zpráva, text_colour = zelená, scroll_speed = 0,09) p = sense.get_pressure () p = kulatá (p, 1) zpráva = "P:" + str (p) sense.show_message (zpráva, text_colour = žlutá, rychlost posouvání = 0,09)

# elif event.direction == "vlevo":

#acceleration = sense.get_accelerometer_raw () #x = acceleration ['x'] #y = acceleration ['y'] #z = acceleration ['z'] #x = round (x, 0) #y = round (y, 0) #z = kulatý (z, 0)

#Aktualizujte otočení displeje podle toho, jakým směrem nahoru // Nepoužívá se a ovládá se červeným uzlem #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") # šipka vlevo # elif event.direction == "vpravo": # sense.show_letter ("K") # Šipka doprava # elif event.direction == "middle": # sense.clear ()

dopad()

data = get_sense_data ()

dt = data [-1] - časové razítko, pokud dt.sekundy> zpoždění: data_writer.writerow (data) timestamp = datetime.now ()

Krok 18: Monitorování živého videa

Impact Recorder lze také použít ke sledování živého videa, protože video lze spustit kdykoli a kdekoli prostřednictvím MQTT

pro streamování videa bychom použili přehrávač VLC, ve výchozím nastavení je v nejnovějším raspbianu předinstalován VLC, jinak nainstalujte vlc jako pod

Další informace o prohlížení síťového streamu jsou dostupné prostřednictvím síťového streamu VLC

Děkuji za přečtení!!

Záznamník dopadů dokáže mnohem více..

Při mapování překážek si dejte pozor na další prostor pro analýzu magnetického pole

Doporučuje: