Satura rādītājs:

Sprieguma radīšana ar velosipēdu Ergometrs: 9 soļi (ar attēliem)
Sprieguma radīšana ar velosipēdu Ergometrs: 9 soļi (ar attēliem)

Video: Sprieguma radīšana ar velosipēdu Ergometrs: 9 soļi (ar attēliem)

Video: Sprieguma radīšana ar velosipēdu Ergometrs: 9 soļi (ar attēliem)
Video: 20 товаров для автомобиля с Алиэкспресс, автотовары №32 2024, Novembris
Anonim
Sprieguma radīšana ar velosipēdu Ergometrs
Sprieguma radīšana ar velosipēdu Ergometrs
Sprieguma radīšana ar velosipēdu Ergometrs
Sprieguma radīšana ar velosipēdu Ergometrs
Sprieguma radīšana ar velosipēdu Ergometrs
Sprieguma radīšana ar velosipēdu Ergometrs

Projekta izstrāde sastāvēja no “spēles” montāžas ar mērķi pedāļot ergometra velosipēdā, kas savienots ar ģeneratoru, un lukturu tornī, kas tiek aktivizēts, palielinoties motora apgriezieniem - tas notiek velosipēda pedāļiem. Sistēmas pamatā bija nolasīšana-caur Arduino Mega analogo portu-ģenerētais momentālais spriegums, pēc tam šo datu pārraide uz Raspberry Pi 3, izmantojot sērijas RX-TX sakarus, un sekojoša lampu aktivizēšana, izmantojot releju.

1. solis: materiāli:

  • 1 aveņu Pi 3;
  • 1 Arduino Mega 2560;
  • 1 releja vairogs ar 10 relejiem 12 V;
  • 10 kvēlspuldzes 127 V;
  • 1 Ergometra velosipēds;
  • 1 elektriskā mašīna (ģenerators) 12 V;
  • Rezistori (1x1kΩ, 2x10kΩ);
  • 1 elektrolītiskais kondensators 10 µF;
  • 1 Zenera diode 5,3 V;
  • 1,5 mm kabelis (sarkans, melns, brūns);
  • 1 MDF tornis ar atbalstu 10 lampām.

2. darbība. Sistēmas bloku diagramma:

Sistēmas bloku diagramma
Sistēmas bloku diagramma

3. darbība: sistēmas darbība:

Sistēmas pamatā ir kinētiskās enerģijas pārveidošana, kas rodas, braucot ar velosipēdu, elektriskā enerģijā, kas ir atbildīga par releju aktivizēšanu, kas ieslēgs lampas.

Ģeneratora radīto spriegumu nolasa Arduino analogā tapa un caur RX-TX to nosūta uz Raspberry Pi. Releju aktivizēšana ir proporcionāla radītajam spriegumam - jo augstāks spriegums, jo vairāk releju tiks iedarbināti un iedegsies vairāk lampu.

4. solis: mehānikas aspekti

Mehānikas aspekti
Mehānikas aspekti

Lai mehāniski savienotu līdzstrāvas ģeneratoru ar velosipēdu, jostas sistēma bija jāaizstāj ar sistēmu, ko izmanto parastajos velosipēdos (sastāv no vainaga, ķēdes un zobrata). Velosipēda rāmim tika metināta metāla plāksne, lai motoru varētu nostiprināt ar skrūvēm. Pēc tam zobrats tika sametināts pie ģeneratora vārpstas, lai varētu novietot ķēdi, savienojot pedāļu sistēmu ar ģeneratoru.

5. solis: sprieguma nolasīšana:

Lai nolasītu ģeneratora spriegumu, izmantojot Arduino, ir nepieciešams savienot elektriskās mašīnas pozitīvo polu ar kontroliera A0 tapu un negatīvo polu ar GND - lai izvairītos no tā, ka ģeneratora maksimālais spriegums ir lielāks par 5 V Starp kontrolieri un ģeneratoru tika izveidotas un savienotas Arduino tapas, sprieguma filtrs, izmantojot 10 µF kondensatoru, 1 kΩ rezistors un Zener diode 5,3 V. Arduino ielādētā programmaparatūra ir ļoti vienkārša un sastāv tikai no analogā porta nolasīšanas, reiziniet nolasīto vērtību ar konstantu 0,0048828125 (5/1024, tas ir, Arduino GPIO spriegums dalīts ar tā analogā porta bitu skaitu) un nosūtot mainīgais uz sēriju - kods būs pieejams rakstā.

RX-TX sakaru iespējošanas procedūra Raspberry Pi ir nedaudz sarežģītāka, un jums ir jāievēro saitē aprakstītā procedūra. Īsumā, jums ir jārediģē fails ar nosaukumu “inittab”, kas atrodas mapē “/etc/inittab” -, komentējiet rindiņu “T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100” (ja fails nav izveidota Raspberry OS, jums jāievada komanda: “sudo leafpad /boot/config.txt” un faila beigās jāpievieno rindiņa “enable_uart = 1”). Kad tas ir izdarīts, jums ir jāatver LX terminālis un jāatspējo sērija ar komandām "sudo systemctl stop [email protected]" un "sudo systemctl disable [email protected]". Pēc tam jums jāizpilda komanda "sudo leafpad /boot/cmdline.txt", izdzēsiet rindu "console = serial0, 115200", saglabājiet failu un restartējiet ierīci. Lai būtu iespējama RX-TX komunikācija, sērijas bibliotēka ir jāinstalē Raspberry Pi ar komandu "sudo apt-get install -f python-serial" un jāimportē bibliotēka kodā, ievietojot rindu "importēt sēriju", inicializējot sēriju, ievietojot rindu "ser = serial. Serial (" / dev / ttyS0 ", 9600)" un Arduino nosūtītā sprieguma nolasījumu, izmantojot komandu "ser.readline ()" - visu izmantoto kodu in Raspberry būs pieejams raksta beigās.

Pēc iepriekš aprakstītās procedūras lasīšanas un nosūtīšanas sprieguma darbība ir pabeigta.

6. darbība: Arduino programmēšana:

Kā minēts iepriekš, kods, kas atbild par riteņbraukšanas laikā radītā sprieguma nolasīšanu, ir ļoti vienkāršs.

Pirmkārt, par sprieguma nolasīšanu ir jāizvēlas A0 tapa.

Funkcijā "void setup ()" jums ir jāiestata pin A0 uz INPUT ar komandu "pinMode (sensors, INPUT)" un jāizvēlas seriālā porta pārraides ātrums, izmantojot komandu "Serial.begin (9600)".

In "void loop ()", "Serial.flush ()" funkcija tiek izmantota, lai notīrītu buferi katru reizi, kad tā pārtrauc informācijas sūtīšanu, izmantojot seriālo; sprieguma nolasīšanu veic funkcija "analogRead (sensors)" - atceroties, ka analogā porta nolasītā vērtība ir jāpārvērš par voltiem - process, kas minēts raksta sadaļā "lasīšanas spriegums".

Funkcijā "void loop ()" ir jāpārveido mainīgais x no pludiņa uz virkni, jo tas ir vienīgais veids, kā nosūtīt mainīgo, izmantojot RX-TX. Cilpas funkcijas pēdējais solis ir izdrukāt virkni seriālajā portā, lai to varētu nosūtīt Raspberry - šim nolūkam jāizmanto funkcija "Serial.println (y)". Rinda "kavēšanās (100)" kodam ir pievienota tikai tāpēc, lai mainīgais tiktu nosūtīts ar 100 ms intervālu - ja šis laiks netiek ievērots, notiks sērijas pārslodze, radot iespējamās avārijas programmā.

Voltage_read.ino

pludiņa sensors = A0;
voidsetup () {
pinMode (sensors, IEEJA);
Sērijas sākums (9600);
}
voidloop () {
Serial.flush ();
pludiņš x = analogRead (sensors)*0,0048828125*16,67;
String y = "";
y+= x;
Sērijas.println (y);
kavēšanās (100);
}

apskatīt rawvoltage_read.ino, ko mitina GitHub ar ❤

7. darbība: Raspberry Pi 3 programmēšana:

lampas_bike.py

importēt os #importēt OS bibliotēku (vajadzības gadījumā izmanto ekrāna notīrīšanai)
importēt RPi. GPIO kā gpio #import bibliotēku, ko izmanto, lai kontrolētu Raspnerry GPIO
importēt sērijas #import bibliotēku, kas atbild par seriālo komunikāciju
importēšanas laiks #import bibliotēka, kas ļauj izmantot aizkaves funkciju
importēt apakšprocesu #import bibliotēka, kas atbild par dziesmu atskaņošanu
#sākt seriālu
ser = serial. Serial ("/dev/ttyS0", 9600) #definējiet ierīces nosaukumu un pārraides ātrumu
#skaidrs ekrāns
skaidrs = lambda: os.system ('skaidrs')
#iestatiet tapas releja vadībai
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #lamp 10
gpio.setup (12, gpio. OUT) #lampa 9
gpio.setup (13, gpio. OUT) #lampa 8
gpio.setup (15, gpio. OUT) #lamp 7
gpio.setup (16, gpio. OUT) #lampa 6
gpio.setup (18, gpio. OUT) #lampa 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
#sākt ierakstus
nosaukums = ["Nav"]*10
spriegums = [0.00]*10
#lasīt ierakstu failu
f = atvērts ('ieraksti', 'r')
par i inrange (10): #10 labākie rādītāji parādās sarakstā
nosaukums = f.readline ()
vārds = vārds [: len (vārds )-1]
spriegums = f.readline ()
spriegums = pludiņš (spriegums [: len (spriegums )-1])
f. tuvu ()
skaidrs ()
#iestatiet maksimālo spriegumu
maksimums = 50,00
#izslēdziet lampas
par i inrange (11, 24, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. HIGH) #iestatīts uz HIGH, releji ir izslēgti
#sākt
kamēr patiesība:
#sākuma ekrāns
drukāt "Ieraksti: / n"
es saku (10):
drukas nosaukums , ":", spriegums , "V"
current_name = raw_input ("Uzrakstiet savu vārdu, lai sāktu:")
skaidrs ()
#Mainīt maksimālo vērtību
ja pašreizējais_nosaukums == "max":
max = ievade ("Uzrakstiet maksimālo spriegumu: (2 zīmes aiz komata)")
skaidrs ()
cits:
#sākt brīdinājumu
par i inrange (11, 24, 1): #cikls sākas ar PIN 11 un beidzas ar PIN 24
ja i! = 14un i! = 17un i! = 20: #PIN 14 un 20 ir GND tapas un 20 ir 3,3 V tapa
gpio.output (i, gpio. LOW) #ieslēdziet lampas
miega laiks (0,5)
k = 10
par i inrange (23, 10, -1):
skaidrs ()
ja es! = 14un i! = 17un i! = 20:
apakšprocess. Popen (['aplay', 'Audios/'+str (k)+'. wav'])
miega laiks (0,03)
skaidrs ()
drukāt "Sagatavot! / n", k
laiks. miegs (1)
k- = 1
gpio.output (i, gpio. HIGH) #izslēdziet lampas (pa vienam)
apakšprocess. Popen (['aplay', 'Audios/go.wav']) #atskaņo sākuma mūziku
miega laiks (0,03)
skaidrs ()
izdrukāt "GO!"
laiks. miegs (1)
skaidrs ()
#sprieguma lasīšana
strāvas spriegums = 0,00
spriegums1 = 0,00
man inrange (200):
ser.flushInput ()
iepriekšējais = spriegums1
spriegums1 = pludiņš (ser.readline ()) #savāc Arduino datus, ko pārsūta RX-TX
skaidrs ()
drukas spriegums1, "V"
ja spriegums1> strāvas spriegums:
strāva_ spriegums = spriegums1
# atkarībā no radītā sprieguma iedegas vairāk lampu.
ja spriegums1 <max/10:
jo es saku (11, 24, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. HIGH)
ja spriegums1> = max/10:
gpio.output (11, gpio. LOW)
I inrange (12, 24, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. HIGH)
ja spriegums1> = 2*max/10:
man irange (11, 13, 1):
gpio.output (i, gpio. LOW)
par i inrange (13, 24, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. HIGH)
ja spriegums1> = 3*max/10:
man irange (11, 14, 1):
gpio.output (i, gpio. LOW)
man irange (15, 24, 1):
ja es! = 17 un es! = 20:
gpio.output (i, gpio. HIGH)
ja spriegums1> = 4*max/10:
man irange (11, 16, 1):
ja es! = 14:
gpio.output (i, gpio. LOW)
par i inrange (16, 24, 1):
ja es! = 17 un es! = 20:
gpio.output (i, gpio. HIGH)
ja spriegums1> = 5*max/10:
jo es saku (11, 17, 1):
ja es! = 14:
gpio.output (i, gpio. LOW)
par i inrange (18, 24, 1):
ja es! = 20:
gpio.output (i, gpio. HIGH)
ja spriegums1> = 6*max/10:
jo es saku (11, 19, 1):
ja es! = 14 un es! = 17:
gpio.output (i, gpio. LOW)
par i inrange (19, 24, 1):
ja es! = 20:
gpio.output (i, gpio. HIGH)
ja spriegums1> = 7*max/10:
man irange (11, 20, 1):
ja es! = 14 un es! = 17:
gpio.output (i, gpio. LOW)
par i inrange (21, 24, 1):
gpio.output (i, gpio. HIGH)
ja spriegums1> = 8*max/10:
jo es saku (11, 22, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. LOW)
jo es saku (22, 24, 1):
gpio.output (i, gpio. HIGH)
ja spriegums1> = 9*max/10:
jo es saku (11, 23, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
ja spriegums1> = max:
jo es saku (11, 24, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. LOW)

ja spriegums1

pārtraukums
#izslēdziet lampas
par i inrange (11, 24, 1):
ja es! = 14un i! = 17un i! = 20:
gpio.output (i, gpio. HIGH)
#uzvaras mūzika
ja strāvas spriegums> = max:
apakšprocess. Popen (['aplay', 'Audios/rocky.wav'])
miega laiks (0,03)
skaidrs ()
drukāt "ĻOTI LABI, JŪS VARĒJĀT!"% (u '\u00c9', u '\u00ca', u '\u00c2')
es saku (10):
j inrange (11, 24, 1):
ja j! = 14 un j! = 17 un j! = 20:
gpio.output (j, gpio. LOW)
miega laiks (0,05)
j inrange (11, 24, 1):
ja j! = 14 un j! = 17 un j! = 20:
gpio.output (j, gpio. HIGH)
miega laiks (0,05)
miega laiks (0,5)
apakšprocess. Popen (['aplay', 'Audios/end.wav'])
miega laiks (0,03)
skaidrs ()
drukāt "Beigt spēli… / n", strāvas spriegums, "V"
#ieraksti
time.sleep (1.2)
sasniedza = 0
es saku (10):
ja strāvas spriegums> spriegums :
sasniedza+= 1
temp_voltage = spriegums
spriegums = strāvas spriegums
strāvas spriegums = temp_priegums
temp_name = vārds
vārds = pašreizējais_vārds
pašreizējais_nosaukums = pagaidu_nosaukums
ja sasniegts> 0:
apakšprocess. Popen (['aplay', 'Audios/record.wav'])
miega laiks (0,03)
skaidrs ()
f = atvērts ('ieraksti', 'w')
es saku (10):
f. rakstīt (vārds )
f.write ("\ n")
f. rakstīt (str (spriegums ))
f.write ("\ n")
f. tuvu ()
skaidrs ()

apskatīt rawlamps_bike.py, ko mitina GitHub ar ❤

8. solis: elektriskā shēma:

Elektriskā shēma
Elektriskā shēma
Elektriskā shēma
Elektriskā shēma
Elektriskā shēma
Elektriskā shēma

Arduino un Raspberry Pi 3 baro 5V avots ar 3A strāvu.

Elektriskā ķēde sākas ar līdzstrāvas ģeneratora (savienots ar velosipēdu) pievienošanu Arduino caur sprieguma filtru, kas sastāv no Zener diodes 5,3 V, 10 μF kondensatora un 1 kΩ rezistora - filtra ieeja ir savienota ar ģeneratora spailēm, un izeja ir savienota ar A0 portu un kontroliera GND.

Arduino ir savienots ar Raspberry, izmantojot RX-TX sakarus-tiek veikts, izmantojot pretestības dalītāju, izmantojot 10 kΩ rezistorus (nepieciešami kontrolieru portiem, kas darbojas ar dažādu spriegumu).

Raspberry Pi GPIO ir savienoti ar relejiem, kas atbild par lampu ieslēgšanu. Visu releju “COM” bija savstarpēji savienoti un savienoti ar fāzi (maiņstrāvas tīkls), un katra releja “N. O” (parasti atvērts) tika pievienots katram lukturim, un maiņstrāvas tīkla neitrāls tika savienots ar visiem lukturiem. Tādējādi, kad tiek aktivizēts par katru releju atbildīgais GPIO, relejs tiek pārslēgts uz maiņstrāvas tīkla fāzi un iedegas attiecīgā lampiņa.

9. darbība. Rezultāti:

Image
Image

Pēc projekta galīgās montāžas tika pārbaudīts, vai tas darbojas, kā paredzēts - atkarībā no ātruma, kādā lietotājs velosipēdā velk pedāļus, tiek radīts lielāks spriegums un iedegas vairāk lampu.

Ieteicams: