Përmbajtje:
- Hapi 1: Materialet:
- Hapi 2: Diagrami i Blloqeve të Sistemit:
- Hapi 3: Funksionimi i sistemit:
- Hapi 4: Aspektet e Mekanikës
- Hapi 5: Leximi i tensionit:
- Hapi 6: Programimi Arduino:
- Hapi 7: Programimi i Raspberry Pi 3:
- Hapi 8: Skema elektrike:
- Hapi 9: Rezultatet:
Video: Gjenerimi i tensionit me një biçikletë ergometër: 9 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:24
Përpunimi i projektit konsistoi në montimin e një "loje" me objektivin për të pedaluar në një biçikletë ergometër të lidhur me një gjenerator dhe një kullë llambash që aktivizohen me rritjen e shpejtësisë së motorit - që ndodh sipas pedalimit të biçikletës. Sistemi u bazua në leximin-përmes një porti analog të një Arduino Mega-tensionin e çastit të gjeneruar, pastaj transmetimin e këtyre të dhënave në një Raspberry Pi 3 përmes komunikimit serik RX-TX dhe aktivizimin pasues të llambave përmes stafetës.
Hapi 1: Materialet:
- 1 mjedër Pi 3;
- 1 Arduino Mega 2560;
- 1 Mburojë Stafetë me 10 Rele 12 V;
- 10 llamba inkandeshente 127 V;
- 1 biçikletë ergometër;
- 1 Makinë Elektrike (Gjenerator) 12 V;
- Rezistenca (1x1kΩ, 2x10kΩ);
- 1 Kondensator elektrolitik 10 μF;
- 1 Zener Diodë 5.3 V;
- Kabllo 1.5 mm (e kuqe, e zezë, kafe);
- 1 kullë MDF me mbështetje për 10 llamba.
Hapi 2: Diagrami i Blloqeve të Sistemit:
Hapi 3: Funksionimi i sistemit:
Sistemi bazohet në transformimin e energjisë kinetike të gjeneruar kur lëviz biçikletën me energji elektrike përgjegjëse për aktivizimin e stafetëve që do të ndezin llambat.
Tensioni i gjeneruar nga gjeneratori lexohet nga një pin analog i Arduino dhe dërgohet përmes RX-TX në Raspberry Pi. Aktivizimi i stafetëve është proporcional me tensionin e gjeneruar - sa më i lartë të jetë tensioni, aq më shumë stafetë do të ndizen dhe më shumë llamba do të ndizen.
Hapi 4: Aspektet e Mekanikës
Për të bashkuar mekanikisht gjeneratorin DC me biçikletën, sistemi i rripit duhej të zëvendësohej nga sistemi i përdorur në biçikletat e zakonshme (i përbërë nga një kurorë, zinxhir dhe majë). Një pllakë metalike ishte ngjitur në kornizën e biçikletës në mënyrë që motori të mund të fiksohej me vida. Pas kësaj, maja ishte ngjitur në boshtin e gjeneratorit në mënyrë që zinxhiri të mund të vendoset, duke lidhur sistemin e pedalimit me gjeneratorin.
Hapi 5: Leximi i tensionit:
Për të lexuar tensionin e gjeneratorit duke përdorur Arduino është e nevojshme të lidhni polin pozitiv të makinës elektrike me pinin A0 të kontrolluesit dhe polin negativ me GND - për të shmangur që tensioni maksimal i gjeneratorit të jetë më i madh se 5 V i Kunjat Arduino, një filtër tensioni duke përdorur një kondensator prej 10 µF, një rezistencë prej 1 kΩ dhe një diodë Zener prej 5.3 V u ndërtuan dhe u lidhën midis kontrolluesit dhe gjeneratorit. Firmueri i ngarkuar në Arduino është shumë i thjeshtë dhe konsiston vetëm në leximin e një porti analog, shumëzimin e vlerës së lexuar me konstantën 0.0048828125 (5/1024, që është tensioni GPIO i Arduino -s i ndarë me numrin e bitëve të portës së tij analoge) dhe dërgimin e e ndryshueshme në Serial - kodi do të jetë i disponueshëm në artikull.
Procedura për të mundësuar komunikimin RX-TX në Raspberry Pi është pak më komplekse dhe duhet të ndiqni procedurën e përshkruar në lidhje. Shkurtimisht, ju duhet të redaktoni një skedar të quajtur "inittab" -i vendosur në "/etc/inittab" -, komentoni rreshtin "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (nëse skedari nuk është themeluar në OS të Raspberry, duhet të futni komandën: "sudo leafpad /boot/config.txt" dhe të shtoni rreshtin "enable_uart = 1" në fund të skedarit). Pasi të bëhet kjo, duhet të rihapni Terminalin LX dhe të çaktivizoni Serialin me komandat "sudo systemctl stop [email protected]" dhe "sudo systemctl çaktivizoni [email protected]". Pas kësaj ju duhet të ekzekutoni komandën "sudo leafpad /boot/cmdline.txt", fshini rreshtin "console = serial0, 115200", ruani skedarin dhe rinisni pajisjen. Në mënyrë që komunikimi RX-TX të jetë i mundur, biblioteka Seriale duhet të instalohet në Raspberry Pi me komandën "sudo apt-get install -f python-serial" dhe të importojë bibliotekën në kod duke futur rreshtin "import serial", duke inicializuar serialin duke futur rreshtin "ser = serial. Serial (" / dev / ttyS0 ", 9600)" dhe leximin e tensionit të dërguar nga Arduino duke përdorur komandën "ser.readline ()" - kodi i plotë i përdorur në mjedër do të vihet në dispozicion në fund të artikullit.
Duke ndjekur procedurën e përshkruar më sipër, hapi i leximit dhe dërgimit të tensionit është i plotë.
Hapi 6: Programimi Arduino:
Siç u tha më parë, kodi përgjegjës për leximin e tensionit të gjeneruar gjatë çiklizmit është shumë i thjeshtë.
Së pari, është e nevojshme të zgjidhni pinin A0 si përgjegjës për leximin e tensionit.
Në funksionin "void setup ()", duhet të vendosni pin A0 në INPUT me komandën "pinMode (sensor, INPUT)" dhe zgjidhni shpejtësinë e transmetimit të portit serik duke përdorur komandën "Serial.begin (9600)".
Në "void loop ()", funksioni "Serial.flush ()" përdoret për të pastruar bufferin sa herë që ai përfundon dërgimin e informacionit përmes serialit; leximi i tensionit kryhet nga funksioni "analogRead (sensor)" - duke kujtuar se është e nevojshme të konvertohet vlera e lexuar nga porti analog në Volt - proces i cituar në seksionin "tensioni i leximit" të artikullit.
Gjithashtu, në funksionin "void loop ()", është e nevojshme të konvertohet ndryshorja x nga float në string, pasi kjo është mënyra e vetme për të dërguar ndryshoren nëpërmjet RX-TX. Hapi i fundit në funksionin e lakut është të printoni vargun në portin serik në mënyrë që të mund të dërgohet te Raspberry - për këtë ju duhet të përdorni funksionin "Serial.println (y)". Linja "vonesë (100)" i është shtuar kodit vetëm në mënyrë që ndryshorja të dërgohet në intervale prej 100 ms - nëse kjo kohë nuk respektohet, mbingarkesa Serike do të ndodhë, duke gjeneruar përplasje të mundshme në program.
leximi i tensionit.ino
sensori notues = A0; |
voidsetup () { |
pinMode (sensor, INPUT); |
Serial.filloj (9600); |
} |
voidloop () { |
Serial.flush (); |
noton x = analogRead (sensor)*0.0048828125*16.67; |
Vargu y = ""; |
y+= x; |
Serial.println (y); |
vonesa (100); |
} |
shikoni rawvoltage_read.ino të organizuar me ❤ nga GitHub
Hapi 7: Programimi i Raspberry Pi 3:
llambat_bike.py
importo os #importo bibliotekën os (përdoret për të pastruar ekranin kur është e nevojshme) |
importo RPi. GPIOas gpio #import bibliotekë e përdorur për të kontrolluar GPIO -n e Raspnerry |
importoni seri #bibliotekë importi përgjegjëse për komunikimin serik |
koha e importimit #biblioteka e importit që bën të mundur përdorimin e funksionit të vonesës |
importo nënproces #bibliotekë importi përgjegjëse për luajtjen e këngëve |
serial #fillo |
ser = serial. Serial ("/dev/ttyS0", 9600) #përcaktoni emrin e pajisjes dhe shkallën e baudit |
#ekran i pastër |
qartë = lambda: os.system ('qartë') |
#vendosni kunjat për kontrollin e stafetës |
gpio.setmode (gpio. BOARD) |
gpio.setup (11, gpio. OUT) #llambë 10 |
gpio.setup (12, gpio. OUT) #llambë 9 |
gpio.setup (13, gpio. OUT) #llambë 8 |
gpio.setup (15, gpio. OUT) #llambë 7 |
gpio.setup (16, gpio. OUT) #llambë 6 |
gpio.setup (18, gpio. OUT) #llambë 5 |
gpio.setup (19, gpio. OUT) #llambë 4 |
gpio.setup (21, gpio. OUT) #llambë 3 |
gpio.setup (22, gpio. OUT) #llambë 2 |
gpio.setup (23, gpio. OUT) #llambë 1 |
#fillo regjistrimet |
emri = ["Asnjë"]*10 |
tension = [0.00]*10 |
#lexoni skedarin e regjistrimeve |
f = hapur ('regjistrimet', 'r') |
për i inrange (10): #10 rezultatet më të mira shfaqen në listë |
emri = f. leximi () |
emri = emri [: len (emri )-1] |
tension = f. linja e leximit () |
tension = notues (tension [: len (tension )-1]) |
f. mbyll () |
qartë() |
#caktoni tensionin maksimal |
max = 50.00 |
#fikni llambat |
për i inrange (11, 24, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.output (i, gpio. HIGHT) #vendos në LART, stafetat janë të fikura |
#fillo |
ndërsa e vërtetë: |
#ekran fillestar |
printoni "Regjistrimet: / n" |
për inrange (10): |
emri i printuar , ":", tensioni , "V" |
emri aktual = input_ i papërpunuar ("Shkruaj emrin tënd për të filluar:") |
qartë() |
#Ndrysho vlerën maksimale |
nëse emri aktual == "max": |
max = input ("Shkruani tensionin maksimal: (2 shifra dhjetore)") |
qartë() |
tjeter: |
#paralajmërim për fillimin |
për i inrange (11, 24, 1): #lak fillon në PIN 11 dhe ndalet në PIN 24 |
nëse i! = 14 dhe i! = 17 dhe i! = 20: #PIN 14 dhe 20 janë kunja GND dhe 20 është një kunj 3.3 V |
gpio.output (i, gpio. LOW) #ndez llambat |
koha. gjumi (0.5) |
k = 10 |
për i inrange (23, 10, -1): |
qartë() |
nëse i! = 14dhe i! = 17dhe i! = 20: |
nënproces. Hap (('' aplay ',' Audios/'+str (k)+'. wav ']) |
koha. gjumi (0.03) |
qartë() |
shtyp "Përgatit! / n", k |
koha. gjumi (1) |
k- = 1 |
gpio.output (i, gpio. HIGHT) #fikni llambat (një nga një) |
nënproces. Hap ((['aplay', 'Audios/go.wav']) #luan muzikën e fillimit |
koha. gjumi (0.03) |
qartë() |
shtyp "SHKO!" |
koha. gjumi (1) |
qartë() |
#tension i lexuar |
tensioni aktual = 0.00 |
tension1 = 0.00 |
për inrange (200): |
ser.flushInput () |
e mëparshme = tension1 |
tension1 = noton (ser.readline ()) #mbledh të dhënat e Arduino të transferuara nga RX-TX |
qartë() |
tensioni i printimit1, "V" |
nëse tensioni 1> tensioni aktual: |
rryma_tension = tension1 |
# në varësi të tensionit të gjeneruar, më shumë llamba ndizen. |
nëse tension1 <max/10: |
për i inrange (11, 24, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = max/10: |
gpio.putput (11, gpio. LOW) |
për inrange (12, 24, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 2*max/10: |
për i inrange (11, 13, 1): |
gpio.putput (i, gpio. LOW) |
për i inrange (13, 24, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 3*max/10: |
për inrange (11, 14, 1): |
gpio.putput (i, gpio. LOW) |
për i inrange (15, 24, 1): |
nëse unë! = 17dhe unë! = 20: |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 4*max/10: |
për i inrange (11, 16, 1): |
nëse unë! = 14: |
gpio.putput (i, gpio. LOW) |
për i inrange (16, 24, 1): |
nëse unë! = 17dhe unë! = 20: |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 5*max/10: |
për inrange (11, 17, 1): |
nëse unë! = 14: |
gpio.putput (i, gpio. LOW) |
për inrange (18, 24, 1): |
nëse unë! = 20: |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 6*max/10: |
për i inrange (11, 19, 1): |
nëse unë! = 14dhe unë! = 17: |
gpio.putput (i, gpio. LOW) |
për i inrange (19, 24, 1): |
nëse unë! = 20: |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 7*max/10: |
për inrange (11, 20, 1): |
nëse unë! = 14dhe unë! = 17: |
gpio.putput (i, gpio. LOW) |
për i inrange (21, 24, 1): |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 8*max/10: |
për i inrange (11, 22, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.putput (i, gpio. LOW) |
për i inrange (22, 24, 1): |
gpio.putput (i, gpio. HIGHT) |
nëse tension1> = 9*max/10: |
për i inrange (11, 23, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.putput (i, gpio. LOW) |
gpio.output (23, gpio. HIGHT) |
nëse tension1> = max: |
për i inrange (11, 24, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.putput (i, gpio. LOW) |
nëse tensioni 1 |
pushim |
#fikni llambat |
për i inrange (11, 24, 1): |
nëse i! = 14dhe i! = 17dhe i! = 20: |
gpio.putput (i, gpio. HIGHT) |
#muzikë fitore |
nëse tensioni aktual> = max: |
nënproces. Hap ((['aplay', 'Audios/rocky.wav']) |
koha. gjumi (0.03) |
qartë() |
printoni "SHUMY MIR, FITONI!"% (u '\u00c9', u '\u00ca', u '\u00c2') |
për inrange (10): |
për j inrange (11, 24, 1): |
nëse j! = 14and j! = 17dhe j! = 20: |
gpio.putput (j, gpio. LOW) |
koha. gjumi (0.05) |
për j inrange (11, 24, 1): |
nëse j! = 14and j! = 17dhe j! = 20: |
gpio.putput (j, gpio. HIGHT) |
koha. gjumi (0.05) |
koha. gjumi (0.5) |
nënproces. Hap ((['aplay', 'Audios/end.wav']) |
koha. gjumi (0.03) |
qartë() |
printoni "Përfundoni lojën … / n", tensionin aktual, "V" |
#regjistrime |
koha. gjumi (1.2) |
arriti = 0 |
për inrange (10): |
nëse tensioni aktual> tensioni : |
arriti+= 1 |
temp_voltage = tension |
tension = tension_ aktual |
tension_ aktual = tension_voltage |
temp_name = emri |
emri = emri aktual |
emri aktual = emri temp_ |
nëse arrihet> 0: |
nënproces. Hap ((['aplay', 'Audios/record.wav']) |
koha. gjumi (0.03) |
qartë() |
f = hapur ('regjistrimet', 'w') |
për inrange (10): |
f.shkruaj (emri ) |
f.shkruaj ("\ n") |
f.shkruani (str (tension )) |
f.shkruaj ("\ n") |
f. mbyll () |
qartë() |
shiko rawlamps_bike.py e pritur me ❤ nga GitHub
Hapi 8: Skema elektrike:
Arduino dhe Raspberry Pi 3 mundësohen nga një burim 5V me rrymë 3A.
Qarku elektrik fillon me lidhjen e gjeneratorit DC (të lidhur me biçikletën) me Arduino përmes një filtri tensioni të përbërë nga një diodë Zener prej 5.3V, një kondensatori 10μF dhe një rezistencë 1kΩ - hyrja e filtrit është e lidhur me terminalet e gjeneratorit dhe dalja lidhet me portën A0 dhe GND të kontrolluesit.
Arduino është i lidhur me mjedrën përmes komunikimit RX-TX-i kryer përmes një ndarësi rezistent duke përdorur rezistorë 10kΩ (të kërkuar nga portat e kontrolluesve që veprojnë në tensione të ndryshme).
GPIO -të e Raspberry Pi janë të lidhura me stafetat përgjegjëse për ndezjen e llambave. "COM" i të gjithë stafetëve ishte i ndërlidhur dhe i lidhur me fazën (rrjeti AC) dhe "N. O" (normalisht e hapur) e secilës stafetë ishte e lidhur me secilën llambë dhe neutralja e rrjetit AC ishte e ndërlidhur me të gjitha llambat. Kështu, kur aktivizohet GPIO përgjegjës për secilën stafetë, stafeta kalon në fazën e rrjetit AC dhe ndez llambën përkatëse.
Hapi 9: Rezultatet:
Pas montimit përfundimtar të projektit, u verifikua se ai funksionoi siç pritej - sipas shpejtësisë që përdoruesi pedalon në biçikletë, gjenerohet më shumë tension dhe ndizen më shumë llamba.
Recommended:
Gjenerimi i artit nga komentet: 5 hapa (me fotografi)
Gjenerimi i Artit nga Komentet: Ky projekt është një projekt ambicioz, ku ne duam të përdorim disa nga pjesët më të diskutueshme të internetit, seksionet e komenteve dhe dhomat e bisedave, për të krijuar art. Ne gjithashtu duam ta bëjmë projektin lehtësisht të arritshëm në mënyrë që çdokush të mund të provojë dorën e tij në krijimin
Ecni me biçikletë një dritë kopshti diellor në një RBG: 7 hapa (me fotografi)
Up Cycling a Solar Garden Garden to a RBG: Ka shumë video në Youtube në lidhje me riparimin e dritave diellore të kopshtit; duke zgjatur jetëgjatësinë e baterisë së dritës së kopshtit diellor në mënyrë që ata të funksionojnë më gjatë gjatë natës, dhe një mori hake të tjera. Ky udhëzues është pak më ndryshe nga ato që gjeni në Y
Furnizimi me energji DC i Tensionit të Rregullueshëm Duke përdorur Rregullatorin e Tensionit LM317: 10 Hapa
Furnizimi me Rrymë i Tensionit i Rregullueshëm Duke Përdorur Rregullatorin e Tensionit LM317: Në këtë projekt, unë kam hartuar një furnizim të thjeshtë me tension të rregullueshëm DC duke përdorur IC LM317 me një diagram qarkor të furnizimit me energji LM317. Meqenëse ky qark ka një ndreqës të integruar të urës, kështu që ne mund të lidhim drejtpërdrejt furnizimin AC 220V/110V në hyrje.
Blerja e të Dhënave dhe Sistemi i Vizualizimit të të Dhënave për një Biçikletë Garash MotoStudente Elektrike: 23 hapa
Sistemi i marrjes së të dhënave dhe vizualizimi i të dhënave për një motoçikletë MotoStudent Electric Racing: Një sistem i marrjes së të dhënave është një koleksion i pajisjeve dhe programeve kompjuterike që punojnë së bashku për të mbledhur të dhëna nga sensorë të jashtëm, për t'i ruajtur dhe përpunuar ato më pas në mënyrë që të mund të vizualizohen dhe analizohen, duke lejuar inxhinierët të bëjnë
Si të bëni një qark të kontrolluesit të tensionit duke përdorur një transistor 13003: 6 hapa
Si të krijoni një qark të kontrolluesit të tensionit duke përdorur transistorin 13003: Hii mik, sot do të bëj një qark të kontrolluesit të tensionit që do të japë furnizim me energji të tensionit të ndryshueshëm. Kur bëjmë projekte elektronike atëherë na duhen tensione të ndryshme për të operuar qarkun. Kjo është arsyeja pse Unë do të bëj këtë