Բովանդակություն:

Տրանսպորտային միջոցների ազդեցության գրանցիչ. 18 քայլ (նկարներով)
Տրանսպորտային միջոցների ազդեցության գրանցիչ. 18 քայլ (նկարներով)

Video: Տրանսպորտային միջոցների ազդեցության գրանցիչ. 18 քայլ (նկարներով)

Video: Տրանսպորտային միջոցների ազդեցության գրանցիչ. 18 քայլ (նկարներով)
Video: Տրանսպորտային միջոցի պետական գրանցման և հաշվառման համար զրոյական տեղեկանք ստանալը պարզեցվում է 2024, Նոյեմբեր
Anonim
Տրանսպորտային միջոցների ազդեցության գրանցիչ
Տրանսպորտային միջոցների ազդեցության գրանցիչ

Impact Recorder- ը նախագծված է մեքենայի կամ ստացիոնար ընթացքում մեքենայի վրա հասցված ազդեցությունը գրանցելու համար: Ազդեցությունները պահվում են տվյալների բազայում `ընթերցումների, ինչպես նաև տեսանյութերի/նկարների տեսքով: Հեռավոր օգտվողի ազդեցության դեպքում հնարավոր է ստուգել իրական ժամանակում, իսկ հեռակա օգտվողը կարող է դիտել պահված տեսանյութը կամ հեռակա մուտք գործել pi տեսախցիկ և համապատասխանաբար դիտել իրադարձությունները.

Քայլ 1: Մասեր և պարագաներ

(1) Ազնվամորու Pi 3 կամ ավելի լավ. Պահանջվում է հաշվողական հզորություն

(2) Ազնվամորի pi զգայարան

(3) Ազնվամորի pi տեսախցիկ / USB տեսախցիկ

(4) Հիշողության քարտ `վերջին raspbian պատկերով (Պետք է աջակցել կարմիր հանգույցին, գրեթե ամեն վերջին պատկերն ունի)

(5) Էլեկտրաէներգիայի մատակարարում `առնվազն 2.1 Ա (ես մարտկոցի բանկ եմ օգտագործել մեքենայում ինքնուրույն աշխատանքի համար)

Քայլ 2: Մասերի նկարագրություն. Sense Hat

Մասերի նկարագրություն. Sense Hat
Մասերի նկարագրություն. Sense Hat

Sense HAT- ն ունի 8 × 8 RGB LED մատրիցա, հինգ կոճակ ունեցող ջոյստիկ և ներառում է հետևյալ տվիչները.

  • Գիրոսկոպ
  • Արագացուցիչ
  • Մագնիսաչափ
  • Ջերմաստիճանը
  • Բարոմետրիկ
  • ճնշում
  • Խոնավություն

Իմաստ գլխարկով աշխատելու մասին լրացուցիչ տեղեկություններ կարելի է ստանալ հետևյալ հղումներից ՝ Sense_Hat

Senseգալի գլխարկի API- ն տեղակայված է ՝ Sense_hat_API

Խելամիտ ծրագրավորման կոդն ընդգրկված է հետագա քայլերում: Enseգալի գլխարկի ծածկագիրը կարող է նաև նմանակվել սիմուլյատորի վրա, որը տեղակայված է ՝ Sense-hat simulator հասցեում

Քայլ 3. Հավաքում. Ազդեցության գրանցիչ

Հավաքում. Ազդեցության գրանցիչ
Հավաքում. Ազդեցության գրանցիչ
Հավաքում. Ազդեցության գրանցիչ
Հավաքում. Ազդեցության գրանցիչ
Հավաքում. Ազդեցության գրանցիչ
Հավաքում. Ազդեցության գրանցիչ
Հավաքում. Ազդեցության գրանցիչ
Հավաքում. Ազդեցության գրանցիչ
  • Հավաքումը ավելի պարզ է, քանի որ իմաստային գլխարկը պետք է դրվի pi- ի վրա (տեղադրման համար նախատեսված պտուտակներն ապահովված են զգայական գլխարկով):
  • USB տեսախցիկ կամ pi տեսախցիկ կարելի է միացնել: Ուսումնական ձեռնարկում pi տեսախցիկը դիտարկվում է, և համապատասխանաբար կոդավորումը կատարվում է նույնի համար:
  • Տեղադրեք հիշողության քարտը և կազմաձևեք պիթոնի ծածկագիրը և հանգույցը կարմիր (կազմաձևումն ու ծածկագիրը ծածկված են հետագա քայլերով)

Վերը նկարը ցույց է տալիս pi- տեսախցիկը, որը միացված է հարթ ժապավենի մալուխի միջոցով pi- ին

Քայլ 4. Հավաքում. Ազդեցության գրանցիչ մեքենայի Dash Board- ի վրա

Հավաքում. Ազդեցության գրանցիչ մեքենայի Dash Board- ի վրա
Հավաքում. Ազդեցության գրանցիչ մեքենայի Dash Board- ի վրա

Ձայնագրիչը տեղադրելու համար ես օգտագործել եմ երկկողմանի ժապավեն, առավելությունն այն է, որ ձայնագրիչը կարող է հեշտությամբ տեղաշարժվել տարբեր դիրքերում, որն ավելի հարմար է ձեր մեքենային:

Հետագա տեսախցիկը տեղադրված է ուղղահայաց, ինչպես ցույց է տրված, օգտագործելով նույն կրկնակի կողային ժապավենը, Հաջորդը էներգիայի աղբյուրի (10, 000 mAH հզորության բանկ) միացումն է `պատրաստ ինտերնետ կապի հետ միասին

MQTT հավելվածի համար անհրաժեշտ է ինտերնետ կապ (MQTT- ի մանրամասները ներառված են հետագա քայլերում)

Քայլ 5. Impact Recoder: Աշխատանք և ծրագրեր

Theգացմունքային գլխարկից արագացումն ու գիրոսկոպը օգտագործվում են ստուգելու համար, թե արդյոք հումքի արժեքները կոդում սահմանված սահմաններից դուրս են:

Արագաչափաչափ. Արագացուցիչը ցույց է տալիս x, y & z առանցքներից յուրաքանչյուրի վրա ազդող գրավիտացիոն ուժի (G- ուժի) չափը, եթե որևէ առանցք չափում է ավելի քան 1G ուժ, քան արագ շարժումը կարող է հայտնաբերվել: (խնդրում ենք նկատի ունենալ, որ դեպի ներքև ուղղված առանցքը կունենա 1 գ արժեք և համապատասխանաբար պետք է հաշվի առնել պիթոնի ծածկագրում):

Գիրոսկոպ; Գիրոսկոպը օգտագործվում է անկյունային շարժումը չափելու համար, այսինքն ՝ կտրուկ շրջադարձի ժամանակ սենսորը կարող է ակտիվանալ (կախված է կոդի պարամետրերից), այնպես որ մեքենան կտրուկ պտտվող անձը կբռնվի !!

Սահմանված սահմանաչափի ցանկացած ակտիվացում ցուցադրվում է նաև զգայական գլխարկի LED մատրիցի վրա որպես «!»: կարմիրով ՝ արագացման համար, իսկ կանաչը ՝ գիրոսկոպի ակտիվացման համար

Քայլ 6: Softwareրագրաշարի նկարագրություն. Կարմիր հանգույց

Node-RED- ը հոսքի վրա հիմնված ծրագրավորման գործիք է, որն ի սկզբանե մշակվել է IBM- ի Emerging Technology Servicesteam- ի կողմից և այժմ JS հիմնադրամի մի մասն է:

Հանգույցի կարմիրի մասին լրացուցիչ տեղեկություններ կարելի է ստանալ հետևյալ հղումով `node-red

Մեր դեպքում մենք node -red- ը կօգտագործենք հետևյալ գործողությունների համար

(1) cameraոյսթիկների հետ փոխազդեցություն `տեսախցիկի գործառույթները սկսելու համար

(2) Մեքենայի վրա ազդեցությունների մոնիտորինգ և տեղեկատվության փոխանցում վերջնական օգտագործողին `օգտագործելով MQTT և հետագա ընդունելով վերջնական օգտագործողի հրամանները MQTT- ի միջոցով և սկսելով անհրաժեշտ կիրառումը pi- ի վրա:

(3) Որոշ հիմնական նյութերի կատարում, ինչպիսիք են pi- ի անջատումը

Հետագա քայլերը մանրամասն տեղեկատվություն են տալիս հանգույց-կարմիրի վրա իրականացվող հոսքի դիագրամի վերաբերյալ

Խնդրում ենք նկատի ունենալ, որ հանգույց-կարմիր հոսքի գծապատկերները փոխազդում են պիթոնի ծածկագրի հետ, ուստի վերջին մասը ծածկում է պիթոնի կոդի ասպեկտները:

Քայլ 7: Հանգույց-կարմիր հիմունքներ

Հանգույց-կարմիր հիմունքներ
Հանգույց-կարմիր հիմունքներ
Հանգույց-կարմիր հիմունքներ
Հանգույց-կարմիր հիմունքներ
Հանգույց-կարմիր հիմունքներ
Հանգույց-կարմիր հիմունքներ

Որոշ Հիմնական քայլեր ընդգծված են ՝ հանգույց-կարմիրը միանգամից սկսելու համար, բայց այո, հանգույց-կարմիրը չափազանց պարզ է ՝ ծրագրեր սկսելու և մշակելու համար:

  • Մեկնարկային հանգույց-կարմիր ՝ https:// localhost: 1880:
  • Սկսել Node-red երբ pi- ն միացված է ինտերնետին https:// ip address>: 1880

Քայլ 8: Հանգույց-կարմիր. Հոսք _1a

Հանգույց-կարմիր. Հոսք _1a
Հանգույց-կարմիր. Հոսք _1a

Flow _1a- ն վերահսկում է CSV ֆայլում կատարվող ցանկացած փոփոխություն և փոփոխությունների հիման վրա, այսինքն ՝ հայտնաբերված ազդեցությունը, տեսախցիկի տեսաձայնագրումը դրված է ռեժիմի վրա և հետագայում օգտվողին ինտերնետով տեղեկացվում է, որ ազդեցություն է տեղի ունեցել

Քայլ 9. Կարմիր հանգույց. Flow_1b

Կարմիր հանգույց ՝ Flow_1b
Կարմիր հանգույց ՝ Flow_1b

Նշված հոսքի մեջ տեսաձայնագրումը կարող է սկսվել ցանկացած պահի `պարզապես սեղմելով ջոյսթիկը

Քայլ 10 ՝ Կարմիր հանգույց ՝ Flow_2a

Կարմիր հանգույց. Flow_2a
Կարմիր հանգույց. Flow_2a

Նշված հոսքում, երբ որևէ նոր նկար կամ տեսանյութ պահվում/բեռնվում է գրացուցակում, տեղեկատվությունը փոխանցվում է գրանցված օգտագործողին ինտերնետի միջոցով

Քայլ 11: Կարմիր հանգույց ՝ Flow_2b

Կարմիր հանգույց ՝ Flow_2b
Կարմիր հանգույց ՝ Flow_2b

Այս հոսքը նախապես նախատեսված է հեռակա օգտագործողի համար, որպեսզի սարքը կառավարի հետևյալ կերպ

ա) անջատման սարք

բ) լուսանկարել

գ) տեսագրել տեսանյութեր

դ) սկսել հիմնական ծածկագիրը (տվյալների գրառման ծածկագիրը այն հիմնական կոդն է, որը հաշվարկում է ազդեցությունը)

Քայլ 12. Կարմիր հանգույց; Հոսք_3

Կարմիր հանգույց; Հոսք_3
Կարմիր հանգույց; Հոսք_3

Հոսքը նախատեսված է տեղական մուտքի համար, որպեսզի սկսի հիմնական կոդը կամ անջատման սարքը

Քայլ 13: MQTT

MQTT (Message Queuing Telemetry Transport) TCP/IP արձանագրություն է, որտեղ հրատարակիչն ու բաժանորդը փոխազդում են:

Մեր դեպքում Pi- ն հրատարակիչ է, մինչդեռ մեր բջջային հեռախոսում/համակարգչում տեղադրված ծրագիրը պետք է լինի բաժանորդը:

Impactանկացած ազդեցության առաջացման դեպքում տեղեկատվությունը հեռակա կերպով փոխանցվում է օգտագործողին (աշխատող ինտերնետ կապը պարտադիր է)

MQTT- ի մասին լրացուցիչ տեղեկություններ կարելի է ստանալ հետևյալ հղումից ՝ MQTT

MQTT- ի օգտագործումը սկսելու համար մենք պետք է նախ գրանցվենք, այն ձեռնարկի համար, որն օգտագործել եմ cloudmqtt- ը (www.cloudmqtt.com), «խելոք կատվի» տակ կա անվճար ծրագիր, վերջ:

Գրանցվելուց հետո ստեղծեք օրինակ ասեք «pi», որից հետո կստանաք հետևյալ մանրամասները

  • Սերվերի անունը
  • նավահանգիստ
  • օգտագործողի անունը
  • գաղտնաբառ

Վերոնշյալը պահանջվում է բջջայինի/համակարգչի միջոցով բաժանորդագրվելիս

Իմ դիմումի համար ես օգտագործել եմ MQTT ծրագիրը google play store- ից (Android տարբերակ)

Քայլ 14: MQTT. Բաժանորդ

MQTT: Բաժանորդ
MQTT: Բաժանորդ

MQTT հավելվածը աշխատում է բջջայինի վրա (Android տարբերակ)

Pi- ի վրա հայտնաբերված ազդեցությունը հետ է փոխանցվում

Քայլ 15: MQTT. Հատկությունների խմբագրում Node-red- ում

MQTT. Հատկությունների խմբագրում ՝ հանգույց-կարմիր գույնով
MQTT. Հատկությունների խմբագրում ՝ հանգույց-կարմիր գույնով

MQTT հանգույց ընտրելուց հետո կարմիր-հանգույցով նշվում է «Սերվերի անունը» և «թեման»:

Քայլ 16: Python ծածկագիրը

Կոդի գործառույթը ըստ կցված հոսքագծի է

Քայլ 17: Վերջնական ծածկագիր

Պիթոնի ծածկագիրը կցված է

Որպեսզի մեր պիտոնի սցենարը գործարկվի տերմինալից, մենք պետք է դրանք դարձնենք գործարկվող որպես chmod +x datalogger.py, քանզի հետագայում ծածկագրի վերևում պետք է լինի հետևյալ «shebang» տողը #! /usr/bin/python3 (սա պահանջվում է հանգույցից կարմիր գործառույթներ կատարելու համար)

#!/usr/bin/python3 // shebang linefrom sense_hat import SenseHat from datetime import data datime time from csv import writer

զգացում = SenseHat ()

ներմուծել csv

timestamp = datetime.now ()

ուշացում = 5 // ուշացումը որոշվում է տվյալները պահելու համար: csv ֆայլ կարմիր = (255, 0, 0) կանաչ = (0, 255, 0) դեղին = (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"])

գիրո = sense.get_gyroscope_raw ()

sense_impact.append (գիրո ["x"]) sense_impact.append (գիրո ["y"]) sense_impact.append (գիրո ["z"])

վերադարձ զգացում_ազդեցություն

def ազդեցություն (): // ազդեցություն ազդեցությունը հայտնաբերելու համար #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) արագացում = sense.get_accelerometer_raw () x = արագացում ['x'] y = արագացում ['y'] z = արագացում ['z'] x = abs (x) y = abs (y) z = abs (z)

գիրո = sense.get_gyroscope_raw ()

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

gyrox = կլոր (gyrox, 2)

gyroy = կլոր (gyroy, 2) gyroz = round (gyroz, 2)

ազդեցություն = get_sense_impact ()

եթե x> 1.5 կամ y> 1.5 կամ z> 1.5: // արժեքները սահմանվում են փաստացի ճանապարհի վրա կրկնելուց հետո, կարող են համապատասխանաբար փոխվել տարբեր տեսակների և բաց վարելու հմտությունների դեպքում ('impact.csv', 'w', newline = ' ') որպես f: data_writer = գրող (f) data_writer.writerow ([' 'acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO: ելք (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", կարմիր) data_writer.writerow (ազդեցություն)

elif gyrox> 1.5 կամ gyroy> 1.5 կամ gyroz> 1.5: // արժեքները սահմանվում են ՝ հաշվի առնելով այն արագությունը, որով շրջադարձերը սկսվում են բաց («impact.csv», «w», newline = ") ինչպես f: data_writer = գրող (զ) 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 ("!", Կանաչ) data_writer.writerow (ազդեցություն)

այլ:

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

def get_sense_data (): // գործառույթ ՝ սենսորային արժեքներից արժեքներ գրանցելու և պահելու համար =

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

կողմնորոշում = sense.get_orientation ()

sense_data.append (կողմնորոշում [«yaw»]) sense_data.append (կողմնորոշում [«սկիպիդար»]) sense_data.append (կողմնորոշում [«գլորում»])

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"])

գիրո = sense.get_gyroscope_raw ()

sense_data.append (գիրո ["x"]) sense_data.append (գիրո ["y"]) sense_data.append (գիրո ["z"])

sense_data.append (datetime.now ())

վերադարձ զգայական_տվյալներ

բաց ('data.csv', 'w', newline = '') որպես f:

data_writer = գրող (զ)

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 '])

իսկական True:

տպել (get_sense_data ()) իրադարձության համար sense.stick.get_events (): # Ստուգեք, արդյոք joystick- ը սեղմված է event.action == "pressed": # Ստուգեք, թե որ ուղղությամբ է իրադարձությունը: direction == "up": # sense.show_letter ("U") # Վեր սլաքի արագացում = sense.get_accelerometer_raw () x = արագացում ['x'] y = արագացում ['y'] z = արագացում ['z'] x = կլոր (x, 0) y = կլոր (y, 0) z = կլոր (z, 0)

# Թարմացրեք ցուցադրման պտույտը ՝ կախված նրանից, թե որ ուղղությամբ է 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 == "down": acceleration = sense.get_accelerometer_raw () x = արագացում ['x'] y = արագացում ['y'] z = արագացում ['z'] x = կլոր (x, 0) y = կլոր (y, 0) z = կլոր (z, 0)

# Թարմացրեք ցուցադրման ռոտացիան ՝ կախված նրանից, թե որ ուղղությամբ է 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") # Down arrow sense.clear () h = sense.get_humidity () h = round (h, 1) message = "H:" + str (ը) sense.show_message (հաղորդագրություն, տեքստ_գույն = կանաչ, ոլորման_ արագություն = 0.09) p = sense.get_pressure () p = կլոր (p, 1) հաղորդագրություն = "P:" + str (p) sense.show_message (message, text_colour = դեղին, ոլորման արագություն = 0.09)

# elif event.direction == "ձախ":

#արագացում = sense.get_accelerometer_raw () #x = արագացում ['x'] #y = արագացում ['y'] #z = արագացում ['z'] #x = կլոր (x, 0) #y = կլոր (y, 0) #z = կլոր (z, 0)

#Թարմացրեք ցուցադրման պտույտը ՝ կախված նրանից, թե որ ուղղությամբ է // // Չի օգտագործվում և վերահսկվում է հանգույց -կարմիր #եթե 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") # Ձախ սլաք # elif event.direction == "right": # sense.show_letter ("K") # Աջ սլաք # elif event.direction == "middle": # sense.clear ()

ազդեցություն()

տվյալներ = get_sense_data ()

dt = data [-1] - timestamp if dt.seconds> հետաձգում. data_writer.writerow (data) timestamp = datetime.now ()

Քայլ 18: Ուղիղ տեսանյութի մոնիտորինգ

Impact Recorder- ը կարող է օգտագործվել նաև կենդանի տեսանյութը վերահսկելու համար, քանի որ տեսահոլովակը կարելի է սկսել ցանկացած պահի, ցանկացած վայրում MQTT- ի միջոցով

մենք կօգտագործենք VLC նվագարկիչ ՝ տեսանյութեր հոսելու համար, վերջին raspbian- ում լռելյայնորեն VLC- ն նախապես տեղադրված է, այլապես տեղադրեք vlc- ն ՝ ներքևում

Networkանցի հոսքը դիտելու մասին լրացուցիչ տեղեկություններ կարելի է ստանալ VLC ցանցի հոսքի միջոցով

Շնորհակալություն կարդալու համար !!

Շատ ավելի շատ ազդեցության ձայնագրիչը կարող է անել..

Watchգուշացեք մագնիսական դաշտի վերլուծության հաջորդ տարածությունից `խոչընդոտների քարտեզագրում իրականացնելիս

Խորհուրդ ենք տալիս: