Innholdsfortegnelse:
- Trinn 1: Materialer:
- Trinn 2: Systemblokkeringsdiagram:
- Trinn 3: Systemdrift:
- Trinn 4: Mekaniske aspekter
- Trinn 5: Spenningsavlesning:
- Trinn 6: Arduino -programmering:
- Trinn 7: Programmering av Raspberry Pi 3:
- Trinn 8: Elektrisk opplegg:
- Trinn 9: Resultater:
Video: Generere spenning med en ergometersykkel: 9 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
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:
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
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:
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:
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:
USB -strømforsyning med variabel spenning: 7 trinn (med bilder)
USB -strømforsyning med variabel spenning: Jeg har hatt en idé om en USB -drevet variabel strømforsyning en stund. Etter hvert som jeg designet den, gjorde jeg den litt mer allsidig, noe som muliggjorde ikke bare USB -inngang, men alt fra 3 VDC til 8 VDC via en USB -kontakt eller via bananpluggkontakter. Utgangen bruker t
Generere kunst fra kommentarer: 5 trinn (med bilder)
Generere kunst fra kommentarer: Dette prosjektet er et ambisiøst prosjekt, der vi vil bruke noen av de mest tvilsomme delene av internett, kommentarseksjoner og chatterom, for å lage kunst. Vi ønsker også å gjøre prosjektet lett tilgjengelig, slik at alle kan prøve seg på å generere
Hvordan generere toner med Arduino: 3 trinn
Hvordan generere toner med Arduino: I denne instruktive laget jeg en krets som genererer tone med Arduino. Jeg liker veldig enkelt og raskt å bygge prosjekter. Her er et enkelt prosjekt av denne typen. Dette er et show and tell -prosjekt som jeg laget nøyaktig ved hjelp av dokumentasjon fra Arduino websi
Negativ spenning: 10 trinn (med bilder)
Negativ spenningsforsyning: De fleste som leker med elektronikk ville ha kommet over en lydkrets som bruker en duellskinnestrømforsyning. Første gang jeg kom over dette ble det helt forvirret - hvordan får jeg en negativ ladning ut av en strømforsyning? Er ikke en positiv
Vintage spenning for gammelt utstyr: 12 trinn (med bilder)
Vintage spenning for gammelt utstyr: Jeg jobber med mange vintage tube/ventil gitarforsterkere, og de eldre forventer nettspenning et sted i 115-117 VAC-området. Moderne nordamerikanske strømnettet er vanligvis betydelig høyere i disse dager, ofte i området 124-126 volt. Bruker høyere tha