Taula de continguts:

Generació de tensió amb una bicicleta Ergometer: 9 passos (amb imatges)
Generació de tensió amb una bicicleta Ergometer: 9 passos (amb imatges)

Vídeo: Generació de tensió amb una bicicleta Ergometer: 9 passos (amb imatges)

Vídeo: Generació de tensió amb una bicicleta Ergometer: 9 passos (amb imatges)
Vídeo: LA MAYOR REVOLUCION DE LAS BICICLETAS ELECTRICAS DESDE 2016, Motor y caja de cambios EMTB integrados 2024, Desembre
Anonim
Generació de tensió amb una bicicleta Ergometer
Generació de tensió amb una bicicleta Ergometer
Generació de tensió amb una bicicleta Ergometer
Generació de tensió amb una bicicleta Ergometer
Generació de tensió amb una bicicleta Ergometer
Generació de tensió amb una bicicleta Ergometer

L’elaboració del projecte va consistir en el muntatge d’un “joc” amb l’objectiu de pedalar en una bicicleta ergòmetre connectada a un generador i una torre de llums que s’activen a mesura que augmenta la velocitat del motor, cosa que es produeix segons el pedaleig de la bicicleta. El sistema es basava en la lectura (a través d’un port analògic d’un Arduino Mega) de la tensió instantània generada i, posteriorment, la transmissió d’aquestes dades a un Raspberry Pi 3 mitjançant comunicació RX-TX en sèrie i la posterior activació de les làmpades mitjançant relé.

Pas 1: materials:

  • 1 Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 1 escut de relés amb 10 relés de 12 V;
  • 10 làmpades incandescents de 127 V;
  • 1 bicicleta Ergometer;
  • 1 màquina elèctrica (generador) de 12 V;
  • Resistències (1x1kΩ, 2x10kΩ);
  • 1 condensador electrolític 10 µF;
  • 1 díode Zener 5,3 V;
  • Cable d'1,5 mm (vermell, negre, marró);
  • 1 torre MDF amb suport per a 10 llums.

Pas 2: diagrama de blocs del sistema:

Diagrama de blocs del sistema
Diagrama de blocs del sistema

Pas 3: Funcionament del sistema:

El sistema es basa en la transformació de l’energia cinètica generada quan es fa circular la bicicleta en energia elèctrica responsable de l’activació dels relés que encendran els llums.

El voltatge generat pel generador és llegit per un pin analògic d’Arduino i s’envia mitjançant RX-TX al Raspberry Pi. L’activació dels relés és proporcional a la tensió generada: com més alta sigui la tensió, més relés s’activaran i s’encendran més làmpades.

Pas 4: Aspectes mecànics

Aspectes mecànics
Aspectes mecànics

Per acoblar mecànicament el generador de corrent continu a la bicicleta, calia substituir el sistema de corretges pel sistema utilitzat a les bicicletes comunes (format per una corona, cadena i pinyó). Es va soldar una placa metàl·lica al marc de la bicicleta perquè el motor es pogués fixar mitjançant cargols. Després d'això, el pinyó es va soldar a l'eix del generador de manera que es pogués col·locar la cadena, interconnectant el sistema de pedals amb el generador.

Pas 5: lectura de tensió:

Per llegir la tensió del generador mitjançant Arduino és necessari connectar el pol positiu de la màquina elèctrica al pin A0 del controlador i el pol negatiu al GND, per evitar que la tensió màxima del generador sigui superior als 5 V del Els pins Arduino, un filtre de tensió que utilitzava un condensador de 10 µF, una resistència d'1 kΩ i un díode Zener de 5,3 V es van construir i es van connectar entre el controlador i el generador. El firmware carregat a Arduino és molt senzill i consisteix només a llegir un port analògic, multiplicar el valor llegit per la constant 0,0048828125 (5/1024, és a dir, la tensió GPIO de l’Arduino dividida pel nombre de bits del seu port analògic) i enviar el variable a la sèrie: el codi estarà disponible a l'article.

El procediment per habilitar la comunicació RX-TX a Raspberry Pi és una mica més complex i heu de seguir el procediment descrit a l’enllaç. Breument, heu d’editar un fitxer anomenat “inittab” (situat a “/ etc / inittab”), comenteu la línia “T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100” (si el fitxer no és fundat al sistema operatiu de Raspberry, heu d'introduir l'ordre: "sudo leafpad /boot/config.txt" i afegir la línia "enable_uart = 1" al final del fitxer). Un cop fet això, heu de tornar a obrir el terminal LX i desactivar el serial amb les ordres "sudo systemctl stop [email protected]" i "sudo systemctl disable [email protected]". Després, haureu d'executar l'ordre "sudo leafpad /boot/cmdline.txt", suprimiu la línia "console = serial0, 115200", deseu el fitxer i reinicieu el dispositiu. Per tal que sigui possible la comunicació RX-TX, la biblioteca serial s'ha d'instal·lar a Raspberry Pi amb l'ordre "sudo apt-get install -f python-serial" i importar la biblioteca al codi inserint la línia "import serial", inicialitzant el serial inserint la línia "ser = serial. Serial (" / dev / ttyS0 ", 9600)" i la lectura de la tensió enviada per l'Arduino mitjançant l'ordre “ser.readline ()”: el codi complet utilitzat a Raspberry estarà disponible al final de l'article.

Seguint el procediment descrit anteriorment, es completa el pas de tensió de lectura i enviament.

Pas 6: Programació Arduino:

Com s’ha dit anteriorment, el codi responsable de llegir el voltatge generat quan es circula en bicicleta és molt senzill.

En primer lloc, cal escollir el pin A0 com a responsable de llegir el voltatge.

A la funció "void setup ()", heu d'establir el pin A0 a INPUT amb l'ordre "pinMode (sensor, INPUT)" i seleccionar la velocitat de transmissió del port sèrie mitjançant l'ordre "Serial.begin (9600)".

Al "bucle buit ()", la funció "Serial.flush ()" s'utilitza per esborrar la memòria intermèdia cada vegada que finalitza l'enviament d'informació per sèrie; la lectura de voltatge la realitza la funció "analogRead (sensor)", recordant que és necessari convertir el valor llegit pel port analògic a Volts, procés citat a la secció de "voltatge de lectura" de l'article.

A més, a la funció "void loop ()", és necessari convertir la variable x de float a cadena, ja que aquesta és l'única manera d'enviar la variable mitjançant RX-TX. L'últim pas de la funció de bucle és imprimir la cadena al port sèrie perquè es pugui enviar a Raspberry; per a això, heu d'utilitzar la funció "Serial.println (y)". La línia "delay (100)" s'ha afegit al codi només perquè la variable s'enviï en intervals de 100 ms; si no es respecta aquest temps, es produirà una sobrecàrrega sèrie, generant possibles bloquejos al programa.

llegir_tensió.ino

sensor de flotació = A0;
voidsetup () {
pinMode (sensor, INPUT);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (sensor) * 0,0048828125 * 16,67;
Cadena y = "";
y + = x;
Serial.println (y);
retard (100);
}

veure rawvoltage_read.ino allotjat amb ❤ per GitHub

Pas 7: programació de Raspberry Pi 3:

lights_bike.py

import os #import la biblioteca os (s'utilitza per esborrar la pantalla quan calgui)
import RPi. GPIOas biblioteca gpio #import que s’utilitza per controlar el GPIO de Raspnerry
importa la biblioteca #import de sèrie responsable de la comunicació en sèrie
importa la biblioteca #import que permet utilitzar la funció de retard
importar subprocés #import biblioteca responsable de reproduir les cançons
#start serial
ser = serial. Serial ("/ dev / ttyS0", 9600) #defineu el nom del dispositiu i la velocitat en bauds
# pantalla clara
clear = lambda: os.system ('clear')
#set pins per al control de relés
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
nom = ["Cap"] * 10
tensió = [0,00] * 10
#read fitxers de registres
f = obert ('registres', 'r')
for i inrange (10): # les 10 millors puntuacions apareixen a la llista
nom = f.readline ()
nom = nom [: len (nom ) - 1]
voltatge = f.readline ()
tensió = flotant (tensió [: len (tensió ) - 1])
f.close ()
clear ()
#estableix el voltatge màxim
màx = 50,00
#apagueu les làmpades
per a mi rang (11, 24, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH) #set a HIGH, els relés estan apagats
#començar
whileTrue:
pantalla #inicial
imprimeix "Registres: / n"
per a mi rang (10):
nom d'impressió , ":", tensió , "V"
current_name = raw_input ("Escriviu el vostre nom per començar:")
clear ()
#Change el valor màxim
si nom_actual == "màxim":
max = input ("Escriviu el voltatge màxim: (2 posicions decimals)")
clear ()
en cas contrari:
advertiment #start
per a un rang (11, 24, 1): #el bucle comença al PIN 11 i s’atura al PIN 24
si i! = 14i i! = 17i i! = 20: #PIN 14 i 20 són pins GND i 20 és un pin de 3,3 V
gpio.output (i, gpio. LOW) # enceneu els llums
time.sleep (0,5)
k = 10
per a la gamma i (23, 10, -1):
clear ()
si i! = 14i i! = 17i i! = 20:
subprocess. Popen (['aplay', 'Àudios /' + str (k) + '. wav'])
time.sleep (0,03)
clear ()
imprimeix "Prepara't! / n", k
time.sleep (1)
k- = 1
gpio.output (i, gpio. HIGH) #apagueu els llums (un per un)
subprocess. Popen (['aplay', 'Audios / go.wav']) #plays the start music
time.sleep (0,03)
clear ()
imprimeix "GO!"
time.sleep (1)
clear ()
#voltage read
tensió_actual = 0,00
tensió1 = 0,00
per a mi rang (200):
ser.flushInput ()
anterior = voltatge1
voltage1 = float (ser.readline ()) #collects les dades d’Arduino transferides per RX-TX
clear ()
tensió d'impressió1, "V"
si tensió1> tensió_actual:
tensió_actual = tensió1
# en funció de la tensió generada, s'encenen més làmpades.
si tensió1 <màx / 10:
per a mi rang (11, 24, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
si tensió1> = màx / 10:
gpio.output (11, gpio. LOW)
per a la gamma i (12, 24, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
si tensió1> = 2 * màx / 10:
per a mi rang (11, 13, 1):
gpio.output (i, gpio. LOW)
per a mi rang (13, 24, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
si tensió1> = 3 * màx / 10:
per a la gamma i (11, 14, 1):
gpio.output (i, gpio. LOW)
per a la gamma i (15, 24, 1):
si i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
si tensió1> = 4 * màx / 10:
per a la gamma i (11, 16, 1):
si i! = 14:
gpio.output (i, gpio. LOW)
per a la gamma i (16, 24, 1):
si i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
si tensió1> = 5 * màx / 10:
per a mi rang (11, 17, 1):
si i! = 14:
gpio.output (i, gpio. LOW)
per a mi rang (18, 24, 1):
si jo! = 20:
gpio.output (i, gpio. HIGH)
si tensió1> = 6 * màx / 10:
per a mi rang (11, 19, 1):
si i! = 14 i i! = 17:
gpio.output (i, gpio. LOW)
per a mi rang (19, 24, 1):
si jo! = 20:
gpio.output (i, gpio. HIGH)
si tensió1> = 7 * màx / 10:
per a mi rang (11, 20, 1):
si i! = 14 i i! = 17:
gpio.output (i, gpio. LOW)
per a mi rang (21, 24, 1):
gpio.output (i, gpio. HIGH)
si tensió1> = 8 * màx / 10:
per a mi rang (11, 22, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)
per a mi rang (22, 24, 1):
gpio.output (i, gpio. HIGH)
si tensió1> = 9 * màxima / 10:
per a la gamma i (11, 23, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
si tensió1> = màx:
per a mi rang (11, 24, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. LOW)

si tensió1

trencar
#apagueu les làmpades
per a mi rang (11, 24, 1):
si i! = 14i i! = 17i i! = 20:
gpio.output (i, gpio. HIGH)
música #victory
si tensió_actual> = màx:
subprocess. Popen (['aplay', 'Àudio / rocky.wav'])
time.sleep (0,03)
clear ()
imprimeix "MOLT BÉ, GUANYÀS"% (u '\u00c9', u '\u00ca', u '\u00c2')
per a mi rang (10):
per a intervals j (11, 24, 1):
si j! = 14i j! = 17i j! = 20:
gpio.output (j, gpio. LOW)
time.sleep (0,05)
per a intervals j (11, 24, 1):
si j! = 14i j! = 17i j! = 20:
gpio.output (j, gpio. HIGH)
time.sleep (0,05)
time.sleep (0,5)
subprocess. Popen (['aplay', 'Àudio / end.wav'])
time.sleep (0,03)
clear ()
imprimeix "Finalitza el joc … / n", tensió_actual, "V"
#records
time.sleep (1.2)
assolit = 0
per a mi rang (10):
si tensió_current> tensió :
ha arribat a + = 1
temp_voltage = voltatge
voltatge = tensió_actual
tensió_actual = tensió_temp
nom_temp = nom
nom = nom_actual
nom_actual = nom_temp
si s'arriba a> 0:
subprocess. Popen (['aplay', 'Àudio / record.wav'])
time.sleep (0,03)
clear ()
f = obert ('registres', 'w')
per a mi rang (10):
f.write (nom )
f.write ("\ n")
f.write (str (voltatge ))
f.write ("\ n")
f.close ()
clear ()

visualitza rawlamps_bike.py allotjat amb ❤ per GitHub

Pas 8: Esquema elèctric:

Esquema elèctric
Esquema elèctric
Esquema elèctric
Esquema elèctric
Esquema elèctric
Esquema elèctric

L'Arduino i el Raspberry Pi 3 són alimentats per una font de 5V amb corrent de 3A.

El circuit elèctric s’inicia amb la connexió del generador de corrent continu (acoblat a la bicicleta) a l’Arduino mitjançant un filtre de tensió compost per un díode Zener de 5,3 V, un condensador de 10 μF i una resistència de 1 kΩ: l’entrada del filtre està connectada al terminals del generador i la sortida està connectada al port A0 i al GND del controlador.

L'Arduino està connectat a Raspberry mitjançant comunicació RX-TX: es realitza mitjançant un divisor resistiu mitjançant resistències de 10 kΩ (requerides pels ports dels controladors que funcionen a diferents voltatges).

Els GPIO de Raspberry Pi estan connectats als relés encarregats d’encendre les làmpades. El "COM" de tots els relés estava interconnectat i connectat a la fase (xarxa AC) i el "N. O" (normalment obert) de cada relé es connectava a cada llum i el neutre de la xarxa AC estava interconnectat a totes les làmpades. Així, quan s’activa el GPIO responsable de cada relé, el relé es commuta a la fase de la xarxa de corrent altern i s’encén la làmpada respectiva.

Pas 9: Resultats:

Image
Image

Després del muntatge final del projecte, es va comprovar que funcionava tal com s’esperava: segons la velocitat que l’usuari pedala a la moto, es genera més tensió i s’encenen més làmpades.

Recomanat: