Inhoudsopgave:

Spanning opwekken met een ergometerfiets - Ajarnpa
Spanning opwekken met een ergometerfiets - Ajarnpa

Video: Spanning opwekken met een ergometerfiets - Ajarnpa

Video: Spanning opwekken met een ergometerfiets - Ajarnpa
Video: Elektriciteit opwekken met een spoel en een magneet 2024, Juni-
Anonim
Spanning opwekken met een ergometerfiets
Spanning opwekken met een ergometerfiets
Spanning opwekken met een ergometerfiets
Spanning opwekken met een ergometerfiets
Spanning opwekken met een ergometerfiets
Spanning opwekken met een ergometerfiets

De uitwerking van het project bestond uit het samenstellen van een "spel" met als doel een ergometerfiets in te trappen die is aangesloten op een generator en een toren van lampen die worden geactiveerd naarmate het motortoerental toeneemt - wat gebeurt op basis van het trappen van de fiets. Het systeem was gebaseerd op het uitlezen – via een analoge poort van een Arduino Mega – van de onmiddellijk gegenereerde spanning, het vervolgens verzenden van deze gegevens naar een Raspberry Pi 3 via seriële RX-TX-communicatie en de daaropvolgende activering van de lampen via relais.

Stap 1: Materialen:

  • 1 Framboos Pi 3;
  • 1 Arduino Mega 2560;
  • 1 relaisscherm met 10 relais 12 V;
  • 10 gloeilampen 127 V;
  • 1 ergometerfiets;
  • 1 Elektrische Machine (Generator) 12 V;
  • Weerstanden (1x1kΩ, 2x10kΩ);
  • 1 elektrolytische condensator 10 µF;
  • 1 Zenerdiode 5,3 V;
  • 1,5 mm kabel (rood, zwart, bruin);
  • 1 MDF toren met steun voor 10 lampen.

Stap 2: Systeemblokkendiagram:

Systeem blokken diagram
Systeem blokken diagram

Stap 3: Systeembediening:

Het systeem is gebaseerd op de transformatie van de kinetische energie die wordt gegenereerd tijdens het fietsen in elektrische energie die verantwoordelijk is voor de activering van de relais die de lampen aanzetten.

De door de generator gegenereerde spanning wordt uitgelezen door een analoge pin van Arduino en via RX-TX naar de Raspberry Pi gestuurd. De activering van de relais is evenredig met de gegenereerde spanning - hoe hoger de spanning, hoe meer relais zullen worden geactiveerd en meer lampen zullen oplichten.

Stap 4: Mechanische aspecten

Mechanische aspecten
Mechanische aspecten

Om de gelijkstroomgenerator mechanisch aan de fiets te koppelen, moest het gordelsysteem worden vervangen door het systeem dat op gewone fietsen wordt gebruikt (bestaande uit een kroon, ketting en rondsel). Aan het fietsframe werd een metalen plaat gelast, zodat de motor met schroeven kon worden vastgezet. Daarna werd het rondsel aan de generatoras gelast, zodat de ketting kon worden geplaatst en het pedaalsysteem met de generator kon worden verbonden.

Stap 5: Spanningsmeting:

Om de spanning van de generator met behulp van Arduino te lezen, is het nodig om de positieve pool van de elektrische machine aan te sluiten op de A0-pin van de controller en de negatieve pool op de GND - om te voorkomen dat de maximale spanning van de generator groter is dan de 5 V van de Arduino-pinnen, een spanningsfilter met een condensator van 10 µF, een weerstand van 1 kΩ en een Zenerdiode van 5,3 V werden geconstrueerd en aangesloten tussen de controller en de generator. De firmware die in Arduino is geladen, is heel eenvoudig en bestaat alleen uit het lezen van een analoge poort, vermenigvuldigen van de waarde die wordt gelezen met de constante 0,0048828125 (5/1024, dat is de GPIO-spanning van de Arduino gedeeld door het aantal bits van de analoge poort) en het verzenden van de variabele naar de Serial - de code zal beschikbaar zijn in het artikel.

De procedure voor het inschakelen van RX-TX-communicatie in Raspberry Pi is iets ingewikkelder en u moet de procedure volgen die in de link wordt beschreven. In het kort, je moet een bestand met de naam "inittab" bewerken - dat zich in "/etc/inittab" bevindt -, commentaar geven op de regel "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100" (als het bestand niet opgericht in het besturingssysteem van Raspberry, moet u het commando "sudo leafpad /boot/config.txt" invoeren en de regel "enable_uart=1" aan het einde van het bestand toevoegen). Zodra dit is gebeurd, moet u de LX-terminal opnieuw openen en de seriële uitschakelen met de commando's "sudo systemctl stop [email protected]" en "sudo systemctl uitschakelen [email protected]". Daarna moet je het commando "sudo leafpad /boot/cmdline.txt" uitvoeren, de regel "console = serial0, 115200" verwijderen, het bestand opslaan en het apparaat opnieuw opstarten. Om RX-TX-communicatie mogelijk te maken, moet de seriële bibliotheek op de Raspberry Pi worden geïnstalleerd met het commando "sudo apt-get install -f python-serial" en de bibliotheek in de code importeren door de regel "import serial" in te voegen, initialiseer het serienummer door de regel "ser = serial. Serial (" / dev / ttyS0 ", 9600)" in te voegen en de spanning te lezen die door de Arduino is verzonden met het commando "ser.readline()" - de volledige gebruikte code in Raspberry zal aan het einde van het artikel beschikbaar worden gesteld.

Door de hierboven beschreven procedure te volgen, is de stap voor het lezen en verzenden van de spanning voltooid.

Stap 6: Arduino-programmering:

Zoals eerder vermeld, is de code die verantwoordelijk is voor het lezen van de spanning die wordt gegenereerd tijdens het fietsen heel eenvoudig.

Ten eerste is het noodzakelijk om de A0-pin te kiezen als de verantwoordelijke voor het lezen van de spanning.

In de functie "void setup ()" moet u pin A0 instellen op INPUT met de opdracht "pinMode(sensor, INPUT)" en de transmissiesnelheid van de seriële poort selecteren met behulp van de opdracht "Serial.begin(9600)".

In de "void loop ()" wordt de functie "Serial.flush ()" gebruikt om de buffer te wissen telkens wanneer deze het verzenden van informatie via serieel beëindigt; de spanningsmeting wordt uitgevoerd door de functie "analogRead (sensor)" - onthoud dat het noodzakelijk is om de waarde die door de analoge poort wordt gelezen naar Volt te converteren - proces dat wordt vermeld in de sectie "voltage lezen" van het artikel.

In de functie "void loop ()" is het ook nodig om de variabele x van float naar string te converteren, aangezien dit de enige manier is om de variabele via RX-TX te verzenden. De laatste stap in de loop-functie is om de string in de seriële poort af te drukken zodat deze naar Raspberry kan worden gestuurd - hiervoor moet u de functie "Serial.println (y)" gebruiken. De regel "vertraging (100)" is alleen aan de code toegevoegd zodat de variabele wordt verzonden met intervallen van 100 ms - als deze tijd niet wordt gerespecteerd, zal de seriële overbelasting optreden, waardoor mogelijke crashes in het programma worden gegenereerd.

voltage_read.ino

vlottersensor = A0;
voidsetup() {
pinMode (sensor, INGANG);
Serieel.begin(9600);
}
voidloop() {
Serieel.flush();
float x=analogRead(sensor)*0.0048828125*16.67;
Tekenreeks y="";
y+=x;
Serieel.println(y);
vertraging (100);
}

bekijk rawvoltage_read.ino gehost met ❤ door GitHub

Stap 7: Raspberry Pi 3 Programmeren:

lampen_bike.py

import os #import the os library (gebruikt om het scherm te wissen indien nodig)
import RPi. GPIOas gpio #import bibliotheek gebruikt om de GPIO van Raspnerry te besturen
import serial #import library verantwoordelijk voor de seriële communicatie
import time #import bibliotheek die het mogelijk maakt om de vertragingsfunctie te gebruiken
import subproces #import bibliotheek die verantwoordelijk is voor het afspelen van de nummers
#start serie
ser = serial. Serial("/dev/ttyS0", 9600) #definieer de apparaatnaam en de baudrate
#leeg scherm
clear =lambda: os.system('clear')
#set pinnen voor relaisbesturing
gpio.setmode(gpio. BOARD)
gpio.setup(11, gpio. OUT) #lamp 10
gpio.setup (12, gpio. OUT) #lamp 9
gpio.setup(13, gpio. OUT) #lamp 8
gpio.setup(15, gpio. OUT) #lamp 7
gpio.setup (16, gpio. OUT) #lamp 6
gpio.setup (18, gpio. OUT) #lamp 5
gpio.setup(19, gpio. OUT) #lamp 4
gpio.setup(21, gpio. OUT) #lamp 3
gpio.setup(22, gpio. OUT) #lamp 2
gpio.setup(23, gpio. OUT) #lamp 1
#start records
name=["Geen"]*10
spanning=[0.00]*10
#read records-bestand
f =open('records', 'r')
voor i inrange(10): #de 10 beste scores verschijnen op de lijst
naam=f.readline()
naam=naam[:len(naam)-1]
spanning=f.readline()
voltage=float(voltage[:len(voltage)-1])
f.sluiten()
Doorzichtig()
#stel de maximale spanning in
max = 50,00
#doe de lampen uit
voor i binnenbereik (11, 24, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. HIGH) #ingesteld op HOOG, de relais zijn uitgeschakeld
#begin
whileTrue:
#beginscherm
print"Records:\n"
voor ik binnen bereik (10):
print naam, ":", spanning, "V"
current_name=raw_input("Schrijf je naam om te beginnen: ")
Doorzichtig()
#Wijzig maximale waarde
if current_name =="max":
max=input("Schrijf de maximale spanning op: (2 cijfers achter de komma)")
Doorzichtig()
anders:
#startwaarschuwing
voor i binnenbereik (11, 24, 1): #de lus begint in de PIN 11 en stopt in PIN 24
if i!=14and i!=17and i!=20: #PIN 14 en 20 zijn GND-pinnen en 20 is een 3.3 V-pin
gpio.output(i, gpio. LOW) #zet de lampen aan
tijd.slaap(0.5)
k=10
voor i binnenbereik (23, 10, -1):
Doorzichtig()
als ik!=14en ik!=17en ik!=20:
subprocess. Popen(['aplay', 'Audios/'+str(k)+'.wav'])
tijd.slaap(0.03)
Doorzichtig()
print"Bereid je voor!\n", k
tijd.slaap(1)
k-=1
gpio.output(i, gpio. HIGH) #zet de lampen uit (een voor een)
subprocess. Popen(['aplay', 'Audios/go.wav']) #speelt de startmuziek
tijd.slaap(0.03)
Doorzichtig()
afdrukken"GO!"
tijd.slaap(1)
Doorzichtig()
#voltage lezen
huidige_voltage=0.00
spanning1=0.00
voor ik binnen bereik (200):
ser.flushInput()
vorige=spanning1
voltage1=float(ser.readline()) #verzamelt Arduino's data overgedragen door RX-TX
Doorzichtig()
printspanning1, "V"
als spanning1>stroom_spanning:
huidige_voltage=voltage1
# afhankelijk van de opgewekte spanning gaan er meer lampjes branden.
als spanning1<max/10:
voor i binnenbereik (11, 24, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. HIGH)
als spanning1>=max/10:
gpio.output (11, gpio. LAAG)
voor i binnen bereik (12, 24, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. HIGH)
als spanning1>=2*max/10:
voor i binnen bereik (11, 13, 1):
gpio.output(i, gpio. LOW)
voor i binnenbereik(13, 24, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. HIGH)
als spanning1>=3*max/10:
voor i binnen bereik (11, 14, 1):
gpio.output(i, gpio. LOW)
voor i binnenbereik (15, 24, 1):
als ik!=17en ik!=20:
gpio.output(i, gpio. HIGH)
als spanning1>=4*max/10:
voor i binnen bereik (11, 16, 1):
als ik!=14:
gpio.output(i, gpio. LOW)
voor i binnen bereik (16, 24, 1):
als ik!=17en ik!=20:
gpio.output(i, gpio. HIGH)
als spanning1>=5*max/10:
voor i binnen bereik (11, 17, 1):
als ik!=14:
gpio.output(i, gpio. LOW)
voor i binnen bereik (18, 24, 1):
als ik!=20:
gpio.output(i, gpio. HIGH)
als spanning1>=6*max/10:
voor i binnen bereik (11, 19, 1):
als ik!=14en ik!=17:
gpio.output(i, gpio. LOW)
voor i binnen bereik (19, 24, 1):
als ik!=20:
gpio.output(i, gpio. HIGH)
als spanning1>=7*max/10:
voor i binnen bereik (11, 20, 1):
als ik!=14en ik!=17:
gpio.output(i, gpio. LOW)
voor i binnenbereik(21, 24, 1):
gpio.output(i, gpio. HIGH)
als spanning1>=8*max/10:
voor i binnen bereik (11, 22, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. LOW)
voor i binnenbereik(22, 24, 1):
gpio.output(i, gpio. HIGH)
als spanning1>=9*max/10:
voor i binnen bereik (11, 23, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. LOW)
gpio.output(23, gpio. HOOG)
als spanning1>=max:
voor i binnen bereik (11, 24, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. LOW)

als spanning1

pauze
#doe de lampen uit
voor i binnen bereik (11, 24, 1):
als ik!=14en ik!=17en ik!=20:
gpio.output(i, gpio. HIGH)
#overwinningsmuziek
if current_voltage>=max:
subprocess. Popen(['aplay', 'Audios/rocky.wav'])
tijd.slaap(0.03)
Doorzichtig()
print"HEEL GOED, JE HEBT GEWONNEN!"% (u'\u00c9', u'\u00ca', u'\u00c2')
voor ik binnen bereik (10):
voor j binnen bereik (11, 24, 1):
als j!=14en j!=17en j!=20:
gpio.output(j, gpio. LAAG)
tijd.slaap(0.05)
voor j binnen bereik (11, 24, 1):
als j!=14en j!=17en j!=20:
gpio.output(j, gpio. HOOG)
tijd.slaap(0.05)
tijd.slaap(0.5)
subprocess. Popen(['aplay', 'Audios/end.wav'])
tijd.slaap(0.03)
Doorzichtig()
print"Einde spel…\n", huidige_voltage, "V"
#records
tijd.slaap(1.2)
bereikt=0
voor ik binnen bereik (10):
als stroom_spanning > spanning :
bereikt+=1
temp_voltage=voltage
voltage=current_voltage
huidige_voltage=temp_voltage
temp_name=naam
naam=huidige_naam
huidige_naam=temp_naam
indien bereikt >0:
subprocess. Popen(['aplay', 'Audios/record.wav'])
tijd.slaap(0.03)
Doorzichtig()
f =open('records', 'w')
voor ik binnen bereik (10):
f.schrijf(naam)
f.write("\n")
f.write(str(spanning))
f.write("\n")
f.sluiten()
Doorzichtig()

bekijk rawlamps_bike.py gehost met ❤ door GitHub

Stap 8: Elektrisch schema:

Elektrisch schema
Elektrisch schema
Elektrisch schema
Elektrisch schema
Elektrisch schema
Elektrisch schema

De Arduino en de Raspberry Pi 3 worden gevoed door een 5V-bron met 3A-stroom.

Het elektrische circuit begint met de aansluiting van de DC-generator (gekoppeld aan de fiets) op de Arduino via een spanningsfilter bestaande uit een Zener-diode van 5,3V, een condensator van 10μF en een weerstand van 1kΩ - de filteringang is verbonden met de generatorterminals en de uitgang is verbonden met de A0-poort en de GND van de controller.

De Arduino is verbonden met Raspberry via RX-TX-communicatie - uitgevoerd via een resistieve verdeler met 10kΩ-weerstanden (vereist door de poorten van de controllers die op verschillende spanningen werken).

De GPIO's van Raspberry Pi zijn verbonden met de relais die verantwoordelijk zijn voor het inschakelen van de lampen. De "COM" van alle relais was onderling verbonden en verbonden met de fase (AC-net) en de "N. O" (normaal open) van elk relais was verbonden met elke lamp en de nulleider van het AC-net was verbonden met alle lampen. Dus, wanneer de GPIO die verantwoordelijk is voor elk relais wordt geactiveerd, wordt het relais geschakeld naar de fase van het AC-netwerk en schakelt de betreffende lamp in.

Stap 9: Resultaten:

Image
Image

Na de eindmontage van het project werd geverifieerd dat het werkte zoals verwacht - afhankelijk van de snelheid waarmee de gebruiker op de fiets trapt, wordt er meer spanning gegenereerd en gaan er meer lampen branden.

Aanbevolen: