Sadržaj:

Generiranje napona biciklom s ergometrom: 9 koraka (sa slikama)
Generiranje napona biciklom s ergometrom: 9 koraka (sa slikama)

Video: Generiranje napona biciklom s ergometrom: 9 koraka (sa slikama)

Video: Generiranje napona biciklom s ergometrom: 9 koraka (sa slikama)
Video: Exercise Therapy as a Dysautonomia Management Tool 2024, Srpanj
Anonim
Generiranje napona biciklom s ergometrom
Generiranje napona biciklom s ergometrom
Generiranje napona biciklom s ergometrom
Generiranje napona biciklom s ergometrom
Generiranje napona pomoću ergometrijskog bicikla
Generiranje napona pomoću ergometrijskog bicikla

Razrada projekta sastojala se u sastavljanju „igre“s ciljem pedaliranja u ergometarskom biciklu spojenom na generator i tornju od svjetiljki koje se aktiviraju s povećanjem brzine motora - što se događa prema pedaliranju bicikla. Sustav se temeljio na očitanju-putem analognog porta Arduino Mega-trenutnog generiranog napona, zatim prenošenju ovih podataka na Raspberry Pi 3 putem serijske RX-TX komunikacije i naknadnom aktiviranju svjetiljki putem releja.

Korak 1: Materijali:

  • 1 malina Pi 3;
  • 1 Arduino Mega 2560;
  • 1 relejni štit s 10 releja 12 V;
  • 10 žarulja sa žarnom niti 127 V;
  • 1 bicikl s ergometrom;
  • 1 električni stroj (generator) 12 V;
  • Otpornici (1x1kΩ, 2x10kΩ);
  • 1 elektrolitički kondenzator 10 µF;
  • 1 Zener dioda 5,3 V;
  • 1,5 mm kabel (crveni, crni, smeđi);
  • 1 MDF toranj s nosačem za 10 svjetiljki.

Korak 2: Dijagram blokova sustava:

Dijagram blokova sustava
Dijagram blokova sustava

Korak 3: Rad sustava:

Sustav se temelji na transformaciji kinetičke energije nastale pri bicikliranju u električnoj energiji odgovornoj za aktiviranje releja koji će upaliti žarulje.

Napon koji generira generator očitava se analognim pinom Arduina i šalje se putem RX-TX na Raspberry Pi. Aktiviranje releja proporcionalno je generiranom naponu - što je veći napon, više releja će se aktivirati i više će lampica zasvijetliti.

Korak 4: Mehanički aspekti

Mehanički aspekti
Mehanički aspekti

Kako bi se istosmjerni generator mehanički spojio s biciklom, sustav pojasa morao je biti zamijenjen sustavom koji se koristi na uobičajenim biciklima (koji se sastoji od krune, lanca i zupčanika). Na okvir bicikla zavarena je metalna ploča kako bi se motor mogao pričvrstiti vijcima. Nakon toga, zupčanik je zavaren na osovinu generatora kako bi se lanac mogao postaviti, povezujući sustav pedala s generatorom.

Korak 5: Očitavanje napona:

Za očitavanje napona generatora pomoću Arduina potrebno je spojiti pozitivni pol električnog stroja na A0 pin kontrolera, a negativni pol na GND - kako bi se izbjeglo da je maksimalni napon generatora veći od 5 V napona Arduino pinovi, naponski filter s kondenzatorom od 10 µF, otpornik od 1 kΩ i zener dioda od 5,3 V konstruirani su i spojeni između regulatora i generatora. Firmver učitan u Arduino vrlo je jednostavan i sastoji se samo od čitanja analognog porta, pomnožene očitane vrijednosti s konstantom 0,0048828125 (5/1024, to jest napon GPIO -a Arduina podijeljen s brojem bitova analognog porta) i slanja varijabla na Serijski - kôd će biti dostupan u članku.

Postupak omogućavanja RX-TX komunikacije u Raspberry Pi je malo složeniji, pa morate slijediti postupak opisan na poveznici. Ukratko, trebate urediti datoteku pod nazivom "inittab" -koja se nalazi u "/etc/inittab" -, komentirajte redak "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (ako datoteka nije osnovano u Raspberry -jevom OS -u, morate unijeti naredbu: “sudo leafpad /boot/config.txt” i na kraj datoteke dodati redak “enable_uart = 1”). Nakon što to učinite, morate ponovno otvoriti LX terminal i onemogućiti serijski broj naredbama "sudo systemctl stop [email protected]" i "sudo systemctl disable [email protected]". Nakon toga morate izvršiti naredbu "sudo leafpad /boot/cmdline.txt", izbrisati redak "console = serial0, 115200", spremiti datoteku i ponovno pokrenuti uređaj. Da bi RX-TX komunikacija bila moguća, serijska knjižnica mora biti instalirana na Raspberry Pi naredbom "sudo apt-get install -f python-serial" i uvesti knjižnicu u kôd umetanjem retka "import serijski", inicijaliziranjem serijskog umetanja retka "ser = serial. Serial (" / dev / ttyS0 ", 9600)" i čitanjem napona koji šalje Arduino pomoću naredbe "ser.readline ()" - cijeli kôd koji se koristi in Raspberry bit će dostupni na kraju članka.

Slijedeći gore opisani postupak, korak očitavanja i slanja napona je dovršen.

Korak 6: Arduino programiranje:

Kao što je prethodno navedeno, kôd odgovoran za očitavanje napona generiranog tijekom vožnje biciklom vrlo je jednostavan.

Prije svega, potrebno je odabrati pin A0 kao odgovorni za očitavanje napona.

U funkciji "void setup ()" morate postaviti pin A0 na INPUT naredbom "pinMode (sensor, INPUT)" i odabrati brzinu prijenosa serijskog porta pomoću naredbe "Serial.begin (9600)".

U "void loop ()", funkcija "Serial.flush ()" se koristi za brisanje međuspremnika svaki put kad prekine slanje informacija putem serijskog broja; očitavanje napona vrši funkcija "analogRead (senzor)" - imajući u vidu da je potrebno pretvoriti vrijednost očitanu s analognog porta u volte - proces koji je naveden u odjeljku "napon čitanja" u članku.

Također, u funkciji "void loop ()" potrebno je varijablu x pretvoriti iz plutajućeg u niz, budući da je to jedini način za slanje varijable putem RX-TX-a. Posljednji korak u funkciji petlje je ispis niza u serijskom portu kako bi se mogao poslati na Raspberry - za to morate koristiti funkciju "Serial.println (y)". Redak "delay (100)" dodan je kodu samo tako da se varijabla šalje u intervalima od 100 ms - ako se ovo vrijeme ne poštuje, doći će do serijskog preopterećenja, generirajući moguće rušenja u programu.

napon_čitaj.ino

osjetnik plovka = A0;
voidsetup () {
pinMode (senzor, ULAZ);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (senzor)*0,0048828125*16,67;
Niz y = "";
y+= x;
Serijski.println (y);
kašnjenje (100);
}

pogledajte rawvoltage_read.ino hostirano sa ❤ na GitHubu

Korak 7: Programiranje Raspberry Pi 3:

lamp_bike.py

import os #import os biblioteke (koristi se za brisanje ekrana po potrebi)
uvoz RPi. GPIOas gpio #import knjižnica koja se koristi za kontrolu Raspnerryjevog GPIO -a
import serial #import library odgovorna za serijsku komunikaciju
import time #import knjižnica koja omogućuje korištenje funkcije delay
uvoz podprocesa #import knjižnica odgovorna za reprodukciju pjesama
#start serial
ser = serial. Serial ("/dev/ttyS0", 9600) #definirajte naziv uređaja i brzinu prijenosa
#jasan ekran
clear = lambda: os.system ('clear')
#set pinova za kontrolu releja
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #lamp 10
gpio.setup (12, gpio. OUT) #lampa 9
gpio.setup (13, gpio. OUT) #lampa 8
gpio.setup (15, gpio. OUT) #žarulja 7
gpio.setup (16, gpio. OUT) #žarulja 6
gpio.setup (18, gpio. OUT) #lamp 5
gpio.setup (19, gpio. OUT) #lamp 4
gpio.setup (21, gpio. OUT) #žarulja 3
gpio.setup (22, gpio. OUT) #lamp 2
gpio.setup (23, gpio. OUT) #lamp 1
#pokrenuti zapisi
name = ["None"]*10
napon = [0,00]*10
#pročitana datoteka zapisa
f = otvoreno ('zapisi', 'r')
za i inrange (10): #10 najboljih rezultata pojavljuje se na popisu
name = f.readline ()
ime = ime [: len (ime )-1]
napon = f.redline ()
napon = plovak (napon [: len (napon )-1])
f.close ()
čisto()
#postavite maksimalni napon
max = 50,00
#gasi lampe
jer i raspoređujem (11, 24, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH) #postavljeno na HIGH, releji su isključeni
#početak
whileTrue:
#početni zaslon
ispis "Zapisi: / n"
jer ja dogovaram (10):
ispis ime , ":", napon , "V"
current_name = raw_input ("Napišite svoje ime za početak:")
čisto()
#Promijenite maksimalnu vrijednost
ako je current_name == "max":
max = ulaz ("Zapišite maksimalni napon: (2 decimalna mjesta)")
čisto()
drugo:
#pokretanje upozorenja
za i inrange (11, 24, 1): #petlja počinje u PIN -u 11 i zaustavlja se u PIN -u 24
ako je i! = 14i i! = 17i i! = 20: #PIN 14 i 20 su GND pinovi, a 20 je pin od 3,3 V
gpio.output (i, gpio. LOW) #Uključite žarulje
vrijeme.spavanje (0,5)
k = 10
za i inrange (23, 10, -1):
čisto()
ako je i! = 14i i! = 17i i! = 20:
potproces. Popen (['aplay', 'Audios/'+str (k)+'. wav'])
vrijeme.spavanje (0,03)
čisto()
ispis "Pripremite se! / n", k
vrijeme.spavanje (1)
k- = 1
gpio.output (i, gpio. HIGH) #ugasite žarulje (jednu po jednu)
potproces. Popen (['aplay', 'Audios/go.wav']) #pušta glazbu za početak
vrijeme.spavanje (0,03)
čisto()
ispisati "GO!"
vrijeme.spavanje (1)
čisto()
#očitavanje napona
strujni_napon = 0,00
napon1 = 0,00
jer ja inrange (200):
ser.flushInput ()
prethodni = napon1
napon1 = float (ser.readline ()) #prikuplja Arduino podatke prenesene putem RX-TX-a
čisto()
napon ispisa1, "V"
ako je napon1> napon_struje:
strujni_napon = napon1
# ovisno o generiranom naponu, više lampica svijetli.
ako je napon1 <max/10:
jer i raspoređujem (11, 24, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = max/10:
gpio.output (11, gpio. LOW)
jer i raspoređujem (12, 24, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 2*max/10:
jer i raspoređujem (11, 13, 1):
gpio.output (i, gpio. LOW)
jer ja raspoređujem (13, 24, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 3*max/10:
jer ja inrange (11, 14, 1):
gpio.output (i, gpio. LOW)
jer i raspoređujem (15, 24, 1):
ako je i! = 17i ja! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 4*max/10:
jer ja inrange (11, 16, 1):
ako ja! = 14:
gpio.output (i, gpio. LOW)
jer i raspoređujem (16, 24, 1):
ako je i! = 17i ja! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 5*max/10:
jer ja inrange (11, 17, 1):
ako ja! = 14:
gpio.output (i, gpio. LOW)
jer ja inrange (18, 24, 1):
ako sam! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 6*max/10:
jer ja inrange (11, 19, 1):
ako je i! = 14i ja! = 17:
gpio.output (i, gpio. LOW)
jer ja raspoređujem (19, 24, 1):
ako sam! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 7*max/10:
jer ja inrange (11, 20, 1):
ako je i! = 14i ja! = 17:
gpio.output (i, gpio. LOW)
jer ja inrange (21, 24, 1):
gpio.output (i, gpio. HIGH)
ako je napon1> = 8*max/10:
jer ja raspoređujem (11, 22, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)
jer ja raspoređujem (22, 24, 1):
gpio.output (i, gpio. HIGH)
ako je napon1> = 9*max/10:
jer ja raspoređujem (11, 23, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
ako je napon1> = max:
jer i raspoređujem (11, 24, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)

ako je napon1

pauza
#gasi lampe
jer i raspoređujem (11, 24, 1):
ako je i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
#pobjedonosna glazba
ako je napon struje> = max:
potproces. Popen (['aplay', 'Audios/rocky.wav'])
vrijeme.spavanje (0,03)
čisto()
ispišite "VRLO DOBRO, POBJEDILI STE!"% (u '\u00c9', u '\u00ca', u '\u00c2')
jer ja dogovaram (10):
za j inrange (11, 24, 1):
ako je j! = 14i j! = 17i j! = 20:
gpio.output (j, gpio. LOW)
vrijeme.spavanje (0,05)
za j inrange (11, 24, 1):
ako je j! = 14i j! = 17i j! = 20:
gpio.output (j, gpio. HIGH)
vrijeme.spavanje (0,05)
vrijeme.spavanje (0,5)
potproces. Popen (['aplay', 'Audios/end.wav'])
vrijeme.spavanje (0,03)
čisto()
ispis "Završi igru … / n", trenutni_napon, "V"
#zapisi
vrijeme.spavanje (1.2)
dosegnuto = 0
jer ja dogovaram (10):
ako je napon struje> napon :
dosegao+= 1
temp_napon = napon
napon = strujni_napon
strujni_napon = temp_napon
temp_name = ime
naziv = naziv_tekuće
trenutni_naziv = temp_name
ako je dosegnuto> 0:
potproces. Popen (['aplay', 'Audios/record.wav'])
vrijeme.spavanje (0,03)
čisto()
f = otvoreno ('zapisi', 'w')
jer ja dogovaram (10):
f.pisati (ime )
f.write ("\ n")
f.write (str (napon ))
f.write ("\ n")
f.close ()
čisto()

pogledajte rawlamps_bike.py hostirano sa ❤ na GitHubu

Korak 8: Električna shema:

Električna shema
Električna shema
Električna shema
Električna shema
Električna shema
Električna shema

Arduino i Raspberry Pi 3 napajaju se iz 5V izvora sa 3A strujom.

Električni krug počinje spajanjem istosmjernog generatora (spojenog na bicikl) na Arduino kroz naponski filter sastavljen od Zener diode od 5,3 V, kondenzatora od 10 μF i otpornika od 1 kΩ - ulaz filtra spojen je na priključci generatora i izlaz je spojen na A0 port i GND regulatora.

Arduino je spojen na Raspberry putem RX-TX komunikacije-izvodi se kroz otpornički razdjelnik pomoću 10 kΩ otpornika (što je potrebno za portove kontrolera koji rade na različitim naponima).

GPIO -i Raspberry Pi spojeni su na releje odgovorne za uključivanje svjetiljki. "COM" svih releja bio je međusobno povezan i spojen na fazu (izmjenična mreža), a "N. O" (normalno otvoren) svakog releja spojen je na svaku žarulju, a neutralna mreža izmjenične struje bila je spojena na sve svjetiljke. Dakle, kada se aktivira GPIO odgovoran za svaki relej, relej se prebacuje u fazu AC mreže i uključuje odgovarajuću žarulju.

Korak 9: Rezultati:

Image
Image

Nakon konačne montaže projekta, provjereno je da je radio prema očekivanjima - prema brzini koju korisnik pedalira na biciklu stvara se veći napon i svijetli više lampica.

Preporučeni: