Mundarija:
- 1 -qadam: Materiallar:
- 2 -qadam: tizim bloklari diagrammasi:
- 3 -qadam: tizimning ishlashi:
- 4 -qadam: Mexanika jihatlari
- 5 -qadam: kuchlanishni o'qish:
- 6 -qadam: Arduino dasturlash:
- 7 -qadam: Raspberry Pi 3 dasturlash:
- 8 -qadam: Elektr sxemasi:
- 9 -qadam: Natijalar:
Video: Ergometrli velosipedda kuchlanish hosil qilish: 9 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
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:
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
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:
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:
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:
Quyoshli bog 'nurini velosipedda RBGga ko'tarish: 7 qadam (rasmlar bilan)
Quyoshli bog 'chiroqini velosipedda RBGga ko'taring: Youtube -da quyosh bog' chiroqlarini ta'mirlash haqida ko'plab videolar bor; quyoshli bog 'yoritgichining batareyaning ishlash muddatini uzaytirishi uchun ular kechasi uzoqroq ishlaydi va boshqa ko'plab xakerlar uchun
Hosil tortmalari - NASA Yerdan tashqarida o'sadi tanlovga kirish: 5 qadam (rasmlar bilan)
Hosil tortmalari - NASA "Yerdan tashqarida o'sadi" tanloviga kirish: Xulosa: Xalqaro kosmik stantsiya bortida kosmonavtlarga oziq -ovqat etishtirish uchun joy ko'p emas. Bu gidroponik bog '30 ta o'simlikni aylanma jadval bo'yicha yig'ish uchun minimal bo'sh joydan samarali foydalanish uchun mo'ljallangan
Velosipedda ishlaydigan telefon zaryadlovchisi: 6 qadam (rasmlar bilan)
Velosipedda ishlaydigan telefon zaryadlovchi qurilmasi: Bu velosipedda ishlaydigan telefon zaryadlovchi qurilmasi, uni arzon, 3D formatida chop etish mumkin, o'rnatish va o'rnatish oson, telefon zaryadlovchi esa universaldir. Agar siz velosipedda ko'p yurgan bo'lsangiz va telefonni zaryad qilishingiz kerak bo'lsa, bu foydali bo'ladi. Zaryadlovchi qurilmasi ishlab chiqilgan va qurilgan
13003 tranzistoridan foydalangan holda kuchlanish nazorat qilish sxemasini qanday qilish kerak: 6 qadam
13003 tranzistorli kuchlanish nazorat qilish sxemasini qanday qilish kerak: do'stim, bugun men o'zgaruvchan kuchlanishli elektr ta'minotini ta'minlaydigan kuchlanish nazorat qilish sxemasini yaratmoqchiman. Elektron loyihalarni ishlab chiqsak, kontaktlarning zanglashiga olib kelishi uchun bizga har xil kuchlanish kerak bo'ladi. Men buni qilmoqchiman
Arduino-ga asoslangan oddiy ergometrli displey, differentsial teskari aloqa: 7 qadam (rasmlar bilan)
Arduino-ga asoslangan oddiy ergometrli displeyli differentsial aloqa: kardio-mashq zerikarli, ayniqsa yopiq joylarda mashq qilishda. Bir nechta mavjud loyihalar ergometrni o'yin konsoliga ulash yoki hatto VRda haqiqiy velosipedda yurishni simulyatsiya qilish kabi ajoyib ishlarni bajarish orqali buni engillashtirishga harakat qilmoqda. Ular kabi hayajonli