Feszültség generálása ergométeres kerékpárral: 9 lépés (képekkel)
Feszültség generálása ergométeres kerékpárral: 9 lépés (képekkel)
Anonim
Feszültség generálása ergométeres kerékpárral
Feszültség generálása ergométeres kerékpárral
Feszültség generálása ergométeres kerékpárral
Feszültség generálása ergométeres kerékpárral
Feszültség generálása ergométeres kerékpárral
Feszültség generálása ergométeres kerékpárral

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:

Rendszerblokkok diagramja
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

Mechanikai szempontok
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:

Elektromos rendszer
Elektromos rendszer
Elektromos rendszer
Elektromos rendszer
Elektromos rendszer
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:

Image
Image

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: