Мазмұны:
- 1 -қадам: материалдар:
- 2 -қадам: жүйелік блоктардың диаграммасы:
- 3 -қадам: жүйенің жұмысы:
- 4 -қадам: Механиканың аспектілері
- 5 -қадам: кернеуді оқу:
- 6 -қадам: Arduino бағдарламалау:
- 7 -қадам: Raspberry Pi 3 бағдарламалау:
- 8 -қадам: Электр схемасы:
- 9 -қадам: Нәтижелер:
Бейне: Эргометрлік велосипедпен кернеу жасау: 9 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Жобаны әзірлеу велосипед педальына байланысты болатын қозғалтқыштың жылдамдығы жоғарылаған кезде қосылатын генератор мен лампа мұнарасына қосылған эргометрлік велосипедте педальды басқару мақсатында «ойын» құрастырудан тұрды. Жүйе оқуға негізделген-Arduino Mega аналогтық порты арқылы-бірден кернеуді қалыптастырады, содан кейін бұл деректерді RX-TX сериялы байланыс арқылы Raspberry Pi 3-ке жібереді және кейіннен реле арқылы шамдарды қосады.
1 -қадам: материалдар:
- 1 таңқурай Pi 3;
- 1 Arduino Mega 2560;
- 10 В релесі бар 12 В реле қалқаны;
- 10 қыздыру шамдары 127 В;
- 1 эргометр велосипед;
- 1 Электр машинасы (Генератор) 12 В;
- Резисторлар (1x1kΩ, 2x10kΩ);
- 1 электролиттік конденсатор 10 мкФ;
- 1 зенер диод 5.3 В;
- 1,5 мм кабель (қызыл, қара, қоңыр);
- 10 лампаға арналған 1 MDF мұнарасы.
2 -қадам: жүйелік блоктардың диаграммасы:
3 -қадам: жүйенің жұмысы:
Жүйе велосипедті велосипедпен айналдыру кезінде пайда болатын кинетикалық энергияны электр энергиясына айналдыруға негізделген, ол лампаларды қосатын реле қосуға жауап береді.
Генератор генерациялайтын кернеуді Arduino аналогтық түйреуіші оқиды және RX-TX арқылы Raspberry Pi-ге жібереді. Реленің қосылуы генерацияланған кернеуге пропорционалды - кернеу неғұрлым жоғары болса, соғұрлым реле іске қосылады және көп шамдар жанады.
4 -қадам: Механиканың аспектілері
Тұрақты ток генераторын велосипедке механикалық түрде қосу үшін белбеу жүйесін қарапайым велосипедтерде қолданылатын жүйемен ауыстыру керек болды (тәжден, тізбектен және тістен тұрады). Қозғалтқышты бұрандалармен бекіту үшін велосипед рамасына металл табақ дәнекерленген. Осыдан кейін пинион генератордың білігіне дәнекерленген, осылайша тізбек орналастырылуы мүмкін, педаль жүйесін генераторға қосады.
5 -қадам: кернеуді оқу:
Генератордың кернеуін Arduino көмегімен оқу үшін электр машинасының оң полюсін контроллердің A0 түйреуішіне және теріс полюсті GND -ге қосу керек - генератордың максималды кернеуі 5 В -тан жоғары болмау үшін. Контроллер мен генератор арасында Arduino түйреуіштері, 10 мкФ конденсаторды, 1 кОм резисторды және 5,3 В Зенер диодын қолданатын кернеу сүзгісі жасалды. Arduino -ға жүктелген микробағдарлама өте қарапайым және тек аналогты портты оқудан тұрады, оқылатын мәнді 0.0048828125 тұрақты мәніне көбейтеді (5/1024, яғни Arduino GPIO кернеуі оның аналогтық портының бит санына бөлінеді) және серияға ауыспалы - код мақалада қол жетімді болады.
Raspberry Pi-де RX-TX байланысын қосу процедурасы сәл күрделі, және сіз сілтемеде сипатталған процедураны орындауыңыз керек. Қысқаша айтқанда, сіз «/etc/inittab» ішінде орналасқан «inittab» деп аталатын файлды өңдеуіңіз керек, «T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100» жолына түсініктеме беріңіз (егер файл жоқ болса) Raspberry операциялық жүйесінде құрылған, сіз «sudo leafpad /boot/config.txt» пәрменін енгізіп, файлдың соңына «enable_uart = 1» жолын қосуыңыз керек). Бұл аяқталғаннан кейін сіз LX терминалын қайта ашып, «sudo systemctl stop [email protected]» және «sudo systemctl [email protected] өшіру» пәрмендерімен Серияны өшіруіңіз керек. Осыдан кейін сіз «sudo leafpad /boot/cmdline.txt» пәрменін орындауыңыз керек, «console = serial0, 115200» жолын жойыңыз, файлды сақтаңыз және құрылғыны қайта іске қосыңыз. RX-TX байланысы болуы үшін Raspberry Pi-де «sudo apt-get install -f python-serial» пәрменімен сериялық кітапхананы орнату керек және «сериялық импорттау» жолын енгізу арқылы кітапхананы кодқа импорттау керек., «ser = serial. Serial (» / dev / ttyS0 «, 9600)» жолын және «ser.readline ()» пәрменін қолдана отырып Arduino жіберген кернеуді оқу арқылы серияны инициализациялау - пайдаланылған толық код таңқурай мақаланың соңында қол жетімді болады.
Жоғарыда сипатталған процедурадан кейін кернеуді оқу мен жіберу қадамы аяқталды.
6 -қадам: Arduino бағдарламалау:
Жоғарыда айтылғандай, велосипедпен жүру кезінде пайда болатын кернеуді оқуға жауап беретін код өте қарапайым.
Біріншіден, кернеуді оқуға жауапты A0 түйреуішін таңдау қажет.
«Void setup ()» функциясында сізге «pinMode (сенсор, INPUT)» пәрменімен A0 түйреуішін INPUT күйіне орнату және «Serial.begin (9600)» пәрменін қолдана отырып, порттың сериялық берілу жылдамдығын таңдау қажет.
«Void loop ()» ішінде «Serial.flush ()» функциясы ақпаратты сериялық жіберуді тоқтатқан сайын буферді тазарту үшін қолданылады; кернеуді оқу «analogRead (сенсор)» функциясымен орындалады - аналогтық порт оқитын мәнді вольтқа түрлендіру қажет екенін есте сақтап - мақаланың «оқу кернеуі» бөлімінде келтірілген процесс.
Сондай-ақ, «void loop ()» функциясында х айнымалысын float-ден жолға түрлендіру қажет, себебі бұл айнымалыны RX-TX арқылы жіберудің жалғыз жолы. Цикл функциясының соңғы қадамы - бұл жолды Raspberry -ге жіберу үшін сериялық порттағы басып шығару - бұл үшін «Serial.println (y)» функциясын қолдану қажет. «Кешіктіру (100)» жолы кодқа айнымалысы 100 мс интервалмен жіберілетін етіп қосылды - егер бұл уақыт сақталмаса, онда сериялық шамадан тыс жүктеме пайда болады, бұл бағдарламада мүмкін болатын бұзылуларды тудырады.
voltaj_read.ino
өзгермелі сенсор = A0; |
voidsetup () { |
pinMode (сенсор, INPUT); |
Serial.begin (9600); |
} |
voidloop () { |
Serial.flush (); |
float x = analogRead (сенсор)*0.0048828125*16.67; |
Y = «» жолы; |
y+= x; |
Serial.println (y); |
кешіктіру (100); |
} |
GitHub ❤ арқылы орналастырылған rawvoltage_read.ino файлын қараңыз
7 -қадам: Raspberry Pi 3 бағдарламалау:
lamp_bike.py
import os #import os кітапханасы (қажет болғанда экранды тазалау үшін қолданылады) |
Raspnerry GPIO басқару үшін пайдаланылатын RPi. GPIOas gpio #import кітапханасын импорттау |
сериялық байланысқа жауап беретін сериялық #импорт кітапханасын импорттаңыз |
импорт уақыты #импорт кітапханасы, бұл кешіктіру функциясын қолдануға мүмкіндік береді |
әндерді ойнатуға жауапты #импорт кітапханасының ішкі процесі |
#сериалды бастау |
ser = serial. Serial («/dev/ttyS0», 9600) #құрылғы атауын және беру жылдамдығын анықтаңыз |
#таза экран |
clear = lambda: os.system («анық») |
#релелік басқару үшін түйреуіштер |
gpio.setmode (gpio. BOARD) |
gpio.setup (11, gpio. OUT) #шам |
gpio.setup (12, gpio. OUT) #шам |
gpio.setup (13, gpio. OUT) #шам |
gpio.setup (15, gpio. OUT) #шам |
gpio.setup (16, gpio. OUT) #шам |
gpio.setup (18, gpio. OUT) #шам |
gpio.setup (19, gpio. OUT) #шам |
gpio.setup (21, gpio. OUT) #шам |
gpio.setup (22, gpio. OUT) #шам 2 |
gpio.setup (23, gpio. OUT) #шам 1 |
#жазбаларды бастау |
аты = [«Жоқ»]*10 |
кернеу = [0,00]*10 |
#жазбалар файлын оқу |
f = ашық ('жазбалар', 'r') |
for i inrange (10): #тізімдегі ең жақсы 10 ұпай пайда болады |
аты = f.readline () |
аты = аты [: len (аты )-1] |
кернеу = f.оқу сызығы () |
кернеу = қалқыма (кернеу [: лен (кернеу )-1]) |
f.close () |
анық () |
#максималды кернеуді орнатыңыз |
максимум = 50.00 |
#шамдарды сөндіріңіз |
for i inrange (11, 24, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. HIGH) #ЖОҒАРЫ күйге қойылды, реле өшірілді |
#бастау |
whileTrue: |
#бастапқы экран |
«Жазбалар: / n» басып шығару |
мен үшін (10): |
басып шығару атауы , «:», кернеу , «V» |
current_name = raw_input («Бастау үшін атыңызды жазыңыз:») |
анық () |
#Максималды мәнді өзгерту |
егер current_name == «max» болса: |
max = кіріс («Максималды кернеуді жазыңыз: (2 ондық белгі)») |
анық () |
басқа: |
#бастау туралы ескерту |
for i inrange (11, 24, 1): #цикл PIN 11 кодынан басталады және PIN 24 нүктесінде тоқтайды |
егер i! = 14 және i! = 17 мен i! = 20: #PIN 14 және 20 - GND түйреуіштері, ал 20 - 3,3 В түйреуіші |
gpio.output (i, gpio. LOW) #шамдарды қосыңыз |
уақыт.ұйқы (0.5) |
k = 10 |
мен үшін (23, 10, -1): |
анық () |
егер мен! = 14 және мен! = 17 және мен! = 20: |
ішкі процесс. Ашық (['aplay', 'Audio/'+str (k)+'. wav']) |
уақыт.ұйық (0.03) |
анық () |
басып шығарыңыз «Дайындал! / n», k |
уақыт.ұйқы (1) |
k- = 1 |
gpio.output (i, gpio. HIGH) #шамдарды өшіру (бірінен соң бірі) |
subprocess. Popen (['aplay', 'Audio/go.wav']) #бастапқы музыканы ойнайды |
уақыт.ұйық (0.03) |
анық () |
«GO!» басып шығарыңыз |
уақыт.ұйқы (1) |
анық () |
#кернеуді оқу |
ағымдағы_ кернеу = 0,00 |
кернеу1 = 0,00 |
мен үшін (200): |
ser.flushInput () |
алдыңғы = кернеу1 |
кернеу1 = float (ser.readline ()) #RX-TX жіберген Arduino деректерін жинайды |
анық () |
басып шығару кернеуі1, «V» |
егер кернеу1> ток_ кернеуі: |
ток_ кернеуі = кернеу1 |
# пайда болған кернеуге байланысты көбірек шамдар жанады. |
егер кернеу1 <максимум/10: |
for i inrange (11, 24, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = максимум/10: |
gpio.output (11, gpio. LOW) |
for i inrange (12, 24, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 2*макс/10: |
for i inrange (11, 13, 1): |
gpio.output (i, gpio. LOW) |
for i inrange (13, 24, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 3*макс/10: |
for i inrange (11, 14, 1): |
gpio.output (i, gpio. LOW) |
for i inrange (15, 24, 1): |
егер мен! = 17 және мен! = 20: |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 4*макс/10: |
for inrange (11, 16, 1): |
егер мен! = 14: |
gpio.output (i, gpio. LOW) |
for inrange (16, 24, 1): |
егер мен! = 17 және мен! = 20: |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 5*макс/10: |
for i inrange (11, 17, 1): |
егер мен! = 14: |
gpio.output (i, gpio. LOW) |
for inrange (18, 24, 1): |
егер мен! = 20: |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 6*макс/10: |
for i inrange (11, 19, 1): |
егер мен! = 14 және мен! = 17: |
gpio.output (i, gpio. LOW) |
for i inrange (19, 24, 1): |
егер мен! = 20: |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 7*макс/10: |
for inrange (11, 20, 1): |
егер мен! = 14 және мен! = 17: |
gpio.output (i, gpio. LOW) |
for i inrange (21, 24, 1): |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 8*макс/10: |
for i inrange (11, 22, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. LOW) |
for i inrange (22, 24, 1): |
gpio.output (i, gpio. HIGH) |
егер кернеу1> = 9*max/10: |
for i inrange (11, 23, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. LOW) |
gpio.output (23, gpio. HIGH) |
егер кернеу1> = максимум: |
for i inrange (11, 24, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. LOW) |
кернеу болса 1 |
үзіліс |
#шамдарды сөндіріңіз |
for i inrange (11, 24, 1): |
егер мен! = 14 және мен! = 17 және мен! = 20: |
gpio.output (i, gpio. HIGH) |
#жеңіс музыкасы |
егер ағымдағы_ кернеу> = максимум: |
subprocess. Popen (['aplay', 'Audio/rocky.wav']) |
уақыт.ұйық (0.03) |
анық () |
басып шығару «Өте жақсы, сен жеңдің!»% (u '\u00c9', u '\u00ca', u '\u00c2') |
мен үшін (10): |
j inrange үшін (11, 24, 1): |
егер j! = 14 және j! = 17 және j! = 20 болса: |
gpio.output (j, gpio. LOW) |
уақыт.ұйық (0.05) |
j inrange үшін (11, 24, 1): |
егер j! = 14 және j! = 17 және j! = 20 болса: |
gpio.output (j, gpio. HIGH) |
уақыт.ұйық (0.05) |
уақыт.ұйқы (0.5) |
ішкі процесс. Ашық (['aplay', 'Audio/end.wav']) |
уақыт.ұйық (0.03) |
анық () |
«Ойынды аяқтау… / n», ағымдағы_ кернеуді, «V» басып шығару |
#рекордтар |
уақыт.ұйқы (1.2) |
= 0ге жетті |
мен үшін (10): |
егер ағымдағы_ кернеу> кернеу : |
+= 1ге жетті |
temp_voltage = кернеу |
кернеу = ток кернеуі |
ағымдағы_ кернеу = уақытша кернеу |
temp_name = аты |
аты = ағымдағы_атау |
current_name = temp_name |
егер> 0 болса: |
subprocess. Popen (['aplay', 'Audio/record.wav']) |
уақыт.ұйық (0.03) |
анық () |
f = ашық ('жазбалар', 'w') |
мен үшін (10): |
f.write (аты ) |
f.write («\ n») |
f.write (str (кернеу )) |
f.write («\ n») |
f.close () |
анық () |
GitHub ұсынған ❤ арқылы rawlamps_bike.py файлын қарау
8 -қадам: Электр схемасы:
Arduino мен Raspberry Pi 3 5А 3А токпен жұмыс істейді.
Электр тізбегі 5,3 В кернеу сүзгісі, 10 мкФ конденсатор және 1 кОм резистордан тұратын кернеу сүзгісі арқылы тұрақты генераторды (велосипедке қосылған) Arduino -ға қосудан басталады. генератор терминалдары мен шығысы контроллердің A0 портына және GND -ге қосылған.
Arduino RX-TX байланысы арқылы Raspberry-ге қосылады-резистивті бөлгіш арқылы 10 кОм резисторлар арқылы орындалады (әр түрлі кернеуде жұмыс істейтін контроллерлер порттары үшін қажет).
Raspberry Pi GPIO -лары шамдарды қосуға жауапты реле қосылады. Барлық релелердің «COM» бір -бірімен байланысты және фазаға (айнымалы ток торына) қосылды, ал әрбір реленің «N. O» (әдетте ашық) әр шамға қосылды және айнымалы ток торының нейтралі барлық шамдарға қосылды. Осылайша, әрбір реле үшін жауапты GPIO қосылған кезде, реле айнымалы токтың фазасына ауысады және сәйкес шамды қосады.
9 -қадам: Нәтижелер:
Жобаның соңғы жиналысынан кейін оның күтілгендей жұмыс істегені тексерілді - пайдаланушы велосипедпен жүретін жылдамдыққа сәйкес, кернеу көбейіп, шамдар жанып тұрады.
Ұсынылған:
Күн бақшасының жарығын RBG -ге велосипедпен жүру: 7 қадам (суреттермен)
Күн бақшасындағы шамды велосипедпен RBG -ге көтеру: Youtube -те күн бақшасының шамдарын жөндеу туралы көптеген бейнелер бар; Күн сәулесі бақшасының батареясының қызмет ету мерзімін ұзартады, осылайша олар түнде ұзақ жұмыс істейді, және басқа да көптеген бұзушылықтар
Велосипедпен жүретін телефон зарядтаушысы: 6 қадам (суреттермен)
Велосипедпен жүретін телефон зарядтаушысы: бұл арзан, 3D басып шығарылатын, жасауға және орнатуға оңай, ал телефон зарядтағыш әмбебап велосипедпен жұмыс істейтін телефон зарядтағыш. Егер сіз велосипедпен көп жүретін болсаңыз және телефонды зарядтау қажет болса, бұл пайдалы нәрсе
Керемет дыбысты Bluetooth динамигі - Велосипедпен!: 7 қадам (суреттермен)
Керемет дыбыс шығаратын Bluetooth динамигі | Уикипедия!: Біраз уақыт бұрын менің досым маған төбесінде жатқан ескі динамик корпусының суретін жіберді. Суретте көріп тұрғаныңыздай (келесі қадамда), ол қорқынышты жағдайда. Бақытымызға орай, оны маған беруін сұрағанда, ол келісті. Мен салуды жоспарладым
Pt.2 Bluetooth адаптерін жасау (үйлесімді динамик жасау): 16 қадам
Bluetooth адаптері Pt.2 (Үйлесімді динамик жасау): Бұл нұсқаулықта мен сізге ескі динамикті Bluetooth үйлесімді ету үшін Bluetooth адаптерін қалай пайдалану керектігін көрсететін боламын.*Егер сіз менің бірінші нұсқаулықты оқымаған болсаңыз Bluetooth адаптері " Жалғастырмас бұрын мұны істеуді ұсынамын
Велосипедпен жүру арқылы кез келген USB құрылғысын қалай зарядтауға болады: 10 қадам (суреттермен)
Велосипедпен жүру арқылы кез келген USB құрылғысын қалай зарядтауға болады: Бұл жоба Lemelson-MIT бағдарламасынан грант алған кезде басталды. (Джош, егер сіз мұны оқып жатсаңыз, біз сізді жақсы көреміз.) 6 оқушы мен бір мұғалімнен тұратын топ бұл жобаны біріктірді, біз оны нұсқаулыққа енгізуді шештік