Sisukord:

Pinge tekitamine ergomeetrirattaga: 9 sammu (piltidega)
Pinge tekitamine ergomeetrirattaga: 9 sammu (piltidega)

Video: Pinge tekitamine ergomeetrirattaga: 9 sammu (piltidega)

Video: Pinge tekitamine ergomeetrirattaga: 9 sammu (piltidega)
Video: Tourist Trophy: Closer To The Edge - Полный документальный фильм TT3D (Доступны субтитры !!) 2024, November
Anonim
Pinge tekitamine ergomeetriga jalgrattaga
Pinge tekitamine ergomeetriga jalgrattaga
Pinge tekitamine ergomeetriga jalgrattaga
Pinge tekitamine ergomeetriga jalgrattaga
Pinge tekitamine ergomeetriga jalgrattaga
Pinge tekitamine ergomeetriga jalgrattaga

Projekti väljatöötamine seisnes "mängu" kokkupanemises, mille eesmärk oli pedaalida ergomeetrirattaga, mis on ühendatud generaatori ja lampide torniga, mis aktiveeruvad mootori pöörlemiskiiruse suurenedes - see juhtub jalgratta pedaalimisel. Süsteem põhines Arduino Mega analoogpordi kaudu loodud hetkepinge lugemisel, seejärel nende andmete edastamisel Raspberry Pi 3-le RX-TX jada kaudu ja sellele järgneval lampide aktiveerimisel relee kaudu.

Samm: materjalid:

  • 1 Vaarika Pi 3;
  • 1 Arduino Mega 2560;
  • 1 releekilp 10 releega 12 V;
  • 10 hõõglampi 127 V;
  • 1 Ergomeetri jalgratas;
  • 1 elektrimasin (generaator) 12 V;
  • Takistid (1x1kΩ, 2x10kΩ);
  • 1 elektrolüütiline kondensaator 10 µF;
  • 1 Zeneri diood 5,3 V;
  • 1,5 mm kaabel (punane, must, pruun);
  • 1 MDF -torn koos toega 10 lambile.

Samm: süsteemiplokkide skeem:

Süsteemi plokkide skeem
Süsteemi plokkide skeem

Samm: süsteemi toimimine:

Süsteem põhineb jalgrattaga sõitmisel tekkiva kineetilise energia muundamisel elektrienergias, mis vastutab lampide sisselülitamise releede aktiveerimise eest.

Generaatori tekitatud pinget loeb Arduino analoogpistik ja see saadetakse RX-TX kaudu Raspberry Pi-le. Releede aktiveerimine on võrdeline tekitatud pingega - mida kõrgem on pinge, seda rohkem releesid käivitatakse ja rohkem lampe süttib.

4. samm: mehaanika aspektid

Mehaanika aspektid
Mehaanika aspektid

DC -generaatori mehaaniliseks sidumiseks jalgrattaga tuli rihmasüsteem asendada tavalistel jalgratastel kasutatava süsteemiga (koosneb kroonist, kettist ja hammasrattast). Jalgratta raamile keevitati metallplaat, et mootorit saaks kruvidega kinnitada. Pärast seda keevitati hammasratas generaatori võlli külge, nii et kett saaks asetada, ühendades pedaalide süsteemi generaatoriga.

5. samm: pinge näit:

Generaatori pinge lugemiseks Arduino abil on vaja ühendada elektrimasina positiivne pool kontrolleri A0 kontaktiga ja negatiivne pool GND -ga - et vältida generaatori maksimaalset pinget üle 5 V Kontrolleri ja generaatori vahele ehitati ja ühendati Arduino tihvtid, pingefilter, mis kasutas kondensaatorit 10 µF, takisti 1 kΩ ja Zeneri diood 5,3 V. Arduinosse laaditud püsivara on väga lihtne ja koosneb ainult analoogpordi lugemisest, korrutage loetud väärtus konstantsiga 0,0048828125 (5/1024, see on Arduino GPIO pinge jagatud selle analoogpordi bittide arvuga) ja saadetakse muutuja Serial - kood on saadaval artiklis.

Raspberry Pi-s RX-TX-ühenduse lubamise protseduur on natuke keerulisem ja peate järgima lingil kirjeldatud protseduuri. Lühidalt peate redigeerima faili nimega „inittab” -asub kaustas „/etc/inittab” -, kommenteerige rida „T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100” (kui fail ei ole Raspberry OS -is asutatud, peate sisestama käsu “sudo leafpad /boot/config.txt” ja lisama faili lõppu rea “enable_uart = 1”). Kui see on tehtud, peate LX-terminali uuesti avama ja seeria keelama käskudega "sudo systemctl stop [email protected]" ja "sudo systemctl disable [email protected]". Pärast seda peate täitma käsu "sudo leafpad /boot/cmdline.txt", kustutama rida "console = serial0, 115200", salvestama faili ja taaskäivitama seadme. Selleks, et RX-TX-side oleks võimalik, tuleb jadaraamatukogu installida Raspberry Pi-le käsuga "sudo apt-get install -f python-serial" ja importida raamatukogu koodi, sisestades rea "impordi seeria", seeria vormindamine, sisestades rea "ser = serial. Serial (" / dev / ttyS0 ", 9600)" ja Arduino poolt saadetud pinge lugemine käsuga "ser.readline ()" - kogu kasutatud kood Vaarikas tehakse kättesaadavaks artikli lõpus.

Eespool kirjeldatud protseduuri järgides on lugemis- ja saatmispinge etapp lõpule viidud.

6. samm: Arduino programmeerimine:

Nagu varem öeldud, on jalgrattasõidu ajal tekkinud pinge lugemise eest vastutav kood väga lihtne.

Esiteks on vaja pinge lugemise eest vastutavaks valida A0 tihvt.

Funktsioonis "void setup ()" peate määrama tihvti A0 väärtuseks INPUT käsuga "pinMode (sensor, INPUT)" ja valima käsu "Serial.begin (9600)" abil jadapordi edastuskiiruse.

"Void loop ()" -is kasutatakse funktsiooni "Serial.flush ()" puhvri kustutamiseks iga kord, kui see lõpetab teabe saatmise jada kaudu; pinge lugemist teostab funktsioon "analogRead (sensor)" - pidades meeles, et analoogpordi poolt loetud väärtus on vaja teisendada Voltsiks - protsess, millele viidatakse artikli jaotises "lugemispinge".

Samuti on funktsioonis "void loop ()" vaja muutuja x teisendada ujukist stringiks, kuna see on ainus viis muutuja saatmiseks RX-TX kaudu. Silmusfunktsiooni viimane samm on trükkida jadaporti string, et see saaks Raspberryle saata - selleks tuleb kasutada funktsiooni "Serial.println (y)". Rida "viivitus (100)" on koodile lisatud ainult selleks, et muutuja saadetaks 100 ms intervallidega - kui sellest ajast kinni ei peeta, tekib jada ülekoormus, mis tekitab programmis võimalikud krahhid.

pinge_lugemine.ino

ujukandur = A0;
voidsetup () {
pinMode (andur, INPUT);
Seriaalne algus (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (sensor)*0,0048828125*16,67;
String y = "";
y+= x;
Seeria.println (y);
viivitus (100);
}

vaata rawvoltage_read.ino, mille hostiks on GitHub ❤

Samm: Raspberry Pi 3 programmeerimine:

lambid_ratas.py

import os #import os -raamatukogu (kasutatakse vajadusel ekraani tühjendamiseks)
import RPi. GPIOs gpio #import raamatukogu, mida kasutatakse Raspnerry GPIO juhtimiseks
jadaühenduse eest vastutav jada #import raamatukogu
impordi aeg #import raamatukogu, mis võimaldab kasutada viivitusfunktsiooni
importige alamprotsess #import raamatukogu, kes vastutab lugude esitamise eest
#alusta seriaali
ser = serial. Serial ("/dev/ttyS0", 9600) #defineerige seadme nimi ja edastuskiirus
#selge ekraan
selge = lambda: os.system ('selge')
#komplekti tihvtid relee juhtimiseks
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
#rekordite alustamine
nimi = ["puudub"]*10
pinge = [0,00]*10
#loe kirjete fail
f = avatud ('kirjed', 'r')
i inrange (10): #10 parimat tulemust kuvatakse loendis
nimi = f.readline ()
nimi = nimi [: len (nimi )-1]
pinge = f.readline ()
pinge = ujuk (pinge [: len (pinge )-1])
f. sulge ()
selge ()
#seadistage maksimaalne pinge
max = 50,00
#lülitage lambid välja
minu jaoks (11, 24, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. HIGH) #set to HIGH, releed on välja lülitatud
#algus
Kuigi tõsi:
#algne ekraan
print "kirjed: / n"
ma ei arva (10):
prindinimi , ":", pinge , "V"
current_name = raw_input ("Alustuseks kirjutage oma nimi:")
selge ()
#Muuda maksimaalset väärtust
kui praegune_nimi == "max":
max = sisend ("Kirjutage maksimaalne pinge: (2 kohta pärast koma)")
selge ()
muidu:
#alusta hoiatust
i inrange (11, 24, 1): #tsükkel algab PIN -koodist 11 ja lõpeb PIN -koodiga 24
kui i! = 14ja i! = 17ja i! = 20: #PIN 14 ja 20 on GND tihvtid ja 20 on 3,3 V pin
gpio.output (i, gpio. LOW) #lülitage lambid sisse
aeg. uni (0,5)
k = 10
i inrange (23, 10, -1):
selge ()
kui ma! = 14ja mina! = 17ja mina! = 20:
alamprotsess. Ava (['aplay', 'Audios/'+str (k)+'. wav'])
uneaeg (0,03)
selge ()
print "Valmistage ette! / n", k
aeg. uni (1)
k- = 1
gpio.output (i, gpio. HIGH) #lülitage lambid välja (ükshaaval)
alamprotsess. Popen (['aplay', 'Audios/go.wav']) #esitab algmuusikat
uneaeg (0,03)
selge ()
prindi "GO!"
aeg. uni (1)
selge ()
#pinge lugemine
praegune_pinge = 0,00
pinge1 = 0,00
minu jaoks (200):
ser.flushInput ()
eelmine = pinge1
pinge1 = ujuk (ser.readline ()) #kogub Arduino andmeid, mida edastab RX-TX
selge ()
prindipinge1, "V"
kui pinge1> praegune_pinge:
praegune_pinge = pinge1
# sõltuvalt tekitatud pingest süttib rohkem lampe.
kui pinge1 <max/10:
minu jaoks (11, 24, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. HIGH)
kui pinge1> = max/10:
gpio.output (11, gpio. LOW)
minu jaoks (12, 24, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. HIGH)
kui pinge1> = 2*max/10:
minu jaoks (11, 13, 1):
gpio.output (i, gpio. LOW)
minu jaoks (13, 24, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. HIGH)
kui pinge1> = 3*max/10:
minu jaoks (11, 14, 1):
gpio.output (i, gpio. LOW)
minu jaoks (15, 24, 1):
kui ma! = 17ja mina! = 20:
gpio.output (i, gpio. HIGH)
kui pinge1> = 4*max/10:
minu jaoks (11, 16, 1):
kui mina! = 14:
gpio.output (i, gpio. LOW)
minu jaoks (16, 24, 1):
kui ma! = 17ja mina! = 20:
gpio.output (i, gpio. HIGH)
kui pinge1> = 5*max/10:
minu jaoks (11, 17, 1):
kui mina! = 14:
gpio.output (i, gpio. LOW)
minu jaoks (18, 24, 1):
kui mina! = 20:
gpio.output (i, gpio. HIGH)
kui pinge1> = 6*max/10:
I inrange (11, 19, 1):
kui ma! = 14ja mina! = 17:
gpio.output (i, gpio. LOW)
minu jaoks (19, 24, 1):
kui mina! = 20:
gpio.output (i, gpio. HIGH)
kui pinge1> = 7*max/10:
minu jaoks (11, 20, 1):
kui ma! = 14ja mina! = 17:
gpio.output (i, gpio. LOW)
minu jaoks (21, 24, 1):
gpio.output (i, gpio. HIGH)
kui pinge1> = 8*max/10:
minu jaoks (11, 22, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. LOW)
minu jaoks (22, 24, 1):
gpio.output (i, gpio. HIGH)
kui pinge1> = 9*max/10:
minu jaoks (11, 23, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
kui pinge1> = max:
minu jaoks (11, 24, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. LOW)

kui pinge 1

murda
#lülitage lambid välja
minu jaoks (11, 24, 1):
kui ma! = 14ja mina! = 17ja mina! = 20:
gpio.output (i, gpio. HIGH)
#võidukas muusika
kui praegune_pinge> = max:
alamprotsess. Popen (['aplay', 'Audios/rocky.wav'])
uneaeg (0,03)
selge ()
prindi "VÄGA hea, sa võitsid!"% (u '\u00c9', u '\u00ca', u '\u00c2')
ma ei arva (10):
j inrange jaoks (11, 24, 1):
kui j! = 14ja j! = 17ja j! = 20:
gpio.output (j, gpio. LOW)
uneaeg (0,05)
j inrange jaoks (11, 24, 1):
kui j! = 14ja j! = 17ja j! = 20:
gpio.output (j, gpio. HIGH)
uneaeg (0,05)
aeg. uni (0,5)
alamprotsess. Popen (['aplay', 'Audios/end.wav'])
uneaeg (0,03)
selge ()
print "Lõpeta mäng… / n", praegune_pinge, "V"
#rekordid
time.sleep (1.2)
saavutatud = 0
ma ei arva (10):
kui praegune_pinge> pinge :
jõudis+= 1
temp_voltage = pinge
pinge = praegune_pinge
praegune_pinge = temp_pinge
temp_name = nimi
nimi = praegune_nimi
praegune_nimi = ajutine_nimi
kui saavutatud> 0:
alamprotsess. Popen (['aplay', 'Audios/record.wav'])
uneaeg (0,03)
selge ()
f = avatud ('kirjed', 'w')
ma ei arva (10):
f.write (nimi )
f.write ("\ n")
f.write (str (pinge ))
f.write ("\ n")
f. sulge ()
selge ()

vaata rawlamps_bike.py, mille hostiks on GitHub ❤

8. samm: elektriskeem:

Elektriskeem
Elektriskeem
Elektriskeem
Elektriskeem
Elektriskeem
Elektriskeem

Arduino ja Raspberry Pi 3 toiteallikaks on 3 V vooluga 5 V allikas.

Elektriahel algab alalisvoolugeneraatori (jalgrattaga ühendatud) ühendamisega Arduinoga läbi pingefiltri, mis koosneb 5,3 V Zeneri dioodist, 10 μF kondensaatorist ja 1 kΩ takistusest - filtri sisend on ühendatud generaatori klemmid ja väljund on ühendatud kontrolleri A0 -porti ja GND -ga.

Arduino on Raspberryga ühendatud RX-TX-side kaudu-seda tehakse läbi takistusjaoturi, kasutades 10 kΩ takisteid (seda vajavad erinevatel pingetel töötavad kontrollerite pordid).

Raspberry Pi GPIO -d on ühendatud lampide sisselülitamise eest vastutavate releedega. Kõigi releede “COM” ühendati omavahel ja ühendati faasiga (vahelduvvooluvõrk) ning iga relee “N. O” (tavaliselt avatud) ühendati iga lambiga ja vahelduvvooluvõrgu neutraal oli ühendatud kõigi lampidega. Seega, kui iga relee eest vastutav GPIO on aktiveeritud, lülitatakse relee vahelduvvooluvõrgu faasi ja lülitatakse vastav lamp sisse.

9. samm: Tulemused:

Image
Image

Pärast projekti lõplikku kokkupanekut kontrolliti, et see töötas ootuspäraselt - vastavalt kiirusele, mida kasutaja jalgrattaga pedaalib, tekib rohkem pinget ja süttib rohkem lampe.

Soovitan: