Innholdsfortegnelse:

Generere spenning med en ergometersykkel: 9 trinn (med bilder)
Generere spenning med en ergometersykkel: 9 trinn (med bilder)

Video: Generere spenning med en ergometersykkel: 9 trinn (med bilder)

Video: Generere spenning med en ergometersykkel: 9 trinn (med bilder)
Video: 220v fra 12v bilgenerator med solcellepanel 2024, Juli
Anonim
Genererer spenning med en ergometersykkel
Genererer spenning med en ergometersykkel
Genererer spenning med en ergometersykkel
Genererer spenning med en ergometersykkel
Genererer spenning med en ergometer
Genererer spenning med en ergometer

Prosjektets utarbeidelse besto i montering av et "spill" med det formål å tråkke i en ergometersykkel som er koblet til en generator og et tårn med lamper som aktiveres når motorhastigheten øker - noe som skjer på grunn av sykkelpedalering. Systemet var basert på å lese-gjennom en analog port på en Arduino Mega-øyeblikkelig spenning som genereres, og deretter overføre disse dataene til en Raspberry Pi 3 via seriell RX-TX-kommunikasjon og den påfølgende aktiveringen av lampene via relé.

Trinn 1: Materialer:

  • 1 bringebær Pi 3;
  • 1 Arduino Mega 2560;
  • 1 Reléskjerm med 10 reléer 12 V;
  • 10 glødelamper 127 V;
  • 1 Ergometer sykkel;
  • 1 elektrisk maskin (generator) 12 V;
  • Motstander (1x1kΩ, 2x10kΩ);
  • 1 elektrolytisk kondensator 10 µF;
  • 1 Zenerdiode 5,3 V;
  • 1,5 mm kabel (rød, svart, brun);
  • 1 MDF -tårn med støtte for 10 lamper.

Trinn 2: Systemblokkeringsdiagram:

Systemblokkdiagram
Systemblokkdiagram

Trinn 3: Systemdrift:

Systemet er basert på transformasjonen av den kinetiske energien som genereres når sykkelen sykles i elektrisk energi som er ansvarlig for aktiveringen av reléene som vil slå på lampene.

Spenningen som genereres av generatoren leses av en analog pin av Arduino og sendes via RX-TX til Raspberry Pi. Aktiveringen av reléene er proporsjonal med spenningen som genereres - jo høyere spenning, jo flere releer vil bli utløst og flere lamper vil lyse.

Trinn 4: Mekaniske aspekter

Mekaniske aspekter
Mekaniske aspekter

For mekanisk å koble DC -generatoren til sykkelen, måtte beltesystemet erstattes av systemet som ble brukt på vanlige sykler (bestående av en krone, kjede og pinjong). En metallplate ble sveiset til sykkelrammen slik at motoren kunne festes med skruer. Etter det ble pinjonen sveiset til generatorakselen slik at kjeden kunne plasseres, og koblet pedalsystemet til generatoren.

Trinn 5: Spenningsavlesning:

For å lese generatorens spenning ved hjelp av Arduino er det nødvendig å koble den positive polen til den elektriske maskinen til A0 -pinnen på kontrolleren og den negative polen til GND - for å unngå at generatorens maksimal spenning er større enn 5 V på Arduino -pinner, et spenningsfilter ved bruk av en kondensator på 10 µF, en motstand på 1 kΩ og en Zenerdiode på 5,3 V ble konstruert og koblet mellom kontrolleren og generatoren. Fastvaren som er lastet inn i Arduino er veldig enkel og består bare av å lese en analog port, multiplisere verdien som er lest med konstanten 0,0048828125 (5/1024, det vil si Arduinos GPIO -spenning dividert med antall biter i den analoge porten) og sende variabel til serienummeret - koden vil være tilgjengelig i artikkelen.

Fremgangsmåten for å aktivere RX-TX-kommunikasjon i Raspberry Pi er litt mer kompleks, og du må følge prosedyren beskrevet i lenken. I korte trekk må du redigere en fil som heter “inittab” -plassert i “/etc/inittab” -, kommentere linjen “T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100” (hvis filen ikke er grunnlagt i Raspberry's OS, må du skrive inn kommandoen: "sudo leafpad /boot/config.txt" og legge til linjen "enable_uart = 1" til slutten av filen). Når dette er gjort, må du åpne LX-terminalen igjen og deaktivere serienummeret med kommandoene "sudo systemctl stop [email protected]" og "sudo systemctl deaktivere [email protected]". Etter det må du utføre kommandoen "sudo leafpad /boot/cmdline.txt", slette linjen "console = serial0, 115200", lagre filen og start enheten på nytt. For at RX-TX-kommunikasjon skal være mulig, må Serial-biblioteket installeres på Raspberry Pi med kommandoen "sudo apt-get install -f python-serial" og importere biblioteket til koden ved å sette inn "import serial" -linjen, initialiserer serien ved å sette inn linjen "ser = serial. Serial (" / dev / ttyS0 ", 9600)" og lesingen av spenningen sendt av Arduino ved hjelp av kommandoen "ser.readline ()" - hele koden som brukes i bringebær vil bli gjort tilgjengelig på slutten av artikkelen.

Etter fremgangsmåten beskrevet ovenfor er trinnet for les og send spenning fullført.

Trinn 6: Arduino -programmering:

Som tidligere nevnt er koden som er ansvarlig for å lese spenningen som genereres når du sykler veldig enkel.

For det første er det nødvendig å velge A0 -pinnen som ansvarlig for å lese spenningen.

I funksjonen "void setup ()" må du sette pin A0 til INPUT med kommandoen "pinMode (sensor, INPUT)" og velge overføringshastigheten for den serielle porten ved hjelp av kommandoen "Serial.begin (9600)".

I "void loop ()" brukes "Serial.flush ()" -funksjonen til å slette bufferen hver gang den avslutter sending av informasjon via seriell; spenningsavlesningen utføres av funksjonen "analogRead (sensor)" - husk at det er nødvendig å konvertere verdien som er lest av den analoge porten til Volt - prosess som er nevnt i "lesespenning" -delen av artikkelen.

I funksjonen "void loop ()" er det også nødvendig å konvertere variabelen x fra float til streng, siden dette er den eneste måten å sende variabelen via RX-TX. Det siste trinnet i loop -funksjonen er å skrive ut strengen i serieporten slik at den kan sendes til Raspberry - for dette må du bruke funksjonen "Serial.println (y)". Linjen "forsinkelse (100)" har blitt lagt til i koden bare slik at variabelen sendes i intervaller på 100 ms - hvis denne tiden ikke blir respektert, vil den serielle overbelastningen oppstå og generere mulige krasjer i programmet.

voltage_read.ino

flytesensor = A0;
voidsetup () {
pinMode (sensor, INNGANG);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (sensor)*0,0048828125*16,67;
String y = "";
y+= x;
Serial.println (y);
forsinkelse (100);
}

se rawvoltage_read.ino hostet av ❤ av GitHub

Trinn 7: Programmering av Raspberry Pi 3:

lamper_sykkel.py

importer os #importer os -biblioteket (brukes til å tømme skjermen når det er nødvendig)
importer RPi. GPIOas gpio #importbibliotek som brukes til å kontrollere Raspnerrys GPIO
importer serie #import bibliotek ansvarlig for seriell kommunikasjon
importtid #importbibliotek som gjør det mulig å bruke forsinkelsesfunksjonen
import delprosess #importbibliotek ansvarlig for å spille sangene
#start serien
ser = serial. Serial ("/dev/ttyS0", 9600) #definer enhetsnavnet og overføringshastigheten
#klar skjerm
clear = lambda: os.system ('clear')
#sett pins for relékontroll
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #lampe 10
gpio.setup (12, gpio. OUT) #lampe 9
gpio.setup (13, gpio. OUT) #lampe 8
gpio.setup (15, gpio. OUT) #lampe 7
gpio.setup (16, gpio. OUT) #lampe 6
gpio.setup (18, gpio. OUT) #lampe 5
gpio.setup (19, gpio. OUT) #lampe 4
gpio.setup (21, gpio. OUT) #lampe 3
gpio.setup (22, gpio. OUT) #lampe 2
gpio.setup (23, gpio. OUT) #lampe 1
#start poster
name = ["None"]*10
spenning = [0,00]*10
#read records file
f = open ('records', 'r')
for i inrange (10): #de 10 beste poengsummene vises på listen
navn = f.readline ()
navn = navn [: len (navn )-1]
spenning = f.readline ()
spenning = float (spenning [: len (spenning )-1])
f.close ()
klar()
#sett maks spenning
maks = 50,00
#slå av lampene
for i inrange (11, 24, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. HIGH) #satt til HIGH, reléene er slått av
#start
whileTrue:
#første skjerm
print "Records: / n"
for i inrange (10):
utskriftsnavn , ":", spenning , "V"
current_name = raw_input ("Skriv navnet ditt for å starte:")
klar()
#Endre maks verdi
hvis nåværende navn == "maks":
max = input ("Skriv maks spenning: (2 desimaler)")
klar()
ellers:
#start advarsel
for i inrange (11, 24, 1): #løkken starter i PIN 11 og stopper i PIN 24
hvis i! = 14og i! = 17 og i! = 20: #PIN 14 og 20 er GND -pinner og 20 er en 3,3 V -pinne
gpio.output (i, gpio. LOW) #tenn lampene
time.sleep (0,5)
k = 10
for i inrange (23, 10, -1):
klar()
hvis jeg! = 14og jeg! = 17og jeg! = 20:
delprosess. Popen (['aplay', 'Audios/'+str (k)+'. wav'])
time.sleep (0,03)
klar()
print "Forbered! / n", k
time.sleep (1)
k- = 1
gpio.output (i, gpio. HIGH) #slå av lampene (en etter en)
delprosess. Popen (['aplay', 'Audios/go.wav']) #spiller av startmusikken
time.sleep (0,03)
klar()
skrive ut "GO!"
time.sleep (1)
klar()
#spenning lest
strøm_spenning = 0,00
spenning1 = 0,00
for i inrange (200):
ser.flushInput ()
forrige = spenning1
voltage1 = float (ser.readline ()) #collects Arduinos data overført av RX-TX
klar()
utskriftsspenning1, "V"
hvis spenning1> nåværende_spenning:
strøm_spenning = spenning1
# avhengig av spenningen som genereres, tennes flere lamper.
hvis spenning1 <maks/10:
for i inrange (11, 24, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. HIGH)
hvis spenning1> = maks/10:
gpio.output (11, gpio. LOW)
for i inrange (12, 24, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. HIGH)
hvis spenning1> = 2*maks/10:
for i inrange (11, 13, 1):
gpio.output (i, gpio. LOW)
for i inrange (13, 24, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. HIGH)
hvis spenning1> = 3*maks/10:
for i inrange (11, 14, 1):
gpio.output (i, gpio. LOW)
for i inrange (15, 24, 1):
hvis jeg! = 17og jeg! = 20:
gpio.output (i, gpio. HIGH)
hvis spenning1> = 4*maks/10:
for i inrange (11, 16, 1):
hvis jeg! = 14:
gpio.output (i, gpio. LOW)
for i inrange (16, 24, 1):
hvis jeg! = 17og jeg! = 20:
gpio.output (i, gpio. HIGH)
hvis spenning1> = 5*maks/10:
for i inrange (11, 17, 1):
hvis jeg! = 14:
gpio.output (i, gpio. LOW)
for i inrange (18, 24, 1):
hvis jeg! = 20:
gpio.output (i, gpio. HIGH)
hvis spenning1> = 6*maks/10:
for i inrange (11, 19, 1):
hvis jeg! = 14og jeg! = 17:
gpio.output (i, gpio. LOW)
for i inrange (19, 24, 1):
hvis jeg! = 20:
gpio.output (i, gpio. HIGH)
hvis spenning1> = 7*maks/10:
for i inrange (11, 20, 1):
hvis jeg! = 14og jeg! = 17:
gpio.output (i, gpio. LOW)
for i inrange (21, 24, 1):
gpio.output (i, gpio. HIGH)
hvis spenning1> = 8*maks/10:
for i inrange (11, 22, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. LOW)
for i inrange (22, 24, 1):
gpio.output (i, gpio. HIGH)
hvis spenning1> = 9*maks/10:
for i inrange (11, 23, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
hvis spenning1> = maks:
for i inrange (11, 24, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. LOW)

hvis spenning 1

gå i stykker
#slå av lampene
for i inrange (11, 24, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. HIGH)
#victory musikk
hvis gjeldende_spenning> = maks:
delprosess. Popen (['aplay', 'Audios/rocky.wav'])
time.sleep (0,03)
klar()
skrive ut "VELDIG GODT, DU VINNER!"% (u '\u00c9', u '\u00ca', u '\u00c2')
for i inrange (10):
for j inrange (11, 24, 1):
hvis j! = 14og j! = 17og j! = 20:
gpio.output (j, gpio. LOW)
time.sleep (0,05)
for j inrange (11, 24, 1):
hvis j! = 14og j! = 17og j! = 20:
gpio.output (j, gpio. HIGH)
time.sleep (0,05)
time.sleep (0,5)
delprosess. Popen (['aplay', 'Audios/end.wav'])
time.sleep (0,03)
klar()
print "Slutt spillet … / n", current_voltage, "V"
#rekorder
time.sleep (1,2)
nådd = 0
for i inrange (10):
hvis strømspenning> spenning :
nådd+= 1
temp_voltage = spenning
spenning = strøm_spenning
current_voltage = temp_voltage
temp_name = navn
navn = nåværende navn
current_name = temp_name
hvis nådd> 0:
delprosess. Popen (['aplay', 'Audios/record.wav'])
time.sleep (0,03)
klar()
f = open ('records', 'w')
for i inrange (10):
f.write (navn )
f.write ("\ n")
f.write (str (spenning ))
f.write ("\ n")
f.close ()
klar()

se rawlamps_bike.py hostet av ❤ av GitHub

Trinn 8: Elektrisk opplegg:

Elektrisk opplegg
Elektrisk opplegg
Elektrisk opplegg
Elektrisk opplegg
Elektrisk opplegg
Elektrisk opplegg

Arduino og Raspberry Pi 3 drives av en 5V kilde med 3A strøm.

Den elektriske kretsen starter med tilkoblingen av DC -generatoren (koblet til sykkelen) til Arduino gjennom et spenningsfilter som består av en Zenerdiode på 5,3V, en kondensator på 10μF og en motstand på 1kΩ - filterinngangen er koblet til generatorterminaler og utgangen er koblet til A0 -porten og GND på kontrolleren.

Arduino er koblet til Raspberry via RX-TX kommunikasjon-utført gjennom en resistiv divider ved bruk av 10kΩ motstander (kreves av kontrollerenes porter som opererer ved forskjellige spenninger).

Raspberry Pi's GPIOer er koblet til reléene som er ansvarlige for å slå på lampene. "COM" for alle reléer var sammenkoblet og koblet til fasen (vekselstrømnettet) og "N. O" (normalt åpent) på hvert relé ble koblet til hver lampe og nøytralen til vekselstrømnettet var koblet til alle lampene. Når GPIO som er ansvarlig for hvert relé aktiveres, byttes altså reléet til fasen i vekselstrømnettet og slår på den respektive lampen.

Trinn 9: Resultater:

Image
Image

Etter den siste monteringen av prosjektet ble det bekreftet at det fungerte som forventet - i henhold til hastigheten som brukeren tråkker på sykkelen, genereres mer spenning og flere lamper lyser.

Anbefalt: