Sisällysluettelo:

Jännitteen luominen ergometripyörällä: 9 vaihetta (kuvilla)
Jännitteen luominen ergometripyörällä: 9 vaihetta (kuvilla)

Video: Jännitteen luominen ergometripyörällä: 9 vaihetta (kuvilla)

Video: Jännitteen luominen ergometripyörällä: 9 vaihetta (kuvilla)
Video: Rope Kojonen: Luominen evoluution kautta? 2024, Heinäkuu
Anonim
Jännitteen tuottaminen ergometripyörällä
Jännitteen tuottaminen ergometripyörällä
Jännitteen tuottaminen ergometripyörällä
Jännitteen tuottaminen ergometripyörällä
Jännitteen tuottaminen ergometripyörällä
Jännitteen tuottaminen ergometripyörällä

Hankkeen kehittäminen koostui "pelin" kokoamisesta, jonka tarkoituksena oli polkea ergometripyörässä, joka on kytketty generaattoriin ja lamputorniin, jotka aktivoituvat moottorin nopeuden kasvaessa - mikä tapahtuu polkupyörän polkemisen yhteydessä. Järjestelmä perustui Arduino Megan analogisen portin kautta luetun hetkellisen jännitteen lukemiseen, sen jälkeen näiden tietojen siirtämiseen Raspberry Pi 3 -laitteeseen sarjaliikenteen RX-TX-tiedonsiirron kautta ja lamppujen aktivointiin releen kautta.

Vaihe 1: Materiaalit:

  • 1 Vadelma Pi 3;
  • 1 Arduino Mega 2560;
  • 1 relevahti 10 releellä 12 V;
  • 10 hehkulamppua 127 V;
  • 1 Ergometripyörä;
  • 1 sähkökone (generaattori) 12 V;
  • Vastukset (1x1kΩ, 2x10kΩ);
  • 1 elektrolyyttikondensaattori 10 µF;
  • 1 Zener -diodi 5,3 V;
  • 1,5 mm Kaapeli (punainen, musta, ruskea);
  • 1 MDF -torni, joka tukee 10 lamppua.

Vaihe 2: Järjestelmälohkokaavio:

Järjestelmälohkokaavio
Järjestelmälohkokaavio

Vaihe 3: Järjestelmän käyttö:

Järjestelmä perustuu polkupyörän pyöräilyn aikana syntyvän kineettisen energian muuttamiseen sähköenergiaksi, joka on vastuussa releiden aktivoinnista, jotka sytyttävät lamput.

Generaattorin tuottama jännite luetaan Arduinon analogisella tapilla ja lähetetään RX-TX: n kautta Raspberry Pi: hen. Releiden aktivointi on verrannollinen syntyvään jännitteeseen - mitä korkeampi jännite, sitä enemmän releitä laukeaa ja enemmän lamppuja syttyy.

Vaihe 4: Mekaniikan näkökohdat

Mekaniikan näkökohdat
Mekaniikan näkökohdat

Jotta DC -generaattori voidaan kytkeä mekaanisesti polkupyörään, vyöjärjestelmä oli korvattava tavallisissa polkupyörissä (kruunu, ketju ja hammaspyörä) käytetyllä järjestelmällä. Pyörän runkoon hitsattiin metallilevy, jotta moottori voidaan kiinnittää ruuveilla. Tämän jälkeen hammaspyörä hitsattiin generaattorin akseliin niin, että ketju voitiin sijoittaa kytkemällä poljinjärjestelmä generaattoriin.

Vaihe 5: Jännitteen lukeminen:

Generaattorin jännitteen lukeminen Arduinon avulla on välttämätöntä kytkeä sähkökoneen positiivinen napa ohjaimen A0 -napaan ja negatiivinen napa GND: hen - jotta generaattorin maksimijännite ei ylitä 5 V: n jännitettä Säätimen ja generaattorin väliin rakennettiin ja liitettiin Arduino -nastat, 10 µF: n kondensaattoria käyttävä jännitesuodatin, 1 kΩ: n vastus ja 5,3 V: n Zener -diodi. Arduinoon ladattu laiteohjelmisto on hyvin yksinkertainen ja koostuu vain analogisen portin lukemisesta, kerro arvo lukemalla vakio 0,0048828125 (5/1024, eli Arduinon GPIO -jännite jaettuna sen analogisen portin bittimäärällä) ja lähettämällä muuttuja sarjaan - koodi on saatavilla artikkelissa.

Menettely RX-TX-viestinnän ottamiseksi käyttöön Raspberry Pi: ssä on hieman monimutkaisempi, ja sinun on noudatettava linkissä kuvattua menettelyä. Lyhyesti, sinun on muokattava tiedosto nimeltä inittab -joka sijaitsee kohteessa//etc/inittab -, kommentoi riviä "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (jos tiedosto ei ole Raspberry -käyttöjärjestelmässä, sinun on annettava komento “sudo leafpad /boot/config.txt” ja lisättävä rivi”enable_uart = 1” tiedoston loppuun). Kun tämä on tehty, sinun on avattava LX-pääte uudelleen ja poistettava sarja käytöstä komennoilla "sudo systemctl stop [email protected]" ja "sudo systemctl disable [email protected]". Tämän jälkeen sinun on suoritettava komento "sudo leafpad /boot/cmdline.txt", poistettava rivi "console = serial0, 115200", tallennettava tiedosto ja käynnistettävä laite uudelleen. Jotta RX-TX-tiedonsiirto olisi mahdollista, sarjakirjasto on asennettava Raspberry Pi -komentoon komennolla "sudo apt-get install -f python-serial" ja tuotava kirjasto koodiin lisäämällä rivin "import serial", alustetaan sarja lisäämällä rivi "ser = serial. Serial (" / dev / ttyS0 ", 9600)" ja Arduinon lähettämän jännitteen lukema komennolla "ser.readline ()" - koko käytetty koodi Raspberry -julkaisussa on saatavilla artikkelin lopussa.

Edellä kuvatun menettelyn mukaisesti luku- ja lähetysjännitteen vaihe on valmis.

Vaihe 6: Arduino -ohjelmointi:

Kuten aiemmin todettiin, pyöräilyn aikana syntyvän jännitteen lukemisesta vastaava koodi on hyvin yksinkertainen.

Ensinnäkin on tarpeen valita A0 -nastainen vastuu jännitteen lukemisesta.

"Void setup ()" -toiminnossa sinun on asetettava nasta A0 arvoon INPUT komennolla "pinMode (sensor, INPUT)" ja valittava sarjaportin lähetysnopeus komennolla "Serial.begin (9600)".

"Void loop ()" -toiminnolla "Serial.flush ()" -toimintoa käytetään puskurin tyhjentämiseen aina, kun se lopettaa tietojen lähettämisen sarjaportin kautta; jännitteen lukeminen suoritetaan toiminnolla "analogRead (sensor)" - muistaa, että analogisen portin lukema arvo on muunnettava voltteiksi - prosessi, joka viitataan artikkelin "lukujännite" -osioon.

Lisäksi "void loop ()" -funktiossa on muutettava muuttuja x floatista merkkijonoksi, koska tämä on ainoa tapa lähettää muuttuja RX-TX: n kautta. Silmukkatoiminnon viimeinen vaihe on tulostaa merkkijono sarjaporttiin, jotta se voidaan lähettää Raspberrylle - tätä varten sinun on käytettävä "Serial.println (y)" -toimintoa. Rivi "delay (100)" on lisätty koodiin vain siten, että muuttuja lähetetään 100 ms: n välein - jos tätä aikaa ei noudateta, sarja ylikuormittuu ja aiheuttaa mahdollisia kaatumisia ohjelmassa.

jännite_luku.ino

kelluva anturi = A0;
voidsetup () {
pinMode (anturi, TULO);
Sarja.alku (9600);
}
voidloop () {
Sarja.huuhtelu ();
float x = analoginen luku (anturi)*0,0048828125*16,67;
Jono y = "";
y+= x;
Sarja.println (y);
viive (100);
}

katso rawvoltage_read.ino, jota isännöi GitHub ❤ kanssa

Vaihe 7: Raspberry Pi 3 -ohjelmointi:

lamput_bike.py

tuoda os #tuoda käyttöjärjestelmäkirjasto (käytetään näytön tyhjentämiseen tarvittaessa)
tuoda RPi. GPIOs gpio #import -kirjastoa, jota käytetään Raspnerryn GPIO: n hallintaan
tuo sarjaliikenteestä vastaava sarja #tuonti -kirjasto
tuontiaika #tuonti kirjasto, joka mahdollistaa viivefunktion käytön
Tuo aliprosessi #tuonti kirjasto, joka vastaa kappaleiden toistamisesta
#aloita sarja
ser = sarja. Sarja ("/dev/ttyS0", 9600) #määritä laitteen nimi ja siirtonopeus
#selkeä näyttö
kirkas = lambda: os.system ('kirkas')
#aseta nastat releohjausta varten
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #lamppu 10
gpio.setup (12, gpio. OUT) #lamppu 9
gpio.setup (13, gpio. OUT) #lamppu 8
gpio.setup (15, gpio. OUT) #lamppu 7
gpio.setup (16, gpio. OUT) #lamppu 6
gpio.setup (18, gpio. OUT) #lamppu 5
gpio.setup (19, gpio. OUT) #lamppu 4
gpio.setup (21, gpio. OUT) #lamppu 3
gpio.setup (22, gpio. OUT) #lamppu 2
gpio.setup (23, gpio. OUT) #lamppu 1
#aloita tietueet
nimi = ["Ei mitään"]*10
jännite = [0.00]*10
#lue tietueet -tiedosto
f = avoin ('tietueet', 'r')
i inrange (10): #kymmenen parasta pistettä näkyvät luettelossa
nimi = f.readline ()
nimi = nimi [: len (nimi )-1]
jännite = f.readline ()
jännite = kelluva (jännite [: len (jännite )-1])
f. sulje ()
asia selvä()
#aseta maksimijännite
enintään = 50,00
#sammuta lamput
i inrange (11, 24, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. HIGH) #asetus HIGH, releet sammutetaan
#alkaa
Vaikka totta:
#aloitusnäyttö
tulosta "Tietueet: / n"
i inrange (10):
tulostusnimi , ":", jännite , "V"
current_name = raw_input ("Kirjoita nimesi alkuun:")
asia selvä()
#Muuta enimmäisarvoa
jos nykyinen_nimi == "max":
max = tulo ("Kirjoita maksimijännite: (2 desimaalia)")
asia selvä()
muu:
#aloita varoitus
i inrange (11, 24, 1): #silmukka alkaa PIN -koodista 11 ja pysähtyy PIN -koodissa 24
jos i! = 14ja i! = 17ja i! = 20: #PIN 14 ja 20 ovat GND -nastoja ja 20 on 3,3 V: n nasta
gpio.output (i, gpio. LOW) #kytke lamput päälle
aika. unta (0,5)
k = 10
i inrange (23, 10, -1):
asia selvä()
jos i! = 14ja i! = 17ja i! = 20:
aliprosessi. avaa (['aplay', 'Audios/'+str (k)+'. wav'])
aika. unta (0,03)
asia selvä()
tulosta "Valmistaudu! / n", k
time.sleep (1)
k- = 1
gpio.output (i, gpio. HIGH) #sammuta lamput (yksi kerrallaan)
aliprosessi. Popen (['aplay', 'Audios/go.wav']) #toistaa aloitusmusiikin
aika. unta (0,03)
asia selvä()
tulosta "GO!"
time.sleep (1)
asia selvä()
#jännite luettu
nykyinen_jännite = 0,00
jännite1 = 0,00
i inrange (200):
ser.flushInput ()
edellinen = jännite 1
jännite1 = kelluva (ser.readline ()) #kerää RX-TX: n siirtämät Arduinon tiedot
asia selvä()
tulostusjännite1, "V"
jos jännite1> nykyinen_jännite:
nykyinen_jännite = jännite 1
# syntyvästä jännitteestä riippuen enemmän lamppuja syttyy.
jos jännite1 <max/10:
i inrange (11, 24, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. HIGH)
jos jännite1> = max/10:
gpio.output (11, gpio. LOW)
i inrange (12, 24, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. HIGH)
jos jännite1> = 2*max/10:
i inrange (11, 13, 1):
gpio.output (i, gpio. LOW)
i inrange (13, 24, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. HIGH)
jos jännite1> = 3*max/10:
i inrange (11, 14, 1):
gpio.output (i, gpio. LOW)
i inrange (15, 24, 1):
jos minä! = 17ja minä! = 20:
gpio.output (i, gpio. HIGH)
jos jännite1> = 4*max/10:
i inrange (11, 16, 1):
jos minä! = 14:
gpio.output (i, gpio. LOW)
i inrange (16, 24, 1):
jos minä! = 17ja minä! = 20:
gpio.output (i, gpio. HIGH)
jos jännite1> = 5*max/10:
i inrange (11, 17, 1):
jos minä! = 14:
gpio.output (i, gpio. LOW)
i inrange (18, 24, 1):
jos minä! = 20:
gpio.output (i, gpio. HIGH)
jos jännite1> = 6*max/10:
i inrange (11, 19, 1):
jos minä! = 14ja minä! = 17:
gpio.output (i, gpio. LOW)
i inrange (19, 24, 1):
jos minä! = 20:
gpio.output (i, gpio. HIGH)
jos jännite1> = 7*max/10:
i inrange (11, 20, 1):
jos minä! = 14ja minä! = 17:
gpio.output (i, gpio. LOW)
i inrange (21, 24, 1):
gpio.output (i, gpio. HIGH)
jos jännite1> = 8*max/10:
i inrange (11, 22, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. LOW)
i inrange (22, 24, 1):
gpio.output (i, gpio. HIGH)
jos jännite1> = 9*max/10:
i inrange (11, 23, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
jos jännite1> = max:
i inrange (11, 24, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. LOW)

jos jännite 1

tauko
#sammuta lamput
i inrange (11, 24, 1):
jos i! = 14ja i! = 17ja i! = 20:
gpio.output (i, gpio. HIGH)
#voittoisa musiikki
jos nykyinen_jännite> = max:
aliprosessi. Popen (['aplay', 'Audios/rocky.wav'])
aika. unta (0,03)
asia selvä()
tulosta "ERITTÄIN HYVÄ, VOIT!"% (u '\u00c9', u '\u00ca', u '\u00c2')
i inrange (10):
j inrange (11, 24, 1):
jos j! = 14ja j! = 17ja j! = 20:
gpio.output (j, gpio. LOW)
aika. unta (0,05)
j inrange (11, 24, 1):
jos j! = 14ja j! = 17ja j! = 20:
gpio.output (j, gpio. HIGH)
aika. unta (0,05)
aika. unta (0,5)
aliprosessi. Popen (['aplay', 'Audios/end.wav'])
aika. unta (0,03)
asia selvä()
tulosta "Lopeta peli… / n", current_voltage, "V"
#tiedot
time.sleep (1.2)
saavutettu = 0
i inrange (10):
jos nykyinen_jännite> jännite :
saavutti+= 1
lämpötila_jännite = jännite
jännite = nykyinen_jännite
nykyinen_jännite = lämpötila_jännite
temp_name = nimi
nimi = nykyinen_nimi
nykyinen_nimi = väliaikainen_nimi
jos saavutettu> 0:
aliprosessi. Popen (['aplay', 'Audios/record.wav'])
aika. unta (0,03)
asia selvä()
f = avoin ('tietueet', 'w')
i inrange (10):
f. kirjoittaa (nimi )
f.write ("\ n")
f. kirjoita (str (jännite ))
f.write ("\ n")
f. sulje ()
asia selvä()

katso rawlamps_bike.py, jota isännöi GitHub ❤ kanssa

Vaihe 8: Sähköjärjestelmä:

Sähköjärjestelmä
Sähköjärjestelmä
Sähköjärjestelmä
Sähköjärjestelmä
Sähköjärjestelmä
Sähköjärjestelmä

Arduino ja Raspberry Pi 3 saavat virtansa 5 V: n lähteestä, jonka virta on 3A.

Sähköpiiri alkaa DC -generaattorin (kytketty polkupyörään) liittämisestä Arduinoon jännitesuodattimen kautta, joka koostuu 5,3 V: n Zener -diodista, 10 μF: n kondensaattorista ja 1 kΩ: n vastuksesta - suodattimen tulo on kytketty generaattorin liittimet ja lähtö on kytketty ohjaimen A0 -porttiin ja GND: hen.

Arduino on kytketty Raspberryyn RX-TX-tiedonsiirron kautta-suoritetaan resistiivisen jakajan kautta käyttämällä 10 kΩ: n vastuksia (vaaditaan eri jännitteillä toimivien ohjaimien porttien kautta).

Raspberry Pi: n GPIO: t on kytketty releisiin, jotka vastaavat lamppujen sytyttämisestä. Kaikkien releiden "COM" oli kytketty yhteen ja kytketty vaiheeseen (AC -verkko) ja kunkin releen "N. O" (normaalisti auki) oli kytketty jokaiseen lamppuun ja AC -verkon neutraali oli kytketty kaikkiin lamppuihin. Näin ollen, kun jokaisesta releestä vastaava GPIO aktivoidaan, rele kytketään vaihtoverkon vaiheeseen ja sytytetään vastaava lamppu.

Vaihe 9: Tulokset:

Image
Image

Projektin lopullisen kokoonpanon jälkeen varmistettiin, että se toimi odotetulla tavalla - sen nopeuden mukaan, jolla käyttäjä polkee pyörää, syntyy enemmän jännitettä ja enemmän lamppuja.

Suositeltava: