Tartalomjegyzék:

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)

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

Videó: Feszültség generálása ergométeres kerékpárral: 9 lépés (képekkel)
Videó: Refrigerator Inverter Compressor PCB Control Types Explained 2024, November
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: