Sadržaj:

Generiranje napona pomoću bicikla s ergometrom: 9 koraka (sa slikama)
Generiranje napona pomoću bicikla s ergometrom: 9 koraka (sa slikama)

Video: Generiranje napona pomoću bicikla s ergometrom: 9 koraka (sa slikama)

Video: Generiranje napona pomoću bicikla s ergometrom: 9 koraka (sa slikama)
Video: 5 УДИВИТЕЛЬНЫХ ЖИЗНЕННЫХ ХАКОВ # 2 2024, Juli
Anonim
Generiranje napona pomoću bicikla s ergometrom
Generiranje napona pomoću bicikla s ergometrom
Generiranje napona pomoću bicikla s ergometrom
Generiranje napona pomoću bicikla s ergometrom
Generiranje napona pomoću bicikla s ergometrom
Generiranje napona pomoću bicikla s ergometrom

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 u skladu s okretanjem bicikla. Sistem je bio zasnovan na očitavanju-putem analognog porta Arduino Mega-trenutnog generiranog napona, zatim prenošenju ovih podataka na Raspberry Pi 3 putem serijske RX-TX komunikacije i naknadnom aktivaciji svjetiljki putem releja.

Korak 1: Materijali:

  • 1 malina Pi 3;
  • 1 Arduino Mega 2560;
  • 1 relejni štit s 10 releja 12 V;
  • 10 Sijalice sa žarnom niti 127 V;
  • 1 bicikl s ergometrom;
  • 1 električna mašina (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 sa nosačem za 10 lampi.

Korak 2: Dijagram sistemskih blokova:

Dijagram sistemskih blokova
Dijagram sistemskih blokova

Korak 3: Rad sistema:

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

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 lampica će zasvijetliti.

Korak 4: Mehanički aspekti

Mehanički aspekti
Mehanički aspekti

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

Korak 5: Očitavanje napona:

Za očitavanje napona generatora pomoću Arduina potrebno je spojiti pozitivni pol električne mašine na A0 pin kontrolera, a negativni pol na GND - kako bi se izbjeglo da maksimalni napon generatora bude 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 kontrolera 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 je 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 linku. Ukratko, trebate urediti datoteku pod nazivom “inittab” -koja se nalazi u “/etc/inittab” -, komentirajte red “T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100” (ako datoteka nije osnovano u Raspberry OS -u, morate unijeti naredbu: “sudo leafpad /boot/config.txt” i dodati redak “enable_uart = 1” na kraj datoteke). 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 red "console = serial0, 115200", spremiti datoteku i ponovo pokrenuti uređaj. Da bi RX-TX komunikacija bila moguća, serijska biblioteka mora biti instalirana na Raspberry Pi naredbom "sudo apt-get install -f python-serial" i uvesti biblioteku u kôd umetanjem linije "import serial", inicijaliziranje serijskog umetanja retka "ser = serial. Serial (" / dev / ttyS0 ", 9600)" i očitavanje 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 ranije navedeno, kod odgovoran za očitavanje napona generiranog pri vožnji 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 bafera svaki put kada prekine slanje informacija putem serijskog broja; očitavanje napona vrši funkcija "analogRead (senzor)" - imajući u vidu da je potrebno vrijednost koju očitava analogni priključak pretvoriti u volte - proces naveden u odjeljku "napon čitanja" u članku.

Također, u funkciji "void loop ()" potrebno je pretvoriti varijablu x iz plutajućeg u niz, jer je to jedini način da se varijabla pošalje putem RX-TX-a. Zadnji korak u funkciji petlje je ispisivanje niza na serijskom portu kako bi se mogao poslati na Raspberry - za to morate koristiti funkciju "Serial.println (y)". Red "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.

voltage_read.ino

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

pogledajte rawvoltage_read.ino hostirano sa ❤ od GitHub -a

Korak 7: Programiranje Raspberry Pi 3:

lamp_bike.py

import os #import os biblioteka (koristi se za brisanje ekrana po potrebi)
uvoz RPi. GPIOas gpio #import biblioteka koja se koristi za kontrolu Raspnerryjevog GPIO
import serial #import biblioteka odgovorna za serijsku komunikaciju
import time #import biblioteka koja omogućuje korištenje funkcije delay
uvoziti potproces #import biblioteka 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) #lamp 9
gpio.setup (13, gpio. OUT) #lamp 8
gpio.setup (15, gpio. OUT) #lamp 7
gpio.setup (16, gpio. OUT) #lamp 6
gpio.setup (18, gpio. OUT) #lamp 5
gpio.setup (19, gpio. OUT) #lamp 4
gpio.setup (21, gpio. OUT) #lamp 3
gpio.setup (22, gpio. OUT) #lamp 2
gpio.setup (23, gpio. OUT) #lamp 1
#start 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 listi
ime = f.readline ()
ime = ime [: len (ime )-1]
napon = f.redline ()
napon = plovak (napon [: len (napon )-1])
f.close ()
jasno ()
#postavite maksimalni napon
max = 50,00
#gasi lampe
za i inrange (11, 24, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH) #postavljeno na HIGH, releji su isključeni
#start
whileTrue:
#početni ekran
ispisati "Zapisi: / n"
za i inrange (10):
ispis ime , ":", napon , "V"
current_name = raw_input ("Napišite svoje ime za početak:")
jasno ()
#Promijeni maksimalnu vrijednost
ako je current_name == "max":
max = ulaz ("Zapišite maksimalni napon: (2 decimalna mjesta)")
jasno ()
drugo:
#start upozorenje
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! = 17 i i! = 20: #PIN 14 i 20 su GND pinovi, a 20 je pin od 3,3 V
gpio.output (i, gpio. LOW) #Uključite lampe
vrijeme.spavanje (0,5)
k = 10
za i inrange (23, 10, -1):
jasno ()
ako i! = 14i i! = 17i i! = 20:
subprocess. Popen (['aplay', 'Audios/'+str (k)+'. wav'])
time.sleep (0,03)
jasno ()
ispis "Pripremite se! / n", k
time.sleep (1)
k- = 1
gpio.output (i, gpio. HIGH) #ugasite lampe (jednu po jednu)
subprocess. Popen (['aplay', 'Audios/go.wav']) #pušta početnu muziku
time.sleep (0,03)
jasno ()
ispisati "GO!"
time.sleep (1)
jasno ()
#očitavanje napona
napon struje = 0,00
napon1 = 0,00
za i inrange (200):
ser.flushInput ()
prethodni = napon1
napon1 = float (ser.readline ()) #prikuplja Arduino podatke prenesene putem RX-TX-a
jasno ()
napon štampe1, "V"
ako je napon1> napon_struje:
strujni_napon = napon1
# ovisno o generiranom naponu, više lampica svijetli.
ako je napon1 <max/10:
za i inrange (11, 24, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = max/10:
gpio.output (11, gpio. LOW)
za i inrange (12, 24, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 2*max/10:
za i inrange (11, 13, 1):
gpio.output (i, gpio. LOW)
za i inrange (13, 24, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 3*max/10:
za i inrange (11, 14, 1):
gpio.output (i, gpio. LOW)
za i inrange (15, 24, 1):
ako sam! = 17i ja! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 4*max/10:
za i inrange (11, 16, 1):
ako ja! = 14:
gpio.output (i, gpio. LOW)
za i inrange (16, 24, 1):
ako sam! = 17i ja! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 5*max/10:
za i inrange (11, 17, 1):
ako ja! = 14:
gpio.output (i, gpio. LOW)
za i inrange (18, 24, 1):
ako ja! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 6*max/10:
za i inrange (11, 19, 1):
ako sam! = 14i ja! = 17:
gpio.output (i, gpio. LOW)
za i inrange (19, 24, 1):
ako ja! = 20:
gpio.output (i, gpio. HIGH)
ako je napon1> = 7*max/10:
za i inrange (11, 20, 1):
ako sam! = 14i ja! = 17:
gpio.output (i, gpio. LOW)
za i inrange (21, 24, 1):
gpio.output (i, gpio. HIGH)
ako je napon1> = 8*max/10:
za i inrange (11, 22, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)
za i inrange (22, 24, 1):
gpio.output (i, gpio. HIGH)
ako je napon1> = 9*max/10:
za i inrange (11, 23, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
ako je napon1> = max:
za i inrange (11, 24, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)

ako je napon1

break
#gasi lampe
za i inrange (11, 24, 1):
ako i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
#pobednička muzika
ako je napon struje> = max:
subprocess. Popen (['aplay', 'Audios/rocky.wav'])
time.sleep (0,03)
jasno ()
ispišite "VRLO DOBRO, POBJEDILI STE!"% (u '\u00c9', u '\u00ca', u '\u00c2')
za i inrange (10):
za j inrange (11, 24, 1):
ako j! = 14i j! = 17i j! = 20:
gpio.output (j, gpio. LOW)
time.sleep (0,05)
za j inrange (11, 24, 1):
ako j! = 14i j! = 17i j! = 20:
gpio.output (j, gpio. HIGH)
time.sleep (0,05)
vrijeme.spavanje (0,5)
subprocess. Popen (['aplay', 'Audios/end.wav'])
time.sleep (0,03)
jasno ()
ispiši "Završi igru… / n", trenutni_napon, "V"
#records
time.sleep (1.2)
dostignuto = 0
za i inrange (10):
ako je napon struje> napon :
dostigao+= 1
temp_voltage = napon
napon = strujni_napon
trenutni_napon = temp_napon
temp_name = ime
ime = trenutno_ime
trenutni_naziv = temp_name
ako je dosegnuto> 0:
subprocess. Popen (['aplay', 'Audios/record.wav'])
time.sleep (0,03)
jasno ()
f = otvoreno ('zapisi', 'w')
za i inrange (10):
f.pisati (ime )
f.write ("\ n")
f.write (str (napon ))
f.write ("\ n")
f.close ()
jasno ()

pogledajte rawlamps_bike.py hostirano sa ❤ od strane GitHub -a

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 započ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 je spojen na priključci generatora i izlaz je spojen na A0 port i GND kontrolera.

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

GPIO -i Raspberry Pi -a povezani su sa relejima odgovornim za uključivanje lampi. “COM” svih releja bio je međusobno povezan i spojen na fazu (AC mreža), a “N. O” (normalno otvoren) svakog releja bio je spojen na svaku lampu, a neutral neutralne mreže naizmjenične struje bio je spojen na sve svjetiljke. Dakle, kada se aktivira GPIO odgovoran za svaki relej, relej se prebacuje u fazu mreže naizmjenične struje i uključuje odgovarajuću lampicu.

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čuje se: