Sadržaj:

Snimač udara za vozila: 18 koraka (sa slikama)
Snimač udara za vozila: 18 koraka (sa slikama)

Video: Snimač udara za vozila: 18 koraka (sa slikama)

Video: Snimač udara za vozila: 18 koraka (sa slikama)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Novembar
Anonim
Snimač udara za vozila
Snimač udara za vozila

Uređaj za snimanje udara je dizajniran za snimanje udara na vozilo tokom vožnje ili stajanja. Uticaji se pohranjuju u bazu podataka u obliku očitanja, kao i videa/slike. Udaljeni korisnik se nakon udara može provjeriti u stvarnom vremenu, a udaljeni korisnik može pogledati snimljeni video ili uzeti daljinski pristup pi kameri i prema tome gledati događaje.

Korak 1: Dijelovi i pribor

(1) Raspberry Pi 3 ili bolji: Potrebna računarska snaga

(2) Šešir od maline pi sense

(3) Pi kamera od maline / USB kamera

(4) Memorijska kartica sa najnovijom raspbian slikom (trebala bi podržavati crveni čvor, radi skoro svaka najnovija slika)

(5) Napajanje najmanje 2,1 A (koristio sam bateriju za samostalni rad u automobilu)

Korak 2: Opis dijelova: Sense Hat

Opis dijelova: Sense Hat
Opis dijelova: Sense Hat

Sense HAT ima 8 × 8 RGB LED matricu, džojstik sa pet tastera i uključuje sledeće senzore:

  • Žiroskop
  • Akcelerometar
  • Magnetometar
  • Temperature
  • Barometrijski
  • pritisak
  • Vlažnost

Više informacija o radu sa sense hatom može se dobiti na sljedećim linkovima: Sense_Hat

API za sense hat nalazi se na: Sense_hat_API

Kôd za programiranje sense-hat obrađen je u kasnijim koracima. Sense hat kod se takođe može simulirati na simulatoru koji se nalazi na: Sense-hat simulatoru

Korak 3: Sklapanje: Snimač udara

Sklapanje: Snimač udara
Sklapanje: Snimač udara
Sklapanje: Snimač udara
Sklapanje: Snimač udara
Sklapanje: Snimač udara
Sklapanje: Snimač udara
Sklapanje: Snimač udara
Sklapanje: Snimač udara
  • Sklapanje je jednostavnije jer senzorski šešir mora biti složen preko pi (označeni pričvrsni vijci isporučuju se sa senzorskim šeširom).
  • Mogu se spojiti USB kamera ili pi kamera. U vodiču se razmatra pi kamera i shodno tome vrši se kodiranje iste.
  • Umetnite memorijsku karticu i konfigurirajte python kôd i crveni čvor (konfiguracija i kôd su obrađeni u daljnjim koracima)

Gornja slika prikazuje pi-kameru povezanu preko ravnog vrpcanog kabela na pi

Korak 4: Sklapanje: Snimač udara na instrument tabli automobila

Sklapanje: Snimač udara na instrument tabli automobila
Sklapanje: Snimač udara na instrument tabli automobila

Za montažu diktafona koristio sam dvostranu traku, prednost je što se diktafon može lako premjestiti u drugi položaj, ovisno o tome što najbolje odgovara vašem automobilu.

Dalje kamera je montirana okomito kao što je prikazano, koristeći istu dvostruku bočnu traku, Sljedeći na redu je povezivanje izvora napajanja (banka kapaciteta 10 000 mAH) zajedno sa spremnom internetskom vezom

Za MQTT aplikaciju bit će potrebna internetska veza (detalji za MQTT su obrađeni u daljnjim koracima)

Korak 5: Snimač udara: Rad i aplikacije

Iz senzorskog šešira, ubrzanje i žiroskop koriste se za provjeru jesu li sirove vrijednosti izvan zadanog ograničenja u kodu.

Akcelerometar: Akcelerometar govori o količini gravitacijske sile (G-sile) koja djeluje na svaku od osi x, y & z, ako bilo koja osa mjeri silu veću od 1G, tada se može otkriti brzo kretanje. (imajte na umu da bi os usmjerena prema dolje imala vrijednost 1g i treba je u skladu s tim uzeti u obzir u Python kodu).

Žiroskop; Žiroskop se koristi za mjerenje kutnog kretanja, tj. Pri oštrom zaokretu senzor se može aktivirati (ovisno o postavci u kodu), pa bi se osoba koja oštro okreće vozilo uhvatila !!

Svako aktiviranje postavljenog ograničenja također je prikazano na matrici LED senzora kao "!" crveno za ubrzanje i zeleno za aktivaciju žiroskopa

Korak 6: Opis softvera: Node Red

Node-RED je programski alat zasnovan na protoku, koji je prvobitno razvio IBM-ov tim Emerging Technology Servicesteam, a sada je dio JS Foundation.

Više informacija o čvoru crveno može se dobiti putem sljedeće veze: čvor-crveno

U našem slučaju koristili bismo node -red za sljedeće aktivnosti

(1) Interakcija s upravljačkim palicama za pokretanje funkcija kamere

(2) Nadgledanje utjecaja na vozilo i prenošenje informacija krajnjem korisniku primjenom MQTT -a i daljnjim prihvaćanjem naredbi krajnjeg korisnika putem MQTT -a i pokretanjem potrebne aplikacije na pi

(3) Izvođenje nekih osnovnih stvari poput isključivanja pi

Daljnji koraci daju detaljne informacije za dijagram toka implementiran na čvoru-crveno

Imajte na umu da dijagrami toka u crvenom čvoru stupaju u interakciju s python kodom, stoga posljednji dio pokriva aspekte python koda

Korak 7: Osnove crvenog čvora

Osnove crvenog čvora
Osnove crvenog čvora
Osnove crvenog čvora
Osnove crvenog čvora
Osnove crvenih čvorova
Osnove crvenih čvorova

Određeni osnovni koraci su istaknuti za početak Node-red-a u tren oka, ali da, node-red je previše jednostavan za početak i rad na aplikacijama.

  • Pokretanje Node-red: https:// localhost: 1880.
  • Pokretanje Node-red kada je pi spojen na internet https:// ip adresa>: 1880

Korak 8: Crveni čvor: Protok _1a

Crveni čvor: Protok _1a
Crveni čvor: Protok _1a

Flow _1a, prati sve promjene u CSV datoteci i na osnovu promjena, tj. Otkrivenog utjecaja, snimanje video zapisa kamerom postavljeno je na način rada i dalje se korisnik putem interneta obavještava da je došlo do udara

Korak 9: Crveni čvor: Flow_1b

Crveni čvor: Flow_1b
Crveni čvor: Flow_1b

U navedenom toku, snimanje video zapisa može se započeti u bilo kojem trenutku jednostavnim pritiskom na navigacijsku tipku

Korak 10: Crveni čvor: Flow_2a

Crveni čvor: Flow_2a
Crveni čvor: Flow_2a

U navedenom toku, kad god se neka nova slika ili video zapis pohrani/otpremi u direktorij, informacije se prenose registriranom korisniku putem interneta

Korak 11: Crveni čvor: Flow_2b

Crveni čvor: Flow_2b
Crveni čvor: Flow_2b

Ovaj tok je prvenstveno dizajniran za udaljenog korisnika, tako da kontrolira uređaj na sljedeći način

(a) uređaj za isključivanje

(b) slikati

(c) Snimanje video zapisa

(d) pokretanje glavnog koda (kôd zapisivača podataka je glavni kôd koji izračunava utjecaj)

Korak 12: Node Red; Flow_3

Node Red; Flow_3
Node Red; Flow_3

Tok je dizajniran za lokalni pristup, tako da pokreće glavni kod ili uređaj za isključivanje

Korak 13: MQTT

MQTT (telemetrijski transport u redu poruka) je TCP/IP protokol, u kojem izdavač i pretplatnik komuniciraju.

U našem slučaju Pi je izdavač, dok će aplikacija instalirana na našem mobilnom računaru biti pretplatnik.

Na ovaj način, pri stvaranju bilo kakvog utjecaja, informacije se daljinski prenose do korisnika (radna internetska veza je neophodna)

Više informacija o MQTT -u možete pristupiti sa sljedeće veze: MQTT

Da bismo počeli koristiti MQTT, prvo se moramo registrirati, za tutorial sam koristio cloudmqtt (www.cloudmqtt.com), postoji besplatni plan pod "slatka mačka", to je sve.

Nakon registracije stvorite instancu recite "pi" nakon čega ćete dobiti sljedeće detalje

  • Ime servera
  • port
  • korisničko ime
  • lozinka

Gore navedeno je potrebno prilikom pretplate putem mobilnog telefona/računara

Za svoju aplikaciju koristio sam aplikaciju MQTT iz google play trgovine (verzija za Android)

Korak 14: MQTT: Pretplatnik

MQTT: Pretplatnik
MQTT: Pretplatnik

Aplikacija MQTT radi na mobilnom uređaju (verzija za Android)

Uticaj otkriven na pi se prenosi nazad

Korak 15: MQTT: Uređivanje svojstava u crvenom čvoru

MQTT: Uređivanje svojstava u crvenom čvoru
MQTT: Uređivanje svojstava u crvenom čvoru

U crvenom čvoru nakon odabira čvora MQTT, treba spomenuti "naziv servera" i "temu". Ovo bi trebalo biti isto na pretplatničkom kraju

Korak 16: Python kod:

Funkcionalnost koda je prema priloženom dijagramu toka

Korak 17: Završni kod

Python kôd je priložen

Da bi se naša python skripta pokrenula s terminala, moramo ih učiniti izvršnim kao chmod +x datalogger.py, nego dalje vrh koda treba sadržavati sljedeći "shebang" red #! /usr/bin/python3 (ovo je potrebno za izvršavanje funkcija iz node-red)

#!/usr/bin/python3 // shebang linefrom sense_hat uvozi SenseHat iz datetime import datetime iz csv importer import RPi. GPIO kao GPIO iz time import time sleep

sense = SenseHat ()

import csv

vremenska oznaka = datetime.now ()

delay = 5 // kašnjenje je definirano za spremanje podataka u datoteku data.csv crveno = (255, 0, 0) zeleno = (0, 255, 0) žuto = (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"])

žiroskop = sense.get_gyroscope_raw ()

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

return sense_impact

def impact (): // funkcija za otkrivanje udara #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) ubrzanje = sense.get_accelerometer_raw () x = ubrzanje ['x'] y = ubrzanje ['y'] z = ubrzanje ['z'] x = abs (x) y = abs (y) z = abs (z)

žiroskop = sense.get_gyroscope_raw ()

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

žiroskop = okrugli (žiroskop, 2)

giroy = okrugli (gyroy, 2) gyroz = okrugli (gyroz, 2)

utjecaj = get_sense_impact ()

ako je x> 1,5 ili y> 1,5 ili z> 1,5: // vrijednosti se postavljaju nakon iteracije na stvarnoj cesti mogu se shodno tome promijeniti za različite tipove i vozačke sposobnosti s otvorenim ('impact.csv', 'w', newline = ' ') kao f: data_writer = pisac (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' giro x ',' žiro y ',' žiro z ']) #GPIO. izlaz (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", crveno) data_writer.writerow (utjecaj)

elif gyrox> 1.5 ili gyroy> 1.5 ili gyroz> 1.5: // vrijednosti se postavljaju gledajući u brzinu pokretanja okretaja s otvorenim ('impact.csv', 'w', newline = '') kao f: data_writer = pisac (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 ("!", Zeleno) data_writer.writerow (utjecaj)

drugo:

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

def get_sense_data (): // funkcija za snimanje i pohranjivanje vrijednosti sa senzora sense_data =

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

orijentacija = smisao.get_orientation ()

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

žiroskop = 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

s otvorenim ('data.csv', 'w', newline = '') kao f:

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

dok je True:

print (get_sense_data ()) za događaj u smislu.stick.get_events (): # Proverite da li je džojstik pritisnut ako je event.action == "pritisnuto": # Proverite u kom smeru je event.direction == "gore": # smisao.show_letter ("U") # Strelica nagore ubrzanje = sense.get_accelerometer_raw () x = ubrzanje ['x'] y = ubrzanje ['y'] z = ubrzanje ['z'] x = okruglo (x, 0) y = okruglo (y, 0) z = okruglo (z, 0)

# Ažurirajte rotaciju ekrana ovisno o tome u kojem smjeru ide 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 = red, scroll_speed = 0.09) elif event.direction == "dolje": ubrzanje = sense.get_accelerometer_raw () x = ubrzanje ['x'] y = ubrzanje ['y'] z = ubrzanje ['z'] x = okruglo (x, 0) y = okruglo (y, 0) z = okruglo (z, 0)

# Ažurirajte rotaciju ekrana ovisno o tome u kojem smjeru ide 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") # Strelica prema dolje sense.clear () h = sense.get_humidity () h = okrugla (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 = žuta, scroll_speed = 0,09)

# elif event.direction == "lijevo":

#ubrzanje = sense.get_accelerometer_raw () #x = ubrzanje ['x'] #y = ubrzanje ['y'] #z = ubrzanje ['z'] #x = okruglo (x, 0) #y = okruglo (y, 0) #z = okruglo (z, 0)

#Ažurirajte rotaciju ekrana ovisno o smjeru gore // Ne koristi se i kontrolira 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") # strelica nalijevo # elif event.direction == "nadesno": # sense.show_letter ("K") # Strelica nadesno # elif event.direction == "middle": # sense.clear ()

utjecaj ()

data = get_sense_data ()

dt = data [-1] - vremenska oznaka ako je dt.seconds> kašnjenje: data_writer.writerow (data) timestamp = datetime.now ()

Korak 18: Praćenje video zapisa uživo

Snimač uticaja može se koristiti i za praćenje video zapisa uživo, jer se video zapis može pokrenuti bilo gdje i bilo gdje putem MQTT -a

koristili bismo VLC player za strujanje videozapisa, prema zadanim postavkama u najnovijem raspbian-u VLC je unaprijed instaliran, inače instalirajte vlc kao pod

Više informacija o gledanju mrežnog toka može se pristupiti putem VLC mrežnog toka

Hvala vam na čitanju !!

Rekorder može mnogo više učiniti.

Pazite na sljedeći prostor za analizu magnetskog polja u mapiranju prepreka

Preporučuje se: