Përmbajtje:

Gjenerimi i tensionit me një biçikletë ergometër: 9 hapa (me fotografi)
Gjenerimi i tensionit me një biçikletë ergometër: 9 hapa (me fotografi)

Video: Gjenerimi i tensionit me një biçikletë ergometër: 9 hapa (me fotografi)

Video: Gjenerimi i tensionit me një biçikletë ergometër: 9 hapa (me fotografi)
Video: Sa duhet te jete Tensioni juaj i gjakut sipas Moshes qe keni 2024, Korrik
Anonim
Gjenerimi i tensionit me një biçikletë ergometër
Gjenerimi i tensionit me një biçikletë ergometër
Gjenerimi i tensionit me një biçikletë ergometër
Gjenerimi i tensionit me një biçikletë ergometër
Gjenerimi i tensionit me një biçikletë ergometër
Gjenerimi i tensionit me një biçikletë ergometër

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:

Diagrami i Blloqeve të Sistemit
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

Aspektet e Mekanikës
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:

Skema elektrike
Skema elektrike
Skema elektrike
Skema elektrike
Skema elektrike
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:

Image
Image

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: