Kazalo:

Ustvarjanje napetosti s kolesom z ergometrom: 9 korakov (s slikami)
Ustvarjanje napetosti s kolesom z ergometrom: 9 korakov (s slikami)

Video: Ustvarjanje napetosti s kolesom z ergometrom: 9 korakov (s slikami)

Video: Ustvarjanje napetosti s kolesom z ergometrom: 9 korakov (s slikami)
Video: Каструп Λ Верваеке: загрузка разума и интеграция теней 2024, November
Anonim
Ustvarjanje napetosti s kolesom z ergometrom
Ustvarjanje napetosti s kolesom z ergometrom
Ustvarjanje napetosti s kolesom z ergometrom
Ustvarjanje napetosti s kolesom z ergometrom
Ustvarjanje napetosti s kolesom z ergometrom
Ustvarjanje napetosti s kolesom z ergometrom

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:

Shema sistemskih blokov
Shema 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

Mehanski vidiki
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:

Električna shema
Električna shema
Električna shema
Električna shema
Električna shema
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:

Image
Image

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: