Mundarija:

Ergometrli velosipedda kuchlanish hosil qilish: 9 qadam (rasmlar bilan)
Ergometrli velosipedda kuchlanish hosil qilish: 9 qadam (rasmlar bilan)

Video: Ergometrli velosipedda kuchlanish hosil qilish: 9 qadam (rasmlar bilan)

Video: Ergometrli velosipedda kuchlanish hosil qilish: 9 qadam (rasmlar bilan)
Video: Clínicas Kinetic - Prueba de esfuerzo de ciclismo 2024, Noyabr
Anonim
Ergometrli velosiped yordamida kuchlanish hosil qilish
Ergometrli velosiped yordamida kuchlanish hosil qilish
Ergometrli velosiped yordamida kuchlanish hosil qilish
Ergometrli velosiped yordamida kuchlanish hosil qilish
Ergometrli velosiped yordamida kuchlanish hosil qilish
Ergometrli velosiped yordamida kuchlanish hosil qilish

Loyihaning ishlab chiqilishi velosiped pedaliga qarab sodir bo'ladigan, dvigatel tezligi oshishi bilan ishga tushadigan generator va lampalar minorasiga ulangan ergometrli velosipedda pedal yurish uchun "o'yin" ni yig'ishdan iborat edi. Tizim o'qishga asoslangan edi-Arduino Mega analog porti orqali-zudlik bilan kuchlanish paydo bo'ldi, keyin bu ma'lumotlarni RX-TX ketma-ket aloqasi orqali Raspberry Pi 3 ga uzatdi va keyinchalik lampalarni o'z o'rni orqali faollashtirdi.

1 -qadam: Materiallar:

  • 1 ta Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 10 ta o'rni 12 V bo'lgan 1 ta o'rni qalqoni;
  • 10 akkor lampalar 127 V;
  • 1 ergometrli velosiped;
  • 1 elektr mashinasi (generator) 12 V;
  • Rezistorlar (1x1kΩ, 2x10kΩ);
  • 1 elektrolitik kondansatkich 10 mF;
  • 1 Zener diodi 5,3 V;
  • 1,5 mm kabel (qizil, qora, jigarrang);
  • 10 ta chiroqni qo'llab -quvvatlaydigan 1 ta MDF minorasi.

2 -qadam: tizim bloklari diagrammasi:

Tizim bloklari diagrammasi
Tizim bloklari diagrammasi

3 -qadam: tizimning ishlashi:

Tizim velosipedni velosipedda aylantirganda hosil bo'ladigan kinetik energiyani elektr energiyasiga o'zgartirishga asoslangan bo'lib, u lampalarni yoqadigan o'rni ishga tushishiga javobgardir.

Jeneratör tomonidan ishlab chiqarilgan kuchlanish Arduino analog pin orqali o'qiladi va RX-TX orqali Raspberry Pi ga yuboriladi. O'rnimizni faollashishi hosil bo'ladigan kuchlanishga mutanosib bo'ladi - kuchlanish qanchalik baland bo'lsa, o'rni shunchalik ko'p tetiklanadi va lampalar yonadi.

4 -qadam: Mexanika jihatlari

Mexanika jihatlari
Mexanika jihatlari

DC generatorini velosipedga mexanik ravishda ulash uchun kamar tizimini oddiy velosipedda ishlatiladigan toj bilan almashtirish kerak edi (toj, zanjir va piniondan iborat). Dvigatelni vintlar bilan mahkamlash uchun velosiped ramkasiga metall plastinka payvandlangan. Shundan so'ng, pinion generator miliga payvandlab qo'yildi, shunda zanjir joylashtirilishi mumkin edi, bu esa pedal tizimini generator bilan bog'lab qo'ydi.

5 -qadam: kuchlanishni o'qish:

Jeneratör kuchlanishini Arduino yordamida o'qish uchun elektr mashinasining musbat qutbini tekshirgichning A0 piniga, salbiy qutbni GND ga ulash lozim - generatorning maksimal kuchlanishi 5 V dan yuqori bo'lmasligi uchun. Arduino pinlari, 10 mF kondansatör, 1 kΩ rezistor va 5,3 V zener diodli kuchlanish filtri ishlab chiqarildi va nazoratchi bilan generator o'rtasida ulandi. Arduino -ga o'rnatilgan dasturiy ta'minot juda sodda va faqat analog portni o'qishdan iborat bo'lib, o'qilgan qiymatni doimiy ravishda 0.0048828125 ga ko'paytiring (5/1024, ya'ni Arduino GPIO kuchlanishini analog portining bit soniga bo'linadi) va ketma -ket o'zgaruvchan - kod maqolada mavjud bo'ladi.

Raspberry Pi-da RX-TX aloqasini yoqish tartibi biroz murakkabroq va siz havolada tasvirlangan protseduraga amal qilishingiz kerak. Qisqasi, "/etc/inittab" da joylashgan "inittab" nomli faylni tahrir qilish kerak, "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" qatoriga izoh bering (agar fayl bo'lmasa Raspberry OS -da yaratilgan, siz "sudo leafpad /boot/config.txt" buyrug'ini kiritishingiz va faylning oxiriga "enable_uart = 1" qatorini qo'shishingiz kerak). Bu bajarilgandan so'ng, siz LX terminalini qayta ochishingiz va "sudo systemctl stop [email protected]" va "sudo systemctl [email protected] o'chirish" buyruqlari bilan Serialni o'chirib qo'yishingiz kerak. Shundan so'ng siz "sudo leafpad /boot/cmdline.txt" buyrug'ini bajarishingiz, "console = serial0, 115200" qatorini o'chirishingiz, faylni saqlashingiz va qurilmani qayta ishga tushirishingiz kerak. RX-TX aloqasi bo'lishi uchun Raspberry Pi-da "sudo apt-get install -f python-serial" buyrug'i bilan ketma-ket kutubxona o'rnatilishi va "import ketma-ket" qatorini kiritish orqali kutubxonani kodga import qilishi kerak., "ser = serial. Serial (" / dev / ttyS0 ", 9600)" qatorini va "ser.readline ()" buyrug'i yordamida Arduino tomonidan yuborilgan kuchlanishni kiritish orqali serialni ishga tushirish - ishlatilgan to'liq kod malinada maqolaning oxirida taqdim etiladi.

Yuqorida tavsiflangan protseduradan so'ng, o'qish va yuborish kuchlanish bosqichi yakunlandi.

6 -qadam: Arduino dasturlash:

Yuqorida aytib o'tilganidek, velosipedda harakatlanayotganda hosil bo'ladigan kuchlanishni o'qish uchun javob beradigan kod juda oddiy.

Birinchidan, kuchlanishni o'qish uchun A0 pinini tanlash kerak.

"Void setup ()" funktsiyasida siz "pinMode (sensor, INPUT)" buyrug'i bilan A0 pinini INPUT ga o'rnatishingiz va "Serial.begin (9600)" buyrug'i yordamida ketma -ket port uzatish tezligini tanlashingiz kerak.

"Void loop ()" da "Serial.flush ()" funktsiyasi har safar ketma -ket ma'lumot yuborishni to'xtatganda buferni tozalash uchun ishlatiladi; Maqolaning "o'qish kuchlanishi" bo'limida keltirilgan analog port o'qilgan qiymatni Voltga aylantirish zarurligini eslab - kuchlanish o'qilishi "analogRead (sensor)" funktsiyasi orqali amalga oshiriladi.

Bundan tashqari, "void loop ()" funktsiyasida x o'zgaruvchini floatdan stringga o'tkazish kerak, chunki bu o'zgaruvchini RX-TX orqali yuborishning yagona yo'li. Loop funktsiyasining oxirgi bosqichi ketma -ket portdagi chiziqni Raspberry -ga yuborish uchun chop etishdir - buning uchun "Serial.println (y)" funktsiyasidan foydalanish kerak. Kodga faqat "kechikish (100)" qatori qo'shildi, shunda o'zgaruvchi 100 ms oralig'ida yuboriladi - agar bu vaqtga rioya qilinmasa, ketma -ket haddan tashqari yuklanish sodir bo'ladi, bu dasturda mumkin bo'lgan nosozliklarni keltirib chiqaradi.

kuchlanish_xuddi

float sensori = A0;
voidsetup () {
pinMod (sensor, Kirish);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (sensor)*0.0048828125*16.67;
Satr y = "";
y+= x;
Serial.println (y);
kechikish (100);
}

rawvoltage_read.ino ni GitHub ❤ tomonidan joylashtirilganini ko'rish

7 -qadam: Raspberry Pi 3 dasturlash:

chiroqlar_bike.py

import os #import os kutubxonasi (kerak bo'lganda ekranni tozalash uchun ishlatiladi)
Raspnerry GPIO -ni boshqarish uchun ishlatiladigan RPi. GPIOas gpio #import kutubxonasini import qilish
ketma -ket aloqa uchun mas'ul bo'lgan serial #import kutubxonasini import qiling
import vaqti #import kutubxonasi, bu kechiktirish funktsiyasidan foydalanishga imkon beradi
qo'shiqlarni ijro etish uchun javobgar bo'lgan import #proport kutubxonasini import qilish
#serialni boshlang
ser = serial. Serial ("/dev/ttyS0", 9600) #qurilma nomi va uzatilish tezligini aniqlang
#aniq ekran
clear = lambda: os.system ("aniq")
#o'rni boshqaruvi uchun pinlar
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #chiroq 10
gpio.setup (12, gpio. OUT) #chiroq
gpio.setup (13, gpio. OUT) #chiroq 8
gpio.setup (15, gpio. OUT) #chiroq 7
gpio.setup (16, gpio. OUT) #chiroq 6
gpio.setup (18, gpio. OUT) #chiroq
gpio.setup (19, gpio. OUT) #chiroq 4
gpio.setup (21, gpio. OUT) #chiroq
gpio.setup (22, gpio. OUT) #chiroq 2
gpio.setup (23, gpio. OUT) #chiroq 1
#yozuvlarni boshlash
ism = ["Hech kim"]*10
kuchlanish = [0,00]*10
#yozuvlar faylini o'qing
f = ochiq ("yozuvlar", "r")
for i inrange (10): #ro'yxatda eng yaxshi 10 ball topiladi
ism = f.readline ()
ism = ism [: len (ism )-1]
kuchlanish = f.readline ()
kuchlanish = suzuvchi (kuchlanish [: len (kuchlanish )-1])
f.yaqin ()
aniq ()
#maksimal kuchlanishni o'rnating
maksimal = 50.00
#chiroqlarni o'chiring
men uchun (11, 24, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. HIGH) #YO'Q holatiga o'rnatildi, o'rni o'chirildi
#boshlang
whileTrue:
#boshlang'ich ekran
"Yozuvlar: / n" ni chop eting
Inrange uchun (10):
bosma nomi , ":", kuchlanish , "V"
current_name = raw_input ("Boshlash uchun ismingizni yozing:")
aniq ()
#Maksimal qiymatni o'zgartirish
agar current_name == "max" bo'lsa:
max = kirish ("Maksimal kuchlanishni yozing: (2 ta kasr)")
aniq ()
boshqa:
#boshlash haqida ogohlantirish
for i inrange (11, 24, 1): #pastadir PIN 11da boshlanadi va PIN 24da to'xtaydi
agar i! = 14 va i! = 17 va i! = 20: #PIN 14 va 20 - GND pinlari va 20 - 3,3 V pinli
gpio.output (i, gpio. LOW) #chiroqlarni yoqing
vaqt uyqu (0,5)
k = 10
i uchun (23, 10, -1):
aniq ()
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
subprocess. Popen (['aplay', 'Audio/'+str (k)+'. wav'])
uyqu (0.03)
aniq ()
chop eting "Tayyorlaning! / n", k
uyqu (1)
k- = 1
gpio.output (i, gpio. HIGH) #chiroqlarni o'chiring (birma -bir)
subprocess. Popen (['aplay', 'Audios/go.wav']) #boshlang'ich musiqani ijro etadi
uyqu (0.03)
aniq ()
"GO!" ni chop eting.
uyqu (1)
aniq ()
#kuchlanish o'qiladi
joriy_ kuchlanish = 0,00
kuchlanish1 = 0,00
men uchun (200):
ser.flushInput ()
oldingi = kuchlanish1
kuchlanish1 = float (ser.readline ()) #RX-TX tomonidan uzatilgan Arduino ma'lumotlarini to'playdi
aniq ()
bosma kuchlanish 1, "V"
agar kuchlanish1> joriy_ kuchlanish:
joriy_ kuchlanish = kuchlanish1
# ishlab chiqarilgan kuchlanishga qarab, ko'proq lampalar yonadi.
agar kuchlanish1 <max/10:
men uchun (11, 24, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = maksimal/10 bo'lsa:
gpio.output (11, gpio. LOW)
men uchun (12, 24, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 2*max/10:
men uchun (11, 13, 1):
gpio.output (i, gpio. LOW)
men uchun (13, 24, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 3*max/10:
men uchun (11, 14, 1):
gpio.output (i, gpio. LOW)
men uchun (15, 24, 1):
agar i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 4*max/10:
men uchun (11, 16, 1):
agar men! = 14:
gpio.output (i, gpio. LOW)
men uchun (16, 24, 1):
agar men! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 5*max/10:
men uchun (11, 17, 1):
agar men! = 14:
gpio.output (i, gpio. LOW)
men uchun (18, 24, 1):
agar men! = 20:
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 6*max/10:
men uchun (11, 19, 1):
agar men! = 14 va i! = 17:
gpio.output (i, gpio. LOW)
men uchun (19, 24, 1):
agar men! = 20:
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 7*max/10:
men uchun (11, 20, 1):
agar men! = 14 va i! = 17:
gpio.output (i, gpio. LOW)
men uchun (21, 24, 1):
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 8*max/10:
men uchun (11, 22, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. LOW)
men uchun (22, 24, 1):
gpio.output (i, gpio. HIGH)
agar kuchlanish1> = 9*max/10:
men uchun (11, 23, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
agar kuchlanish1> = maksimal bo'lsa:
men uchun (11, 24, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. LOW)
kuchlanish 1 bo'lsa
tanaffus
#chiroqlarni o'chiring
men uchun (11, 24, 1):
agar men! = 14 va i! = 17 va i! = 20 bo'lsa:
gpio.output (i, gpio. HIGH)
#G'alaba musiqasi
agar current_voltage> = max:
subprocess. Popen (['aplay', 'Audio/rocky.wav'])
uyqu (0.03)
aniq ()
chop eting "Juda ham yaxshi, siz yutdingiz!"% (u '\u00c9', u '\u00ca', u '\u00c2')
Inrange uchun (10):
j inrange uchun (11, 24, 1):
agar j! = 14 va j! = 17 va j! = 20 bo'lsa:
gpio.output (j, gpio. LOW)
uyqu (0,05)
j inrange uchun (11, 24, 1):
agar j! = 14 va j! = 17 va j! = 20 bo'lsa:
gpio.output (j, gpio. HIGH)
uyqu (0,05)
vaqt uyqu (0,5)
subprocess. Popen (['aplay', 'Audios/end.wav'])
uyqu (0.03)
aniq ()
"O'yinni tugatish… / n", joriy_ kuchlanish, "V" ni chop eting
#yozuvlar
vaqt. uxlash (1.2)
= 0 ga yetdi
Inrange uchun (10):
agar joriy_ kuchlanish> kuchlanish :
+= 1 ga yetdi
temp_voltaj = kuchlanish
kuchlanish = joriy_ kuchlanish
joriy_ kuchlanish = temp_ kuchlanish
temp_name = ism
ism = joriy_ nomi
joriy_ nomi = temp_ nomi
agar> 0 ga yetgan bo'lsa:
subprocess. Popen (['aplay', 'Audio/record.wav'])
uyqu (0.03)
aniq ()
f = ochiq ("yozuvlar", "w")
Inrange uchun (10):
f.yozish (ismi )
f. yozish ("\ n")
f.yozish (str (kuchlanish ))
f. yozish ("\ n")
f.yaqin ()
aniq ()

GitHub tomonidan ❤ bilan uyushtirilgan rawlamps_bike.py faylini ko'rish

8 -qadam: Elektr sxemasi:

Elektr sxemasi
Elektr sxemasi
Elektr sxemasi
Elektr sxemasi
Elektr sxemasi
Elektr sxemasi

Arduino va Raspberry Pi 3 3A oqimi bo'lgan 5V manbadan quvvatlanadi.

Elektr davri DC generatorini (velosipedga ulangan) Arduino -ga 5,3V zener diodidan, 10 mF kondansatör va 1 kΩ rezistordan tashkil topgan kuchlanish filtri orqali ulanishi bilan boshlanadi - filtr kirishi tarmoqqa ulanadi. generator terminallari va chiqish A0 portiga va boshqaruvchining GND ga ulanadi.

Arduino RX-TX aloqasi orqali Raspberry-ga ulangan-10 kΩ rezistorlar yordamida rezistiv bo'luvchi orqali amalga oshiriladi (har xil kuchlanishlarda ishlaydigan kontroller portlari uchun kerak).

Raspberry Pi -ning GPIO -lari lampalarni yoqish uchun mas'ul bo'lgan o'rni bilan bog'langan. Barcha o'rni "COM" bir -biriga ulangan va fazaga ulangan (AC tarmog'i) va har bir o'rni "N. O" (odatda ochiq) har bir chiroqqa ulangan va AC tarmog'ining neytralligi barcha lampalarga ulangan. Shunday qilib, har bir o'rni uchun mas'ul bo'lgan GPIO yoqilganda, o'rni AC tarmog'ining fazasiga o'tkaziladi va tegishli chiroqni yoqadi.

9 -qadam: Natijalar:

Image
Image

Loyihaning yakuniy yig'ilishidan so'ng, u kutilganidek ishlaganligi tekshirildi - foydalanuvchi velosipedda pedal bosish tezligiga ko'ra, ko'proq kuchlanish hosil bo'ladi va ko'proq lampalar yonadi.

Tavsiya: