Kazalo:
- 1. korak: Materiali:
- 2. korak: diagram sistemskih blokov:
- 3. korak: delovanje sistema:
- 4. korak: Mehanski vidiki
- 5. korak: Odčitavanje napetosti:
- 6. korak: Arduino programiranje:
- 7. korak: Programiranje Raspberry Pi 3:
- 8. korak: električna shema:
- 9. korak: Rezultati:
Video: Ustvarjanje napetosti s kolesom z ergometrom: 9 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Priprava projekta je bila sestavljena iz "igre", katere cilj je pedaliranje v ergometrskem kolesu, povezanem z generatorjem, in stolp svetilk, ki se aktivirajo s povečanjem števila vrtljajev motorja - kar se zgodi v skladu s pedaliranjem kolesa. Sistem je temeljil na branju-prek analognih vrat Arduino Mega-trenutne generirane napetosti, nato prenosu teh podatkov na Raspberry Pi 3 prek serijske komunikacije RX-TX in kasnejšem vklopu svetilk preko releja.
1. korak: Materiali:
- 1 malina Pi 3;
- 1 Arduino Mega 2560;
- 1 relejni ščit z 10 releji 12 V;
- 10 žarnic z žarilno nitko 127 V;
- 1 ergometrično kolo;
- 1 električni stroj (generator) 12 V;
- Upori (1x1kΩ, 2x10kΩ);
- 1 elektrolitski kondenzator 10 µF;
- 1 Zener dioda 5,3 V;
- 1,5 mm kabel (rdeč, črn, rjav);
- 1 MDF stolp s podporo za 10 svetilk.
2. korak: diagram sistemskih blokov:
3. korak: delovanje sistema:
Sistem temelji na transformaciji kinetične energije, ki nastane pri kolesarjenju, v električno energijo, ki je odgovorna za aktiviranje relejev, ki vklopijo svetilke.
Napetost, ki jo ustvari generator, se prebere z analognega zatiča Arduina in se preko RX-TX pošlje na Raspberry Pi. Aktiviranje relejev je sorazmerno z ustvarjeno napetostjo - višja kot je napetost, več relejev se bo sprožilo in prižgalo se bo več svetilk.
4. korak: Mehanski vidiki
Za mehansko povezavo enosmernega generatorja s kolesom je bilo treba sistem jermena zamenjati s sistemom, ki se uporablja na običajnih kolesih (sestavljen iz krone, verige in zobnika). Na okvir kolesa je bila privarjena kovinska plošča, tako da je bil motor pritrjen z vijaki. Po tem je bil zobnik privarjen na gred generatorja, tako da je bilo mogoče postaviti verigo, tako da sistem pedalov povežemo z generatorjem.
5. korak: Odčitavanje napetosti:
Za odčitavanje napetosti generatorja z uporabo Arduina je potrebno pozitivni pol električnega stroja priključiti na pin A0 krmilnika, negativni pol pa na GND - da se prepreči, da bi bila največja napetost generatorja večja od 5 V Arduino zatiči, napetostni filter z uporabo kondenzatorja 10 µF, upor 1 kΩ in zener dioda 5,3 V so bili zgrajeni in povezani med krmilnikom in generatorjem. Vdelana programska oprema, naložena v Arduinu, je zelo preprosta in je sestavljena samo iz branja analognih vrat, pomnožene vrednosti z konstanto 0,0048828125 (5/1024, to je napetost GPIO Arduina, deljene s številom bitov njegovih analognih vrat) in pošiljanja spremenljivko v serijsko - koda bo na voljo v članku.
Postopek za omogočanje komunikacije RX-TX v Raspberry Pi je nekoliko bolj zapleten, zato morate slediti postopku, opisanemu na povezavi. Na kratko morate urediti datoteko z imenom "inittab" -ki se nahaja v "/etc/inittab" -, komentirajte vrstico "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (če datoteka ni ustanovljeno v OS Raspberry, morate vnesti ukaz: “sudo leafpad /boot/config.txt” in na konec datoteke dodati vrstico “enable_uart = 1”). Ko to storite, morate znova odpreti terminal LX in onemogočiti zaporedje z ukazi "sudo systemctl stop [email protected]" in "sudo systemctl disable [email protected]". Po tem morate izvesti ukaz "sudo leafpad /boot/cmdline.txt", izbrisati vrstico "console = serial0, 115200", shraniti datoteko in znova zagnati napravo. Da bi bila komunikacija RX-TX mogoča, je treba serijsko knjižnico namestiti na Raspberry Pi z ukazom "sudo apt-get install -f python-serial" in knjižnico uvoziti v kodo z vnosom vrstice "import serial", inicializiranje zaporedja z vstavljanjem vrstice "ser = serial. Serial (" / dev / ttyS0 ", 9600)" in odčitavanjem napetosti, ki jo pošlje Arduino z ukazom "ser.readline ()" - celotna uporabljena koda v Raspberry bo na voljo na koncu članka.
Po zgoraj opisanem postopku je korak napetosti branja in pošiljanja končan.
6. korak: Arduino programiranje:
Kot smo že omenili, je koda, odgovorna za branje napetosti, ki nastane pri kolesarjenju, zelo preprosta.
Najprej je treba za odčitavanje napetosti izbrati pin A0.
V funkciji "void setup ()" morate pin A0 nastaviti na INPUT z ukazom "pinMode (sensor, INPUT)" in z ukazom "Serial.begin (9600)" izbrati hitrost prenosa serijskih vrat.
V "void loop ()" se funkcija "Serial.flush ()" uporablja za brisanje medpomnilnika vsakič, ko konča pošiljanje informacij po zaporedju; odčitavanje napetosti izvaja funkcija "analogRead (senzor)" - ne pozabite, da je treba vrednost, ki jo odčitajo analogna vrata, pretvoriti v volte - postopek, naveden v razdelku "napetost branja" v članku.
Prav tako je v funkciji "void loop ()" potrebno spremeniti spremenljivko x iz float v niz, saj je to edini način za pošiljanje spremenljivke prek RX-TX. Zadnji korak v funkciji zanke je natisniti niz v serijska vrata, da ga lahko pošljete v Raspberry - za to morate uporabiti funkcijo "Serial.println (y)". Vrstica "zamuda (100)" je bila dodana kodi samo zato, da se spremenljivka pošlje v intervalih po 100 ms - če se ta čas ne upošteva, bo prišlo do serijske preobremenitve, ki bo povzročila možne zrušitve v programu.
napetost_preberi.ino
plavajoči senzor = A0; |
voidsetup () { |
pinMode (senzor, VHOD); |
Serial.begin (9600); |
} |
voidloop () { |
Serial.flush (); |
float x = analogRead (senzor)*0,0048828125*16,67; |
Niz y = ""; |
y+= x; |
Serial.println (y); |
zamuda (100); |
} |
oglejte si rawvoltage_read.ino z ❤ pri GitHubu
7. korak: Programiranje Raspberry Pi 3:
lamp_bike.py
import os #import knjižnice os (uporablja se za čiščenje zaslona, kadar je to potrebno) |
uvoziti knjižnico RPi. GPIOas gpio #import, ki se uporablja za nadzor GPIO Raspnerry |
uvoz serijske knjižnice #import, odgovorne za serijsko komunikacijo |
import time #import knjižnica, ki omogoča uporabo funkcije delay |
uvozni podproces #import knjižnica, odgovorna za predvajanje pesmi |
#start serial |
ser = serial. Serial ("/dev/ttyS0", 9600) #določite ime naprave in hitrost prenosa |
#čist zaslon |
clear = lambda: os.system ('clear') |
#set zatiči za krmiljenje releja |
gpio.setmode (gpio. BOARD) |
gpio.setup (11, gpio. OUT) #svetilka 10 |
gpio.setup (12, gpio. OUT) #svetilka 9 |
gpio.setup (13, gpio. OUT) #svetilka 8 |
gpio.setup (15, gpio. OUT) #svetilka 7 |
gpio.setup (16, gpio. OUT) #svetilka 6 |
gpio.setup (18, gpio. OUT) #svetilka 5 |
gpio.setup (19, gpio. OUT) #svetilka 4 |
gpio.setup (21, gpio. OUT) #svetilka 3 |
gpio.setup (22, gpio. OUT) #svetilka 2 |
gpio.setup (23, gpio. OUT) #svetilka 1 |
#začetni zapisi |
name = ["Brez"]*10 |
napetost = [0,00]*10 |
#prebrana datoteka zapisa |
f = odprto ('zapisi', 'r') |
za i inrange (10): #10 najboljših ocen se pojavi na seznamu |
name = f.readline () |
ime = ime [: len (ime )-1] |
napetost = f.redline () |
napetost = plovec (napetost [: len (napetost )-1]) |
f.close () |
jasno () |
#nastavite največjo napetost |
max = 50,00 |
#ugasnite svetilke |
za i inrange (11, 24, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. HIGH) #nastavljeno na HIGH, releji so izklopljeni |
#start |
medtem ko res: |
#začetni zaslon |
natisni "Zapisi: / n" |
za irange (10): |
natisni ime , ":", napetost , "V" |
current_name = raw_input ("Za začetek napišite svoje ime:") |
jasno () |
#Spremeni največjo vrednost |
če current_name == "max": |
max = vhod ("Napišite največjo napetost: (2 decimalni mesti)")) |
jasno () |
drugače: |
#start opozorilo |
za i inrange (11, 24, 1): #zanka se začne v kodi PIN 11 in ustavi v kodi PIN 24 |
če i! = 14 in i! = 17 in i! = 20: #PIN 14 in 20 sta nožici GND, 20 pa pin 3,3 V |
gpio.output (i, gpio. LOW) #vklopite svetilke |
time.sleep (0,5) |
k = 10 |
za i inrange (23, 10, -1): |
jasno () |
če i! = 14 in i! = 17 in i! = 20: |
subprocess. Popen (['aplay', 'Audios/'+str (k)+'. wav']) |
time.sleep (0,03) |
jasno () |
natisni "Pripravi se! / n", k |
time.sleep (1) |
k- = 1 |
gpio.output (i, gpio. HIGH) #izklopite svetilke (eno za drugo) |
subprocess. Popen (['aplay', 'Audios/go.wav']) #predvaja začetno glasbo |
time.sleep (0,03) |
jasno () |
natisni "GO!" |
time.sleep (1) |
jasno () |
#napetostno branje |
trenutna_napetost = 0,00 |
napetost 1 = 0,00 |
za irange (200): |
ser.flushInput () |
prejšnji = napetost1 |
napetost1 = float (ser.readline ()) #zbira podatke Arduino, prenesene z RX-TX |
jasno () |
tiskalna napetost1, "V" |
če je napetost1> trenutna_napetost: |
tok_napetost = napetost1 |
# odvisno od ustvarjene napetosti zasveti več svetilk. |
če je napetost 1 <max/10: |
za i inrange (11, 24, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. HIGH) |
če je napetost1> = max/10: |
gpio.output (11, gpio. LOW) |
za i inrange (12, 24, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 2*max/10: |
za i inrange (11, 13, 1): |
gpio.output (i, gpio. LOW) |
za i inrange (13, 24, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 3*max/10: |
za i inrange (11, 14, 1): |
gpio.output (i, gpio. LOW) |
za i inrange (15, 24, 1): |
če i! = 17 in i! = 20: |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 4*max/10: |
za i inrange (11, 16, 1): |
če jaz! = 14: |
gpio.output (i, gpio. LOW) |
za i inrange (16, 24, 1): |
če i! = 17 in i! = 20: |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 5*max/10: |
za i inrange (11, 17, 1): |
če jaz! = 14: |
gpio.output (i, gpio. LOW) |
za i inrange (18, 24, 1): |
če i! = 20: |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 6*max/10: |
za i inrange (11, 19, 1): |
če i! = 14 in i! = 17: |
gpio.output (i, gpio. LOW) |
za i inrange (19, 24, 1): |
če i! = 20: |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 7*max/10: |
za i inrange (11, 20, 1): |
če i! = 14 in i! = 17: |
gpio.output (i, gpio. LOW) |
za i inrange (21, 24, 1): |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 8*max/10: |
za i inrange (11, 22, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. LOW) |
za i inrange (22, 24, 1): |
gpio.output (i, gpio. HIGH) |
če je napetost1> = 9*max/10: |
za i inrange (11, 23, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. LOW) |
gpio.output (23, gpio. HIGH) |
če je napetost1> = max: |
za i inrange (11, 24, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. LOW) |
če je napetost 1 |
prekiniti |
#ugasnite svetilke |
za i inrange (11, 24, 1): |
če i! = 14 in i! = 17 in i! = 20: |
gpio.output (i, gpio. HIGH) |
#zmagovita glasba |
če je trenutna_napetost> = max: |
subprocess. Popen (['aplay', 'Audios/rocky.wav']) |
time.sleep (0,03) |
jasno () |
natisni "ZELO DOBRO, Zmagal si!"% (u '\u00c9', u '\u00ca', u '\u00c2') |
za irange (10): |
za j inrange (11, 24, 1): |
če j! = 14 in j! = 17 in j! = 20: |
gpio.output (j, gpio. LOW) |
time.sleep (0,05) |
za j inrange (11, 24, 1): |
če j! = 14 in j! = 17 in j! = 20: |
gpio.output (j, gpio. HIGH) |
time.sleep (0,05) |
time.sleep (0,5) |
subprocess. Popen (['aplay', 'Audios/end.wav']) |
time.sleep (0,03) |
jasno () |
natisni "Konec igre … / n", trenutna_napetost, "V" |
#zapisi |
time.sleep (1.2) |
doseženo = 0 |
za irange (10): |
če je trenutna_napetost> napetost : |
doseženo+= 1 |
temp_voltage = napetost |
napetost = napetost_toka |
trenutna_napetost = temp_napetost |
temp_name = ime |
ime = trenutno_ime |
trenutno_ime = ime_ temp |
če je doseženo> 0: |
subprocess. Popen (['aplay', 'Audios/record.wav']) |
time.sleep (0,03) |
jasno () |
f = odprto ('zapisi', 'w') |
za irange (10): |
f.write (ime ) |
f.write ("\ n") |
f.write (str (napetost )) |
f.write ("\ n") |
f.close () |
jasno () |
oglejte si rawlamps_bike.py, ki ga gosti ❤ GitHub
8. korak: električna shema:
Arduino in Raspberry Pi 3 poganja vir 5V s tokom 3A.
Električni tokokrog se začne s priključitvijo enosmernega generatorja (povezanega s kolesom) na Arduino skozi napetostni filter, sestavljen iz zenerjeve diode 5,3 V, kondenzatorja 10 μF in upora 1 kΩ - vhod filtra je priključen na priključki generatorja in izhod je priključen na vrata A0 in GND krmilnika.
Arduino je povezan z Raspberryjem prek komunikacije RX-TX-izvede se prek uporovnega delilnika z 10 kΩ upori (zahtevajo vrata krmilnikov, ki delujejo pri različnih napetostih).
GPIO -ji Raspberry Pi so povezani z releji, ki so odgovorni za vklop svetilk. "COM" vseh relejev je bil medsebojno povezan in povezan s fazo (omrežje AC), "N. O" (običajno odprt) vsakega releja pa je bil priključen na vsako svetilko, nevtralna točka omrežja AC pa je bila povezana z vsemi svetilkami. Ko se GPIO, odgovoren za vsak rele, aktivira, se rele preklopi v fazo omrežja AC in prižge ustrezno svetilko.
9. korak: Rezultati:
Po končni montaži projekta je bilo preverjeno, da deluje po pričakovanjih - glede na hitrost, ki jo uporabnik pedalira na kolesu, nastane več napetosti in zasveti več svetilk.
Priporočena:
Izdelava preprostega robota iz stvari, ki jih lahko najdete v svoji hiši (različica z vročim kolesom): 5 korakov
Izdelava preprostega robota iz stvari, ki jih lahko najdete v svoji hiši (različica z vročim kolesom): Ta navodila vam bodo pokazala, kako narediti vročo kolo, ki deluje samo od sebe in deluje na baterije z dvojno A. Uporabljati boste morali le stvari, ki jih najverjetneje najdete v svoji hiši. Upoštevajte, da ta robot verjetno ne bo šel ravno naravnost,
DJI svetilka z ognjenim kolesom: 5 korakov
DJI Flamewheel LED svetilka: Ta projekt je delo za krilne luči za DJI Flamewheel. Uporabljeni materiali: PCB -jev 1 kos LED 13 kosov (3 mm TH) upor (paket 0603) 13 kosov Za
RC avtomobil, ki ga upravljate s kolesom in pedali? ️: 6 korakov
RC avtomobil, ki ga upravljate s kolesom in pedali? ️: Življenje pomeni uresničiti vaše sanje. Moj je bil izdelati RC Car z računalniškim igralnim kolesom. Upam, da bo to komu koristilo. V primeru vprašanj napišite komentar
Večkanalni merilnik napetosti in toka Wi-Fi: 11 korakov (s slikami)
Večkanalni merilnik napetosti in toka Wi-Fi: Pri načrtovanju je pogosto treba spremljati različne dele vezja hkrati. Da bi se izognili bolečinam pri lepljenju multimetrskih sond z enega kraja na drugega, sem želel oblikovati večkanalni merilnik napetosti in toka. Plošča Ina260
Kako napolniti katero koli napravo USB z vožnjo s kolesom: 10 korakov (s slikami)
Kako napolniti katero koli napravo USB z vožnjo s kolesom: Za začetek se je ta projekt začel, ko smo prejeli donacijo iz programa Lemelson-MIT. (Josh, če bereš to, te imamo radi.) Ekipa 6 učencev in en učitelj sta sestavila ta projekt in odločili smo se, da ga bomo dali na Instruct