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

Փորձեր տվյալների ընդլայնված մուտքագրման մեջ (Python- ի օգտագործմամբ). 11 քայլ
Փորձեր տվյալների ընդլայնված մուտքագրման մեջ (Python- ի օգտագործմամբ). 11 քայլ

Video: Փորձեր տվյալների ընդլայնված մուտքագրման մեջ (Python- ի օգտագործմամբ). 11 քայլ

Video: Փորձեր տվյալների ընդլայնված մուտքագրման մեջ (Python- ի օգտագործմամբ). 11 քայլ
Video: ComfyUI Tutorial - How to Install ComfyUI on Windows, RunPod & Google Colab | Stable Diffusion SDXL 2024, Հուլիսի
Anonim
Փորձեր տվյալների ընդլայնված մուտքագրման մեջ (Python- ի օգտագործմամբ)
Փորձեր տվյալների ընդլայնված մուտքագրման մեջ (Python- ի օգտագործմամբ)

Կան բազմաթիվ տվյալների մուտքագրման հրահանգներ, այնպես որ, երբ ես ուզում էի սեփական փայտահատման նախագիծ կառուցել, ես շուրջս նայեցի մի փունջ: Ոմանք լավն էին, ոմանք ՝ ոչ այնքան, ուստի որոշեցի վերցնել որոշ ավելի լավ գաղափարներ և կատարել իմ սեփական դիմումը: Սա հանգեցրեց մի նախագծի և՛ ավելի առաջադեմ, և՛ ավելի բարդ, քան ես սկզբում սպասում էի: Դրա մի մասը դարձավ սենսորային տվյալների մշակման փորձերի շարք: Այս հրահանգը թույլ է տալիս փորձել նույն կամ նման փորձերը:

(Դուք կարող եք դիտել ամբողջ ծածկագիրը և ներբեռնել այն ՝ Կոդ GitHub- ում Դուք կարող եք դիտել, գուցե մեկ այլ պատուհանում, ընդամենը 2 կտտոցով)

Սովորաբար տվյալների գրանցումը ներառում է հետևյալը.

  • Տվյալների ձեռքբերում. Կարդացեք որոշ տվյալներ սենսորից: Հաճախ սա պարզապես կարդում է անալոգային թվային փոխարկիչ (ADC) Arduino- ի նման սարքի վրա:
  • Տվյալների մշակում. ADC- ի արժեքը կարդալիս փոխարկիչների արտադրանքը սովորաբար պետք է չափված լինի ճիշտ միավորներով: Հնարավոր է նաև անհրաժեշտ լինի որոշակի ճշգրտում կատարել `արժեքները ճշգրտելու համար` սենսորային սխալները շտկելու համար:
  • Filտում. Տվյալները սովորաբար պարունակում են որոշակի աղմուկ, այն կարող է զտվել, այնպես որ դուք փնտրում եք ձեր տվյալների ազդանշանը, այլ ոչ թե աղմուկը:
  • Տվյալների պահպանում. Տվյալները պահվում են, գուցե տեքստային ֆայլում, գուցե ամպի մեջ: Տվյալները պետք է պահպանվեն, նույնիսկ եթե հոսանքն անջատված է: Շատ հեշտ է շատ տվյալների պահպանումը, մենք ունենք մի փոքր հնարք ՝ տվյալների պահպանման տարածքը նվազեցնելու համար:
  • Տվյալների ցուցադրում. Ձեր տվյալները դիտարկելու մեթոդներ, ոչ թե իրականում տվյալների մուտքագրում, բայց եթե տվյալների մի տեսակ ցուցադրում չեք կատարում, ինչու՞ դրանք հավաքել:
  • Հեռավոր մուտք. Անհրաժեշտ չէ, բայց հաճելի է ունենալ:

Ուսուցիչների մեծ մասը ներառում է վերը նշվածներից մի քանիսը, բայց ոչ բոլորը, կամ դրանք կատարում են շատ պարզ եղանակով: Այս հրահանգը կանդրադառնա հաճախակի բաց թողնվող ծառերի խնդիրներից 2 -ին և որպես բոնուս ձեզ հնարավորություն կտա գրաֆիկացնել ձեր տվյալները ՝ առանց ամպային ծառայությունից օգտվելու: Կարող եք օգտագործել ամբողջը կամ կտոր -կտոր կտորներ հանել և դրանք նորից վերածել ձեր սեփական նախագծի:

Քայլ 1: Գործիքներ և նյութեր

Գործիքներ և նյութեր
Գործիքներ և նյութեր

Այս օրինակը ամբողջությամբ Python- ում է, այնպես որ այն կաշխատի, և բաղադրիչները կարող են օգտագործվել գրեթե ցանկացած OS- ի վրա, ներառյալ Mac, PC, Linux և Raspberry Pi:

Այսպիսով, այս հրահանգն օգտագործելու համար ձեզ հարկավոր է միայն Python 3.6 գործարկվող միջավայր և ներբեռնեք կցված կոդը: Իմ ստեղծած կոդը գործարկելուց հետո կարող եք փոփոխել այն ձեր սեփական փորձերի համար: Ինչպես սովորաբար Python- ի դեպքում, ամեն ինչ աշխատելու համար կարող է անհրաժեշտ լինել ավելացնել որոշ փաթեթներ/մոդուլներ: Իմ Spyder միջավայրը գալիս է գրեթե բոլոր անհրաժեշտ մասերով (տես ՝ Գրաֆիկական հրահանգելի տեսարաններ Python Screen Scraping- ով): Երբ առաջին անգամ գործարկեք ժամացույցը ցանկացած սխալի հաղորդագրության համար, նրանք ձեզ կտեղեկացնեն ձեր շրջակա միջավայրի բացակայող մասերի մասին:

Հաջորդ երկու քայլերը ձեզ կասեն, թե ինչպես կառուցել և անցկացնել ձեր սեփական փորձը, բայց հավանաբար ավելի լավ է սպասեք, մինչև ներառված փորձերը կատարեք, նախքան ձեր սեփականը փորձելը:

Կոդը հասկանալու համար ձեզ հարկավոր է ունենալ որոշակի փորձ օբյեկտի վրա հիմնված Python- ի հետ ՝ բացատրելով, որ դա դուրս է այս հրահանգվողի շրջանակներից, սակայն Google- ը պետք է ձեզ տրամադրի ցանկացած անհրաժեշտ օգնություն:

Ուշադրություն դարձրեք ծածկագրին. Կոդի հին տարբերակն այստեղ ՝ ստորև բերված հղումներում:

Քայլ 2: Փորձի կառուցում

Փորձի կառուցում
Փորձի կառուցում

Փորձի կառուցման մեջ կան ծրագրավորման երեք քայլեր (և տողեր): Յուրաքանչյուր փորձ ֆունկցիա է simulate_logging.py ֆայլի LoggingSim օբյեկտում: Եկեք նայենք 1 -ին փորձին (ընդամենը առաջին գրաֆիկը), որը մենք կկատարենք հաջորդ քայլում.

def փորձ_ի_նմուշ_տիպերի (ինքն):

տպել "" Նմուշի գների հետ փորձարկել նմուշի տարբեր դրույքաչափեր `փոխելով դելտա T" "" self.start_plot (plot_title = "Նմուշի սակագներ - մաս 1/3: Delta T = 1.0") self.add_sensor_data (name = "dt = 1. ", amplitude = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Յուրաքանչյուր փորձ գրված է որպես իր գործառույթ, այնպես որ մենք ունենք գործառույթը սահմանող տող (def փորձ…..)

Հաջորդ, առանց մեկնաբանության տողը, (start_plot (…)) ստեղծում է փորձի օբյեկտը և տալիս նրան անուն:

Հաջորդ, առանց մեկնաբանության տողի տողը, (add_sensor_data (…) բաժանված է մի քանի տողի: Այն նմանակում է ազդանշանը չափող սենսոր `պոտենցիալ աղմուկով և որոշ վերամշակմամբ: Ֆունկցիայի փաստարկները հետևյալն են.

  • Անուն ՝ վերջնական գրաֆիկի վրա դրված անուն ՝ տվյալները նույնականացնելու համար
  • ամպլիտուդա. որքան մեծ է ազդանշանը, մենք այս ուսանելիում միշտ կօգտագործենք 1. ամպլիտուդ:
  • noise_amp: որքան մեծ է աղմուկը, 0. աղմուկ չկա, մենք կսկսենք այստեղից:
  • delta_t: չափումների միջև ընկած ժամանակը, վերահսկում է ընտրանքի արագությունը:
  • max_t: Տվյալների հավաքման առավելագույն ժամանակը, մենք միշտ 10 -ը կօգտագործենք այս հրահանգվողում:
  • run_ave: ընթացիկ միջին օգտագործմամբ մշակում, 0 նշանակում է ոչ մի մշակում:
  • trigger_value: գործարկումը օգտագործելով ձգան, 0 նշանակում է ոչ մի մշակում

վերջնական, առանց մեկնաբանության տողը, (self.show_plot ……) ցուցադրվում է գրաֆիկը:

Իրերը մի փոքր ավելի բարդ դարձնելու համար կարող եք ունենալ մի քանի տող գրաֆիկի վրա կամ մի քանի գրաֆիկ փորձի ժամանակ, սա պետք է պարզ լինի հաջորդող փորձերից:

Քայլ 3: Փորձի վարում

Սա է փորձը վարելու կոդը: Ինչպես սովորական է Python- ում, այն տեղադրված է ֆայլի վերջում:

sim_logging = LoggingSim ()

sim_logging.experiment_with_sample_rates ()

Սա ընդամենը 2 տող է.

  • Ստեղծեք անտառահատումների սիմուլյատոր (LoggingSim ())
  • Գործարկել այն (sim_logging.experiment_with_sample_rates ())

Ներբեռնված ծածկագրում ես ունեմ ևս մի քանի տող և մեկնաբանություն, այն պետք է հեշտ լինի պարզել:

Քայլ 4. Փորձ `ընտրանքի դրույքաչափ

Փորձ. Նմուշի տոկոսադրույք
Փորձ. Նմուշի տոկոսադրույք
Փորձ. Նմուշի տոկոսադրույք
Փորձ. Նմուշի տոկոսադրույք
Փորձ. Նմուշի տոկոսադրույք
Փորձ. Նմուշի տոկոսադրույք

Սիմուլյատորը, ինչպես տեղադրված է այստեղ, միշտ թողարկում է ամպլիտուդայի մի գեղեցիկ սինուս ալիք: Մենք չենք ունենա աղմուկ կամ այլ վերամշակում: Կոդն օգտագործում է 3 ընտրանքային դրույքաչափեր (delta_t = 1.0, 0.1 և 0.01.) Քանի որ գրաֆիկները ընկնում են մեկը մյուսի վրա, փորձը ստեղծվում է ՝ ստեղծելու 3 տարբեր գրաֆիկներ: Ստացված գրաֆիկները այս քայլի պատկերներն են:

def փորձ_ի_նմուշ_տիպերի (ինքն):

տպել "" Փորձարկել նմուշի սակագների հետ Նմուշի տարբեր տեմպերի դիտում `փոխելով դելտա T" "self.start_plot (plot_title =" Փորձի նմուշի տոկոսադրույքներ 1/3. Delta T = 1.0 ") self.add_sensor_data (name =" dt = 1. ", amplitude = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------- --------------------------------------- self.start_plot (plot_title = "Փորձի օրինակելի գներ 2/3. Դելտա T = 0.1 ") self.add_sensor_data (name =" dt = 1. ", amplitude = 1., noise_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # -------------------------------------------------- ինքս.start_plot (plot_title = "Փորձի օրինակելի դրույքաչափեր 3/3. Դելտա T = 0.01") self.add_sensor_data (name = "dt = 1.", amplitude = 1., noise_amp =.0, delta_t = 0.01, max_t = 10:, run_ave = 0, trigger_value = 0) self.show_plot ()

Այն գործարկելու համար օգտագործեք տողը ՝ sim_logging.experiment_with_sample_rates ()

Հնարավոր եզրակացություններ.

  • Նմուշառման չափազանց ցածր ցուցանիշն իսկապես վատ է:
  • Բարձր սակագները հաճախ ավելի լավ են:

(Python 3.6 ծածկագիրը GitHub- ի հղումում ՝ ստորև հրահանգներում, 2.7)

Քայլ 5. Փորձ. Աղմուկի ցուցադրում

Փորձ. Աղմուկի ցուցադրում
Փորձ. Աղմուկի ցուցադրում

Այս փորձի ժամանակ մենք պահում ենք նույն ազդանշանը, օգտագործում ենք նմուշի միջին արագություն և այնտեղ ունենում ենք տարբեր քանակությամբ աղմուկ (աղմուկի աղմուկ =.0,.1, 1.0.) Գործարկեք այն ՝ sim_logging.experiment_showing_noise () - ով: Ելքը մեկ գրաֆիկ է ՝ 3 տողով:

Հնարավոր եզրակացություն.

Աղմուկը դժվարացնում է ազդանշանը, հնարավորության դեպքում նվազեցրեք այն:

Կոդը:

# ------------------------------------------------

def experiment_showing_noise (self): տպել "" "Աղմուկ ցուցադրող փորձ" Աղմուկի ամպլիտուդը փոխելով "" աղմուկի տարբեր քանակների նայել: "self.start_plot (plot_title =" Փորձը ցույց է տալիս աղմուկ ") self.add_sensor_data (name =" noise = 0.0 ", amplitude = 1., noise_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name =" noise = 0.1 ", amplitude = 1., noise_amp =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name = "noise = 1.0", amplitude = 1., noise_amp = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Քայլ 6. Փորձ. Նվազեցրեք աղմուկը շարժվող միջին ցուցանիշով

Փորձ. Նվազեցրեք աղմուկը շարժվող միջին ցուցանիշով
Փորձ. Նվազեցրեք աղմուկը շարժվող միջին ցուցանիշով
Փորձ. Նվազեցրեք աղմուկը շարժվող միջին ցուցանիշով
Փորձ. Նվազեցրեք աղմուկը շարժվող միջին ցուցանիշով

Շարժվող միջին (օրինակ ՝ երկարությամբ 8) վերցնում է վերջին 8 չափումները և միջինացնում դրանք: Եթե աղմուկը պատահական է, մենք հույս ունենք, որ այն միջինում կհասնի 0. -ի: Փորձը կատարեք ՝ sim_logging.experiment_showing_noise () - ով: Ելք մեկ գրաֆիկ:

Հնարավոր եզրակացություններ.

  • Շարժվող միջինը իսկապես վերացնում է աղմուկի մեծ մասը
  • Որքան երկար է շարժվող միջինը, այնքան ավելի շատ է աղմուկի նվազեցումը
  • Ավելի երկար շարժվող միջինը կարող է նվազեցնել և խեղաթյուրել ազդանշանը

Կոդը:

# ------------------------------------------------

def experim_with_moving_average (self): print "" "Experiment with MovingAverage Նայելով տարբեր MovingAverage- ին` երկարությունը փոխելով: Բոլորը ունեն նույն աղմուկը "" # ------------------ ------------------------------ self.start_plot (plot_title = "MovingAverage-Part 1/2: No A Moving Average") self.add_sensor_data (name = "ave len = 0", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () self.start_plot (plot_title = "MovingAverage-Part 2/2: Len 8 and 32") self.add_sensor_data (name = "ave len = 8", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 8, trigger_value = 0) self.add_sensor_data (name = "ave len = 32", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 32, trigger_value = 0) self.show_plot ()

Քայլ 7. Փորձ. Շարժվող միջին և ընտրանքային տոկոսադրույք

Փորձ. Շարժվող միջին և ընտրանքային տոկոսադրույք
Փորձ. Շարժվող միջին և ընտրանքային տոկոսադրույք

Այս փորձարկումում մենք համեմատում ենք չմշակված ազդանշանը աղմուկի և աղմուկը նվազեցնելու 2 տարբեր տատանումների հետ:

  1. Նմուշի միջին արագությունը և միջին վազքի միջին ցուցանիշը
  2. Բարձր նմուշի արագություն և բարձր երկարության միջին միջին

Գործարկեք ՝ sim_logging …… ելքը մեկ գրաֆիկ է: Կարծում եմ, պարզ է, որ թիվ 2 -ն ավելի լավ է կատարում աղմուկը նվազեցնելու համար, ուստի մենք կարող ենք եզրակացնել, որ.

Բարձր ընտրանքի արագությունը և բարձր երկարության միջին միջին ցուցանիշը լավ են

Բայց պետք է հաշվի առնել, որ դրա համար ծախս կա: Թիվ 2 -ը շատ ավելի շատ վերամշակում է պահանջում և հանգեցնում է շատ ավելի շատ տվյալների պահպանման: Արժեքը կարող է արժենալ կամ չարժեն: Հաջորդ փորձի ժամանակ մենք կավելացնենք ձգան ՝ սարք, որը կպակասեցնի պահվող տվյալների քանակը:

Կոդը:

def փորձ_շարժման_միջին_ և_նմուշային_արժեքով (ինք):

տպել "" "Փորձեք շարժվող միջին և ընտրանքային դրույքաչափի հետ, dt, գործարկել միջին" " # ---------------------------- -------------------- self.start_plot (plot_title = "Շարժվող միջին և նմուշի տոկոսադրույք") self.add_sensor_data (name = "dt =.1 ra = 0 trig = 0 ", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name =" dt =.1 ra = 10 trig = 0 ", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (name = "dt =.01 ra = 100 trig = 0", amplitude = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()

Քայլ 8: Փորձ. Մուտք գործեք ձգանով

Փորձ. Մուտք գործեք ձգանով
Փորձ. Մուտք գործեք ձգանով

Այս փորձի մեջ մենք ավելացնում ենք ձգան: Նախ, ի՞նչ նկատի ունեմ ձգան ասելով: Գործարկիչը տեխնիկա է, որտեղ մենք հավաքում ենք տվյալներ, բայց դրանք պահում ենք միայն այն բանից հետո, երբ որոշ փոփոխականներ զգալի չափով փոխվել են: Այս փորձերի ժամանակ ես ձգան դրեցի ժամանակի (x առանցքի) փոփոխականի վրա: Օգտագործելով ձգանը, ես կարող եմ վերցնել տվյալների մեծ քանակությունը արագ նմուշառումից և դրանք կրճատել ավելի խելամիտ տվյալների: Հատկապես օգտակար է ընտրանքի բարձր տեմպերով և երկարաժամկետ միջին ցուցանիշներով:

Ես վերցրել եմ #2 տողը վերջին փորձից, որը «լավ» էր և ավելացրեց ձգան: Գործարկեք ՝ sim_logging …… ելքը մեկ գրաֆիկ է, x տող:

Ինչ է կատարվում? Մենք ստանում ենք «լավ» սյուժե `ողջամիտ քանակությամբ տվյալներով (նույնը, ինչ #1): Ավելի բարձր վերամշակման համար որոշակի ծախսեր են կատարվել: Ընդհանուր առմամբ, այնուամենայնիվ, արդյունքները մոտավորապես նույնն են, ինչ #1 -ը `ընտրանքի ավելի ցածր ցուցանիշը` ավելի քիչ զտմամբ: Դուք կարող եք եզրակացնել.

  • Երկարաժամկետ միջին գործարկումը կարող է ապահովել աղմուկի լավ նվազեցում ողջամիտ տվյալների դեպքում:
  • Լրացուցիչ վերամշակումը չի կարող այդքան ավելի լավ արդյունքներ տալ և գալիս է ծախսերով:

Կոդը:

# ------------------------------------------------

def experim_with_trigger (self): print "" "Experiment with Triggering, dt, run average and trigger all to curbiced" " # ----------------------- ------------------------- self.start_plot (plot_title = "Միացնել 1/1-Գործարկել") self.add_sensor_data (name = "dt =.1 ra = 10, trig = 0 ", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (name =" dt =.01 ra = 100, trig =.1 ", amplitude = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

=

Քայլ 9. Փորձ. Գրանցվեք ձգանով - ավելի բարձր աղմուկ

Փորձ. Մուտք գործեք ձգանով - ավելի բարձր աղմուկ
Փորձ. Մուտք գործեք ձգանով - ավելի բարձր աղմուկ

Եկեք կատարենք նույն փորձը, ինչ վերջին քայլը և ուժեղացնենք աղմուկը: Գործարկեք ՝ sim_logging …… ելքը մեկ գրաֆիկ է, 2 տող:

Այժմ լրացուցիչ մշակումը ավելի արժանի է թվում: Այստեղ ողջամիտ եզրակացություն կարող է լինել.

Աղմուկի նվազեցման համար մշակման քանակի և տեսակի ընտրությունը կախված է ձեր ազդանշանից և աղմուկից:

Կոդը:

def Exper_with_trigger_louder_noise (self):

տպել "" "Ավելի մեծ աղմուկ, քան նախորդ փորձը" "self.start_plot (plot_title =" Փորձ փորձարկիչ-ավելի բարձր աղմուկով ") self.add_sensor_data (name ="… dt =.1 ra = 10 ", amplitude = 1., noise_amp =.5, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (name = "..dt =.01 ra = 100 tv =.1", amplitude = 1., noise_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

Քայլ 10: Կատարեք ձեր սեփական փորձերը

Կատարեք ձեր սեփական փորձերը
Կատարեք ձեր սեփական փորձերը

Այս պահին ես հույս ունեմ, որ դուք տեսնում եք, որ այս հրահանգի տեխնիկան կարող է օգտակար լինել տվյալների գրանցման համար, բայց դրանք նույնպես պետք է օգտագործվեն որոշակի մտորումով: Նրանց հետ փորձելը կարող է օգնել այդ գործընթացին:

Փորձերի վերաբերյալ որոշ դիտողություններ և բաներ, որոնց կարող եք ուշադրություն դարձնել.

  • Սինուսային ալիքները միակ հետաքրքիր ազդանշանային տեսակը չեն, փորձեք մյուսները, այլ ալիքներ կամ թեքահարթակներ կամ…..
  • Ես աղմուկի համար նորմալ բաշխում էի կիրառում, աղմուկն այնքան շատ է. դուք պետք է հաշվի առնեք ուրիշներին
  • Միջին վազքը պարզ, բայց ոչ միակ մեթոդն է աղմուկին նայելու համար

Նշում. Նկարների մուտքագրում Վիքիպեդիայից:

Քայլ 11: Օգտագործեք տեխնիկական միջոցներ ձեր մուտքագրման ծրագրաշարի մեջ

Օգտագործելով ձեր անտառահատումների ծրագրաշարի տեխնիկան
Օգտագործելով ձեր անտառահատումների ծրագրաշարի տեխնիկան

Իմ կոդը օբյեկտին կողմնորոշված է, և ընթացիկ միջին և ձգան մշակումը կարող է պարզապես պատճենվել ձեր Python միջավայրում և այնուհետև օգտագործվել: Օբյեկտներն են.

  • DataTrigger- ը data_trigger.py- ում
  • MovingAverage- ը move_average.py- ում

Իմ հիմնական օբյեկտը LoggingSim- ը simulate_logging.py- ում պետք է ձեզ լավ օրինակ տա, թե ինչպես օգտագործել այն: Եթե դուք օգտագործում եք այլ լեզու, կարող եք կարդալ իմ կոդը և կիրառել ձեր լեզվով:

Այս ծածկագիրը կարող է ձեր նախագծին տալ տվյալների ավելի լավ մուտքագրում, փորձեք այն:

Վերոնշյալ գրաֆիկը վերցված է russ_hensel- ի Graph Your Solar Power- ից, որն օգտագործում է նույն միջին հոսող օբյեկտը:

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