Բովանդակություն:
- Քայլ 1: Մասեր և պարագաներ
- Քայլ 2: Մասերի նկարագրություն. Sense Hat
- Քայլ 3. Հավաքում. Ազդեցության գրանցիչ
- Քայլ 4. Հավաքում. Ազդեցության գրանցիչ մեքենայի Dash Board- ի վրա
- Քայլ 5. Impact Recoder: Աշխատանք և ծրագրեր
- Քայլ 6: Softwareրագրաշարի նկարագրություն. Կարմիր հանգույց
- Քայլ 7: Հանգույց-կարմիր հիմունքներ
- Քայլ 8: Հանգույց-կարմիր. Հոսք _1a
- Քայլ 9. Կարմիր հանգույց. Flow_1b
- Քայլ 10 ՝ Կարմիր հանգույց ՝ Flow_2a
- Քայլ 11: Կարմիր հանգույց ՝ Flow_2b
- Քայլ 12. Կարմիր հանգույց; Հոսք_3
- Քայլ 13: MQTT
- Քայլ 14: MQTT. Բաժանորդ
- Քայլ 15: MQTT. Հատկությունների խմբագրում Node-red- ում
- Քայլ 16: Python ծածկագիրը
- Քայլ 17: Վերջնական ծածկագիր
- Քայլ 18: Ուղիղ տեսանյութի մոնիտորինգ
Video: Տրանսպորտային միջոցների ազդեցության գրանցիչ. 18 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Impact Recorder- ը նախագծված է մեքենայի կամ ստացիոնար ընթացքում մեքենայի վրա հասցված ազդեցությունը գրանցելու համար: Ազդեցությունները պահվում են տվյալների բազայում `ընթերցումների, ինչպես նաև տեսանյութերի/նկարների տեսքով: Հեռավոր օգտվողի ազդեցության դեպքում հնարավոր է ստուգել իրական ժամանակում, իսկ հեռակա օգտվողը կարող է դիտել պահված տեսանյութը կամ հեռակա մուտք գործել pi տեսախցիկ և համապատասխանաբար դիտել իրադարձությունները.
Քայլ 1: Մասեր և պարագաներ
(1) Ազնվամորու Pi 3 կամ ավելի լավ. Պահանջվում է հաշվողական հզորություն
(2) Ազնվամորի pi զգայարան
(3) Ազնվամորի pi տեսախցիկ / USB տեսախցիկ
(4) Հիշողության քարտ `վերջին raspbian պատկերով (Պետք է աջակցել կարմիր հանգույցին, գրեթե ամեն վերջին պատկերն ունի)
(5) Էլեկտրաէներգիայի մատակարարում `առնվազն 2.1 Ա (ես մարտկոցի բանկ եմ օգտագործել մեքենայում ինքնուրույն աշխատանքի համար)
Քայլ 2: Մասերի նկարագրություն. 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- ի վրա
Ձայնագրիչը տեղադրելու համար ես օգտագործել եմ երկկողմանի ժապավեն, առավելությունն այն է, որ ձայնագրիչը կարող է հեշտությամբ տեղաշարժվել տարբեր դիրքերում, որն ավելի հարմար է ձեր մեքենային:
Հետագա տեսախցիկը տեղադրված է ուղղահայաց, ինչպես ցույց է տրված, օգտագործելով նույն կրկնակի կողային ժապավենը, Հաջորդը էներգիայի աղբյուրի (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
Flow _1a- ն վերահսկում է CSV ֆայլում կատարվող ցանկացած փոփոխություն և փոփոխությունների հիման վրա, այսինքն ՝ հայտնաբերված ազդեցությունը, տեսախցիկի տեսաձայնագրումը դրված է ռեժիմի վրա և հետագայում օգտվողին ինտերնետով տեղեկացվում է, որ ազդեցություն է տեղի ունեցել
Քայլ 9. Կարմիր հանգույց. Flow_1b
Նշված հոսքի մեջ տեսաձայնագրումը կարող է սկսվել ցանկացած պահի `պարզապես սեղմելով ջոյսթիկը
Քայլ 10 ՝ Կարմիր հանգույց ՝ Flow_2a
Նշված հոսքում, երբ որևէ նոր նկար կամ տեսանյութ պահվում/բեռնվում է գրացուցակում, տեղեկատվությունը փոխանցվում է գրանցված օգտագործողին ինտերնետի միջոցով
Քայլ 11: Կարմիր հանգույց ՝ Flow_2b
Այս հոսքը նախապես նախատեսված է հեռակա օգտագործողի համար, որպեսզի սարքը կառավարի հետևյալ կերպ
ա) անջատման սարք
բ) լուսանկարել
գ) տեսագրել տեսանյութեր
դ) սկսել հիմնական ծածկագիրը (տվյալների գրառման ծածկագիրը այն հիմնական կոդն է, որը հաշվարկում է ազդեցությունը)
Քայլ 12. Կարմիր հանգույց; Հոսք_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 հավելվածը աշխատում է բջջայինի վրա (Android տարբերակ)
Pi- ի վրա հայտնաբերված ազդեցությունը հետ է փոխանցվում
Քայլ 15: MQTT. Հատկությունների խմբագրում Node-red- ում
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գուշացեք մագնիսական դաշտի վերլուծության հաջորդ տարածությունից `խոչընդոտների քարտեզագրում իրականացնելիս
Խորհուրդ ենք տալիս:
Արտակարգ տրանսպորտային միջոցների փախուստի բանալի. 11 քայլ (նկարներով)
Արտակարգ տրանսպորտային միջոցների փախուստի բանալի. Ավտովթարներ: Այո՛ Վթարի ենթարկվելուց խուսափելու լավագույն միջոցը անվտանգ վարման տեխնիկայի կիրառումն է և միշտ ուշադրություն դարձնել, թե ուր եք գնում և ձեր շրջապատող այլ մեքենաներին: Այնուամենայնիվ, չնայած ձեր ջանքերին, դուք չեք վերահսկում այլ շարժիչ
Տրանսպորտային միջոցների հետևման համակարգ `6 քայլ
Տրանսպորտային միջոցների հետևման համակարգ. Arduino- ի վրա հիմնված տրանսպորտային միջոցների հետևման համակարգ `օգտագործելով գլոբալ դիրքավորման համակարգը (GPS) և գլոբալ համակարգ` օգտագործելով GSM մոդուլներ: Այստեղ օգտագործվող SIM քարտով GSM մոդեմը օգտագործում է հաղորդակցության տեխնիկան: Համակարգը կարող է տեղադրվել կամ թաքնվել ձեր մեքենայում: Այն բանից հետո, երբ ես
Տրանսպորտային միջոցների կայանման ազդանշանային համակարգ PIR սենսորի միջոցով- DIY. 7 քայլ (նկարներով)
Տրանսպորտային միջոցների կայանման ազդանշանային համակարգ ՝ օգտագործելով PIR սենսոր- DIY. Երբևէ դժվարությա՞մբ եք բախվել մեքենայի, մեքենայի, բեռնատարի, մոտոցիկլետի կամ որևէ մեքենայի կայանման ժամանակ, այնուհետև այս հրահանգով ես ձեզ ցույց կտամ, թե ինչպես հաղթահարել այս խնդիրը մեքենայի կայանման պարզ ազդանշանի միջոցով: համակարգ, որն օգտագործում է PIR տվիչ: Այս համակարգում, երբ
Տրանսպորտային միջոցների թվային չափիչ ցուցադրում `8 քայլ
Vehicle Digital Gauge Display. Սա իմ թվային չափիչ նախագիծն է, որը ես պլանավորում եմ տեղադրել իմ 73 Montego- ում: Այն սնուցվում է Arduino Mega 2560 R3- ով, Պտուտակային տերմինալային վահանով, ITDB02 TFT վահանով և վերևում Sain Smart 4.3 TFT- ով: Այս նախագծի նպատակն է նավթի մոնիտորինգը
Էժան ուլտրամանուշակագույն եղունգների բուժիչ լամպից պատրաստեք PCB- ի պատշաճ ազդեցության միավոր. 12 քայլ (նկարներով)
Էժան ուլտրամանուշակագույն եղունգների բուժիչ լամպից պատրաստեք PCB- ի ճառագայթման ճիշտ միավոր. Ի՞նչ ընդհանրություն ունեն PCB- ի արտադրությունն ու կեղծ եղունգները: Նրանք երկուսն էլ օգտագործում են ուլտրամանուշակագույն ճառագայթների բարձր ինտենսիվության աղբյուրներ, և, բախտի բերմամբ, այդ լույսի աղբյուրներն ունեն նույն ալիքի երկարությունը: Սովորաբար միայն PCB- ի արտադրատեսակները բավականին ծախսատար են