
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:48



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:
Különböző hangok generálása filmekből csak Arduino használatával: 3 lépés

Különböző hangok generálása filmekből csak Arduino használatával: As-salamu alaykum! Különféle hangokat akartam generálni, mint pl. Ragadozó, optimus prime & darázs a transzformátor filmből. Valójában a " a hacksmith " videó a ragadozó sisak készítéséről
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
Hangok generálása az Arduino segítségével: 3 lépés

Hangok generálása az Arduino segítségével: Ebben az utasításban egy olyan áramkört készítettem, amely hangot generál az Arduino -val. Nagyon szeretem az egyszerű és gyorsan elkészíthető projekteket. Itt van egy ilyen egyszerű projekt. Ez egy bemutató és mesélő projekt, amelyet pontosan az Arduino websi dokumentációjának felhasználásával készítettem
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
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