Оглавление:

Создание напряжения с помощью велосипеда-эргометра: 9 шагов (с изображениями)
Создание напряжения с помощью велосипеда-эргометра: 9 шагов (с изображениями)

Видео: Создание напряжения с помощью велосипеда-эргометра: 9 шагов (с изображениями)

Видео: Создание напряжения с помощью велосипеда-эргометра: 9 шагов (с изображениями)
Видео: ПЕРИОДИЗАЦИЯ СПОРТИВНОЙ ТРЕНИРОВКИ / Лекция Селуянова В.Н. 2024, Июль
Anonim
Генерация напряжения с помощью велоэргометра
Генерация напряжения с помощью велоэргометра
Генерация напряжения с помощью велоэргометра
Генерация напряжения с помощью велоэргометра
Генерация напряжения с помощью велоэргометра
Генерация напряжения с помощью велоэргометра

Разработка проекта заключалась в сборке «игры» с целью крутить педали в велосипеде-эргометре, подключенном к генератору, и столбу ламп, которые активируются при увеличении оборотов двигателя, что происходит в соответствии с педалированием велосипеда. Система была основана на считывании через аналоговый порт Arduino Mega мгновенного генерируемого напряжения, последующей передаче этих данных на Raspberry Pi 3 через последовательную связь RX-TX и последующей активации ламп через реле.

Шаг 1: Материалы:

  • 1 Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 1 релейный экран с 10 реле 12 В;
  • 10 ламп накаливания 127 В;
  • 1 велосипед с эргометром;
  • 1 электрическая машина (генератор) 12 В;
  • Резисторы (1х1кОм, 2х10кОм);
  • 1 электролитический конденсатор 10 мкФ;
  • 1 стабилитрон 5,3 В;
  • Кабель 1,5 мм (красный, черный, коричневый);
  • 1 мачта МДФ с опорой на 10 светильников.

Шаг 2: Схема системных блоков:

Схема системных блоков
Схема системных блоков

Шаг 3: Работа системы:

Система основана на преобразовании кинетической энергии, генерируемой при езде на велосипеде, в электрическую энергию, отвечающую за активацию реле, которые включают лампы.

Напряжение, генерируемое генератором, считывается аналоговым выводом Arduino и отправляется через RX-TX на Raspberry Pi. Активация реле пропорциональна генерируемому напряжению - чем выше напряжение, тем больше реле срабатывает и загорается больше ламп.

Шаг 4: аспекты механики

Аспекты механики
Аспекты механики

Чтобы механически соединить генератор постоянного тока с велосипедом, ременную систему пришлось заменить системой, используемой на обычных велосипедах (состоящей из короны, цепи и шестерни). К раме велосипеда приваривалась металлическая пластина, чтобы двигатель можно было закрепить винтами. После этого к валу генератора приваривали шестерню, чтобы можно было разместить цепь, соединяющую педальную систему с генератором.

Шаг 5: Считывание напряжения:

Чтобы считывать напряжение генератора с помощью Arduino, необходимо подключить положительный полюс электрической машины к выводу A0 контроллера, а отрицательный полюс - к GND - чтобы максимальное напряжение генератора не превышало 5 В Контакты Arduino, фильтр напряжения с конденсатором 10 мкФ, резистор 1 кОм и стабилитрон 5,3 В были сконструированы и подключены между контроллером и генератором. Прошивка, загруженная в Arduino, очень проста и состоит только из чтения аналогового порта, умножения считанного значения на константу 0,0048828125 (5/1024, то есть напряжения GPIO Arduino, деленного на количество бит аналогового порта) и отправки в Serial - код будет доступен в статье.

Процедура включения связи RX-TX в Raspberry Pi немного сложнее, и вы должны следовать процедуре, описанной в ссылке. Вкратце, вам нужно отредактировать файл с именем «inittab» - расположенный в «/ etc / 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 disable [email protected]». После этого необходимо выполнить команду «sudo leafpad /boot/cmdline.txt», удалить строку «console = serial0, 115200», сохранить файл и перезагрузить устройство. Для возможности связи RX-TX на Raspberry Pi необходимо установить последовательную библиотеку с помощью команды «sudo apt-get install -f python-serial» и импортировать библиотеку в код, вставив строку «import serial»., инициализируя серийный номер, вставляя строку «ser = serial. Serial (« / dev / ttyS0 », 9600)» и считывая напряжение, отправленное Arduino с помощью команды «ser.readline ()» - использованный полный код in Raspberry будет доступен в конце статьи.

Следуя описанной выше процедуре, этап считывания и отправки напряжения завершен.

Шаг 6: Программирование Arduino:

Как было сказано ранее, код, отвечающий за считывание напряжения, генерируемого при езде на велосипеде, очень прост.

Во-первых, необходимо выбрать вывод A0 как ответственный за считывание напряжения.

В функции «void setup ()» вам необходимо установить контакт A0 на INPUT с помощью команды «pinMode (sensor, INPUT)» и выбрать скорость передачи последовательного порта с помощью команды «Serial.begin (9600)».

В «void loop ()» функция «Serial.flush ()» используется для очистки буфера каждый раз, когда он прекращает отправку информации по последовательному каналу; считывание напряжения выполняется функцией «analogRead (sensor)» - помня, что необходимо преобразовать значение, считываемое аналоговым портом, в вольты - процесс, упомянутый в разделе «считывание напряжения» статьи.

Также в функции void loop () необходимо преобразовать переменную x из числа с плавающей точкой в строку, поскольку это единственный способ отправить переменную через RX-TX. Последним шагом в функции цикла является печать строки в последовательном порту, чтобы ее можно было отправить в Raspberry - для этого вы должны использовать функцию «Serial.println (y)». Строка «delay (100)» была добавлена в код только для того, чтобы переменная отправлялась с интервалом в 100 мс - если это время не соблюдается, произойдет последовательная перегрузка, вызывающая возможные сбои в программе.

Voltage_read.ino

датчик поплавка = A0;
voidsetup () {
pinMode (датчик, ВХОД);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (датчик) * 0,0048828125 * 16,67;
Строка y = "";
у + = х;
Serial.println (y);
задержка (100);
}

просмотреть rawvoltage_read.ino, размещенный на ❤ от GitHub

Шаг 7: Программирование Raspberry Pi 3:

lamp_bike.py

import os # импортировать библиотеку ОС (используется для очистки экрана при необходимости)
import RPi. GPIOas gpio #import библиотека, используемая для управления GPIO Raspnerry
import serial #import библиотека, отвечающая за последовательную связь
import time #import библиотека, позволяющая использовать функцию задержки
import subprocess #import библиотека, отвечающая за воспроизведение песен
#start serial
ser = serial. Serial ("/ dev / ttyS0", 9600) # определить имя устройства и скорость передачи
#очисти экран
clear = лямбда: 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
# начать записи
name = ["None"] * 10
напряжение = [0,00] * 10
# читать файл записей
f = open ('записи', 'г')
for i inrange (10): # 10 лучших результатов появляются в списке
name = f.readline ()
name = name [: len (name ) - 1]
напряжение = f.readline ()
напряжение = плавающее (напряжение [: len (Voltage ) - 1])
f.close ()
Чисто()
# установить максимальное напряжение
макс = 50.00
# выключить лампы
для i в диапазоне (11, 24, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (i, gpio. HIGH) # установить в HIGH, реле выключены
#Начните
whileTrue:
# начальный экран
print "Записи: / n"
для i inrange (10):
напечатать имя , ":", напряжение , "V"
current_name = raw_input ("Напишите свое имя для начала:")
Чисто()
# Изменить максимальное значение
если current_name == "max":
max = input («Запишите максимальное напряжение: (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) # включить лампы
time.sleep (0,5)
k = 10
для i inrange (23, 10, -1):
Чисто()
если i! = 14 и i! = 17 и i! = 20:
subprocess. Popen (['aplay', 'Audios /' + str (k) + '. wav'])
время сна (0,03)
Чисто()
print "Prepare! / n", k
время сна (1)
k- = 1
gpio.output (i, gpio. HIGH) # выключаем лампы (по одной)
subprocess. Popen (['aplay', 'Audios / go.wav']) # воспроизводит начальную музыку
время сна (0,03)
Чисто()
напечатать "GO!"
время сна (1)
Чисто()
#voltage read
current_voltage = 0,00
напряжение1 = 0,00
для i inrange (200):
ser.flushInput ()
предыдущий = напряжение1
Voltage1 = float (ser.readline ()) # собирает данные Arduino, передаваемые RX-TX
Чисто()
напряжение печати1, "В"
если Voltage1> current_voltage:
current_voltage = напряжение1
# в зависимости от генерируемого напряжения загорается больше ламп.
если напряжение1 <макс / 10:
для i в диапазоне (11, 24, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (я, gpio. HIGH)
если напряжение1> = макс / 10:
gpio.output (11, gpio. LOW)
для i в диапазоне (12, 24, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (я, gpio. HIGH)
если напряжение1> = 2 * макс / 10:
для i в диапазоне (11, 13, 1):
gpio.output (я, gpio. LOW)
для i в диапазоне (13, 24, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (я, gpio. HIGH)
если напряжение1> = 3 * макс / 10:
для i в диапазоне (11, 14, 1):
gpio.output (я, gpio. LOW)
для i inrange (15, 24, 1):
если i! = 17 и i! = 20:
gpio.output (я, gpio. HIGH)
если напряжение1> = 4 * макс / 10:
для i в диапазоне (11, 16, 1):
если i! = 14:
gpio.output (я, gpio. LOW)
для i inrange (16, 24, 1):
если i! = 17 и i! = 20:
gpio.output (я, gpio. HIGH)
если напряжение1> = 5 * макс / 10:
для i в диапазоне (11, 17, 1):
если i! = 14:
gpio.output (я, gpio. LOW)
для i в диапазоне (18, 24, 1):
если i! = 20:
gpio.output (я, gpio. HIGH)
если напряжение1> = 6 * макс / 10:
для i в диапазоне (11, 19, 1):
если i! = 14 и i! = 17:
gpio.output (я, gpio. LOW)
для i в диапазоне (19, 24, 1):
если i! = 20:
gpio.output (я, gpio. HIGH)
если напряжение1> = 7 * макс / 10:
для i в диапазоне (11, 20, 1):
если i! = 14 и i! = 17:
gpio.output (я, gpio. LOW)
для i в диапазоне (21, 24, 1):
gpio.output (я, gpio. HIGH)
если напряжение1> = 8 * макс / 10:
для i в диапазоне (11, 22, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (я, gpio. LOW)
для i inrange (22, 24, 1):
gpio.output (я, gpio. HIGH)
если напряжение1> = 9 * макс / 10:
для i в диапазоне (11, 23, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (я, gpio. LOW)
gpio.output (23, gpio. HIGH)
если напряжение1> = макс:
для i в диапазоне (11, 24, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (я, gpio. LOW)

если напряжение1

перерыв
# выключить лампы
для i в диапазоне (11, 24, 1):
если i! = 14 и i! = 17 и i! = 20:
gpio.output (я, gpio. HIGH)
# победная музыка
если current_voltage> = max:
subprocess. Popen (['aplay', 'Audios / rocky.wav'])
время сна (0,03)
Чисто()
напечатайте «ОЧЕНЬ ХОРОШО, ВЫ ВЫИГРАЛИ!»% (u '\u00c9', u '\u00ca', u '\u00c2')
для i inrange (10):
для j в диапазоне (11, 24, 1):
если j! = 14 и j! = 17 и j! = 20:
gpio.output (j, gpio. LOW)
время сна (0,05)
для j в диапазоне (11, 24, 1):
если j! = 14 и j! = 17 и j! = 20:
gpio.output (j, gpio. HIGH)
время сна (0,05)
time.sleep (0,5)
subprocess. Popen (['aplay', 'Audios / end.wav'])
время сна (0,03)
Чисто()
print "Конец игры… / n", current_voltage, "V"
# записи
time.sleep (1.2)
достигнуто = 0
для i inrange (10):
если current_voltage> Voltage :
достиг + = 1
temp_voltage = напряжение
напряжение = current_voltage
current_voltage = temp_voltage
temp_name = имя [я]
name = current_name
current_name = temp_name
если достигнуто> 0:
subprocess. Popen (['aplay', 'Audios / record.wav'])
время сна (0,03)
Чисто()
f = open ('записи', 'ш')
для i inrange (10):
f.write (имя )
f.write ("\ n")
f.write (str (напряжение ))
f.write ("\ n")
f.close ()
Чисто()

просмотреть rawlamps_bike.py, размещенный на ❤ на GitHub

Шаг 8: электрическая схема:

Электрическая схема
Электрическая схема
Электрическая схема
Электрическая схема
Электрическая схема
Электрическая схема

Arduino и Raspberry Pi 3 питаются от источника 5 В с током 3 А.

Электрическая схема начинается с подключения генератора постоянного тока (подключенного к велосипеду) к Arduino через фильтр напряжения, состоящий из стабилитрона 5,3 В, конденсатора 10 мкФ и резистора 1 кОм - вход фильтра подключен к Клеммы генератора и выход подключены к порту A0 и GND контроллера.

Arduino подключается к Raspberry через связь RX-TX, которая осуществляется через резистивный делитель с использованием резисторов 10 кОм (требуемых портами контроллеров, работающих при разных напряжениях).

GPIO Raspberry Pi подключены к реле, отвечающим за включение ламп. «COM» всех реле был соединен между собой и подключен к фазе (сеть переменного тока), а «Н. О» (нормально разомкнутый) каждого реле был подключен к каждой лампе, а нейтраль сети переменного тока была подключена ко всем лампам. Таким образом, при активации GPIO, отвечающего за каждое реле, реле переключается на фазу сети переменного тока и включает соответствующую лампу.

Шаг 9: Результаты:

Image
Image

После окончательной сборки проекта было подтверждено, что он работает, как ожидалось - в зависимости от скорости, которую пользователь крутил на велосипеде, генерируется больше напряжения и загорается больше ламп.

Рекомендуемые: