Tartalomjegyzék:
- 1. lépés: Anyagok:
- 2. lépés: A rendszerblokkok diagramja:
- 3. lépés: A rendszer működése:
- 4. lépés: Mechanikai szempontok
- 5. lépés: Feszültség leolvasása:
- 6. lépés: Arduino programozás:
- 7. lépés: Raspberry Pi 3 programozás:
- 8. lépés: Elektromos rendszer:
- 9. lépés: Eredmények:
Videó: Feszültség generálása ergométeres kerékpárral: 9 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
A projekt kidolgozása egy „játék” összeállításából állt, amelynek célja a generátorhoz csatlakoztatott ergométeres kerékpár pedálozása és a lámpák tornya, amelyek a motor fordulatszámának növekedésével aktiválódnak - ami a kerékpár pedálozásával jár. A rendszer az Arduino Mega analóg portján keresztül leolvasta a pillanatnyi feszültséget, majd továbbította ezeket az adatokat egy Raspberry Pi 3-nak soros RX-TX kommunikáción keresztül, majd a lámpákat ezt követően relén keresztül aktiválta.
1. lépés: Anyagok:
- 1 Málna Pi 3;
- 1 Arduino Mega 2560;
- 1 relépajzs 10 relével 12 V;
- 10 izzólámpa 127 V;
- 1 Ergométer kerékpár;
- 1 elektromos gép (generátor) 12 V;
- Ellenállások (1x1kΩ, 2x10kΩ);
- 1 elektrolitikus kondenzátor 10 µF;
- 1 Zener dióda 5,3 V;
- 1,5 mm -es kábel (piros, fekete, barna);
- 1 MDF torony 10 lámpa támogatásával.
2. lépés: A rendszerblokkok diagramja:
3. lépés: A rendszer működése:
A rendszer a kerékpár kerékpározásakor keletkező mozgási energia átalakításán alapul, olyan elektromos energiában, amely felelős a lámpákat bekapcsoló relék aktiválásáért.
A generátor által generált feszültséget az Arduino analóg csapja olvassa le, és RX-TX-en keresztül továbbítja a Raspberry Pi-hez. A relék aktiválása arányos a generált feszültséggel - minél nagyobb a feszültség, annál több relé aktiválódik, és több lámpa világít.
4. lépés: Mechanikai szempontok
Annak érdekében, hogy az egyenáramú generátort mechanikusan össze lehessen kapcsolni a kerékpárral, az övrendszert ki kellett cserélni a közös kerékpárokon használt rendszerre (koronából, láncból és fogaskerékből). A kerékpár keretéhez fémlemezt hegesztettek, hogy a motort csavarokkal lehessen rögzíteni. Ezt követően a fogaskereket a generátor tengelyéhez hegesztették, hogy a láncot elhelyezhessék, összekötve a pedálrendszert a generátorral.
5. lépés: Feszültség leolvasása:
A generátor feszültségének Arduino segítségével történő leolvasásához az elektromos gép pozitív pólusát a vezérlő A0 -ás érintkezőjéhez, a negatív pólust pedig a GND -hez kell csatlakoztatni - annak elkerülése érdekében, hogy a generátor maximális feszültsége nagyobb legyen, mint a feszültség 5 V Arduino csapokat, 10 µF kondenzátort használó feszültségszűrőt, 1 kΩ -os ellenállást és 5,3 V -os Zener -diódát állítottak össze és csatlakoztattak a vezérlő és a generátor közé. Az Arduino -ba betöltött firmware nagyon egyszerű, és csak egy analóg port olvasásából áll, szorozza meg az értéket az állandó 0.0048828125 (5/1024, azaz az Arduino GPIO feszültsége osztva az analóg portja bitjeinek számával) állandó értékkel, és küldje el a változó a soroshoz - a kód elérhető lesz a cikkben.
Az RX-TX kommunikáció engedélyezésének eljárása a Raspberry Pi-ben egy kicsit összetettebb, és be kell tartania a linkben leírt eljárást. Röviden, szerkesztenie kell egy „inittab” nevű fájlt, amely az „/etc/inittab” mappában található, megjegyzést fűz a „T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100” sorhoz (ha a fájl nem a Raspberry operációs rendszerében alapul, be kell írnia a „sudo leafpad /boot/config.txt” parancsot, és hozzá kell fűznie az „enable_uart = 1” sort a fájl végéhez). Miután ez megtörtént, újra kell nyitnia az LX terminált, és le kell tiltania a sorozatot a "sudo systemctl stop [email protected]" és "sudo systemctl disable [email protected]" parancsokkal. Ezt követően végre kell hajtania a "sudo leafpad /boot/cmdline.txt" parancsot, törölnie kell a "console = serial0, 115200" sort, mentse a fájlt és indítsa újra az eszközt. Annak érdekében, hogy az RX-TX kommunikáció lehetséges legyen, a Soros könyvtárat telepíteni kell a Raspberry Pi-re a "sudo apt-get install -f python-serial" paranccsal, és importálni kell a könyvtárat a kódba az "import serial" sor beszúrásával, inicializálja a sorozatot a "ser = serial. Serial (" / dev / ttyS0 ", 9600)" sor beillesztésével és az Arduino által küldött feszültség leolvasásával a "ser.readline ()" paranccsal - a teljes használt kód in Raspberry címen elérhetővé válik a cikk végén.
A fent leírt eljárást követően az olvasási és küldési feszültség lépése befejeződött.
6. lépés: Arduino programozás:
Mint korábban említettük, a kerékpározás során generált feszültség leolvasásáért felelős kód nagyon egyszerű.
Először is ki kell választani az A0 tűt, amely felelős a feszültség leolvasásáért.
A "void setup ()" funkcióban az A0 érintkezőt INPUT értékre kell állítani a "pinMode (sensor, INPUT)" paranccsal, és a "Serial.begin (9600)" paranccsal ki kell választani a soros port átviteli sebességét.
A "void loop ()" -ban a "Serial.flush ()" funkció a puffer törlésére szolgál minden alkalommal, amikor befejezi az információ küldését a soros kapcsolaton keresztül; a feszültség leolvasását az "analogRead (sensor)" funkció végzi - emlékezve arra, hogy az analóg port által leolvasott értéket át kell alakítani Volt -ra - a cikk "olvasási feszültség" című szakaszában hivatkozott folyamatra.
Ezenkívül a "void loop ()" függvényben az x változót floatból karakterlánccá kell konvertálni, mivel csak így lehet elküldeni a változót RX-TX-en keresztül. A ciklusfunkció utolsó lépése, hogy kinyomtatja a karakterláncot a soros portban, hogy el lehessen küldeni a Raspberry -nek - ehhez a "Serial.println (y)" funkciót kell használnia. A "delay (100)" sort csak úgy adtuk hozzá a kódhoz, hogy a változót 100 ms -os időközönként küldjük - ha ezt az időt nem tartják be, akkor soros túlterhelés lép fel, ami esetleges összeomlásokat generál a programban.
feszültség_olvasás.ino
úszó érzékelő = A0; |
voidsetup () { |
pinMode (érzékelő, BEMENET); |
Sorozat.kezdet (9600); |
} |
voidloop () { |
Serial.flush (); |
float x = analogRead (érzékelő)*0,0048828125*16,67; |
Karakterlánc y = ""; |
y+= x; |
Soros.println (y); |
késleltetés (100); |
} |
Tekintse meg a rawvoltage_read.ino webhelyet, amelyet a GitHub ❤ üzemeltet
7. lépés: Raspberry Pi 3 programozás:
lámpák_bike.py
import os #import az os könyvtár (szükség esetén a képernyő törlésére szolgál) |
import RPi. GPIOA gpio #import könyvtár a Raspnerry GPIO vezérlésére szolgál |
importálja a soros kommunikációért felelős serial #import könyvtárat |
import time #import library, amely lehetővé teszi a késleltetés funkció használatát |
importálja a dalok lejátszásáért felelős #import könyvtárat |
#sorozat indítása |
ser = serial. Serial ("/dev/ttyS0", 9600) #definálja az eszköz nevét és az átviteli sebességet |
#tiszta képernyő |
világos = lambda: os.system ('tiszta') |
#set csapok a relé vezérléséhez |
gpio.setmode (gpio. BOARD) |
gpio.setup (11, gpio. OUT) #lámpa 10 |
gpio.setup (12, gpio. OUT) #lámpa 9 |
gpio.setup (13, gpio. OUT) #lámpa 8 |
gpio.setup (15, gpio. OUT) #lámpa 7 |
gpio.setup (16, gpio. OUT) #lámpa 6 |
gpio.setup (18, gpio. OUT) #lámpa 5 |
gpio.setup (19, gpio. OUT) #lámpa 4 |
gpio.setup (21, gpio. OUT) #lámpa 3 |
gpio.setup (22, gpio. OUT) #lámpa 2 |
gpio.setup (23, gpio. OUT) #lámpa 1 |
#rekordok indítása |
név = ["Nincs"]*10 |
feszültség = [0.00]*10 |
#read records fájl |
f = open ('rekordok', 'r') |
for i inrange (10): #a 10 legjobb eredmény jelenik meg a listán |
név = f.readline () |
név = név [: len (név )-1] |
feszültség = f.readline () |
feszültség = úszó (feszültség [: len (feszültség )-1]) |
f. bezár () |
egyértelmű() |
#állítsa be a maximális feszültséget |
max = 50,00 |
#kapcsolja ki a lámpákat |
in inrange (11, 24, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. HIGH) #set HIGH, a relék ki vannak kapcsolva |
#Rajt |
míg igaz: |
#kezdőképernyő |
nyomtatás "Rekordok: / n" |
én inrange (10): |
nyomtatási név , ":", feszültség , "V" |
current_name = raw_input ("Írja be nevét a kezdéshez:") |
egyértelmű() |
#Módosítsa a maximális értéket |
ha jelenlegi_név == "max": |
max = bemenet ("Írja be a maximális feszültséget: (2 tizedesjegy)") |
egyértelmű() |
más: |
#indítsa el a figyelmeztetést |
for i inrange (11, 24, 1): #a hurok a 11 -es PIN -kódban kezdődik és a 24 -es PIN -ben áll meg |
ha i! = 14 és i! = 17 és i! = 20: #PIN 14 és 20 GND csapok, 20 pedig 3,3 V -os pin |
gpio.output (i, gpio. LOW) #kapcsolja be a lámpákat |
time.sleep (0,5) |
k = 10 |
in inrange (23, 10, -1): |
egyértelmű() |
ha i! = 14 és i! = 17 és i! = 20: |
alfolyamat. Popen (['aplay', 'Audios/'+str (k)+'. wav']) |
time.sleep (0.03) |
egyértelmű() |
print "Készülj fel! / n", k |
time.sleep (1) |
k- = 1 |
gpio.output (i, gpio. HIGH) #kapcsolja ki a lámpákat (egyenként) |
alprocess. Popen (['aplay', 'Audios/go.wav']) #lejátssza a kezdő zenét |
time.sleep (0.03) |
egyértelmű() |
nyomtatni "GO!" |
time.sleep (1) |
egyértelmű() |
#feszültségolvasás |
áram_feszültség = 0,00 |
feszültség1 = 0,00 |
én inrange (200): |
ser.flushInput () |
előző = feszültség1 |
feszültség1 = lebegés (ser.readline ()) #gyűjti az Arduino RX-TX által továbbított adatait |
egyértelmű() |
nyomtatási feszültség1, "V" |
ha feszültség1> áram_feszültség: |
áram_feszültség = feszültség1 |
# a generált feszültségtől függően több lámpa világít. |
ha feszültség1 <max/10: |
in inrange (11, 24, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = max/10: |
gpio.output (11, gpio. LOW) |
in inrange (12, 24, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 2*max/10: |
in inrange (11, 13, 1): |
gpio.output (i, gpio. LOW) |
in inrange (13, 24, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 3*max/10: |
in inrange (11, 14, 1): |
gpio.output (i, gpio. LOW) |
in inrange (15, 24, 1): |
ha én! = 17 és én! = 20: |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 4*max/10: |
in inrange (11, 16, 1): |
ha én! = 14: |
gpio.output (i, gpio. LOW) |
in inrange (16, 24, 1): |
ha én! = 17 és én! = 20: |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 5*max/10: |
in inrange (11, 17, 1): |
ha én! = 14: |
gpio.output (i, gpio. LOW) |
in inrange (18, 24, 1): |
ha én! = 20: |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 6*max/10: |
in inrange (11, 19, 1): |
ha én! = 14 és én! = 17: |
gpio.output (i, gpio. LOW) |
in inrange (19, 24, 1): |
ha én! = 20: |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 7*max/10: |
in inrange (11, 20, 1): |
ha én! = 14 és én! = 17: |
gpio.output (i, gpio. LOW) |
in inrange (21, 24, 1): |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 8*max/10: |
in inrange (11, 22, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. LOW) |
in inrange (22, 24, 1): |
gpio.output (i, gpio. HIGH) |
ha feszültség1> = 9*max/10: |
in inrange (11, 23, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. LOW) |
gpio.output (23, gpio. HIGH) |
ha feszültség1> = max: |
in inrange (11, 24, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. LOW) |
ha feszültség1 |
szünet |
#kapcsolja ki a lámpákat |
in inrange (11, 24, 1): |
ha i! = 14 és i! = 17 és i! = 20: |
gpio.output (i, gpio. HIGH) |
#győztes zene |
ha jelenlegi_feszültség> = max: |
alfolyamat. Popen (['aplay', 'Audios/rocky.wav']) |
time.sleep (0.03) |
egyértelmű() |
print "NAGYON JÓ, NYERT!"% (u '\u00c9', u '\u00ca', u '\u00c2') |
én inrange (10): |
j inrange (11, 24, 1) esetén: |
ha j! = 14 és j! = 17 és j! = 20: |
gpio.output (j, gpio. LOW) |
time.sleep (0.05) |
j inrange (11, 24, 1) esetén: |
ha j! = 14 és j! = 17 és j! = 20: |
gpio.output (j, gpio. HIGH) |
time.sleep (0.05) |
time.sleep (0,5) |
alfolyamat. Popen (['aplay', 'Audios/end.wav']) |
time.sleep (0.03) |
egyértelmű() |
print "Játék befejezése… / n", current_voltage, "V" |
#rekordok |
time.sleep (1.2) |
elérte = 0 |
én inrange (10): |
ha áramerősség> feszültség : |
elérte a+= 1 értéket |
temp_voltage = feszültség |
feszültség = áram_feszültség |
jelenlegi_feszültség = temp_feszültség |
temp_név = név |
név = jelenlegi_név |
jelenlegi_név = ideiglenes_név |
ha elérte> 0: |
alfolyamat. Popen (['aplay', 'Audios/record.wav']) |
time.sleep (0.03) |
egyértelmű() |
f = open ('rekordok', 'w') |
én inrange (10): |
f.write (név ) |
f.write ("\ n") |
f.write (str (feszültség )) |
f.write ("\ n") |
f. bezár () |
egyértelmű() |
Tekintse meg a rawlamps_bike.py webhelyet, amelyet a GitHub ❤ üzemeltet
8. lépés: Elektromos rendszer:
Az Arduino és a Raspberry Pi 3 tápellátását 5 V -os, 3A áramerősségű áramforrás táplálja.
Az elektromos áramkör az egyenáramú generátor (a kerékpárhoz csatlakoztatva) csatlakoztatásával kezdődik az Arduino -hoz egy feszültségszűrőn keresztül, amely 5,3 V -os Zener -diódából, 10μF -es kondenzátorból és 1 kΩ -os ellenállásból áll - a szűrőbemenet csatlakozik a generátor termináljait, és a kimenet a vezérlő A0 -portjához és GND -jéhez van csatlakoztatva.
Az Arduino RX-TX kommunikáción keresztül csatlakozik a Raspberry-hez-egy rezisztív elválasztón keresztül, 10 kΩ-os ellenállások használatával (ezt a vezérlők különböző feszültségeken működő portjai megkövetelik).
A Raspberry Pi GPIO -i a lámpák bekapcsolásáért felelős relékhez vannak csatlakoztatva. Az összes relé „COM” -ja össze volt kötve és csatlakozott a fázishoz (váltakozó áramú hálózat), az egyes relék „N. O” (normál esetben nyitott) pedig minden lámpához, a váltakozó áramú hálózat semlegesje pedig az összes lámpához. Így, amikor az egyes relékért felelős GPIO aktiválódik, a relé az AC hálózat fázisára kapcsol, és felgyújtja a megfelelő lámpát.
9. lépés: Eredmények:
A projekt végső összeszerelése után ellenőrizték, hogy a várakozásoknak megfelelően működik -e - a sebesség szerint, amelyet a felhasználó pedáloz a kerékpáron, több feszültség keletkezik és több lámpa világít.
Ajánlott:
Művészet generálása megjegyzésekből: 5 lépés (képekkel)
Művészet generálása a hozzászólásokból: Ez a projekt egy ambiciózus projekt, ahol az internet, a megjegyzések és a chatszobák legkérdőjelezhetőbb részeit szeretnénk felhasználni művészet létrehozásához. Azt is szeretnénk, hogy a projekt könnyen hozzáférhetővé váljon, hogy bárki kipróbálhassa magát a létrehozásban
Többcsatornás Wifi feszültség- és árammérő: 11 lépés (képekkel)
Többcsatornás Wifi feszültség- és árammérő: Kenyérsütéskor gyakran figyelni kell az áramkör különböző részeit. Annak elkerülése érdekében, hogy a multiméter szondákat egyik helyről a másikra kelljen ragasztani, többcsatornás feszültség- és árammérőt akartam tervezni. Az Ina260 tábla
Kerékpárral hajtott telefon töltő: 6 lépés (képekkel)
Bike Powered Phone Charger: Ez egy Bike Powered telefon töltő, amely olcsó, 3D nyomtatható, könnyen elkészíthető és telepíthető, a telefon töltő pedig univerzális. Ez hasznos dolog, ha sokat biciklizik, és fel kell töltenie a telefont. A töltőt úgy tervezték és építették
DC feszültség mérése Arduino és Node-RED használatával: 8 lépés (képekkel)
Egyenáramú feszültség mérése Arduino és Node-RED segítségével: Sok oktatóanyag létezik az egyenáramú feszültség mérésére az Arduino segítségével, ebben az esetben találtam egy olyan oktatóanyagot, amelyet a legjobb funkcionális módszernek tartok az egyenáram mérésére anélkül, hogy be kellene állítani az ellenállást, csak némi ellenállást igényel és multiméter
Bármilyen USB -eszköz feltöltése kerékpárral: 10 lépés (képekkel)
Bármilyen USB-eszköz feltöltése kerékpárral: Kezdésként ez a projekt akkor kezdődött, amikor megkaptuk a támogatást a Lemelson-MIT programtól. (Josh, ha ezt olvasod, szeretünk téged.) 6 diákból és egy tanárból álló csapat összeállította ezt a projektet, és úgy döntöttünk, hogy felvisszük az Instruct -ra