Sisukord:
- Samm: materjalid:
- Samm: süsteemiplokkide skeem:
- Samm: süsteemi toimimine:
- 4. samm: mehaanika aspektid
- 5. samm: pinge näit:
- 6. samm: Arduino programmeerimine:
- Samm: Raspberry Pi 3 programmeerimine:
- 8. samm: elektriskeem:
- 9. samm: Tulemused:
Video: Pinge tekitamine ergomeetrirattaga: 9 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
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:
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
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:
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:
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:
Mitme kanaliga Wifi pinge- ja voolumõõtur: 11 sammu (piltidega)
Mitme kanaliga Wifi pinge- ja voolumõõtur: leivaplaadi paigaldamisel tuleb sageli jälgida vooluahela erinevaid osi korraga. Et vältida valu, mis peaks multimeetri sondid ühest kohast teise kleepima, tahtsin kujundada mitme kanaliga pinge- ja voolumõõturi. Ina260 plaat
Jõulupuu tulede aku pinge tester: 12 sammu (piltidega)
Jõulupuu tulede aku pinge tester: pärast jõule võisid teil olla purunenud lambid, mis enam ei sütti. Saate neid kasutada paljude huvitavate projektide jaoks, nagu näiteks see. Selle 1,5 V aku tester, mis kasutab kuvarina jõulupuu tulesid
Fotoelastsimeetria: mehaanilise pinge nägemine optikaga: 5 sammu (piltidega)
Fotoelastsimeetria: mehaanilise pinge nägemine optikaga: fotoelastikomeetria on viis materjalide tüvede visualiseerimiseks. Selles juhendis näeme, kuidas saate teha mõningaid proove, et katseliselt kindlaks määrata pingejaotus mõnes materjalis mehaanilise koormuse all
Alalisvoolu pinge mõõtmine Arduino ja Node-RED abil: 8 sammu (piltidega)
Alalispinge mõõtmine Arduino ja Node-RED abil: Arduinoga on palju alalispinge mõõtmise õpetusi, sel juhul leidsin õpetuse, mida pean parimaks funktsionaalseks meetodiks alalisvoolu mõõtmiseks ilma takistuse sisendväärtusi nõudmata, nõuab ainult teatud takistust ja multimeeter
Vintage pinge vanadele seadmetele: 12 sammu (piltidega)
Vintage pinge vanadele seadmetele: töötan paljude vintage torude/ventiilidega kitarrivõimendite kallal ja vanemad ootavad võrgupinget kuskil vahemikus 115-117 VAC. Tänapäeva Põhja-Ameerika elektrivõrk on tänapäeval tavaliselt oluliselt kõrgem, sageli vahemikus 124–126 volti. Kasutades kõrgemat