Мазмуну:

Эргометрдик велосипед менен чыңалуу жаратуу: 9 кадам (сүрөттөр менен)
Эргометрдик велосипед менен чыңалуу жаратуу: 9 кадам (сүрөттөр менен)

Video: Эргометрдик велосипед менен чыңалуу жаратуу: 9 кадам (сүрөттөр менен)

Video: Эргометрдик велосипед менен чыңалуу жаратуу: 9 кадам (сүрөттөр менен)
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Июль
Anonim
Эргометрдик велосипед менен чыңалуу жаратуу
Эргометрдик велосипед менен чыңалуу жаратуу
Эргометрдик велосипед менен чыңалуу жаратуу
Эргометрдик велосипед менен чыңалуу жаратуу
Эргометрдик велосипед менен чыңалуу жаратуу
Эргометрдик велосипед менен чыңалуу жаратуу

Долбоордун иштелип чыгышы велосипеддин педалына ылайыктуу болгон кыймылдаткычтын ылдамдыгы жогорулаганда активацияланган лампалар мунарасына генераторго туташтырылган эргометр велосипедин педаль кылуу максатында "оюнду" чогултуудан турган. Система окууга негизделген-Arduino Mega аналогдук порту аркылуу-заматта чыңалуу пайда болот, андан кийин бул маалыматты RX-TX сериялы байланыш аркылуу Raspberry Pi 3ке өткөрүп берүү жана лампаларды реле аркылуу иштетүү.

1 -кадам: материалдар:

  • 1 Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 10 реле 12 В менен 1 Релей Калкан;
  • 10 чырак 127 В;
  • 1 Эргометрдик велосипед;
  • 1 Электр машинасы (Генератор) 12 В;
  • Резисторлор (1x1kΩ, 2x10kΩ);
  • 1 электролитикалык конденсатор 10 µF;
  • 1 Zener диод 5.3 V;
  • 1,5 мм кабель (кызыл, кара, күрөң);
  • 10 лампаны колдогон 1 MDF мунарасы.

2 -кадам: Системалык блоктордун диаграммасы:

Системалык блоктордун диаграммасы
Системалык блоктордун диаграммасы

3 -кадам: системанын иштеши:

Система лампаларды күйгүзө турган релелерди активдештирүү үчүн жооптуу электр энергиясында велосипед тебүү учурунда пайда болгон кинетикалык энергияны трансформациялоого негизделген.

Генератор жараткан чыңалуу Arduino аналогдук пини тарабынан окулат жана RX-TX аркылуу Raspberry Piге жөнөтүлөт. Релени активдештирүү өндүрүлгөн чыңалууга пропорционалдуу - чыңалуу канчалык жогору болсо, релени ошончолук көп иштетет жана көп лампалар күйөт.

4 -кадам: Механиканын аспектилери

Механика аспектилери
Механика аспектилери

DC генераторун велосипедге механикалык түрдө жупташтыруу үчүн, белдемдүү системаны жалпы велосипеддерде колдонулган система менен алмаштыруу керек болчу (таажы, чынжыр жана тиштен турат). Кыймылдаткычты бурамалар менен бекитүү үчүн велосипед рамасына металл табак ширетилген. Андан кийин, пионер генератордун валына ширетилип, педаль системасын генераторго туташтырып, чынжыр жайгаштырылышы мүмкүн.

5 -кадам: Voltage окуу:

Генератордун чыңалуусун окуу үчүн 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 OSде негизделген, сиз "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 ()" функциясында x өзгөрмөсүн floatтан stringге айландыруу керек, анткени бул өзгөрмөнү RX-TX аркылуу жөнөтүүнүн бирден-бир жолу. Укурук функциясынын акыркы кадамы сапты сериялык портто басып чыгаруу, аны Малиниге жөнөтүү үчүн - бул үчүн "Serial.println (y)" функциясын колдонуу керек. "Кечиктирүү (100)" сабы кодго өзгөрмөнүн 100 мс аралыкта жөнөтүлүшү үчүн гана кошулду - эгерде бул убакыт сакталбаса, Сериалдын ашыкча жүктөлүшү пайда болуп, программада мүмкүн болгон каталарды жаратат.

gərginlik_read.ino

сүзүүчү сенсор = A0;
voidsetup () {
pinMode (сенсор, INPUT);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (сенсор)*0.0048828125*16.67;
String y = "";
y+= x;
Serial.println (y);
кечиктирүү (100);
}

GitHub тарабынан ❤ уюштурулган rawvoltage_read.ino көрүү

7 -кадам: Raspberry Pi 3 программалоо:

lamp_bike.py

импорт os #импорт os китепканасы (керек болгондо экранды тазалоо үчүн колдонулат)
import RPi. GPIOas gpio #import китепканасы Raspnerryнин GPIOсун көзөмөлдөө үчүн колдонулат
сериялык байланыш үчүн жооптуу импорттук сериялык #импорт китепканасы
импорт убактысы #импорттук китепкана, бул кечиктирүү функциясын колдонууга мүмкүндүк берет
импорттук подпроцесс #импорттук китепкана ырларды ойнотууга жооптуу
#сериалды баштоо
ser = serial. Serial ("/dev/ttyS0", 9600) #түзмөктүн аталышын жана берүү ылдамдыгын аныктоо
#таза экран
clear = lambda: os.system ("ачык")
Реле көзөмөлү үчүн #казыктарды орнотуңуз
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #чырак 10
gpio.setup (12, gpio. OUT) #чырак 9
gpio.setup (13, gpio. OUT) #лампа 8
gpio.setup (15, gpio. OUT) #лампа 7
gpio.setup (16, gpio. OUT) #лампа 6
gpio.setup (18, gpio. OUT) #лампа 5
gpio.setup (19, gpio. OUT) #лампа 4
gpio.setup (21, gpio. OUT) #лампа 3
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.readline ()
чыңалуу = калкып чыгуу (чыңалуу [: len (чыңалуу )-1])
f.close ()
ачык ()
#максималдуу чыңалууну коюңуз
максимум = 50.00
#лампаларды өчүрүү
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 = input ("Максималдуу чыңалууну жазыңыз: (2 ондук орун)")
ачык ()
башка:
#баштоо эскертүүсү
for i inrange (11, 24, 1): #цикл PIN 11ден башталат жана PIN 24 менен токтойт
эгер мен! = 14жана!!
gpio.output (i, gpio. LOW) #лампаларды күйгүзүү
убакыт.уйку (0.5)
k = 10
i inrange үчүн (23, 10, -1):
ачык ()
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
subprocess. Popen (['aplay', 'Audio/'+str (k)+'. wav'])
time.sleep (0.03)
ачык ()
басып чыгаруу "Даярдал! / n", к
убакыт.уйку (1)
k- = 1
gpio.output (i, gpio. HIGH) #лампаларды өчүрүү (бирден)
subprocess. Popen (['aplay', 'Audios/go.wav']) #баштапкы музыканы ойнотот
time.sleep (0.03)
ачык ()
басып "GO!"
убакыт.уйку (1)
ачык ()
#чыңалуу окуу
current_voltage = 0.00
чыңалуу1 = 0,00
мен үчүн (200):
ser.flushInput ()
мурунку = чыңалуу1
Voltage1 = float (ser.readline ()) #RX-TX тарабынан берилген Arduino маалыматтарын чогултат
ачык ()
басма чыңалуусу1, "V"
эгер Voltage1> current_voltage:
current_voltage = чыңалуу1
# өндүрүлгөн чыңалууга жараша, дагы лампалар күйөт.
эгер чыңалуу1 <max/10:
i inrange үчүн (11, 24, 1):
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
gpio.output (i, gpio. HIGH)
Эгерде Voltage1> = max/10:
gpio.output (11, gpio. LOW)
i inrange үчүн (12, 24, 1):
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
gpio.output (i, gpio. HIGH)
эгер Voltage1> = 2*max/10:
i inrange үчүн (11, 13, 1):
gpio.output (i, gpio. LOW)
мен үчүн (13, 24, 1):
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
gpio.output (i, gpio. HIGH)
эгер Voltage1> = 3*max/10:
i inrange үчүн (11, 14, 1):
gpio.output (i, gpio. LOW)
мен үчүн (15, 24, 1):
эгер мен! = 17 жана мен! = 20:
gpio.output (i, gpio. HIGH)
эгер Voltage1> = 4*max/10:
i inrange үчүн (11, 16, 1):
эгер мен! = 14:
gpio.output (i, gpio. LOW)
i inrange үчүн (16, 24, 1):
эгер мен! = 17 жана мен! = 20:
gpio.output (i, gpio. HIGH)
Эгерде Voltage1> = 5*max/10:
i inrange үчүн (11, 17, 1):
эгер мен! = 14:
gpio.output (i, gpio. LOW)
i inrange үчүн (18, 24, 1):
эгер мен! = 20:
gpio.output (i, gpio. HIGH)
Эгерде Voltage1> = 6*max/10:
i inrange үчүн (11, 19, 1):
эгер мен! = 14 жана мен! = 17:
gpio.output (i, gpio. LOW)
i inrange үчүн (19, 24, 1):
эгер мен! = 20:
gpio.output (i, gpio. HIGH)
эгер Voltage1> = 7*max/10:
мен үчүн (11, 20, 1):
эгер мен! = 14 жана мен! = 17:
gpio.output (i, gpio. LOW)
i inrange үчүн (21, 24, 1):
gpio.output (i, gpio. HIGH)
эгер Voltage1> = 8*max/10:
мен үчүн (11, 22, 1):
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
gpio.output (i, gpio. LOW)
i inrange үчүн (22, 24, 1):
gpio.output (i, gpio. HIGH)
Эгерде Voltage1> = 9*max/10:
i inrange үчүн (11, 23, 1):
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
Эгерде Voltage1> = Max:
i inrange үчүн (11, 24, 1):
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
gpio.output (i, gpio. LOW)

эгерде чыңалуу 1

тыныгуу
#лампаларды өчүрүү
i inrange үчүн (11, 24, 1):
эгер мен! = 14 жана мен! = 17 жана мен! = 20:
gpio.output (i, gpio. HIGH)
#жеңүүчү музыка
эгер current_voltage> = max:
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)
time.sleep (0.05)
j inrange үчүн (11, 24, 1):
эгер j! = 14жана j! = 17жана j! = 20:
gpio.output (j, gpio. HIGH)
time.sleep (0.05)
убакыт.уйку (0.5)
subprocess. Popen (['aplay', 'Audios/end.wav'])
time.sleep (0.03)
ачык ()
басып чыгаруу "Оюнду бүтүрүү… / n", current_voltage, "V"
#рекорддор
time.sleep (1.2)
= 0ге жетти
мен үчүн (10):
эгер current_voltage> чыңалуу :
+= 1ге жетти
temp_voltage = чыңалуу
чыңалуу = учурдагы чыңалуу
current_voltage = temp_voltage
temp_name = аты
аты = учурдагы_аталышы
current_name = temp_name
жетсе> 0:
subprocess. Popen (['aplay', 'Audios/record.wav'])
time.sleep (0.03)
ачык ()
f = ачык ('жазуулар', 'w')
мен үчүн (10):
f.write (аты )
f.write ("\ n")
f.write (str (Voltage ))
f.write ("\ n")
f.close ()
ачык ()

GitHub тарабынан ❤ менен хостинг rawlamps_bike.py көрүү

8 -кадам: Электр схемасы:

Электр схемасы
Электр схемасы
Электр схемасы
Электр схемасы
Электр схемасы
Электр схемасы

Arduino жана Raspberry Pi 3 3A агымы бар 5В булагы менен иштейт.

Электрдик схема DC генераторунун (велосипед менен коштолгон) Arduino менен 5.3V Zener диодунан, 10μF конденсаторунан жана 1kΩ каршылыгынан турган чыңалуу чыпкасы аркылуу туташуусунан башталат - чыпкасы киргизүү генератор терминалдары жана чыгаруу A0 портуна жана контроллердин GNDсына туташкан.

Arduino RX-TX байланышы аркылуу Raspberry менен туташкан-10 кОмдук резисторлорду колдонуу менен резистивдүү бөлүүчү аркылуу аткарылат (ар кандай чыңалууда иштеген контроллерлердин порттору талап кылат).

Raspberry Piнин GPIO'лору лампаларды күйгүзүү үчүн жооптуу реле менен туташкан. Бардык реленин "COM" бири -бири менен байланышкан жана фазага (AC тору) жана "N. O" (кадимкидей ачык) ар бир лампага жана AC торунун нейтралдуу бардык лампаларга туташтырылган. Ошентип, ар бир реле үчүн жооптуу GPIO иштетилгенде, реле AC тармагынын фазасына которулат жана тиешелүү лампаны күйгүзөт.

9 -кадам: Жыйынтыктар:

Image
Image

Долбоордун акыркы жыйналышынан кийин, ал күтүлгөндөй иштегени тастыкталды - колдонуучу велосипедди педальдаштырган ылдамдыгына жараша, көбүрөөк чыңалуу пайда болот жана көп лампалар күйөт.

Сунушталууда: