Kazalo:
- Avtor John Day [email protected].
- Public 2024-01-30 12:07.
- Nazadnje spremenjeno 2025-01-23 15:09.
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
