Mündəricat:

Ergometrli Velosipedlə Gərginlik Yaratmaq: 9 Adım (Şəkillərlə)
Ergometrli Velosipedlə Gərginlik Yaratmaq: 9 Adım (Şəkillərlə)

Video: Ergometrli Velosipedlə Gərginlik Yaratmaq: 9 Adım (Şəkillərlə)

Video: Ergometrli Velosipedlə Gərginlik Yaratmaq: 9 Adım (Şəkillərlə)
Video: Ergometrie Belastungs-EKG 2024, Iyul
Anonim
Erqometrli Velosipedlə Gərginlik Yaratmaq
Erqometrli Velosipedlə Gərginlik Yaratmaq
Ergometrli Velosipedlə Gərginlik Yaratmaq
Ergometrli Velosipedlə Gərginlik Yaratmaq
Erqometrli Velosipedlə Gərginlik Yaratmaq
Erqometrli Velosipedlə Gərginlik Yaratmaq

Layihənin hazırlanması, velosiped pedalına bağlı olaraq meydana gələn, mühərrikin sürəti artdıqca işə düşən generatora və lampa qülləsinə qoşulmuş erqometrli velosipeddə pedal çəkmək məqsədi ilə "oyun" qurmaqdan ibarət idi. Sistem oxunuşa-Arduino Mega-nın analog portu vasitəsilə-yaradılan ani gərginliyə, sonra bu məlumatları ardıcıl RX-TX rabitəsi vasitəsi ilə Raspberry Pi 3-ə ötürməyə və sonradan röle vasitəsilə lampaların aktivləşdirilməsinə əsaslanır.

Addım 1: Materiallar:

  • 1 Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 10 Relay 12 V ilə 1 Relay Shield;
  • 10 közərmə lampası 127 V;
  • 1 erqometrli velosiped;
  • 1 Elektrik Maşını (Generator) 12 V;
  • Rezistorlar (1x1kΩ, 2x10kΩ);
  • 1 elektrolitik kondansatör 10 µF;
  • 1 Zener Diod 5.3 V;
  • 1,5 mm kabel (qırmızı, qara, qəhvəyi);
  • 10 lampa dəstəyi olan 1 MDF qülləsi.

Addım 2: Sistem Blokları Şeması:

Sistem Blokları Şeması
Sistem Blokları Şeması

Addım 3: Sistemin İşlənməsi:

Sistem, velosiped sürərkən meydana gələn kinetik enerjinin lampaları yandıracaq rölelərin aktivləşdirilməsindən məsul olan elektrik enerjisinə çevrilməsinə əsaslanır.

Jeneratörün yaratdığı gərginlik Arduino analoq pinindən oxunur və RX-TX vasitəsilə Raspberry Pi-yə göndərilir. Rölelərin aktivləşdirilməsi yaranan gərginliklə mütənasibdir - gərginlik nə qədər çox olarsa, o qədər çox röle tetiklenir və daha çox lampa yanar.

Addım 4: Mexanika aspektləri

Mexanika aspektləri
Mexanika aspektləri

DC generatorunu velosipedə mexaniki olaraq qoşmaq üçün kəmər sistemi adi velosipedlərdə istifadə olunan sistemlə (tac, zəncir və pinyondan ibarət) əvəz edilməli idi. Mühərrikin vintlərlə bərkidilməsi üçün velosiped çərçivəsinə metal bir lövhə qaynaqlandı. Bundan sonra, pinyon, zəncirin yerləşdirilə bilməsi üçün generator milinə qaynaqlandı, pedal sistemini generatora bağladı.

Addım 5: Gərginliyin oxunması:

Arduino istifadə edərək generatorun gərginliyini oxumaq üçün elektrik maşınının müsbət qütbünü idarəedicinin A0 pininə və mənfi qütbünü GND -yə bağlamaq lazımdır - generatorun maksimum gərginliyinin 5 V -dan böyük olmamasının qarşısını almaq üçün. Arduino pinləri, nəzarətçi ilə generator arasında 10 µF kondansatör, 1 kΩ rezistor və 5.3 V Zener diodundan istifadə edən bir gərginlik filtri quruldu. Arduino -ya yüklənmiş proqram təminatı çox sadədir və yalnız analoq portu oxumaqdan ibarətdir, oxunan dəyəri 0.0048828125 (5/1024, yəni Arduinonun GPIO gərginliyi analoq portunun bit sayına bölünür) ilə çoxaltmaq və Seriala dəyişən - kod məqalədə mövcud olacaq.

Raspberry Pi-də RX-TX ünsiyyətini təmin etmək proseduru bir az daha mürəkkəbdir və linkdə təsvir olunan prosedura əməl etməlisiniz. Qısaca, "/etc/inittab" da yerləşən "inittab" adlı bir faylı redaktə etməlisiniz, "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" sətrini şərh edin (əgər fayl deyilsə) Raspberry OS -də qurulduqda, "sudo leafpad /boot/config.txt" əmrini daxil etməli və faylın sonuna "enable_uart = 1" sətrini əlavə etməlisiniz). Bunu etdikdən sonra, LX Terminalını yenidən açmalı və "sudo systemctl stop [email protected]" və "sudo systemctl [email protected]'i deaktiv et" əmrləri ilə Serialı deaktiv etməlisiniz. Bundan sonra "sudo leafpad /boot/cmdline.txt" əmrini yerinə yetirməlisiniz, "console = serial0, 115200" sətrini silin, faylı qeyd edin və cihazı yenidən başladın. RX-TX ünsiyyətinin mümkün olması üçün Serial kitabxanası "sudo apt-get install -f python-serial" əmri ilə Raspberry Pi-də qurulmalı və "import serial" xəttini daxil edərək kitabxananı koda daxil etməlidir., "ser = serial. Serial (" / dev / ttyS0 ", 9600)" xəttini və "ser.readline ()" əmrini istifadə edərək Arduino tərəfindən göndərilən gərginliyin oxunması ilə serialı işə salmaq - istifadə olunan tam kod Raspberry -də məqalənin sonunda təqdim olunacaq.

Yuxarıda təsvir olunan prosedura uyğun olaraq, oxuma və göndərmə gərginliyi mərhələsi tamamlanır.

Addım 6: Arduino Proqramlaşdırması:

Daha əvvəl də qeyd edildiyi kimi, velosiped sürərkən yaranan gərginliyi oxumaqdan məsul olan kod çox sadədir.

Birincisi, gərginliyin oxunmasından məsul olan A0 pinini seçmək lazımdır.

"Void setup ()" funksiyasında "pinMode (sensor, INPUT)" əmri ilə A0 pinini GİRİŞ olaraq təyin etməli və "Serial.begin (9600)" əmrindən istifadə edərək serial port ötürmə sürətini seçməlisiniz.

"Void loop ()" da "Serial.flush ()" funksiyası hər dəfə serial vasitəsilə məlumat göndərilməsini dayandırdıqda tamponu silmək üçün istifadə olunur; Gərginliyin oxunması "analogRead (sensor)" funksiyası tərəfindən yerinə yetirilir - analoq port tərəfindən oxunan dəyəri Volta çevirmək lazım olduğunu xatırlayaraq - məqalənin "oxunan gərginlik" bölməsində göstərilən proses.

Ayrıca, "void loop ()" funksiyasında, dəyişəni RX-TX vasitəsilə göndərməyin yeganə yolu olduğu üçün x dəyişənini float-dan stringə çevirmək lazımdır. Döngə funksiyasındakı son addım, serialı portda çap etməkdir ki, Moruqa göndərilsin - bunun üçün "Serial.println (y)" funksiyasından istifadə etməlisiniz. "Gecikmə (100)" xətti yalnız dəyişən 100 ms aralığında göndərilmək üçün koda əlavə edildi - əgər bu vaxta riayət edilməzsə, Serial həddindən artıq yüklənmə baş verəcək və proqramda mümkün qəzalar meydana gələcək.

gərginlik_ oxu.ino

üzmə sensoru = A0;
voidsetup () {
pinMode (sensor, GİRİŞ);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogOxu (sensor)*0.0048828125*16.67;
String y = "";
y+= x;
Serial.println (y);
gecikmə (100);
}

GitHub tərəfindən ❤ ilə ev sahibliyi edilən rawvoltage_read.ino

Addım 7: Raspberry Pi 3 Proqramlaşdırma:

lamp_bike.py

import os #import os kitabxanası (lazım olduqda ekranı silmək üçün istifadə olunur)
Raspnerry -nin GPIO -nu idarə etmək üçün istifadə olunan RPi. GPIOas gpio #import kitabxanasını import edin
ardıcıl ünsiyyətdən məsul olan serial #idxal kitabxanasını idxal edin
gecikmə funksiyasından istifadə etməyi mümkün edən #vaxt idxal kitabxanası
mahnıları ifa etməkdən məsul idxal alt prosesi #idxal kitabxanası
#seriala başlayın
ser = serial. Serial ("/dev/ttyS0", 9600) #cihazın adını və ötürmə sürətini təyin edin
#aydın ekran
aydın = lambda: os.system ('aydın')
#röleyi idarə etmək üçün pinlər qoyun
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #lampa 10
gpio.setup (12, gpio. OUT) #lampa 9
gpio.setup (13, gpio. OUT) #lampa 8
gpio.setup (15, gpio. OUT) #lampa 7
gpio.setup (16, gpio. OUT) #lampa 6
gpio.setup (18, gpio. OUT) #lampa 5
gpio.setup (19, gpio. OUT) #lampa 4
gpio.setup (21, gpio. OUT) #lampa 3
gpio.setup (22, gpio. OUT) #lampa 2
gpio.setup (23, gpio. OUT) #lampa 1
#qeydlərə başlayın
ad = ["Heç biri"]*10
gərginlik = [0.00]*10
#qeydlər faylını oxuyun
f = açıq ('qeydlər', 'r')
for i inrange (10): #siyahıda ən yaxşı 10 bal görünür
ad = f.readline ()
ad = ad [: len (ad )-1]
gərginlik = f. oxu xətti ()
gərginlik = üzmə (gərginlik [: len (gərginlik )-1])
f.close ()
aydın ()
#maksimum gərginliyi təyin edin
maksimum = 50.00
#lampaları söndürün
i üçün (11, 24, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. HIGH) #YÜKSEK olaraq təyin olunduqda, rölelər söndürülür
#başlamaq
whileTrue:
#ilkin ekran
"Qeydlər: / n" yazdırın
inrange üçün (10):
çap adı , ":", gərginlik , "V"
current_name = raw_input ("Başlamaq üçün adınızı yazın:")
aydın ()
#Maksimum dəyəri dəyişdirin
cari_ad == "maksimum" olarsa:
max = giriş ("Maksimum gərginliyi yazın: (2 ədəd onluq)")
aydın ()
başqa:
#başlanğıc xəbərdarlığı
i inrange üçün (11, 24, 1): #döngə PİN 11 -də başlayır və PIN 24 -də dayanır
i! = 14 və i! = 17 və i! = 20: #PIN 14 və 20 GND sancaqlarıdır və 20 3.3 V pindir
gpio.output (i, gpio. LOW) #lampaları yandırın
vaxt.yuxu (0.5)
k = 10
Mən sıralamaq üçün (23, 10, -1):
aydın ()
i! = 14 və i! = 17 və i! = 20 olarsa:
subprocess. Popen (['aplay', 'Audio/'+str (k)+'. wav'])
vaxt.yuxu (0.03)
aydın ()
çap et "Hazırla! / n", k
vaxt.yuxu (1)
k- = 1
gpio.output (i, gpio. HIGH) #lampaları söndür (tək -tək)
subprocess. Popen (['aplay', 'Audio/go.wav']) #başlanğıc musiqisini səsləndirir
vaxt.yuxu (0.03)
aydın ()
"GO!" yazın
vaxt.yuxu (1)
aydın ()
#gərginlik oxu
cərəyan gərginliyi = 0.00
gərginlik1 = 0.00
Mən inrange (200):
ser.flushInput ()
əvvəlki = gərginlik1
gərginlik1 = float (ser.readline ()) #RX-TX tərəfindən ötürülən Arduinonun məlumatlarını toplayır
aydın ()
çap gərginliyi1, "V"
əgər gərginlik1> cərəyan gərginliyi:
cərəyan gərginliyi = gərginlik1
# yaradılan gərginlikdən asılı olaraq daha çox lampa yanır.
əgər gərginlik1 <max/10:
i üçün (11, 24, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. HIGH)
gərginlik1> = maksimum/10 olarsa:
gpio.output (11, gpio. LOW)
i üçün (12, 24, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 2*maksimum/10:
Mən sıralamaq üçün (11, 13, 1):
gpio.output (i, gpio. LOW)
i üçün (13, 24, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 3*maksimum/10:
I inrange üçün (11, 14, 1):
gpio.output (i, gpio. LOW)
Mən sıralamaq üçün (15, 24, 1):
i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 4*max/10:
i üçün (11, 16, 1):
əgər mən! = 14:
gpio.output (i, gpio. LOW)
i üçün (16, 24, 1):
i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 5*maksimum/10:
Mən sıralamaq üçün (11, 17, 1):
əgər mən! = 14:
gpio.output (i, gpio. LOW)
I inrange üçün (18, 24, 1):
əgər mən! = 20:
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 6*maksimum/10:
Mən inrange (11, 19, 1):
i! = 14 və i! = 17 olarsa:
gpio.output (i, gpio. LOW)
i üçün (19, 24, 1):
əgər mən! = 20:
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 7*maksimum/10:
Mən inrange (11, 20, 1):
i! = 14 və i! = 17 olarsa:
gpio.output (i, gpio. LOW)
i üçün (21, 24, 1):
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 8*maksimum/10:
Mən inrange (11, 22, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. LOW)
i üçün (22, 24, 1):
gpio.output (i, gpio. HIGH)
əgər gərginlik1> = 9*maksimum/10:
Mən inrange (11, 23, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
gərginlik1> = maksimum olarsa:
i üçün (11, 24, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. LOW)

gərginlik varsa 1

fasilə
#lampaları söndürün
i üçün (11, 24, 1):
i! = 14 və i! = 17 və i! = 20 olarsa:
gpio.output (i, gpio. HIGH)
#qalib musiqi
əgər cərəyan gərginliyi> = maksimum olarsa:
subprocess. Popen (['aplay', 'Audio/rocky.wav'])
vaxt.yuxu (0.03)
aydın ()
çap et "ÇOX YAXŞI, QALDIN!"% (u '\u00c9', u '\u00ca', u '\u00c2')
inrange üçün (10):
j inrange üçün (11, 24, 1):
j! = 14 və j! = 17 və j! = 20 olarsa:
gpio.output (j, gpio. LOW)
vaxt.yuxu (0.05)
j inrange üçün (11, 24, 1):
j! = 14 və j! = 17 və j! = 20 olarsa:
gpio.output (j, gpio. HIGH)
vaxt.yuxu (0.05)
vaxt.yuxu (0.5)
subprocess. Popen (['aplay', 'Audios/end.wav'])
vaxt.yuxu (0.03)
aydın ()
"Oyunu sona çatdırın… / n", cari_ gərginlik, "V" çap edin
#qeydlər
vaxt.yuxu (1.2)
çatdı = 0
inrange üçün (10):
əgər cərəyan gərginliyi> gərginlik olarsa:
+= 1 -ə çatdı
temp_voltage = gərginlik
gərginlik = cərəyan gərginliyi
cərəyan gərginliyi = temp_ gərginliyi
temp_adı = ad
ad = cari_ad
cari_ad = temp_adı
> 0 -a çatdıqda:
subprocess. Popen (['aplay', 'Audio/record.wav'])
vaxt.yuxu (0.03)
aydın ()
f = açıq ('qeydlər', 'w')
inrange üçün (10):
f yazın (adı )
f. yaz ("\ n")
f yazın (str (gərginlik ))
f. yaz ("\ n")
f.close ()
aydın ()

GitHub tərəfindən ❤ ilə evlənən rawlamps_bike.py -yə baxın

Addım 8: Elektrik Şeması:

Elektrik sxemi
Elektrik sxemi
Elektrik sxemi
Elektrik sxemi
Elektrik sxemi
Elektrik sxemi

Arduino və Raspberry Pi 3, 3A cərəyanı olan 5V qaynaqla təchiz edilmişdir.

Elektrik dövrəsi, DC generatorunun (velosipedə qoşulmuş) 5.3V Zener diodundan, 10μF kondansatördən və 1kΩ rezistordan ibarət bir gərginlik filtri vasitəsilə Arduino -ya qoşulması ilə başlayır - filtr girişi şəbəkəyə qoşulur. generator terminalları və çıxış A0 portuna və nəzarətçinin GND -nə bağlıdır.

Arduino, RX-TX rabitəsi vasitəsi ilə Raspberry-yə qoşulur-10 kΩ rezistorlardan istifadə edərək rezistiv bölücü vasitəsi ilə yerinə yetirilir (fərqli gərginlikdə işləyən nəzarətçilərin portları üçün lazımdır).

Raspberry Pi -nin GPIO -ları lampaları yandırmaqdan məsul olan rölelərə bağlıdır. Bütün rölelərin "COM" -u bir -birinə bağlı idi və fazaya (AC şəbəkəsinə) və hər rölin "N. O" (normal olaraq açıq) hər bir lampaya və AC şəbəkəsinin neytral hissəsi bütün lampalara bağlı idi. Beləliklə, hər bir röledən məsul olan GPIO işə salındıqda, röle AC şəbəkəsinin fazasına keçir və müvafiq lampanı yandırır.

Addım 9: Nəticələr:

Image
Image

Layihənin son montajından sonra, gözlənildiyi kimi işlədiyi təsdiqləndi - istifadəçinin velosipeddə pedal çəkmə sürətinə görə daha çox gərginlik yaranır və daha çox lampa yanır.

Tövsiyə: