Innehållsförteckning:

Generera spänning med en ergometercykel: 9 steg (med bilder)
Generera spänning med en ergometercykel: 9 steg (med bilder)

Video: Generera spänning med en ergometercykel: 9 steg (med bilder)

Video: Generera spänning med en ergometercykel: 9 steg (med bilder)
Video: Strömstyrka och spänning (Fysik) - www.binogi.se 2024, Juli
Anonim
Generera spänning med en ergometercykel
Generera spänning med en ergometercykel
Generera spänning med en ergometercykel
Generera spänning med en ergometercykel
Generera spänning med en ergometercykel
Generera spänning med en ergometercykel

Projektets utarbetande bestod i montering av ett "spel" med syftet att trampa i en ergometercykel ansluten till en generator och ett torn med lampor som aktiveras när motorvarvtalet ökar - vilket sker till följd av cykelpedalen. Systemet baserades på att läsa-genom en analog port på en Arduino Mega-den omedelbara spänningen som genererades och sedan överföra dessa data till en Raspberry Pi 3 via seriell RX-TX-kommunikation och efterföljande aktivering av lamporna via relä.

Steg 1: Material:

  • 1 hallon Pi 3;
  • 1 Arduino Mega 2560;
  • 1 Reläskydd med 10 reläer 12 V;
  • 10 glödlampor 127 V;
  • 1 Ergometercykel;
  • 1 elektrisk maskin (generator) 12 V;
  • Motstånd (1x1kΩ, 2x10kΩ);
  • 1 elektrolytkondensator 10 µF;
  • 1 zenerdiod 5,3 V;
  • 1,5 mm kabel (röd, svart, brun);
  • 1 MDF -torn med stöd för 10 lampor.

Steg 2: Systemblock Diagram:

Systemblock Diagram
Systemblock Diagram

Steg 3: Systemdrift:

Systemet är baserat på transformationen av den rörelseenergi som genereras när cykeln cyklas i elektrisk energi som är ansvarig för aktiveringen av reläerna som tänder lamporna.

Spänningen som genereras av generatorn läses av en analog pin av Arduino och skickas via RX-TX till Raspberry Pi. Aktiveringen av reläerna är proportionell mot den genererade spänningen - ju högre spänning, desto fler reläer utlöses och fler lampor tänds.

Steg 4: Mekaniska aspekter

Mekaniska aspekter
Mekaniska aspekter

För att mekaniskt koppla likströmsgeneratorn till cykeln måste bältessystemet bytas ut mot systemet som används på vanliga cyklar (bestående av en krona, kedja och pinjong). En metallplatta svetsades fast på cykelramen så att motorn kunde säkras med skruvar. Därefter svetsades kugghjulet till generatoraxeln så att kedjan kunde placeras och kopplade pedalsystemet till generatorn.

Steg 5: Spänningsavläsning:

För att läsa generatorns spänning med Arduino är det nödvändigt att ansluta den elektriska maskinens positiva pol till A0 -stiftet på styrenheten och den negativa polen till GND - för att undvika att generatorns maximala spänning är större än 5 V på Arduino -stift, ett spänningsfilter med en kondensator på 10 µF, ett motstånd på 1 kΩ och en zenerdiod på 5,3 V konstruerades och kopplades mellan styrenheten och generatorn. Den fasta programvaran som laddas i Arduino är mycket enkel och består bara av att läsa en analog port, multiplicera värdet som läses med konstanten 0,0048828125 (5/1024, det vill säga Arduinos GPIO -spänning dividerat med antalet bitar i den analoga porten) och skicka variabel till serien - koden kommer att finnas tillgänglig i artikeln.

Proceduren för att aktivera RX-TX-kommunikation i Raspberry Pi är lite mer komplex, och du måste följa proceduren som beskrivs i länken. I korthet måste du redigera en fil som heter "inittab" -som finns i "/etc/inittab" -, kommentera raden "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (om filen inte är grundat i Raspberry's OS måste du ange kommandot: "sudo leafpad /boot/config.txt" och lägg till raden "enable_uart = 1" i slutet av filen). När detta är gjort måste du öppna LX-terminalen igen och inaktivera Serial med kommandona "sudo systemctl stop [email protected]" och "sudo systemctl disable [email protected]". Efter det måste du utföra kommandot "sudo leafpad /boot/cmdline.txt", radera raden "console = serial0, 115200", spara filen och starta om enheten. För att RX-TX-kommunikation ska vara möjlig måste seriebiblioteket installeras på Raspberry Pi med kommandot "sudo apt-get install -f python-serial" och importera biblioteket till koden genom att infoga "import serial" -raden, initiera serien genom att infoga raden "ser = serial. Serial (" / dev / ttyS0 ", 9600)" och avläsning av spänningen som skickas av Arduino med kommandot "ser.readline ()" - hela koden som används i Hallon kommer att göras tillgängligt i slutet av artikeln.

Efter proceduren som beskrivs ovan är steget för läsning och sändning av spänning klart.

Steg 6: Arduino -programmering:

Som tidigare sagts är koden som är ansvarig för att läsa spänningen som genereras vid cykling mycket enkel.

För det första är det nödvändigt att välja A0 -stift som ansvarig för avläsning av spänningen.

I funktionen "void setup ()" måste du ställa in stift A0 på INPUT med kommandot "pinMode (sensor, INPUT)" och välja överföringshastigheten för den seriella porten med kommandot "Serial.begin (9600)".

I "void loop ()" används "Serial.flush ()" -funktionen för att rensa bufferten varje gång den avslutar att skicka information via serie; spänningsavläsningen utförs med funktionen "analogRead (sensor)" - kom ihåg att det är nödvändigt att konvertera värdet som läses av den analoga porten till Volt - process som anges i avsnittet "lässpänning" i artikeln.

I funktionen "void loop ()" är det också nödvändigt att konvertera variabeln x från float till string, eftersom detta är det enda sättet att skicka variabeln via RX-TX. Det sista steget i loop -funktionen är att skriva ut strängen i serieporten så att den kan skickas till Raspberry - för detta måste du använda funktionen "Serial.println (y)". Raden "fördröjning (100)" har lagts till i koden endast så att variabeln skickas i intervall om 100 ms - om denna tid inte respekteras kommer den seriella överbelastningen att inträffa, vilket genererar möjliga krascher i programmet.

voltage_read.ino

flottörsensor = A0;
voidsetup () {
pinMode (sensor, INGÅNG);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (sensor)*0,0048828125*16,67;
Sträng y = "";
y+= x;
Serial.println (y);
fördröjning (100);
}

visa rawvoltage_read.ino värd med ❤ av GitHub

Steg 7: Programmering av Raspberry Pi 3:

lampor_cykel.py

importera os #importera os -biblioteket (används för att rensa skärmen vid behov)
importera RPi. GPIOas gpio #importbibliotek som används för att styra Raspnerrys GPIO
importera seriellt #importbibliotek som ansvarar för den seriella kommunikationen
importtid #importbibliotek som gör det möjligt att använda fördröjningsfunktionen
importera delprocess #importbibliotek som ansvarar för att spela låtarna
#startserie
ser = serial. Serial ("/dev/ttyS0", 9600) #definiera enhetens namn och överföringshastighet
#rensa skärmen
clear = lambda: os.system ('clear')
#set pins för reläkontroll
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #lampa 10
gpio.setup (12, gpio. OUT) #lampa 9
gpio.setup (13, gpio. OUT) #lampa 8
gpio.setup (15, gpio. OUT) #lampa 7
gpio.setup (16, gpio. OUT) #lampa 6
gpio.setup (18, gpio. OUT) #lampa 5
gpio.setup (19, gpio. OUT) #lampa 4
gpio.setup (21, gpio. OUT) #lampa 3
gpio.setup (22, gpio. OUT) #lampa 2
gpio.setup (23, gpio. OUT) #lampa 1
#startposter
name = ["None"]*10
spänning = [0,00]*10
#read records file
f = open ('records', 'r')
för i inrange (10): #de 10 bästa poängen visas på listan
namn = f.readline ()
namn = namn [: len (namn )-1]
spänning = f.readline ()
spänning = float (spänning [: len (spänning )-1])
f.close ()
klar()
#ställ in maxspänningen
max = 50,00
#släck lamporna
för i intervall (11, 24, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. HIGH) #inställd på HIGH, reläerna är avstängda
#Start
whileTrue:
#initial skärm
skriv ut "poster: / n"
för i intervall (10):
utskriftsnamn , ":", spänning , "V"
current_name = raw_input ("Skriv ditt namn för att börja:")
klar()
#Ändra maxvärde
om current_name == "max":
max = input ("Skriv maxspänningen: (2 decimaler)")
klar()
annan:
#startvarning
för i intervall (11, 24, 1): #slingan börjar i PIN 11 och stannar med PIN 24
om i! = 14och i! = 17 och i! = 20: #PIN 14 och 20 är GND -stift och 20 är ett 3,3 V -stift
gpio.output (i, gpio. LOW) #tänd lamporna
tid. sover (0,5)
k = 10
för i intervall (23, 10, -1):
klar()
om jag! = 14och jag! = 17och jag! = 20:
delprocess. Popen (['aplay', 'Audios/'+str (k)+'. wav'])
time.sleep (0,03)
klar()
print "Förbered! / n", k
tid. sover (1)
k- = 1
gpio.output (i, gpio. HIGH) #släck lamporna (en efter en)
delprocess. Popen (['aplay', 'Audios/go.wav']) #spelar startmusiken
time.sleep (0,03)
klar()
skriva ut "GO!"
tid. sover (1)
klar()
#spänning läst
strömspänning = 0,00
spänning1 = 0,00
för i intervall (200):
ser.flushInput ()
föregående = spänning1
voltage1 = float (ser.readline ()) #collects Arduinos data överförd av RX-TX
klar()
utskriftsspänning1, "V"
om spänning1> strömspänning:
ström_spänning = spänning1
# beroende på genererad spänning tänds fler lampor.
om spänning1 <max/10:
för i intervall (11, 24, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. HIGH)
om spänning1> = max/10:
gpio.output (11, gpio. LOW)
för i intervall (12, 24, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. HIGH)
om spänning1> = 2*max/10:
för i intervall (11, 13, 1):
gpio.output (i, gpio. LOW)
för i intervall (13, 24, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. HIGH)
om spänning1> = 3*max/10:
för i intervall (11, 14, 1):
gpio.output (i, gpio. LOW)
för i intervall (15, 24, 1):
om jag! = 17och jag! = 20:
gpio.output (i, gpio. HIGH)
om spänning1> = 4*max/10:
för i intervall (11, 16, 1):
om jag! = 14:
gpio.output (i, gpio. LOW)
för i intervall (16, 24, 1):
om jag! = 17och jag! = 20:
gpio.output (i, gpio. HIGH)
om spänning1> = 5*max/10:
för i intervall (11, 17, 1):
om jag! = 14:
gpio.output (i, gpio. LOW)
för i intervall (18, 24, 1):
om jag! = 20:
gpio.output (i, gpio. HIGH)
om spänning1> = 6*max/10:
för i intervall (11, 19, 1):
om jag! = 14och jag! = 17:
gpio.output (i, gpio. LOW)
för i intervall (19, 24, 1):
om jag! = 20:
gpio.output (i, gpio. HIGH)
om spänning1> = 7*max/10:
för i intervall (11, 20, 1):
om jag! = 14och jag! = 17:
gpio.output (i, gpio. LOW)
för i intervall (21, 24, 1):
gpio.output (i, gpio. HIGH)
om spänning1> = 8*max/10:
för i intervall (11, 22, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. LOW)
för i intervall (22, 24, 1):
gpio.output (i, gpio. HIGH)
om spänning1> = 9*max/10:
för i intervall (11, 23, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
om spänning1> = max:
för i intervall (11, 24, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. LOW)
om spänning1
ha sönder
#släck lamporna
för i intervall (11, 24, 1):
om jag! = 14och jag! = 17och jag! = 20:
gpio.output (i, gpio. HIGH)
#viktorisk musik
om strömspänning> = max:
delprocess. Popen (['aplay', 'Audios/rocky.wav'])
time.sleep (0,03)
klar()
skriv ut "MYCKET BRA, DU VINNADE!"% (u '\u00c9', u '\u00ca', u '\u00c2')
för i intervall (10):
för j intervall (11, 24, 1):
om j! = 14 och j! = 17 och j! = 20:
gpio.output (j, gpio. LOW)
time.sleep (0,05)
för j intervall (11, 24, 1):
om j! = 14 och j! = 17 och j! = 20:
gpio.output (j, gpio. HIGH)
time.sleep (0,05)
tid. sover (0,5)
delprocess. Popen (['aplay', 'Audios/end.wav'])
time.sleep (0,03)
klar()
skriv ut "Avsluta spelet … / n", aktuell spänning, "V"
#uppgifter
time.sleep (1,2)
nådde = 0
för i intervall (10):
om strömspänning> spänning :
nådde+= 1
temp_voltage = spänning
spänning = strömspänning
current_voltage = temp_voltage
temp_name = namn
namn = aktuellt_namn
current_name = temp_name
om nått> 0:
delprocess. Popen (['aplay', 'Audios/record.wav'])
time.sleep (0,03)
klar()
f = open ('records', 'w')
för i intervall (10):
f.write (namn )
f.write ("\ n")
f.write (str (spänning ))
f.write ("\ n")
f.close ()
klar()

visa rawlamps_bike.py värd med ❤ av GitHub

Steg 8: Elschema:

Elschema
Elschema
Elschema
Elschema
Elschema
Elschema

Arduino och Raspberry Pi 3 drivs av en 5V -källa med 3A ström.

Den elektriska kretsen börjar med anslutningen av DC -generatorn (kopplad till cykeln) till Arduino genom ett spänningsfilter som består av en Zenerdiod på 5,3V, en kondensator på 10μF och ett motstånd på 1kΩ - filteringången är ansluten till generatoruttag och utgången är ansluten till A0 -porten och regulatorns GND.

Arduino är ansluten till Raspberry via RX-TX-kommunikation-utförs via en resistiv avdelare med 10kΩ motstånd (krävs av styrenhetens portar som arbetar vid olika spänningar).

Raspberry Pi: s GPIO är anslutna till reläerna som ansvarar för att tända lamporna. "COM" för alla reläer var sammankopplade och anslutna till fasen (AC -nät) och "N. O" (normalt öppet) för varje relä var anslutet till varje lampa och AC -nätets neutral var ansluten till alla lampor. Således, när GPIO som ansvarar för varje relä aktiveras, växlar reläet till fasen i AC -nätet och tänder respektive lampa.

Steg 9: Resultat:

Image
Image

Efter den slutliga monteringen av projektet verifierades det att det fungerade som förväntat - beroende på hastigheten som användaren trampar på cykeln genereras mer spänning och fler lampor tänds.

Rekommenderad: