Բովանդակություն:
- Հեղինակ John Day [email protected].
- Public 2024-01-30 09:49.
- Վերջին փոփոխված 2025-06-01 06:09.
Նախագծի մշակումը բաղկացած էր «խաղի» հավաքումից, որի նպատակն էր պտտել գեներատորին միացված էրգոմետր հեծանիվը և լամպերի աշտարակը, որոնք ակտիվանում են շարժիչի արագության բարձրացման հետ մեկտեղ, ինչը տեղի է ունենում հեծանիվի ոտնակավորմանը համապատասխան: Համակարգը հիմնված էր 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: Արդյունքներ
Projectրագրի վերջնական հավաքումից հետո հաստատվեց, որ այն աշխատել է սպասվածի համաձայն. Ըստ այն արագության, որը օգտվողը կատարում է հեծանիվի վրա, ավելի շատ լարվածություն է ստեղծվում, և ավելի շատ լամպեր են վառվում:
Խորհուրդ ենք տալիս:
Անլար հեծանիվով տեղադրված Bluetooth բարձրախոս. 11 քայլ (նկարներով)
Անլար հեծանիվով տեղադրված Bluetooth բարձրախոս. Բարև ձեզ: Այս Instructable- ում ես ձեզ ցույց կտամ, թե ինչպես եմ կառուցել իմ անլար հեծանիվով տեղադրված Bluetooth բարձրախոսը: Պետք է ասեմ, որ սա գուցե մինչ այժմ իմ ամենասիրած նախագծերից մեկն է: Այն հիանալի տեսք ունի, ունի հիանալի ձայն և ունի այդ ֆուտուրիստական տեսքը: Ինչպես մի
Լարման մոնիտոր բարձր լարման մարտկոցների համար `3 քայլ (նկարներով)
Լարման մոնիտոր բարձր լարման մարտկոցների համար. Այս ուղեցույցում ես ձեզ կբացատրեմ, թե ինչպես եմ կառուցել մարտկոցի լարման մոնիտորը իմ էլեկտրական երկարատախտակի համար: Տեղադրեք այն ինչպես ցանկանում եք և միացրեք ընդամենը երկու լար ձեր մարտկոցին (Gnd և Vcc): Այս ուղեցույցը ենթադրում էր, որ ձեր մարտկոցի լարումը գերազանցում է 30 վոլտ, w
DC - DC լարման հետընթաց անջատիչ ռեժիմ Buck լարման փոխարկիչ (LM2576/LM2596). 4 քայլ
DC-DC Voltage Step Down Switch Mode Buck Voltage Converter (LM2576/LM2596). Բարձր արդյունավետ փոխարկիչ պատրաստելը դժվար աշխատանք է, և նույնիսկ փորձառու ինժեներները պահանջում են բազմաթիվ նմուշներ ՝ ճիշտը գալու համար: Արժեքի փոխարկիչ (հետընթաց փոխարկիչ) DC-DC հոսանքի փոխարկիչ է, որը նվազեցնում է լարումը (միաժամանակ բարձրացնելով
Կարգավորելի լարման DC սնուցման աղբյուր `օգտագործելով LM317 լարման կարգավորիչը` 10 քայլ
Կարգավորելի լարման DC սնուցման աղբյուր LM317 լարման կարգավորիչի միջոցով. Այս նախագծում ես նախագծել եմ պարզ կարգավորելի լարման DC սնուցման աղբյուր `օգտագործելով LM317 IC- ն` LM317 էլեկտրամատակարարման սխեմաներով: Քանի որ այս սխեման ունի ներկառուցված կամրջի ուղղիչ, այնպես որ մենք կարող ենք ուղղակիորեն միացնել մուտքի 220V/110V AC հոսանքին:
Հեծանիվով լուսավորված լույս. 8 քայլ (նկարներով)
Հեծանիվով առաջնորդվող լույս. Շատ անգամ: Ես գիշերը հեծանիվ էի օգտագործում, իսկ լույսեր չունեմ: Այսպիսով, ես որոշեցի միացում կազմել, որը թարթում է մի քանի բաղադրիչներով և նաև շատ հեշտ: Ես նաև ցանկանում եմ, որ տեղադրվելուց հետո լույսը անտեսանելի լինի, իսկ նստատեղի հետևի մասը առաջարկվի
