Turinys:
- 1 žingsnis: medžiagos:
- 2 žingsnis: Sistemos blokų schema:
- 3 žingsnis: Sistemos veikimas:
- 4 žingsnis: mechanikos aspektai
- 5 žingsnis: įtampos nuskaitymas:
- 6 žingsnis: „Arduino“programavimas:
- 7 žingsnis: „Raspberry Pi 3“programavimas:
- 8 žingsnis: elektros schema:
- 9 žingsnis: Rezultatai:
Video: Įtampos generavimas naudojant dviratį ergometrą: 9 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Projektas buvo sudarytas iš „žaidimo“, kurio tikslas - minti ergometro dviratį, prijungtą prie generatoriaus, ir lempų bokštą, kuris įjungiamas didėjant variklio sūkiams - tai daroma dviračio pedalu. Sistema buvo pagrįsta momentinės įtampos nuskaitymu per analoginį „Arduino Mega“prievadą, tada perduodant šiuos duomenis į „Raspberry Pi 3“per serijinį RX-TX ryšį ir vėliau įjungiant lempas per relę.
1 žingsnis: medžiagos:
- 1 „Raspberry Pi 3“;
- 1 „Arduino Mega 2560“;
- 1 relės skydas su 10 relių 12 V;
- 10 kaitrinių lempų 127 V;
- 1 dviratis „Ergometras“;
- 1 elektros mašina (generatorius) 12 V;
- Rezistoriai (1x1kΩ, 2x10kΩ);
- 1 elektrolitinis kondensatorius 10 µF;
- 1 „Zener“diodas 5,3 V;
- 1,5 mm kabelis (raudonas, juodas, rudas);
- 1 MDF bokštas su 10 lempų atrama.
2 žingsnis: Sistemos blokų schema:
3 žingsnis: Sistemos veikimas:
Sistema pagrįsta kinetinės energijos, gautos važiuojant dviračiu, transformavimu į elektros energiją, atsakingą už relių, kurios įjungs lempas, įjungimą.
Generatoriaus sukurta įtampa nuskaitoma analoginiu „Arduino“kaiščiu ir siunčiama per RX-TX į „Raspberry Pi“. Relių įjungimas yra proporcingas generuojamai įtampai - kuo didesnė įtampa, tuo daugiau relių suveiks ir daugiau lempučių užsidegs.
4 žingsnis: mechanikos aspektai
Norint mechaniškai prijungti nuolatinės srovės generatorių prie dviračio, diržų sistemą reikėjo pakeisti įprastais dviračiais (sudaryta iš karūnos, grandinės ir krumpliaračio). Prie dviračio rėmo buvo suvirinta metalinė plokštė, kad variklį būtų galima pritvirtinti varžtais. Po to krumpliaratis buvo suvirintas prie generatoriaus veleno, kad būtų galima uždėti grandinę, sujungiant pedalų sistemą su generatoriumi.
5 žingsnis: įtampos nuskaitymas:
Norint nuskaityti generatoriaus įtampą naudojant „Arduino“, būtina prijungti teigiamą elektros mašinos polių prie valdiklio A0 kaiščio, o neigiamą - prie GND - kad maksimali generatoriaus įtampa nebūtų didesnė nei 5 V Tarp valdiklio ir generatoriaus buvo sukonstruoti „Arduino“kaiščiai, įtampos filtras, naudojant 10 µF kondensatorių, 1 kΩ rezistorius ir 5,3 V „Zener“diodas. Į „Arduino“įkelta programinė įranga yra labai paprasta ir susideda tik iš analoginio prievado nuskaitymo, perskaitytą vertę padauginkite iš konstantos 0,0048828125 (5/1024, tai yra „Arduino“GPIO įtampa padalinta iš analoginio prievado bitų skaičiaus) ir kintamasis prie serijos - kodas bus pateiktas straipsnyje.
RX-TX ryšio įgalinimo „Raspberry Pi“procedūra yra šiek tiek sudėtingesnė, todėl turite laikytis nuorodoje aprašytos procedūros. Trumpai tariant, turite redaguoti failą pavadinimu „inittab“, esantį „/etc/inittab“-, pakomentuokite eilutę „T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100“(jei failas nėra „Raspberry“OS, turite įvesti komandą: „sudo leafpad /boot/config.txt“ir failo pabaigoje pridėti eilutę „enable_uart = 1“). Kai tai bus padaryta, turite iš naujo atidaryti LX terminalą ir išjungti seriją naudodami komandas „sudo systemctl stop [email protected]“ir „sudo systemctl disable [email protected]“. Po to turite vykdyti komandą „sudo leafpad /boot/cmdline.txt“, ištrinti eilutę „console = serial0, 115200“, išsaugoti failą ir iš naujo paleisti įrenginį. Kad RX-TX ryšys būtų įmanomas, serijinė biblioteka turi būti įdiegta „Raspberry Pi“su komanda „sudo apt-get install -f python-serial“ir importuoti biblioteką į kodą įterpiant eilutę „importuoti seriją“, inicijuodami seriją įterpdami eilutę „ser = serial. Serial („ / dev / ttyS0 “, 9600)“ir „Arduino“siunčiamos įtampos nuskaitymą naudodami komandą „ser.readline ()“- visas naudojamas kodas Raspberry bus paskelbta straipsnio pabaigoje.
Atlikus aukščiau aprašytą procedūrą, skaitymo ir siuntimo įtampos žingsnis yra baigtas.
6 žingsnis: „Arduino“programavimas:
Kaip minėta anksčiau, kodas, atsakingas už įtampos, sukurtos važiuojant dviračiu, nuskaitymą, yra labai paprastas.
Pirma, būtina pasirinkti A0 kaištį, atsakingą už įtampos nuskaitymą.
Funkcijoje „void setup ()“turite nustatyti A0 kaištį į INPUT su komanda „pinMode (sensor, INPUT)“ir pasirinkti serijinio prievado perdavimo greitį naudodami komandą „Serial.begin (9600)“.
„Void loop ()“funkcija „Serial.flush ()“naudojama buferiui išvalyti kiekvieną kartą, kai jis nutraukia informacijos siuntimą serijiniu būdu; įtampos rodmenis atlieka funkcija "analogRead (sensor)" - prisimenant, kad būtina analoginio prievado nuskaitytą vertę paversti voltais - procesas, nurodytas straipsnio skyriuje "skaitymo įtampa".
Be to, naudojant funkciją „void loop ()“, būtina kintamąjį x paversti iš plūdės į eilutę, nes tai yra vienintelis būdas siųsti kintamąjį per RX-TX. Paskutinis ciklo funkcijos žingsnis yra spausdinti eilutę nuosekliajame prievade, kad ją būtų galima nusiųsti į Raspberry - tam reikia naudoti funkciją „Serial.println (y)“. Eilutė „uždelsimas (100)“buvo pridėta prie kodo tik tam, kad kintamasis būtų siunčiamas 100 ms intervalais.
įtampos_skaita.ino
plūdės jutiklis = A0; |
voidsetup () { |
pinMode (jutiklis, Įvestis); |
Serial.begin (9600); |
} |
voidloop () { |
Serial.flush (); |
plūdė x = analogRead (jutiklis)*0.0048828125*16.67; |
Eilutė y = ""; |
y+= x; |
Serial.println (y); |
vėlavimas (100); |
} |
Peržiūrėkite rawvoltage_read.ino, kurį su „❤“priglobia „GitHub“
7 žingsnis: „Raspberry Pi 3“programavimas:
lamp_bike.py
importuoti OS #importuoti OS biblioteką (naudojama, jei reikia, išvalyti ekraną) |
importuoti RPi. GPIO „gpio #import“biblioteka, naudojama „Raspnerry“GPIO valdymui |
importuoti serijos #importo biblioteką, atsakingą už serijinį ryšį |
importavimo laikas #import biblioteka, leidžianti naudoti atidėjimo funkciją |
importuoti papildomą procesą #import biblioteka, atsakinga už dainų grojimą |
#pradėti serialą |
ser = serial. Serial ("/dev/ttyS0", 9600) #define the device name and the bit rate |
#aiškus ekranas |
aiškus = lambda: os.system ('aiškus') |
#nustatykite kaiščius relės valdymui |
gpio.setmode (gpio. BOARD) |
gpio.setup (11, gpio. OUT) #lemputė 10 |
gpio.setup (12, gpio. OUT) #lemputė 9 |
gpio.setup (13, gpio. OUT) #lemputė 8 |
gpio.setup (15, gpio. OUT) #lemputė 7 |
gpio.setup (16, gpio. OUT) #lemputė 6 |
gpio.setup (18, gpio. OUT) #lemputė 5 |
gpio.setup (19, gpio. OUT) #lempa 4 |
gpio.setup (21, gpio. OUT) #lemputė 3 |
gpio.setup (22, gpio. OUT) #lamp 2 |
gpio.setup (23, gpio. OUT) #lamp 1 |
#pradėti įrašus |
vardas = ["Nėra"]*10 |
įtampa = [0.00]*10 |
#skaityti įrašų failą |
f = atviras („įrašai“, „r“) |
„i inrange“(10): #10 geriausių balų rodomi sąraše |
vardas = f.readline () |
vardas = vardas [: len (vardas )-1] |
įtampa = f.readline () |
įtampa = plūdė (įtampa [: len (įtampa )-1]) |
f. uždaryti () |
aišku () |
#nustatykite maksimalią įtampą |
maks. = 50,00 |
#išjunkite lempas |
nes aš inrange (11, 24, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. HIGH) #set į HIGH, relės išjungtos |
#pradėk |
o tiesa: |
#pradinis ekranas |
spausdinti „Įrašai: / n“ |
nes man negerai (10): |
spausdinimo pavadinimas , ":", įtampa , "V" |
current_name = raw_input ("Norėdami pradėti, parašykite savo vardą:") |
aišku () |
#Keisti maksimalią vertę |
jei dabartinis_pavadinimas == "max": |
max = įvestis ("Įrašykite maksimalią įtampą: (2 skaitmenys po kablelio)") |
aišku () |
Kitas: |
#pradėti įspėti |
„i inrange“(11, 24, 1): #ciklas prasideda PIN 11 ir baigiasi 24 PIN kodu |
jei i! = 14 ir i! = 17 ir i! = 20: #PIN 14 ir 20 yra GND kaiščiai, o 20 yra 3,3 V kaištis |
gpio.output (i, gpio. LOW) #įjunkite lempas |
laikas. miegas (0,5) |
k = 10 |
jei aš inrange (23, 10, -1): |
aišku () |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
subprocess. Popen (['aplay', 'Audio/'+str (k)+'. wav']) |
laikas. miegas (0,03) |
aišku () |
spausdinti „Pasiruošk! / n“, k |
laikas. miegas (1) |
k- = 1 |
gpio.output (i, gpio. HIGH) #išjunkite lempas (po vieną) |
subprocess. Popen (['aplay', 'Audios/go.wav']) #groja pradinę muziką |
laikas miegoti (0,03) |
aišku () |
atspausdinti "GO!" |
laikas. miegas (1) |
aišku () |
#įtampos skaitymas |
srovės įtampa = 0,00 |
įtampa1 = 0,00 |
man inrange (200): |
ser.flushInput () |
ankstesnis = įtampa1 |
įtampa1 = plūdė (ser.readline ()) #renka „Arduino“duomenis, perduotus RX-TX |
aišku () |
spausdinimo įtampa1, "V" |
jei įtampa1> srovės įtampa: |
srovės įtampa = įtampa1 |
# priklausomai nuo sukurtos įtampos, įsižiebia daugiau lempų. |
jei įtampa1 <max/10: |
nes aš inrange (11, 24, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = max/10: |
gpio.output (11, gpio. LOW) |
nes aš inrange (12, 24, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 2*max/10: |
nes aš inrange (11, 13, 1): |
gpio.output (i, gpio. LOW) |
nes aš inrange (13, 24, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 3*max/10: |
nes aš inrange (11, 14, 1): |
gpio.output (i, gpio. LOW) |
nes aš inrange (15, 24, 1): |
jei aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 4*max/10: |
nes aš inrange (11, 16, 1): |
jei aš! = 14: |
gpio.output (i, gpio. LOW) |
nes aš inrange (16, 24, 1): |
jei aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 5*max/10: |
nes aš inrange (11, 17, 1): |
jei aš! = 14: |
gpio.output (i, gpio. LOW) |
nes aš inrange (18, 24, 1): |
jei aš! = 20: |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 6*max/10: |
nes aš inrange (11, 19, 1): |
jei aš! = 14 ir aš! = 17: |
gpio.output (i, gpio. LOW) |
nes aš inrange (19, 24, 1): |
jei aš! = 20: |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 7*max/10: |
nes aš inrange (11, 20, 1): |
jei aš! = 14 ir aš! = 17: |
gpio.output (i, gpio. LOW) |
nes aš inrange (21, 24, 1): |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 8*max/10: |
nes aš inrange (11, 22, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. LOW) |
nes aš inrange (22, 24, 1): |
gpio.output (i, gpio. HIGH) |
jei įtampa1> = 9*max/10: |
nes aš inrange (11, 23, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. LOW) |
gpio.output (23, gpio. HIGH) |
jei įtampa1> = max: |
nes aš inrange (11, 24, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. LOW) |
jei įtampa1 |
pertrauka |
#išjunkite lempas |
nes aš inrange (11, 24, 1): |
jei aš! = 14 ir aš! = 17 ir aš! = 20: |
gpio.output (i, gpio. HIGH) |
#pergalinga muzika |
jei srovės įtampa> = max: |
subprocess. Popen (['aplay', 'Audios/rocky.wav']) |
laikas miegoti (0,03) |
aišku () |
spausdinti „LABAI GERAI, LAIMĖTE!“% (u '\u00c9', u '\u00ca', u '\u00c2') |
nes man negerai (10): |
„j inrange“(11, 24, 1): |
jei j! = 14 ir j! = 17 ir j! = 20: |
gpio.output (j, gpio. LOW) |
laikas miegoti (0,05) |
„j inrange“(11, 24, 1): |
jei j! = 14 ir j! = 17 ir j! = 20: |
gpio.output (j, gpio. HIGH) |
laikas miegoti (0,05) |
laikas. miegas (0,5) |
subprocess. Popen (['aplay', 'Audio/end.wav']) |
laikas miegoti (0,03) |
aišku () |
spausdinti „Baigti žaidimą… / n“, srovės įtampa, „V“ |
#įrašai |
laikas. miegas (1,2) |
pasiekė = 0 |
nes man negerai (10): |
jei srovės įtampa> įtampa : |
pasiekė+= 1 |
temp_voltage = įtampa |
įtampa = srovės įtampa |
srovės įtampa = temp_voltage |
temp_name = vardas |
vardas = dabartinis_vardas |
dabartinis_pavadinimas = laikinas_pavadinimas |
jei pasiekta> 0: |
subprocess. Popen (['aplay', 'Audio/record.wav']) |
laikas miegoti (0,03) |
aišku () |
f = atviras („įrašai“, „w“) |
nes man negerai (10): |
f. rašyti (vardas ) |
f.write ("\ n") |
f. rašyti (str (įtampa )) |
f.write ("\ n") |
f. uždaryti () |
aišku () |
peržiūrėkite rawlamps_bike.py, kurį su „❤“priglobia „GitHub“
8 žingsnis: elektros schema:
„Arduino“ir „Raspberry Pi 3“maitina 5 V šaltinis su 3A srove.
Elektros grandinė prasideda nuo nuolatinės srovės generatoriaus (prijungto prie dviračio) prijungimo prie „Arduino“per įtampos filtrą, sudarytą iš 5,3 V „Zener“diodo, 10 μF kondensatoriaus ir 1 kΩ rezistoriaus - filtro įvestis prijungta prie generatoriaus gnybtai, o išėjimas yra prijungtas prie valdiklio A0 prievado ir GND.
„Arduino“yra prijungtas prie „Raspberry“per RX-TX ryšį-atliekamas per varžinį skirstytuvą, naudojant 10 kΩ rezistorius (to reikalauja skirtingos įtampos valdiklių prievadai).
„Raspberry Pi“GPIO yra prijungti prie relių, atsakingų už lempų įjungimą. Visų relių „COM“buvo sujungtos ir prijungtos prie fazės (kintamosios srovės tinklo), o kiekvienos relės „N. O“(paprastai atidarytas) buvo prijungtas prie kiekvienos lempos, o kintamosios srovės tinklo neutralė buvo sujungta su visomis lempomis. Taigi, kai suaktyvinamas už kiekvieną relę atsakingas GPIO, relė perjungiama į kintamosios srovės tinklo fazę ir įjungiama atitinkama lemputė.
9 žingsnis: Rezultatai:
Po galutinio projekto surinkimo buvo patikrinta, ar jis veikia taip, kaip tikėtasi - atsižvelgiant į greitį, kurį vartotojas myli ant dviračio, sukuriama daugiau įtampos ir užsidega daugiau lempų.
Rekomenduojamas:
Aukštos įtampos baterijų įtampos monitorius: 3 žingsniai (su paveikslėliais)
Aukštos įtampos akumuliatorių įtampos monitorius: Šiame vadove aš jums paaiškinsiu, kaip aš sukūriau savo akumuliatoriaus įtampos monitorių savo elektriniam longboardui. Sumontuokite jį kaip norite ir prijunkite tik du laidus prie akumuliatoriaus (Gnd ir Vcc). Šiame vadove daroma prielaida, kad jūsų akumuliatoriaus įtampa viršija 30 voltų
DC - nuolatinės srovės įtampos mažinimo jungiklio režimas Buck įtampos keitiklis (LM2576/LM2596): 4 žingsniai
DC-nuolatinės srovės įtampos perjungimo režimo „Buck“įtampos keitiklis (LM2576/LM2596): sukurti labai efektyvų „Buck“keitiklį yra sunkus darbas ir net patyrusiems inžinieriams reikia kelių dizaino variantų, kad jie būtų tinkami. yra nuolatinės srovės į nuolatinės srovės keitiklis, kuris mažina įtampą (didindamas
Reguliuojamas įtampos nuolatinės srovės maitinimas naudojant LM317 įtampos reguliatorių: 10 žingsnių
Reguliuojamos įtampos nuolatinės srovės maitinimas naudojant LM317 įtampos reguliatorių: Šiame projekte aš sukūriau paprastą reguliuojamos įtampos nuolatinės srovės maitinimo šaltinį, naudojant LM317 IC su LM317 maitinimo grandinės schema. Kadangi šioje grandinėje yra įmontuotas tilto lygintuvas, todėl prie įvesties galime tiesiogiai prijungti 220V/110V kintamosios srovės šaltinį
Įvairių tipų tonų generavimas naudojant matematines lygtis („MathsMusic“) „Arduino“: 5 žingsniai
Įvairių tipų tonų generavimas naudojant matematines lygtis (MathsMusic) Arduino: Projekto aprašymas: Prasidėjo nauja kelionė, kur idėjos gali būti lengvai įgyvendinamos naudojant atvirojo kodo bendruomenę (Arduino dėka). Taigi čia yra būdas · Apsidairykite aplinkui ir stebėkite aplinkinius · Atraskite problemas, kurias reikia išspręsti
„Windbelt Redux“XXI amžiaus mikroelektros generavimas: 6 žingsniai (su nuotraukomis)
„Windbelt Redux 21st Century Micro Power Generation“: tai mano antroji „Shawn Frayne“„Windbelt“generatoriaus iteracija, mano pirmąją galima rasti čia. Ši versija skirta naudoti kryžminę ventiliaciją namuose. „Windbelt“yra svyruojantis vėjo generatorius, dirbantis pagal aeroelastinio plyšio principą