Indholdsfortegnelse:

Generering af spænding med en ergometercykel: 9 trin (med billeder)
Generering af spænding med en ergometercykel: 9 trin (med billeder)

Video: Generering af spænding med en ergometercykel: 9 trin (med billeder)

Video: Generering af spænding med en ergometercykel: 9 trin (med billeder)
Video: Induktion2 2024, Juli
Anonim
Generering af spænding med en ergometercykel
Generering af spænding med en ergometercykel
Generering af spænding med en ergometercykel
Generering af spænding med en ergometercykel
Generering af spænding med en ergometercykel
Generering af spænding med en ergometercykel

Projektets udarbejdelse bestod i samlingen af et "spil" med det formål at træde i en ergometercykel forbundet til en generator og et tårn af lamper, der aktiveres, når motorhastigheden stiger - hvilket sker i forbindelse med cykelpedalering. Systemet var baseret på at læse-gennem en analog port på en Arduino Mega-den øjeblikkelige spænding, der blev genereret, og derefter overføre disse data til en Raspberry Pi 3 via seriel RX-TX-kommunikation og den efterfølgende aktivering af lamperne via relæ.

Trin 1: Materialer:

  • 1 Hindbær Pi 3;
  • 1 Arduino Mega 2560;
  • 1 Relæafskærmning med 10 relæer 12 V;
  • 10 glødelamper 127 V;
  • 1 Ergometercykel;
  • 1 elektrisk maskine (generator) 12 V;
  • Modstande (1x1kΩ, 2x10kΩ);
  • 1 elektrolytisk kondensator 10 µF;
  • 1 zener -diode 5,3 V;
  • 1,5 mm kabel (rød, sort, brun);
  • 1 MDF -tårn med støtte til 10 lamper.

Trin 2: Diagram over systemblokke:

Systemblokke Diagram
Systemblokke Diagram

Trin 3: Systemdrift:

Systemet er baseret på transformationen af den kinetiske energi, der genereres, når cyklen cykles i elektrisk energi, der er ansvarlig for aktiveringen af de relæer, der tænder lamperne.

Spændingen genereret af generatoren læses af en analog pin af Arduino og sendes via RX-TX til Raspberry Pi. Aktiveringen af relæerne er proportional med den genererede spænding - jo højere spænding, jo flere relæer vil blive udløst og flere lamper vil lyse.

Trin 4: Mekaniske aspekter

Mekaniske aspekter
Mekaniske aspekter

For mekanisk at koble DC -generatoren til cyklen skulle remsystemet udskiftes med det system, der bruges på almindelige cykler (bestående af en krone, kæde og tandhjul). En metalplade blev svejset til cykelrammen, så motoren kunne sikres med skruer. Derefter blev tandhjulet svejset til generatorakslen, så kæden kunne placeres, hvilket forbinder pedalsystemet med generatoren.

Trin 5: Spændingsaflæsning:

For at aflæse generatorens spænding ved hjælp af Arduino er det nødvendigt at forbinde den elektriske maskins positive pol til A0 -stiften på controlleren og den negative pol til GND - for at undgå, at generatorens maksimale spænding er større end 5 V i Arduino -ben, et spændingsfilter ved hjælp af en kondensator på 10 µF, en modstand på 1 kΩ og en Zener -diode på 5,3 V blev konstrueret og forbundet mellem controlleren og generatoren. Firmwaren, der er indlæst i Arduino, er meget enkel og består kun af at læse en analog port, gange værdien læst med konstanten 0,0048828125 (5/1024, det vil sige Arduino's GPIO -spænding divideret med antallet af bits i den analoge port) og sende variabel til serienummeret - koden vil være tilgængelig i artiklen.

Proceduren for aktivering af RX-TX-kommunikation i Raspberry Pi er lidt mere kompleks, og du skal følge proceduren beskrevet i linket. Kort fortalt skal du redigere en fil kaldet "inittab" -placeret i "/etc/inittab" -, kommentere linjen "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (hvis filen ikke er grundlagt i Raspberry's OS, skal du indtaste kommandoen: "sudo leafpad /boot/config.txt" og tilføje linjen "enable_uart = 1" til slutningen af filen). Når dette er gjort, skal du genåbne LX-terminalen og deaktivere Serial med kommandoerne "sudo systemctl stop [email protected]" og "sudo systemctl deaktivere [email protected]". Derefter skal du udføre kommandoen "sudo leafpad /boot/cmdline.txt", slette linjen "console = serial0, 115200", gemme filen og genstarte enheden. For at RX-TX-kommunikation er mulig, skal Serial-biblioteket installeres på Raspberry Pi med kommandoen "sudo apt-get install -f python-serial" og importere biblioteket til koden ved at indsætte linjen "import serial", initialisering af serien ved at indsætte linjen "ser = serial. Serial (" / dev / ttyS0 ", 9600)" og aflæsning af spændingen sendt af Arduino ved hjælp af kommandoen "ser.readline ()" - den fulde kode bruges i Hindbær vil blive gjort tilgængelig i slutningen af artiklen.

Efter fremgangsmåden beskrevet ovenfor er trinene for læse og sende spænding fuldført.

Trin 6: Arduino -programmering:

Som tidligere nævnt er koden, der er ansvarlig for aflæsning af spændingen, der genereres ved cykling, meget enkel.

For det første er det nødvendigt at vælge A0 -stiften som ansvarlig for aflæsning af spændingen.

I funktionen "void setup ()" skal du indstille pin A0 til INPUT med "pinMode (sensor, INPUT)" kommando og vælge den serielle portoverførselshastighed ved hjælp af kommandoen "Serial.begin (9600)".

I "void loop ()" bruges funktionen "Serial.flush ()" til at slette bufferen, hver gang den afslutter afsendelse af oplysninger via seriel; spændingsaflæsning udføres af funktionen "analogRead (sensor)" - husk på, at det er nødvendigt at konvertere værdien, der læses af den analoge port til Volt - proces angivet i afsnittet "læsespænding" i artiklen.

I funktionen "void loop ()" er det også nødvendigt at konvertere variablen x fra float til streng, da dette er den eneste måde at sende variablen via RX-TX. Det sidste trin i loop -funktionen er at udskrive strengen i den serielle port, så den kan sendes til Raspberry - til dette skal du bruge funktionen "Serial.println (y)". Linjen "forsinkelse (100)" er kun tilføjet til koden, så variablen sendes i intervaller på 100 ms - hvis denne tid ikke overholdes, vil der opstå seriel overbelastning, der genererer mulige nedbrud i programmet.

voltage_read.ino

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

se rawvoltage_read.ino hostet af ❤ af GitHub

Trin 7: Programmering af Raspberry Pi 3:

lamper_cykel.py

import os #importer os -biblioteket (bruges til at rydde skærmen, når det er nødvendigt)
import RPi. GPIOas gpio #import bibliotek, der bruges til at styre Raspnerrys GPIO
import serielt #importbibliotek, der er ansvarlig for den serielle kommunikation
importtid #importbibliotek, der gør det muligt at bruge forsinkelsesfunktionen
import delproces #importbibliotek ansvarlig for afspilning af sangene
#start seriel
ser = serial. Serial ("/dev/ttyS0", 9600) #definer enhedsnavnet og baudhastigheden
#klar skærm
clear = lambda: os.system ('clear')
#sætstifter til relækontrol
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
spænding = [0,00]*10
#læs optegnelsesfil
f = open ('records', 'r')
for i inrange (10): #de 10 bedste scores vises på listen
navn = f.readline ()
navn = navn [: len (navn )-1]
spænding = f.readline ()
spænding = float (spænding [: len (spænding )-1])
f.close ()
klar()
#indstil den maksimale spænding
max = 50,00
#tænd lamperne
for i inrange (11, 24, 1):
hvis i! = 14og i! = 17og i! = 20:
gpio.output (i, gpio. HIGH) #indstillet til HIGH, relæerne slukkes
#Start
whileTrue:
#indledende skærm
print "Optegnelser: / n"
for i inrange (10):
printnavn , ":", spænding , "V"
current_name = raw_input ("Skriv dit navn for at starte:")
klar()
#Skift maks. Værdi
hvis current_name == "max":
max = input ("Skriv maks. spænding: (2 decimaler)")
klar()
andet:
#start advarsel
for i inrange (11, 24, 1): #løkken starter i PIN 11 og stopper i PIN 24
hvis i! = 14og i! = 17og i! = 20: #PIN 14 og 20 er GND -ben, og 20 er en 3,3 V pin
gpio.output (i, gpio. LOW) #tænd lamperne
time.sleep (0,5)
k = 10
for i inrange (23, 10, -1):
klar()
hvis jeg! = 14og jeg! = 17og jeg! = 20:
delproces. 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) #tænd lamperne (en efter en)
subprocess. Popen (['aplay', 'Audios/go.wav']) #afspiller startmusikken
time.sleep (0,03)
klar()
print "GO!"
time.sleep (1)
klar()
#spænding læst
strøm_spænding = 0,00
spænding1 = 0,00
for i inrange (200):
ser.flushInput ()
foregående = spænding1
voltage1 = float (ser.readline ()) #collects Arduinos data overført med RX-TX
klar()
udskrivningsspænding1, "V"
hvis spænding1> strøm_spænding:
strøm_spænding = spænding1
# afhængigt af den genererede spænding, lyser flere lamper.
hvis spænding1 <max/10:
for i inrange (11, 24, 1):
hvis i! = 14og i! = 17og i! = 20:
gpio.output (i, gpio. HIGH)
hvis spænding1> = max/10:
gpio.output (11, gpio. LOW)
for i inrange (12, 24, 1):
hvis i! = 14og i! = 17og i! = 20:
gpio.output (i, gpio. HIGH)
hvis spænding1> = 2*max/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 spænding1> = 3*max/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 spænding1> = 4*max/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 spænding1> = 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 spænding1> = 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 spænding1> = 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 spænding1> = 8*max/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 spænding1> = 9*max/10:
for i inrange (11, 23, 1):
hvis i! = 14og i! = 17og i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
hvis spænding1> = max:
for i inrange (11, 24, 1):
hvis jeg! = 14og jeg! = 17og jeg! = 20:
gpio.output (i, gpio. LOW)

hvis spænding 1

pause
#tænd lamperne
for i inrange (11, 24, 1):
hvis i! = 14og i! = 17og i! = 20:
gpio.output (i, gpio. HIGH)
#victory musik
hvis strømspænding> = max:
subprocess. Popen (['aplay', 'Audios/rocky.wav'])
time.sleep (0,03)
klar()
udskriv "MEGET GODT, DU VANDT!"% (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)
subprocess. Popen (['aplay', 'Audios/end.wav'])
time.sleep (0,03)
klar()
print "Afslut spil … / n", aktuel_spænding, "V"
#rekorder
time.sleep (1,2)
nået = 0
for i inrange (10):
hvis strømspænding> spænding :
nået+= 1
temp_voltage = spænding
spænding = strøm_spænding
current_voltage = temp_voltage
temp_name = navn
navn = nuværende_navn
current_name = temp_name
hvis nået> 0:
subprocess. Popen (['aplay', 'Audios/record.wav'])
time.sleep (0,03)
klar()
f = open ('records', 'w')
for i inrange (10):
f.write (navn )
f.skriv ("\ n")
f.write (str (spænding ))
f.skriv ("\ n")
f.close ()
klar()

se rawlamps_bike.py hostet af ❤ af GitHub

Trin 8: Elektrisk plan:

Elektrisk ordning
Elektrisk ordning
Elektrisk ordning
Elektrisk ordning
Elektrisk ordning
Elektrisk ordning

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

Det elektriske kredsløb starter med tilslutningen af DC -generatoren (koblet til cyklen) til Arduino gennem et spændingsfilter sammensat af en Zener -diode på 5,3V, en kondensator på 10μF og en modstand på 1kΩ - filterindgangen er forbundet til generatorterminaler, og udgangen er forbundet til A0 -porten og regulatoren GND.

Arduino er forbundet til Raspberry via RX-TX kommunikation-udført via en resistiv divider ved hjælp af 10kΩ modstande (krævet af controllerens porte, der arbejder ved forskellige spændinger).

Raspberry Pi's GPIO'er er forbundet til de relæer, der er ansvarlige for at tænde lamperne. “COM” for alle relæer var sammenkoblet og forbundet til fasen (AC -net), og “N. O” (normalt åbent) for hvert relæ blev forbundet til hver lampe, og AC -netets neutral var forbundet til alle lamperne. Når GPIO, der er ansvarlig for hvert relæ, aktiveres, skiftes relæet til fasen i vekselstrømnettet og tænder den respektive lampe.

Trin 9: Resultater:

Image
Image

Efter projektets endelige samling blev det verificeret, at det fungerede som forventet - alt efter den hastighed, brugeren pedaler på cyklen, genereres mere spænding og flere lamper lyser.

Anbefalede: