Съдържание:

Генериране на напрежение с велосипед с ергометър: 9 стъпки (със снимки)
Генериране на напрежение с велосипед с ергометър: 9 стъпки (със снимки)

Видео: Генериране на напрежение с велосипед с ергометър: 9 стъпки (със снимки)

Видео: Генериране на напрежение с велосипед с ергометър: 9 стъпки (със снимки)
Видео: 220v, 1000 Watt Universal Motor to Self Excited Generator (Vacuum Motor) 2024, Юли
Anonim
Генериране на напрежение с велосипед с ергометър
Генериране на напрежение с велосипед с ергометър
Генериране на напрежение с велосипед с ергометър
Генериране на напрежение с велосипед с ергометър
Генериране на напрежение с велосипед с ергометър
Генериране на напрежение с велосипед с ергометър

Разработването на проекта се състоеше в сглобяване на „игра“с цел да се педалират в мотоциклет с ергометър, свързан към генератор и кула от лампи, които се активират с увеличаване на оборотите на двигателя - което се случва в съответствие с педалите на велосипеда. Системата се основава на четене-през аналогов порт на 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: Резултати:

Image
Image

След окончателното сглобяване на проекта беше потвърдено, че той работи според очакванията - според скоростта, която потребителят педалира на мотора, се генерира повече напрежение и светват повече лампи.

Препоръчано: