Turinys:

Įtampos generavimas naudojant dviratį ergometrą: 9 žingsniai (su nuotraukomis)
Įtampos generavimas naudojant dviratį ergometrą: 9 žingsniai (su nuotraukomis)

Video: Įtampos generavimas naudojant dviratį ergometrą: 9 žingsniai (su nuotraukomis)

Video: Įtampos generavimas naudojant dviratį ergometrą: 9 žingsniai (su nuotraukomis)
Video: 🛴🔋 Kaip reikia prižiūrėti elektrinio transporto ličio baterijas? 🔋🛴 2024, Lapkritis
Anonim
Įtampos generavimas naudojant dviratį su ergometru
Įtampos generavimas naudojant dviratį su ergometru
Įtampos generavimas naudojant dviratį su ergometru
Įtampos generavimas naudojant dviratį su ergometru
Įtampos generavimas naudojant dviratį ergometrą
Įtampos generavimas naudojant dviratį ergometrą

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:

Sistemos blokų schema
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

Mechanikos aspektai
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:

Elektros schema
Elektros schema
Elektros schema
Elektros schema
Elektros schema
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:

Image
Image

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: