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, Studeni
Anonim
Snimač udara za vozila
Snimač udara za vozila

Uređaj za snimanje udara dizajniran je za snimanje udara na vozilo tijekom vožnje ili stajanja. Utjecaji se pohranjuju u bazu podataka u obliku očitanja, kao i videa/slike. Udaljeni korisnik nakon udara može se provjeriti u stvarnom vremenu, a udaljeni korisnik tada može pogledati spremljeni 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 je računalna snaga

(2) Šešir od maline pi sense

(3) Pi kamera od maline / USB kamera

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

(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, joystick s pet tipki i uključuje sljedeće senzore:

  • Žiroskop
  • Brzinomjer
  • Magnetometar
  • Temperatura
  • Barometarski
  • pritisak
  • Vlažnost

Više informacija o radu s osjetilnim šeširom može se dobiti sa sljedećih veza: Sense_Hat

API za sense hat nalaze se na: Sense_hat_API

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

Korak 3: Sastavljanje: Snimač utjecaja

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

Na gornjoj slici prikazana je pi-kamera spojena ravnim vrpčanim kabelom na pi

Korak 4: Sklapanje: Snimač udara na upravljačkoj ploči automobila

Sklapanje: Snimač udara na upravljačkoj ploči automobila
Sklapanje: Snimač udara na upravljačkoj ploči automobila

Za montažu rekordera 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.

Daljnja kamera montirana je 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 o MQTT -u su obrađeni u daljnjim koracima)

Korak 5: Rekoder utjecaja: Rad i aplikacije

Iz senzorskog šešira, ubrzanje i žiroskop koriste se za provjeru jesu li sirove vrijednosti iznad 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 os 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. Tijekom oštrog zaokreta 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 se prikazuje na matrici osjetljivog šešira LED kao "!" crveno za ubrzanje i zeleno za aktivaciju žiroskopa

Korak 6: Opis softvera: Node Red

Node-RED je programski alat temeljen na protoku, koji je izvorno razvio IBM-ov 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) Praćenje utjecaja na vozilo i prijenos 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 node-red

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

Korak 7: Osnove crvenog čvora

Osnove crvenih čvorova
Osnove crvenih čvorova
Osnove crvenih čvorova
Osnove crvenih čvorova
Osnove crvenih čvorova
Osnove crvenih čvorova

Određeni osnovni koraci označeni su za početak rada Node-red u trenu, ali da, node-red je previše jednostavan za početak i razradu aplikacija.

  • 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

Čvor-crveni: Protok _1a
Čvor-crveni: Protok _1a

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

Korak 9: Crveni čvor: Flow_1b

Crveni čvor: Flow_1b
Crveni čvor: Flow_1b

U navedenom toku, video snimanje se može 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/učita u direktorij, informacije se prenose registriranom korisniku putem interneta

Korak 11: Crveni čvor: Flow_2b

Crveni čvor: Flow_2b
Crveni čvor: Flow_2b

Ovaj protok prvenstveno je dizajniran za udaljenog korisnika, tako da upravlja uređajem na sljedeći način

(a) uređaj za isključivanje

(b) fotografirati

(c) Snimite video zapise

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

Korak 12: Čvor crveni; Tijek_3

Čvor Crveni; Tijek_3
Čvor Crveni; Tijek_3

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

Korak 13: MQTT

MQTT (Telemetry Transport Message Queuing Telemetry Transport) 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čunalu 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 pronaći na sljedećoj poveznici: 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

  • Naziv poslužitelja
  • luka
  • Korisničko ime
  • lozinka

Gore navedeno potrebno je prilikom pretplate putem mobitela/računala

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)

Utjecaj otkriven na pi prenosi se natrag

Korak 15: MQTT: Uređivanje svojstava u Node-crvenoj boji

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

U crvenom čvoru nakon odabira čvora MQTT, trebaju se spomenuti "naziv poslužitelja" i "tema". 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 kod je u privitku

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

#!/usr/bin/python3 // shebang linefrom sense_hat uvozi SenseHat iz datuma uvoza datum datetime iz csv unos pisača uvoz RPi. GPIO kao GPIO iz vremena uvoza sleep

sense = SenseHat ()

uvoz csv -a

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 = smisao.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 utjecaja #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 = smisao.get_gyroscope_raw ()

žiroskop = žiroskop ["x"] žiroskop = žiroskop "" y "] žiroskop = žiroskop" "z"]

žiroks = okrugli (žiroks, 2)

žiroskop = okrugli (žiroskop, 2) žiroskop = okrugli (žiroskop, 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 vrste 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 ',' gyro x ',' gyro y ',' gyro z ']) #GPIO. output (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 zavoja 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 pohranu 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 = smisao.get_gyroscope_raw ()

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

sense_data.append (datetime.now ())

vratiti 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 istina:

print (get_sense_data ()) za događaj u smislu.stick.get_events (): # Provjerite je li pritisnuta navigacijska tipka ako event.action == "pritisnuto": # Provjerite u kojem smjeru je event.direction == "gore": # smisao.show_letter ("U") # Strelica gore 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 zaslona ovisno o smjeru prema gore ako je 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 zaslona ovisno o smjeru prema gore ako je 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, brzina pomicanja = 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 zaslona 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 ulijevo # elif event.direction == "udesno": # sense.show_letter ("K") # Strelica udesno # elif event.direction == "middle": # sense.clear ()

udarac()

data = get_sense_data ()

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

Korak 18: Praćenje video zapisa uživo

Snimač utjecaja također se može koristiti 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 na čitanju!!

Snimač utjecaja može učiniti mnogo više.

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

Preporučeni: