Съдържание:
- Стъпка 1: Материали:
- Стъпка 2: Диаграма на системните блокове:
- Стъпка 3: Работа на системата:
- Стъпка 4: Механични аспекти
- Стъпка 5: Отчитане на напрежението:
- Стъпка 6: Програмиране на Arduino:
- Стъпка 7: Програмиране на Raspberry Pi 3:
- Стъпка 8: Електрическа схема:
- Стъпка 9: Резултати:
Видео: Генериране на напрежение с велосипед с ергометър: 9 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Разработването на проекта се състоеше в сглобяване на „игра“с цел да се педалират в мотоциклет с ергометър, свързан към генератор и кула от лампи, които се активират с увеличаване на оборотите на двигателя - което се случва в съответствие с педалите на велосипеда. Системата се основава на четене-през аналогов порт на Arduino Mega-генерираното моментално напрежение, след което се предават тези данни към Raspberry Pi 3 чрез серийна RX-TX комуникация и последващото активиране на лампите чрез реле.
Стъпка 1: Материали:
- 1 малина Pi 3;
- 1 Arduino Mega 2560;
- 1 релеен щит с 10 релета 12 V;
- 10 лампи с нажежаема жичка 127 V;
- 1 Велоергометър;
- 1 Електрическа машина (генератор) 12 V;
- Резистори (1x1kΩ, 2x10kΩ);
- 1 електролитен кондензатор 10 µF;
- 1 ценеров диод 5.3 V;
- 1,5 мм кабел (червен, черен, кафяв);
- 1 MDF кула с опора за 10 лампи.
Стъпка 2: Диаграма на системните блокове:
Стъпка 3: Работа на системата:
Системата се основава на трансформацията на кинетичната енергия, генерирана при колоездене на велосипеда в електрическа енергия, отговорна за активирането на релетата, които ще включат лампите.
Напрежението, генерирано от генератора, се отчита от аналогов щифт на Arduino и се изпраща чрез RX-TX към Raspberry Pi. Активирането на релетата е пропорционално на генерираното напрежение - колкото по -високо е напрежението, толкова повече релета ще се задействат и ще светнат повече лампи.
Стъпка 4: Механични аспекти
За механично свързване на постояннотоковия генератор към велосипеда, ремъчната система трябваше да бъде заменена от системата, използвана за обикновени велосипеди (състояща се от корона, верига и пиньон). Към рамката на велосипеда е заварена метална плоча, така че двигателят да може да бъде закрепен с винтове. След това пиньонът беше заварен към вала на генератора, така че веригата да може да бъде поставена, като свързва педалната система с генератора.
Стъпка 5: Отчитане на напрежението:
За да прочетете напрежението на генератора с помощта на Arduino е необходимо да свържете положителния полюс на електрическата машина към щифта A0 на контролера и отрицателния полюс към GND - за да се избегне, че максималното напрежение на генератора е по -голямо от 5 V на Изводите на Arduino, филтър за напрежение, използващ кондензатор от 10 µF, резистор от 1 kΩ и ценеров диод от 5,3 V, бяха конструирани и свързани между контролера и генератора. Фърмуерът, зареден в Arduino, е много прост и се състои само от четене на аналогов порт, умножаване на прочетената стойност с константата 0.0048828125 (5/1024, това е GPIO напрежението на Arduino, разделено на броя битове на неговия аналогов порт) и изпращане на променлива към серийния - кодът ще бъде достъпен в статията.
Процедурата за разрешаване на 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 терминала и да деактивирате Serial с командите „sudo systemctl stop [email protected]“и „sudo systemctl disable [email protected]“. След това трябва да изпълните командата "sudo leafpad /boot/cmdline.txt", да изтриете реда "console = serial0, 115200", да запазите файла и да рестартирате устройството. За да бъде възможна комуникацията с RX-TX, библиотеката Serial трябва да бъде инсталирана на Raspberry Pi с командата "sudo apt-get install -f python-serial" и да импортира библиотеката в кода, като вмъкне реда "import serial", инициализиране на сериала чрез вмъкване на реда "ser = serial. Serial (" / dev / ttyS0 ", 9600)" и отчитане на напрежението, изпратено от Arduino с помощта на командата "ser.readline ()" - пълният използван код в Raspberry ще бъдат достъпни в края на статията.
Следвайки процедурата, описана по -горе, стъпката за напрежение за четене и изпращане е завършена.
Стъпка 6: Програмиране на Arduino:
Както бе посочено по -горе, кодът, отговорен за отчитане на напрежението, генерирано при колоездене, е много прост.
Първо, необходимо е да изберете щифта А0 като отговорен за отчитането на напрежението.
В функцията "void setup ()" трябва да настроите щифт A0 на INPUT с командата "pinMode (сензор, INPUT)" и да изберете скоростта на предаване на серийния порт с помощта на командата "Serial.begin (9600)".
В "void loop ()" функцията "Serial.flush ()" се използва за изчистване на буфера всеки път, когато прекратява изпращането на информация чрез сериен; отчитането на напрежението се извършва от функцията "analogRead (сензор)" - като се помни, че е необходимо стойността, прочетена от аналоговия порт, да се преобразува във Volts - процес, цитиран в раздела "напрежение за четене" на статията.
Също така, във функцията "void loop ()" е необходимо да се преобразува променливата x от плаващ в низ, тъй като това е единственият начин за изпращане на променливата чрез RX-TX. Последната стъпка във функцията цикъл е да отпечатате низ в серийния порт, така че да може да бъде изпратен до Raspberry - за това трябва да използвате функцията "Serial.println (y)". Редът „забавяне (100)“е добавен към кода само така, че променливата се изпраща на интервали от 100 ms - ако това време не бъде спазено, ще възникне серийно претоварване, генериращо възможни сривове в програмата.
напрежение_читай.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); |
} |
вижте rawvoltage_read.ino, хоствано с ❤ от GitHub
Стъпка 7: Програмиране на Raspberry Pi 3:
lamp_bike.py
import os #import the os library (използва се за изчистване на екрана, когато е необходимо) |
импортирайте библиотека RPi. GPIOas gpio #import, използвана за управление на GPIO на Raspnerry |
import serial #import библиотека, отговорна за серийната комуникация |
import time #import library, което дава възможност да се използва функцията за забавяне |
импортиране на подпроцес #import библиотека, отговорна за възпроизвеждането на песните |
#старт сериал |
ser = serial. Serial ("/dev/ttyS0", 9600) #дефинирайте името на устройството и скоростта на предаване |
#ясен екран |
clear = lambda: os.system ('clear') |
#set щифтове за управление на релето |
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 = ["Няма"]*10 |
напрежение = [0.00]*10 |
#прочетете файла с записи |
f = отворен ('записи', 'r') |
за i inrange (10): #10 -те най -добри резултата се появяват в списъка |
име = f.readline () |
име = име [: len (име )-1] |
напрежение = f.readline () |
напрежение = поплавък (напрежение [: len (напрежение )-1]) |
f.close () |
ясно () |
#задайте максималното напрежение |
макс = 50,00 |
#изключете лампите |
за i inrange (11, 24, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. HIGH) #set to HIGH, релетата са изключени |
#старт |
whileTrue: |
#начален екран |
отпечатайте „Записи: / n“ |
за irange (10): |
отпечатайте име , ":", напрежение , "V" |
current_name = raw_input ("Напишете името си, за да започнете:") |
ясно () |
#Промяна на максималната стойност |
ако current_name == "макс": |
max = вход ("Запишете максималното напрежение: (2 десетични знака)") |
ясно () |
иначе: |
#предупреждение за стартиране |
за i inrange (11, 24, 1): #цикълът започва в ПИН 11 и спира в ПИН 24 |
ако i! = 14 и i! = 17 и i! = 20: #PIN 14 и 20 са GND щифтове, а 20 е 3.3 V щифт |
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']) |
time.sleep (0.03) |
ясно () |
отпечатайте "Подгответе се! / n", k |
time.sleep (1) |
k- = 1 |
gpio.output (i, gpio. HIGH) #изключете лампите (една по една) |
subprocess. Popen (['aplay', 'Audios/go.wav']) #пуска началната музика |
time.sleep (0.03) |
ясно () |
отпечатайте "GO!" |
time.sleep (1) |
ясно () |
#четене на напрежение |
ток_напрежение = 0,00 |
напрежение1 = 0,00 |
за irange (200): |
ser.flushInput () |
предишен = напрежение1 |
напрежение1 = поплавък (ser.readline ()) #събира данните на Arduino, прехвърлени от RX-TX |
ясно () |
напрежение за печат1, "V" |
ако напрежение1> ток_напрежение: |
ток_напрежение = напрежение1 |
# в зависимост от генерираното напрежение светват повече лампи. |
ако напрежение1 <макс/10: |
за i inrange (11, 24, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = макс/10: |
gpio.output (11, gpio. LOW) |
за i inrange (12, 24, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 2*макс/10: |
за i inrange (11, 13, 1): |
gpio.output (i, gpio. LOW) |
за i inrange (13, 24, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 3*макс/10: |
за i inrange (11, 14, 1): |
gpio.output (i, gpio. LOW) |
за i inrange (15, 24, 1): |
ако i! = 17 и i! = 20: |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 4*макс/10: |
за i inrange (11, 16, 1): |
ако аз! = 14: |
gpio.output (i, gpio. LOW) |
за i inrange (16, 24, 1): |
ако i! = 17 и i! = 20: |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 5*макс/10: |
за i inrange (11, 17, 1): |
ако аз! = 14: |
gpio.output (i, gpio. LOW) |
за i inrange (18, 24, 1): |
ако аз! = 20: |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 6*макс/10: |
за i inrange (11, 19, 1): |
ако i! = 14 и i! = 17: |
gpio.output (i, gpio. LOW) |
за i inrange (19, 24, 1): |
ако аз! = 20: |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 7*макс/10: |
за i inrange (11, 20, 1): |
ако i! = 14 и i! = 17: |
gpio.output (i, gpio. LOW) |
за i inrange (21, 24, 1): |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 8*макс/10: |
за i inrange (11, 22, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. LOW) |
за i inrange (22, 24, 1): |
gpio.output (i, gpio. HIGH) |
ако напрежение1> = 9*макс/10: |
за i inrange (11, 23, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. LOW) |
gpio.output (23, gpio. HIGH) |
ако напрежение1> = макс: |
за i inrange (11, 24, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. LOW) |
ако напрежение 1 |
прекъсване |
#изключете лампите |
за i inrange (11, 24, 1): |
ако i! = 14 и i! = 17 и i! = 20: |
gpio.output (i, gpio. HIGH) |
#победоносна музика |
ако current_voltage> = max: |
subprocess. Popen (['aplay', 'Audios/rocky.wav']) |
time.sleep (0.03) |
ясно () |
отпечатайте "МНОГО ДОБРО, ПОБЕДИХТЕ!"% (u '\u00c9', u '\u00ca', u '\u00c2') |
за irange (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) |
time.sleep (0.5) |
subprocess. Popen (['aplay', 'Audios/end.wav']) |
time.sleep (0.03) |
ясно () |
отпечатайте "Край на играта … / n", текущо_напрежение, "V" |
#записи |
time.sleep (1.2) |
достигна = 0 |
за irange (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') |
за irange (10): |
f.write (име ) |
f.write ("\ n") |
f.write (str (напрежение )) |
f.write ("\ n") |
f.close () |
ясно () |
вижте rawlamps_bike.py, хоствано с ❤ от GitHub
Стъпка 8: Електрическа схема:
Arduino и Raspberry Pi 3 се захранват от 5V източник с 3A ток.
Електрическата верига започва със свързването на DC генератора (свързан с велосипеда) към Arduino чрез филтър за напрежение, съставен от ценеров диод от 5,3 V, кондензатор от 10 μF и резистор от 1 kΩ - входът на филтъра е свързан към терминали на генератора и изходът е свързан към A0 порта и GND на контролера.
Arduino е свързан към Raspberry чрез RX-TX комуникация-осъществява се чрез резистивен делител с помощта на 10kΩ резистори (изисква се от портовете на контролерите, работещи при различни напрежения).
GPIO на Raspberry Pi са свързани към релетата, отговорни за включването на лампите. „COM“на всички релета е свързан помежду си и е свързан към фазата (AC мрежа), а „N. O“(нормално отворен) на всяко реле е свързан към всяка лампа и неутралът на AC мрежата е свързан към всички лампи. По този начин, когато се активира GPIO, отговорен за всяко реле, релето се превключва към фазата на AC мрежата и включва съответната лампа.
Стъпка 9: Резултати:
След окончателното сглобяване на проекта беше потвърдено, че той работи според очакванията - според скоростта, която потребителят педалира на мотора, се генерира повече напрежение и светват повече лампи.
Препоръчано:
Генериране на изкуство от коментари: 5 стъпки (със снимки)
Генериране на изкуство от коментари: Този проект е амбициозен, в който искаме да използваме някои от най -съмнителните части на интернет, секции за коментари и стаи за чат, за да създадем изкуство. Искаме също така да направим проекта лесно достъпен, така че всеки да може да се пробва в генерирането на
Монитор на напрежение за батерии с високо напрежение: 3 стъпки (със снимки)
Монитор за напрежение за батерии с високо напрежение: В това ръководство ще ви обясня как изградих монитора за напрежение на батерията за моя електрически лонгборд. Монтирайте го както искате и свържете само два проводника към батерията си (Gnd и Vcc). Това ръководство предполага, че напрежението на батерията ви надвишава 30 волта, w
DC - DC напрежение стъпка надолу Режим на превключване Buck напрежение преобразувател (LM2576/LM2596): 4 стъпки
DC-DC Voltage Step Down Switch Mode Buck Voltage Converter (LM2576/LM2596): Изработването на високоефективен конвертор на долар е трудна работа и дори опитни инженери изискват множество проекти, за да стигнат до правилния. е DC-към-DC преобразувател на мощност, който намалява напрежението (докато увеличава
Прост дисплей с ергометър, базиран на Arduino, с диференциална обратна връзка: 7 стъпки (със снимки)
Прост дисплей с ергометър, базиран на Arduino, с диференциална обратна връзка: Кардио тренировката е скучна, особено при упражнения на закрито. Няколко съществуващи проекта се опитват да облекчат това, като правят готини неща, като например свързване на ергометъра към конзола за игра или дори симулиране на истинско колоездене в VR. Вълнуващо като това
Обувка за генериране на енергия: 10 стъпки (със снимки)
Обувка за генериране на енергия: Тази инструкция ще ви покаже как да създадете обувка, която генерира електричество. Той прави това, като използва вашата енергия при ходене и я превръща в електричество. Ако някога сте загубили захранването на мобилния си телефон в нищото, тогава