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

Էրգոմետր հեծանիվով լարման առաջացում. 9 քայլ (նկարներով)
Էրգոմետր հեծանիվով լարման առաջացում. 9 քայլ (նկարներով)

Video: Էրգոմետր հեծանիվով լարման առաջացում. 9 քայլ (նկարներով)

Video: Էրգոմետր հեծանիվով լարման առաջացում. 9 քայլ (նկարներով)
Video: ԷԼԵԿՏՐՈԵՐԳՈՄԵՏՐ - ԻՆՉՊԵ՞Ս ԱՐՏՍԱՆԵԼ ԷԼԵԿՏՐՈԵՐԳՈՄԵՏՐ: (ELECTROERGOMETER - HOW TO PRONOU 2024, Հուլիսի
Anonim
Էրգոմետր հեծանիվով լարման առաջացում
Էրգոմետր հեծանիվով լարման առաջացում
Էրգոմետր հեծանիվով լարման առաջացում
Էրգոմետր հեծանիվով լարման առաջացում
Էրգոմետր հեծանիվով լարման առաջացում
Էրգոմետր հեծանիվով լարման առաջացում

Նախագծի մշակումը բաղկացած էր «խաղի» հավաքումից, որի նպատակն էր պտտել գեներատորին միացված էրգոմետր հեծանիվը և լամպերի աշտարակը, որոնք ակտիվանում են շարժիչի արագության բարձրացման հետ մեկտեղ, ինչը տեղի է ունենում հեծանիվի ոտնակավորմանը համապատասխան: Համակարգը հիմնված էր Arduino Mega- ի անալոգային նավահանգստի ընթերցման վրա `ստեղծվող ակնթարթային լարման վրա, այնուհետև սերիական RX-TX հաղորդակցության միջոցով այս տվյալները Raspberry Pi 3-ին փոխանցելու և ռելեի միջոցով լամպերի հետագա ակտիվացման վրա:

Քայլ 1: Նյութեր

  • 1 ազնվամորի Pi 3;
  • 1 Arduino Mega 2560;
  • 1 ռելե վահան 10 ռելեով 12 Վ;
  • 10 շիկացման լամպեր 127 Վ;
  • 1 Էրգոմետր հեծանիվ;
  • 1 Էլեկտրական մեքենա (գեներատոր) 12 Վ;
  • Ռեզիստորներ (1x1kΩ, 2x10kΩ);
  • 1 էլեկտրոլիտիկ կոնդենսատոր 10 μF;
  • 1 enեներ դիոդ 5.3 Վ;
  • 1.5 մմ մալուխ (կարմիր, սև, շագանակագույն);
  • 1 MDF աշտարակ ՝ 10 լամպի աջակցությամբ:

Քայլ 2: Համակարգի արգելափակումների դիագրամ

Համակարգի արգելափակումների դիագրամ
Համակարգի արգելափակումների դիագրամ

Քայլ 3: Համակարգի շահագործում

Համակարգը հիմնված է կինետիկ էներգիայի փոխակերպման վրա, որը ստեղծվում է հեծանիվը հեծանիվ վարելիս էլեկտրական էներգիայի մեջ, որը պատասխանատու է ռելեների ակտիվացման համար, որոնք լամպերը կմիացնեն:

Գեներատորի կողմից առաջացած լարումը կարդացվում է Arduino- ի անալոգային քորոցով և RX-TX- ով ուղարկվում է Raspberry Pi- ին: Ռելեների ակտիվացումը համաչափ է գեներացված լարման հետ. Որքան բարձր է լարումը, այնքան ավելի շատ ռելեներ են գործարկվելու, և ավելի շատ լամպեր են լուսավորվելու:

Քայլ 4: Մեխանիկական ասպեկտներ

Մեխանիկայի ասպեկտներ
Մեխանիկայի ասպեկտներ

DC գեներատորը հեծանիվին մեխանիկորեն միացնելու համար գոտիների համակարգը պետք է փոխարինվեր սովորական հեծանիվների վրա օգտագործվող համակարգով (որը բաղկացած էր թագից, շղթայից և պտուտակից): Հեծանիվի շրջանակին եռակցված էր մետաղյա ափսե, որպեսզի շարժիչը ամրացվեր պտուտակներով: Դրանից հետո պտուտակը եռակցվեց գեներատորի լիսեռին, որպեսզի շղթան տեղադրվի ՝ ոտնակ համակարգը փոխկապակցելով գեներատորի հետ:

Քայլ 5: Լարման ընթերցում

Arduino- ի միջոցով գեներատորի լարումը կարդալու համար անհրաժեշտ է էլեկտրական մեքենայի դրական բևեռը միացնել վերահսկիչի A0 պին և բացասական բևեռը `GND- ին` խուսափելու համար, որ գեներատորի առավելագույն լարումը ավելի մեծ է, քան 5 Վ Կառուցվել և կարգավորիչի և գեներատորի միջև միացվել է Arduino կապում, 10 μF կոնդենսատոր օգտագործող լարման զտիչ, 1 կՕմ դիմադրություն և 5,3 Վ Zener դիոդ: Arduino- ում տեղադրված որոնվածը շատ պարզ է և բաղկացած է միայն անալոգային նավահանգստի ընթերցումից, բազմապատկած արժեքը կարդալ հաստատուն 0,0048828125 (5/1024, այսինքն ՝ Arduino- ի GPIO լարումը բաժանած անալոգային պորտի բիթերի քանակի վրա) և ուղարկելով սերիայի համար փոփոխական - կոդը հասանելի կլինի հոդվածում:

Raspberry Pi- ում RX-TX հաղորդակցության միացման կարգը մի փոքր ավելի բարդ է, և դուք պետք է հետևեք հղումում նկարագրված ընթացակարգին: Հակիրճ, դուք պետք է խմբագրեք «inittab» անունով ֆայլը -գտնվում է «/etc/inittab» -ում, -մեկնաբանեք «T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100» տողը (եթե ֆայլը չի Raspberry OS- ում հիմնված, դուք պետք է մուտքագրեք «sudo leafpad /boot/config.txt» հրամանը և ֆայլի վերջում կցեք «enable_uart = 1» տողը): Երբ դա արվի, դուք պետք է վերաբացեք LX տերմինալը և անջատեք սերիալը «sudo systemctl stop [email protected]» և «sudo systemctl անջատել [email protected]» հրամաններով: Դրանից հետո դուք պետք է կատարեք «sudo leafpad /boot/cmdline.txt» հրամանը, ջնջեք «console = serial0, 115200» տողը, պահպանեք ֆայլը և վերագործարկեք սարքը: Որպեսզի RX-TX հաղորդակցությունը հնարավոր լինի, Սերիայի գրադարանը պետք է տեղադրվի Raspberry Pi- ի վրա «sudo apt-get install -f python-serial» հրամանով և գրադարանը ներմուծի ծածկագրի մեջ ՝ տեղադրելով «ներմուծման սերիա» տողը:, սերիալի սկզբնավորումը տեղադրելով «ser = serial. Serial (" / dev / ttyS0 ", 9600)" տողը և Arduino- ի ուղարկած լարման ընթերցումը `օգտագործելով" ser.readline () "հրահանգը` օգտագործված ամբողջական կոդը ազնվամորի մեջ հասանելի կդառնա հոդվածի վերջում:

Վերոնշյալ նկարագրված ընթացակարգից հետո ընթերցման և ուղարկման լարման քայլն ավարտված է:

Քայլ 6: Arduino ծրագրավորում

Ինչպես նախկինում նշվել էր, հեծանիվ վարելիս առաջացած լարման ընթերցման համար պատասխանատու կոդը շատ պարզ է:

Նախ, անհրաժեշտ է ընտրել A0 կապը որպես լարման ընթերցման պատասխանատու:

«Void setup ()» գործառույթում դուք պետք է «PINMode (sensor, INPUT)» հրամանով INPUT- ը սահմանեք INPUT և ընտրեք սերիական նավահանգստի փոխանցման արագությունը ՝ օգտագործելով «Serial.begin (9600)» հրամանը:

«Void loop ()» - ում «Serial.flush ()» գործառույթը օգտագործվում է բուֆերը մաքրելու համար ամեն անգամ, երբ այն դադարում է սերիական միջոցով տեղեկատվության ուղարկումը. լարման ընթերցումը կատարվում է «analogRead (ցուցիչ)» գործառույթով `հիշելով, որ անհրաժեշտ է անալոգային նավահանգստի կողմից ընթերցված արժեքը փոխակերպել վոլտի - հոդվածի« ընթերցման լարման »բաժնում մեջբերված գործընթաց:

Բացի այդ, «void loop ()» գործառույթում անհրաժեշտ է x փոփոխականը float- ից փոխակերպել տողի, քանի որ սա փոփոխականը RX-TX- ի միջոցով ուղարկելու միակ միջոցն է: Օղակի գործառույթի վերջին քայլը սերիայի պորտում տողը տպելն է, որպեսզի այն ուղարկվի ազնվամորի - դրա համար պետք է օգտագործել «Serial.println (y)» գործառույթը: «Հետաձգում (100)» տողը ավելացվել է ծածկագրին միայն այնպես, որ փոփոխականն ուղարկվի 100 ms ընդմիջումներով.

volt_read.ino

բոց սենսոր = A0;
voidsetup () {
pinMode (տվիչ, Մուտք);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (տվիչ)*0.0048828125*16.67;
Տող y = "";
y+= x;
Serial.println (y);
ուշացում (100);
}

դիտել rawvoltage_read.ino- ն ՝ GitHub- ի կողմից հյուրընկալված

Քայլ 7: Raspberry Pi 3 mingրագրավորում

lamp_bike.py

ներմուծել os #ներմուծել os գրադարանը (օգտագործվում է անհրաժեշտության դեպքում էկրանը մաքրելու համար)
ներմուծել RPi. GPIOas gpio #ներմուծման գրադարանը, որն օգտագործվում էր Raspnerry- ի GPIO- ն վերահսկելու համար
ներմուծել սերիական #ներմուծման գրադարան, որը պատասխանատու է սերիական հաղորդակցության համար
ներմուծել ժամանակը #ներմուծել գրադարան, որը հնարավորություն է տալիս օգտագործել հետաձգման գործառույթը
ներմուծել ենթամշակման #ներմուծման գրադարան, որը պատասխանատու է երգերը նվագելու համար
#սկսել սերիալ
ser = serial. Serial ("/dev/ttyS0", 9600) #սահմանել սարքի անունը և բաուդ արագությունը
#պարզ էկրան
clear = lambda: os.system («պարզ»)
#սահմանել ռելեներ կառավարման համար
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #լամպ 10
gpio.setup (12, gpio. OUT) #լամպ 9
gpio.setup (13, gpio. OUT) #լամպ 8
gpio.setup (15, gpio. OUT) #լամպ 7
gpio.setup (16, gpio. OUT) #լամպ 6
gpio.setup (18, gpio. OUT) #լամպ 5
gpio.setup (19, gpio. OUT) #լամպ 4
gpio.setup (21, gpio. OUT) #լամպ 3
gpio.setup (22, gpio. OUT) #լամպ 2
gpio.setup (23, gpio. OUT) #լամպ 1
#սկսել գրառումները
անուն = ["Չկա"]*10
լարման = [0.00]*10
#կարդալ գրառումների ֆայլը
f = բաց («գրառումներ», «r»)
for i inrange (10). #10 լավագույն 10 միավորները հայտնվում են ցուցակում
անուն = f.readline ()
անուն = անուն [: len (անուն )-1]
լարման = f.readline ()
լարման = բոց (լարումը [: լեն (լարումը )-1])
զ. փակել ()
պարզ ()
#սահմանեք առավելագույն լարումը
առավելագույն = 50,00
#անջատեք լամպերը
i inrange- ի համար (11, 24, 1):
եթե i! = 14and i! = 17and i! = 20:
gpio.output (i, gpio. HIGH) #սահմանել դեպի բարձր, ռելեներ անջատված են
#սկսել
իսկ ճշմարիտ:
#սկզբնական էկրան
տպել «Գրառումներ. / n»
i inrange- ի համար (10):
տպագիր անուն , ":", լարումը , "V"
current_name = raw_input («Սկսելու համար գրիր քո անունը»)
պարզ ()
#Փոխել առավելագույն արժեքը
եթե ընթացիկ_անունը == "առավելագույն":
max = մուտքագրում («Գրեք առավելագույն լարումը. (2 տասնորդական նիշ)»)
պարզ ()
այլ:
#սկսել նախազգուշացում
i inrange- ի համար (11, 24, 1). #հանգույցը սկսվում է PIN 11 -ով և դադարում է PIN 24 -ում
եթե i! = 14 և i! = 17 և i! = 20: #PIN 14 և 20 -ը GND կապում են, իսկ 20 -ը `3,3 V պին
gpio.output (i, gpio. LOW) #միացրեք լամպերը
ժամանակ. քուն (0.5)
k = 10
i inrange- ի համար (23, 10, -1):
պարզ ()
եթե i! = 14 և i! = 17 և i! = 20:
ենթապրոցես. Բաց (['' aplay ',' Audios/'+str (k)+'. wav '])
ժամանակ. քուն (0.03)
պարզ ()
տպել "Պատրաստվիր! / n", կ
ժամանակ. քուն (1)
k- = 1
gpio.output (i, gpio. HIGH) #անջատեք լամպերը (մեկ առ մեկ)
subprocess. Popen (['' aplay ',' Audios/go.wav ']) #նվագում է մեկնարկային երաժշտությունը
ժամանակ. քուն (0.03)
պարզ ()
տպել "GO!"
ժամանակ. քուն (1)
պարզ ()
#լարման ընթերցում
ընթացիկ_լարում = 0.00
լարման 1 = 0.00
i inrange- ի համար (200):
ser.flushInput ()
նախորդ = լարման 1
volt1 = float (ser.readline ()) #հավաքում է Arduino- ի տվյալները, որոնք փոխանցվում են RX-TX- ով
պարզ ()
տպման լարումը 1, «V»
եթե լարման 1> ընթացիկ_լարում:
ընթացիկ_լարում = լարում 1
# կախված առաջացած լարումից, ավելի շատ լամպեր են լուսավորվում:
եթե լարումը 1 <max/10:
i inrange- ի համար (11, 24, 1):
եթե i! = 14 և i! = 17 և i! = 20:
gpio.output (i, gpio. HIGH)
եթե լարման 1> = առավելագույն/10:
gpio.output (11, gpio. LOW)
i inrange- ի համար (12, 24, 1):
եթե i! = 14 և i! = 17 և i! = 20:
gpio.output (i, gpio. HIGH)
եթե լարումը 1> = 2*max/10:
i inrange- ի համար (11, 13, 1):
gpio.output (i, gpio. LOW)
i inrange- ի համար (13, 24, 1):
եթե i! = 14and i! = 17and i! = 20:
gpio.output (i, gpio. HIGH)
եթե լարումը 1> = 3*max/10:
i inrange- ի համար (11, 14, 1):
gpio.output (i, gpio. LOW)
i inrange- ի համար (15, 24, 1):
եթե ես! = 17 և ես! = 20:
gpio.output (i, gpio. HIGH)
եթե լարումը 1> = 4*max/10:
i inrange- ի համար (11, 16, 1):
եթե ես! = 14:
gpio.output (i, gpio. LOW)
i inrange- ի համար (16, 24, 1):
եթե ես! = 17 և ես! = 20:
gpio.output (i, gpio. HIGH)
եթե լարման 1> = 5*max/10:
i inrange- ի համար (11, 17, 1):
եթե ես! = 14:
gpio.output (i, gpio. LOW)
i inrange- ի համար (18, 24, 1):
եթե ես! = 20:
gpio.output (i, gpio. HIGH)
եթե լարման 1> = 6*max/10:
i inrange- ի համար (11, 19, 1):
եթե ես! = 14 և ես! = 17:
gpio.output (i, gpio. LOW)
i inrange- ի համար (19, 24, 1):
եթե ես! = 20:
gpio.output (i, gpio. HIGH)
եթե լարումը 1> = 7*max/10:
i inrange- ի համար (11, 20, 1):
եթե ես! = 14 և ես! = 17:
gpio.output (i, gpio. LOW)
i inrange- ի համար (21, 24, 1):
gpio.output (i, gpio. HIGH)
եթե լարման 1> = 8*max/10:
i inrange- ի համար (11, 22, 1):
եթե i! = 14and i! = 17and i! = 20:
gpio.output (i, gpio. LOW)
i inrange- ի համար (22, 24, 1):
gpio.output (i, gpio. HIGH)
եթե լարման 1> = 9*max/10:
i inrange- ի համար (11, 23, 1):
եթե i! = 14and i! = 17and i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
եթե լարման 1> = առավելագույն:
i inrange- ի համար (11, 24, 1):
եթե i! = 14 և i! = 17 և i! = 20:
gpio.output (i, gpio. LOW)

եթե լարումը 1

ընդմիջում
#անջատեք լամպերը
i inrange- ի համար (11, 24, 1):
եթե i! = 14and i! = 17and i! = 20:
gpio.output (i, gpio. HIGH)
#հաղթական երաժշտություն
եթե current_voltage> = max:
ենթապրոցես. Բաց (['' aplay ',' Audios/rocky.wav '])
ժամանակ. քուն (0.03)
պարզ ()
տպել «ՇԱՏ ԼԱՎ, ՀԱ WԹԵ!»% (u '\u00c9', u '\u00ca', u '\u00c2')
i inrange- ի համար (10):
j inrange- ի համար (11, 24, 1):
եթե j! = 14and j! = 17and j! = 20:
gpio.output (j, gpio. LOW)
ժամանակ. քուն (0.05)
j inrange- ի համար (11, 24, 1):
եթե j! = 14and j! = 17and j! = 20:
gpio.output (j, gpio. HIGH)
ժամանակ. քուն (0.05)
ժամանակ. քուն (0.5)
ենթապրոցես. Բաց (('' aplay ',' Audios/end.wav '])
ժամանակ. քուն (0.03)
պարզ ()
տպել «Ավարտել խաղը … / n», ընթացիկ_լարման, «V»
#ձայնագրություններ
ժամանակ. քուն (1.2)
հասել է = 0 -ի
i inrange- ի համար (10):
եթե current_voltage> լարման :
հասել է+= 1 -ի
temp_voltage = լարման
լարման = ընթացիկ_լարման
ընթացիկ_լարում = ժամանակավոր_լարում
temp_name = անունը
անուն = ընթացիկ_անուն
ընթացիկ_անուն = տեմպ_անուն
եթե հասել է> 0:
ենթապրոցես. Բաց (('' aplay ',' Audios/record.wav '])
ժամանակ. քուն (0.03)
պարզ ()
f = բաց («գրառումներ», «w»)
i inrange- ի համար (10):
զ. գրել (անունը )
զ. գրել ("\ n")
զ. գրել (փող (լարումը ))
զ. գրել ("\ n")
զ. փակել ()
պարզ ()

դիտել rawlamps_bike.py- ն ՝ GitHub- ի կողմից հյուրընկալված

Քայլ 8: Էլեկտրական սխեմա

Էլեկտրական սխեման
Էլեկտրական սխեման
Էլեկտրական սխեման
Էլեկտրական սխեման
Էլեկտրական սխեման
Էլեկտրական սխեման

Arduino- ն և Raspberry Pi 3 – ը սնուցվում են 5 Վ աղբյուրից ՝ 3 Ա հոսանքով:

Էլեկտրական միացումն սկսվում է DC գեներատորի (հեծանիվին զուգակցված) Arduino- ին միանալով ՝ 5.3V Zener դիոդից կազմված լարման զտիչով, 10μF կոնդենսատորով և 1kΩ ռեզիստորով - ֆիլտրի մուտքը միացված է գեներատորի տերմինալներ և ելքը միացված է A0 նավահանգստին և վերահսկիչի GND- ին:

Arduino- ն միացված է Ազնվամորիին RX-TX հաղորդակցության միջոցով-կատարվում է դիմադրողական բաժանարարի միջոցով `օգտագործելով 10kΩ ռեզիստորներ (պահանջվում է վերահսկիչների նավահանգիստներում, որոնք գործում են տարբեր լարման դեպքում):

Raspberry Pi- ի GPIO- ները միացված են լամպերը միացնելու համար պատասխանատու ռելեներ: Բոլոր ռելեների «COM» - ը փոխկապակցված էր և միացված էր փուլին (AC ցանց), իսկ յուրաքանչյուր ռելեի «N. O» (սովորաբար բաց) միացված էր յուրաքանչյուր լամպին, իսկ AC ցանցի չեզոքը փոխկապակցված էր բոլոր լամպերի հետ: Այսպիսով, երբ յուրաքանչյուր ռելեի համար պատասխանատու GPIO- ն ակտիվանում է, ռելեն անցնում է AC ցանցի փուլին և միացնում համապատասխան լամպը:

Քայլ 9: Արդյունքներ

Image
Image

Projectրագրի վերջնական հավաքումից հետո հաստատվեց, որ այն աշխատել է սպասվածի համաձայն. Ըստ այն արագության, որը օգտվողը կատարում է հեծանիվի վրա, ավելի շատ լարվածություն է ստեղծվում, և ավելի շատ լամպեր են վառվում:

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