Indholdsfortegnelse:
- Trin 1: Materialer:
- Trin 2: Diagram over systemblokke:
- Trin 3: Systemdrift:
- Trin 4: Mekaniske aspekter
- Trin 5: Spændingsaflæsning:
- Trin 6: Arduino -programmering:
- Trin 7: Programmering af Raspberry Pi 3:
- Trin 8: Elektrisk plan:
- Trin 9: Resultater:
Video: Generering af spænding med en ergometercykel: 9 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
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:
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
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:
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:
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:
USB -strømforsyning med variabel spænding: 7 trin (med billeder)
USB -strømforsyning med variabel spænding: Jeg har haft en idé om en USB -drevet variabel strømforsyning i nogen tid. Da jeg designede det, gjorde jeg det lidt mere alsidigt, hvilket muliggjorde ikke bare USB -indgang, men alt fra 3 VDC til 8 VDC via et USB -stik eller via bananstik. Outputtet bruger t
Generering af forskellige lyde fra film, der kun bruger Arduino: 3 trin
Generering af forskellige lyde fra film, der kun bruger Arduino: As-salamu alaykum! Jeg ville generere forskellige lyde som rovdyr, optimus prime & humle fra transformerfilm. Faktisk så jeg " hacksmeden " video om at lave rovdyrhjelm
Generering af kunst ud fra kommentarer: 5 trin (med billeder)
Generering af kunst ud fra kommentarer: Dette projekt er et ambitiøst projekt, hvor vi vil bruge nogle af de mest tvivlsomme dele af internettet, kommentarsektioner og chatrum til at skabe kunst. Vi vil også gøre projektet let tilgængeligt, så alle kan prøve deres hånd med at generere
Måling af DC-spænding med Arduino og Node-RED: 8 trin (med billeder)
Måling af DC-spænding med Arduino og Node-RED: Der er mange tutorials DC-spændingsmåling med Arduino, i dette tilfælde fandt jeg en tutorial, som jeg anser som den bedste funktionelle metode til måling af DC uden at kræve inputværdier for modstand, kræver kun en vis modstand og et multimeter
Vintage spænding til gammelt udstyr: 12 trin (med billeder)
Vintage spænding til gammelt udstyr: Jeg arbejder på en masse vintage tube/ventil guitar forstærkere, og de ældre forventer netspænding et sted i 115-117 VAC-området. Moderne nordamerikanske lysnettet er normalt betydeligt højere i disse dage, ofte i området 124-126 volt. Brug af højere tha