Talaan ng mga Nilalaman:

Bumubuo ng Boltahe Sa Isang Ergometer Bike: 9 Mga Hakbang (na may Mga Larawan)
Bumubuo ng Boltahe Sa Isang Ergometer Bike: 9 Mga Hakbang (na may Mga Larawan)

Video: Bumubuo ng Boltahe Sa Isang Ergometer Bike: 9 Mga Hakbang (na may Mga Larawan)

Video: Bumubuo ng Boltahe Sa Isang Ergometer Bike: 9 Mga Hakbang (na may Mga Larawan)
Video: Part 1 - Tom Swift and his Electric Runabout Audiobook by Victor Appleton (Chs 1-12) 2024, Hulyo
Anonim
Bumubuo ng Boltahe Sa Isang Ergometer Bike
Bumubuo ng Boltahe Sa Isang Ergometer Bike
Bumubuo ng Boltahe Sa Isang Ergometer Bike
Bumubuo ng Boltahe Sa Isang Ergometer Bike
Bumubuo ng Boltahe Sa Isang Ergometer Bike
Bumubuo ng Boltahe Sa Isang Ergometer Bike

Ang pagpapaliwanag ng proyekto ay binubuo sa pagpupulong ng isang "laro" na may layunin na mag-pedal sa isang ergometer bike na konektado sa isang generator at isang tower ng lampara na pinapagana habang tumataas ang bilis ng engine - na nangyayari ayon sa pagbibisikleta ng bisikleta. Ang sistema ay batay sa pagbabasa - sa pamamagitan ng isang analog port ng isang Arduino Mega - nabuo ang instant boltahe, pagkatapos ay ihinahatid ang data na ito sa isang Raspberry Pi 3 sa pamamagitan ng serial na komunikasyon sa RX-TX at ang kasunod na pag-aktibo ng mga lampara sa pamamagitan ng relay.

Hakbang 1: Mga Kagamitan:

  • 1 Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 1 Relay Shield na may 10 Relay 12 V;
  • 10 Mga Ilaw na maliwanag na maliwanag 127 V;
  • 1 Ergometer Bike;
  • 1 Electrical Machine (Generator) 12 V;
  • Mga resistorista (1x1kΩ, 2x10kΩ);
  • 1 Electrolytic Capacitor 10 µF;
  • 1 Zener Diode 5.3 V;
  • 1.5 mm Cable (pula, itim, kayumanggi);
  • 1 MDF tower na may suporta para sa 10 lampara.

Hakbang 2: Diagram ng Mga Block ng System:

Diagram ng Mga Block ng System
Diagram ng Mga Block ng System

Hakbang 3: Pagpapatakbo ng System:

Ang sistema ay batay sa pagbabago ng kinetic energy na nabuo kapag binibisikleta ang bisikleta sa elektrisidad na elektroniko na responsable para sa pag-aktibo ng mga relay na magpapasara sa mga lampara.

Ang boltahe na nabuo ng generator ay nababasa ng isang analog pin ng Arduino at ipinadala sa pamamagitan ng RX-TX sa Raspberry Pi. Ang pag-aktibo ng mga relay ay proporsyonal sa nabuo na boltahe - mas mataas ang boltahe, mas maraming mga relay ang mai-trigger at mas maraming mga ilawan ang mag-iilaw.

Hakbang 4: Mga Aspeto ng Mekaniko

Mga Aspeto ng Mekaniko
Mga Aspeto ng Mekaniko

Upang makasal na mekanikal ang generator ng DC sa bisikleta, ang sistema ng sinturon ay kailangang palitan ng sistemang ginamit sa mga karaniwang bisikleta (binubuo ng isang korona, kadena at pinion). Ang isang metal plate ay hinangin sa frame ng bisikleta upang ang engine ay ma-secure ng mga turnilyo. Pagkatapos nito, ang pinion ay hinangin sa generator shaft upang mailagay ang kadena, magkakaugnay sa pedal system sa generator.

Hakbang 5: Pagbasa ng Boltahe:

Upang mabasa ang boltahe ng generator gamit ang Arduino ay kinakailangan upang ikonekta ang positibong poste ng de-koryenteng makina sa A0 pin ng controller at ang negatibong poste sa GND - upang maiwasan na ang maximum na boltahe ng generator ay mas malaki kaysa sa 5 V ng Ang mga pin ng Arduino, isang filter ng boltahe na gumagamit ng isang kapasitor na 10 µF, isang risistor na 1 kΩ at isang Zener diode na 5.3 V ay itinayo at konektado sa pagitan ng controller at ng generator. Ang firmware na na-load sa Arduino ay napaka-simple at binubuo lamang ng pagbabasa ng isang analog port, i-multiply ang halagang binasa ng pare-pareho na 0.0048828125 (5/1024, iyon ang boltahe ng GPIO ng Arduino na hinati sa bilang ng mga piraso ng analog port nito) at ipinapadala ang variable sa Serial - ang code ay magagamit sa artikulo.

Ang pamamaraan para sa pagpapagana ng komunikasyon ng RX-TX sa Raspberry Pi ay medyo mas kumplikado, at dapat mong sundin ang pamamaraang inilarawan sa link. Sa madaling sabi, kailangan mong i-edit ang isang file na tinatawag na "inittab" - na matatagpuan sa "/ etc / inittab" -, puna ang linya na "T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100" (kung ang file ay hindi itinatag sa OS ng Raspberry, dapat mong ipasok ang utos: "sudo leafpad /boot/config.txt" at idagdag ang linya na "paganahin ang_uart = 1" sa dulo ng file). Kapag tapos na ito, dapat mong buksan muli ang LX Terminal at huwag paganahin ang Serial gamit ang mga utos na "sudo systemctl stop [email protected]" at "sudo systemctl huwag paganahin ang [email protected]". Pagkatapos nito kailangan mong isagawa ang utos na "sudo leafpad /boot/cmdline.txt", tanggalin ang linya na "console = serial0, 115200", i-save ang file at i-restart ang aparato. Upang maging posible ang komunikasyon ng RX-TX, dapat na mai-install ang Serial library sa Raspberry Pi na may utos na "sudo apt-get install -f python-serial" at i-import ang library sa code sa pamamagitan ng pagpasok ng linya na "import serial", pinasimulan ang serial sa pamamagitan ng pagpasok ng linya na "ser = serial. Serial (" / dev / ttyS0 ", 9600)" at ang pagbasa ng boltahe na ipinadala ng Arduino gamit ang utos na "ser.readline ()" - ang buong code na ginamit sa Raspberry ay magagamit magagamit sa pagtatapos ng artikulo.

Kasunod sa pamamaraang inilarawan sa itaas, ang hakbang na basahin at ipadala ang boltahe ay kumpleto na.

Hakbang 6: Arduino Programming:

Tulad ng naunang nakasaad, ang code na responsable para sa pagbabasa ng boltahe na nabuo kapag ang pagbibisikleta ay napaka-simple.

Una, kinakailangan upang piliin ang A0 pin bilang responsable para sa pagbabasa ng boltahe.

Sa pagpapaandar na "void setup ()", kailangan mong itakda ang pin A0 sa INPUT na may "pinMode (sensor, INPUT)" na utos at piliin ang bilis ng paghahatid ng serial port gamit ang "Serial.begin (9600)" na utos.

Sa "void loop ()", ginagamit ang function na "Serial.flush ()" upang i-clear ang buffer tuwing tinatapos nito ang pagpapadala ng impormasyon sa pamamagitan ng serial; ang pagbasa ng boltahe ay ginaganap ng pagpapaandar na "analogRead (sensor)" - na naaalala na kinakailangan upang i-convert ang halagang binasa ng analog port sa Volts - proseso na binanggit sa seksyong "pagbasa ng boltahe" ng artikulo.

Gayundin, sa pagpapaandar na "void loop ()", kinakailangan upang i-convert ang variable x mula sa float hanggang sa string, dahil ito ang tanging paraan upang maipadala ang variable sa pamamagitan ng RX-TX. Ang huling hakbang sa pagpapaandar ng loop ay upang mai-print ang string sa serial port upang maipadala ito sa Raspberry - para dito kailangan mong gamitin ang pagpapaandar na "Serial.println (y)". Ang linya na "pagkaantala (100)" ay naidagdag sa code lamang upang ang variable ay maipadala sa mga agwat na 100 ms - kung ang oras na ito ay hindi iginagalang, magaganap ang Serial overload, na bumubuo ng mga posibleng pag-crash sa programa.

boltahe_read.ino

float sensor = A0;
voidsetup () {
pinMode (sensor, INPUT);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (sensor) * 0.0048828125 * 16.67;
String y = "";
y + = x;
Serial.println (y);
pagkaantala (100);
}

tingnan ang rawvoltage_read.ino na naka-host sa ❤ ng GitHub

Hakbang 7: Programming ng Raspberry Pi 3:

lamp_bike.py

i-import ang os #import ang os library (ginamit upang i-clear ang screen kung kinakailangan)
i-import ang RPi. GPIOas gpio #import library na ginamit upang makontrol ang Raspnerry’s GPIO
i-import ang serial #import library na responsable para sa serial na komunikasyon
i-import ang oras #import library na ginagawang posible na gamitin ang pagpapaandar na pagpapaandar
i-import ang subprocess #import library na responsable para sa pag-play ng mga kanta
#start serial
ser = serial. Serial ("/ dev / ttyS0", 9600) # tukuyin ang pangalan ng aparato at ang rate ng baud
#malinaw na screen
malinaw = lambda: os.system ('malinaw')
#set pin para sa relay control
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) # lampas 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) # lampas 6
gpio.setup (18, gpio. OUT) # lamp 5
gpio.setup (19, gpio. OUT) # lampas 4
gpio.setup (21, gpio. OUT) # lampas 3
gpio.setup (22, gpio. OUT) # ilaw 2
gpio.setup (23, gpio. OUT) # lampas 1
#start record
pangalan = ["Wala"] * 10
boltahe = [0.00] * 10
# basahin ang mga file ng mga talaan
f = bukas ('talaan', 'r')
para sa irrange (10): # ang 10 pinakamahusay na mga marka ay lilitaw sa listahan
pangalan = f.readline ()
pangalan = pangalan [: len (pangalan ) - 1]
boltahe = f.readline ()
boltahe = float (boltahe [: len (boltahe ) - 1])
f.close ()
malinaw ()
#itakda ang max boltahe
max = 50.00
#tapatay ang mga lampara
para sa inrange ko (11, 24, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. HIGH) #set to HIGH, naka-off ang mga relay
#start
habang Totoo:
#initial na screen
i-print ang "Mga talaan: / n"
para sa inrange ko (10):
pangalan ng print , ":", boltahe , "V"
current_name = raw_input ("Isulat ang iyong pangalan upang magsimula:")
malinaw ()
#Baguhin ang max na halaga
kung kasalukuyang_name == "max":
max = input ("Isulat ang max boltahe: (2 decimal na lugar)")
malinaw ()
iba pa:
#start babala
para sa irrange (11, 24, 1): Ang # loop ay nagsisimula sa PIN 11 at huminto sa PIN 24
kung i! = 14and i! = 17and i! = 20: #PIN 14 at 20 ay mga pin ng GND at ang 20 ay isang 3.3 V pin
gpio.output (i, gpio. LOW) #turn on the lamp
oras. pagtulog (0.5)
k = 10
para sa inrange ko (23, 10, -1):
malinaw ()
kung ako! = 14at ako! = 17at ako! = 20:
subprocess. Popen (['aplay', 'Audios /' + str (k) + '. wav'])
oras. tulog (0.03)
malinaw ()
i-print ang "Maghanda! / n", k
oras. tulog (1)
k- = 1
gpio.output (i, gpio. HIGH) #turn off ang mga lampara (isa-isa)
subprocess. Popen (['aplay', 'Audios / go.wav']) #play ang start music
oras. tulog (0.03)
malinaw ()
i-print ang "GO!"
oras. tulog (1)
malinaw ()
nabasa ang #voltage
kasalukuyang_voltage = 0.00
boltahe1 = 0.00
para sa inrange ko (200):
ser.flushInput ()
nakaraang = boltahe1
voltage1 = float (ser.readline ()) # nagkokolekta ng data ng Arduino na inilipat ng RX-TX
malinaw ()
boltahe ng print1, "V"
kung voltage1> kasalukuyang_voltage:
kasalukuyang_voltage = boltahe1
# depende sa nabuo na boltahe, mas maraming mga ilaw ang nag-iilaw.
kung boltahe1 <max / 10:
para sa inrange ko (11, 24, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. HIGH)
kung boltahe1> = max / 10:
gpio.output (11, gpio. LOW)
para sa inrange ko (12, 24, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. HIGH)
kung boltahe1> = 2 * max / 10:
para sa inrange ko (11, 13, 1):
gpio.output (i, gpio. LOW)
para sa inrange ko (13, 24, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. HIGH)
kung boltahe1> = 3 * max / 10:
para sa inrange ko (11, 14, 1):
gpio.output (i, gpio. LOW)
para sa inrange ko (15, 24, 1):
kung ako! = 17at ako! = 20:
gpio.output (i, gpio. HIGH)
kung boltahe1> = 4 * max / 10:
para sa inrange ko (11, 16, 1):
kung ako! = 14:
gpio.output (i, gpio. LOW)
para sa inrange ko (16, 24, 1):
kung ako! = 17at ako! = 20:
gpio.output (i, gpio. HIGH)
kung boltahe1> = 5 * max / 10:
para sa inrange ko (11, 17, 1):
kung ako! = 14:
gpio.output (i, gpio. LOW)
para sa inrange ko (18, 24, 1):
kung ako! = 20:
gpio.output (i, gpio. HIGH)
kung boltahe1> = 6 * max / 10:
para sa inrange ko (11, 19, 1):
kung ako! = 14at ako! = 17:
gpio.output (i, gpio. LOW)
para sa inrange ko (19, 24, 1):
kung ako! = 20:
gpio.output (i, gpio. HIGH)
kung boltahe1> = 7 * max / 10:
para sa inrange ko (11, 20, 1):
kung ako! = 14at ako! = 17:
gpio.output (i, gpio. LOW)
para sa inrange ko (21, 24, 1):
gpio.output (i, gpio. HIGH)
kung boltahe1> = 8 * max / 10:
para sa inrange ko (11, 22, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. LOW)
para sa inrange ko (22, 24, 1):
gpio.output (i, gpio. HIGH)
kung boltahe1> = 9 * max / 10:
para sa inrange ko (11, 23, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
kung voltage1> = max:
para sa inrange ko (11, 24, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. LOW)
kung boltahe1
pahinga
#tapatay ang mga lampara
para sa inrange ko (11, 24, 1):
kung ako! = 14at ako! = 17at ako! = 20:
gpio.output (i, gpio. HIGH)
#victory na musika
kung kasalukuyang_voltage> = max:
subprocess. Popen (['aplay', 'Audios / rocky.wav'])
oras. tulog (0.03)
malinaw ()
i-print ang "NAPAKA MAHUSAY, GUSTO MO!"% (u '\u00c9', u '\u00ca', u '\u00c2')
para sa inrange ko (10):
para sa j inrange (11, 24, 1):
kung j! = 14and j! = 17and j! = 20:
gpio.output (j, gpio. LOW)
oras. tulog (0.05)
para sa j inrange (11, 24, 1):
kung j! = 14and j! = 17and j! = 20:
gpio.output (j, gpio. HIGH)
oras. tulog (0.05)
oras. pagtulog (0.5)
subprocess. Popen (['aplay', 'Audios / end.wav'])
oras. tulog (0.03)
malinaw ()
i-print ang "End game… / n", kasalukuyang_voltage, "V"
#records
oras. tulog (1.2)
umabot = 0
para sa inrange ko (10):
kung kasalukuyang_voltage> boltahe :
umabot sa + = 1
temp_voltage = boltahe
boltahe = kasalukuyang_voltage
current_voltage = temp_voltage
temp_name = pangalan
pangalan = kasalukuyang_name
kasalukuyang_name = temp_name
kung umabot> 0:
subprocess. Popen (['aplay', 'Audios / record.wav'])
oras. tulog (0.03)
malinaw ()
f = buksan ('talaan', 'w')
para sa inrange ko (10):
f.write (pangalan )
f.write ("\ n")
f.write (str (boltahe ))
f.write ("\ n")
f.close ()
malinaw ()

tingnan ang rawlamps_bike.py naka-host sa ❤ ng GitHub

Hakbang 8: Electric Scheme:

Electric Scheme
Electric Scheme
Electric Scheme
Electric Scheme
Electric Scheme
Electric Scheme

Ang Arduino at ang Raspberry Pi 3 ay pinalakas ng isang 5V na mapagkukunan na may kasalukuyang 3A.

Nagsisimula ang circuit ng kuryente sa koneksyon ng DC generator (isinama sa bisikleta) sa Arduino sa pamamagitan ng isang boltahe na filter na binubuo ng isang Zener diode na 5.3V, isang kapasitor ng 10μF at isang resistor ng 1kΩ - ang input ng filter ay konektado sa ang mga terminal ng generator at ang output ay konektado sa A0 port at sa GND ng controller.

Ang Arduino ay konektado sa Raspberry sa pamamagitan ng komunikasyon sa RX-TX - ginanap sa pamamagitan ng isang resistive divider gamit ang 10kΩ resistors (kinakailangan ng mga port ng mga kumokontrol na tumatakbo sa iba't ibang mga voltages).

Ang mga GPIO ng Raspberry Pi ay konektado sa mga relay na responsable para sa pagbukas ng mga lampara. Ang "COM" ng lahat ng mga relay ay magkakaugnay at konektado sa phase (AC grid) at ang "N. O" (karaniwang bukas) ng bawat relay ay konektado sa bawat lampara at ang walang kinikilingan ng AC grid ay magkakaugnay sa lahat ng mga ilawan. Kaya, kapag ang GPIO na responsable para sa bawat relay ay naaktibo, ang relay ay inililipat sa yugto ng AC network at binuksan ang kani-kanilang lampara.

Hakbang 9: Mga Resulta:

Image
Image

Matapos ang pangwakas na pagpupulong ng proyekto, napatunayan na gumana ito tulad ng inaasahan - alinsunod sa bilis ng pag-pedal ng gumagamit sa bisikleta, mas maraming boltahe ang nabuo at mas maraming mga ilaw ang nag-iilaw.

Inirerekumendang: