Isi kandungan:
- Langkah 1: Bahan:
- Langkah 2: Diagram Blok Sistem:
- Langkah 3: Operasi Sistem:
- Langkah 4: Aspek Mekanik
- Langkah 5: Bacaan Voltan:
- Langkah 6: Pengaturcaraan Arduino:
- Langkah 7: Pengaturcaraan Raspberry Pi 3:
- Langkah 8: Skim Elektrik:
- Langkah 9: Hasil:
Video: Menjana Voltan Dengan Basikal Ergometer: 9 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
Penjelasan projek terdiri dari pemasangan "permainan" dengan tujuan untuk mengayuh basikal ergometer yang disambungkan ke penjana dan menara lampu yang diaktifkan ketika kelajuan mesin meningkat - yang berlaku sesuai dengan mengayuh basikal. Sistem ini berdasarkan pembacaan - melalui port analog Arduino Mega - voltan segera yang dihasilkan, kemudian mengirimkan data ini ke Raspberry Pi 3 melalui komunikasi RX-TX bersiri dan pengaktifan lampu seterusnya melalui relay.
Langkah 1: Bahan:
- 1 Raspberry Pi 3;
- 1 Arduino Mega 2560;
- 1 Relay Shield dengan 10 Relay 12 V;
- 10 Lampu Pijar 127 V;
- 1 Basikal Ergometer;
- 1 Mesin Elektrik (Penjana) 12 V;
- Perintang (1x1kΩ, 2x10kΩ);
- 1 Kapasitor Elektrolitik 10 µF;
- 1 Zener Diod 5.3 V;
- Kabel 1.5 mm (merah, hitam, coklat);
- 1 menara MDF dengan sokongan untuk 10 lampu.
Langkah 2: Diagram Blok Sistem:
Langkah 3: Operasi Sistem:
Sistem ini berdasarkan transformasi tenaga kinetik yang dihasilkan semasa mengayuh basikal dengan tenaga elektrik yang bertanggungjawab untuk pengaktifan relay yang akan menyalakan lampu.
Voltan yang dihasilkan oleh penjana dibaca oleh pin analog Arduino dan dihantar melalui RX-TX ke Raspberry Pi. Pengaktifan relay berkadar dengan voltan yang dihasilkan - semakin tinggi voltan, semakin banyak relay akan dicetuskan dan lebih banyak lampu akan menyala.
Langkah 4: Aspek Mekanik
Untuk memasangkan generator DC secara mekanikal ke basikal, sistem tali pinggang harus diganti dengan sistem yang digunakan pada basikal biasa (terdiri dari mahkota, rantai dan pinion). Plat logam dilekatkan pada rangka basikal supaya mesin dapat diikat dengan skru. Setelah itu, pinion dikimpal ke poros generator sehingga rantai dapat ditempatkan, menghubungkan sistem pedal ke generator.
Langkah 5: Bacaan Voltan:
Untuk membaca voltan penjana menggunakan Arduino adalah perlu untuk menghubungkan tiang positif mesin elektrik ke pin A0 pengawal dan tiang negatif ke GND - untuk mengelakkan voltan maksimum penjana lebih besar daripada 5 V Pin Arduino, penapis voltan menggunakan kapasitor 10 µF, perintang 1 kΩ dan diod Zener 5.3 V dibina dan disambungkan antara pengawal dan penjana. Firmware yang dimuat dalam Arduino sangat mudah dan hanya terdiri daripada membaca port analog, kalikan nilai yang dibaca dengan pemalar 0,0048828125 (5/1024, iaitu voltan GPIO Arduino dibahagi dengan bilangan bit port analognya) dan menghantar pemboleh ubah ke Serial - kod akan tersedia dalam artikel.
Prosedur untuk mengaktifkan komunikasi RX-TX di Raspberry Pi sedikit lebih rumit, dan anda mesti mengikuti prosedur yang dijelaskan dalam pautan. Secara ringkas, anda perlu mengedit fail bernama "inittab" - terletak di "/ etc / inittab" -, komen baris "T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100" (jika fail tersebut tidak didirikan di Raspberry's OS, anda mesti memasukkan perintah: "sudo leafpad /boot/config.txt" dan tambahkan baris "enable_uart = 1" ke akhir fail). Setelah ini selesai, anda mesti membuka semula Terminal LX dan mematikan Serial dengan perintah "sudo systemctl stop [email protected]" dan "sudo systemctl nonaktifkan [email protected]". Selepas itu anda harus melaksanakan perintah "sudo leafpad /boot/cmdline.txt", hapus baris "console = serial0, 115200", simpan fail dan mulakan semula peranti. Agar komunikasi RX-TX dapat dilakukan, perpustakaan Serial mesti dipasang pada Raspberry Pi dengan perintah "sudo apt-get install -f python-serial" dan import perpustakaan ke dalam kod dengan memasukkan baris "import serial", memulakan siri dengan memasukkan baris "ser = serial. Serial (" / dev / ttyS0 ", 9600)" dan pembacaan voltan yang dikirim oleh Arduino menggunakan perintah "ser.readline ()" - kod penuh yang digunakan dalam Raspberry akan disediakan pada akhir artikel.
Mengikuti prosedur yang dinyatakan di atas, langkah voltan baca dan hantar selesai.
Langkah 6: Pengaturcaraan Arduino:
Seperti yang dinyatakan sebelum ini, kod yang bertanggungjawab untuk membaca voltan yang dihasilkan semasa berbasikal sangat mudah.
Pertama, perlu memilih pin A0 sebagai penanggungjawab membaca voltan.
Dalam fungsi "setup void ()", anda harus mengatur pin A0 ke INPUT dengan perintah "pinMode (sensor, INPUT)" dan pilih kelajuan penghantaran port bersiri menggunakan perintah "Serial.begin (9600)".
Dalam "gelung void ()", fungsi "Serial.flush ()" digunakan untuk membersihkan penyangga setiap kali berhenti menghantar maklumat melalui siri; bacaan voltan dilakukan oleh fungsi "analogRead (sensor)" - mengingat bahawa adalah perlu untuk menukar nilai yang dibaca oleh port analog ke Volt - proses yang disebut dalam bahagian "voltan bacaan" artikel.
Juga, dalam fungsi "gelung void ()", perlu menukar pemboleh ubah x dari terapung ke tali, kerana ini adalah satu-satunya cara untuk menghantar pemboleh ubah melalui RX-TX. Langkah terakhir dalam fungsi gelung adalah mencetak rentetan di port bersiri sehingga dapat dihantar ke Raspberry - untuk ini, anda mesti menggunakan fungsi "Serial.println (y)". Garis "delay (100)" telah ditambahkan pada kod hanya sehingga pemboleh ubah dikirim dalam selang waktu 100 ms - jika waktu ini tidak dihormati, kelebihan Serial akan terjadi, yang menyebabkan kemungkinan kerusakan dalam program.
voltage_read.ino
sensor apungan = A0; |
kekosongan () { |
pinMode (sensor, INPUT); |
Serial.begin (9600); |
} |
kekosongan () { |
Serial.flush (); |
apungan x = analogRead (sensor) * 0.0048828125 * 16.67; |
Rentetan y = ""; |
y + = x; |
Bersiri.println (y); |
kelewatan (100); |
} |
lihat rawvoltage_read.ino dihoskan dengan ❤ oleh GitHub
Langkah 7: Pengaturcaraan Raspberry Pi 3:
lampu_bike.py
import os #import perpustakaan os (digunakan untuk membersihkan skrin apabila perlu) |
import perpustakaan RPi. GPIOas gpio #import yang digunakan untuk mengawal GPIO Raspnerry |
import perpustakaan siri #import yang bertanggungjawab untuk komunikasi bersiri |
import time #import library yang memungkinkan untuk menggunakan fungsi delay |
import perpustakaan subproses #import yang bertanggungjawab memainkan lagu |
#siri bersiri |
ser = serial. Serial ("/ dev / ttyS0", 9600) # tentukan nama peranti dan kadar baud |
#kaca jelas |
jelas = lambda: os.system ('jelas') |
#set pin untuk kawalan geganti |
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) #lampu 3 |
gpio.setup (22, gpio. OUT) #lamp 2 |
gpio.setup (23, gpio. OUT) #lamp 1 |
#mulakan rekod |
nama = ["Tiada"] * 10 |
voltan = [0.00] * 10 |
#membaca fail rekod |
f = terbuka ('rekod', 'r') |
untuk i inange (10): # 10 markah terbaik muncul dalam senarai |
nama = f.readline () |
nama = nama [: len (nama ) - 1] |
voltan = f.readline () |
voltan = apungan (voltan [: len (voltan ) - 1]) |
f. tutup () |
jelas () |
#set voltan maksimum |
maksimum = 50.00 |
# matikan lampu |
untuk i inange (11, 24, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. HIGH) #set ke HIGH, relay dimatikan |
#bermula |
sementara benar: |
# skrin awal |
cetak "Rekod: / n" |
untuk i inange (10): |
nama cetak , ":", voltan , "V" |
current_name = raw_input ("Tulis nama anda untuk memulakan:") |
jelas () |
#Tukar nilai maksimum |
jika current_name == "maks": |
max = input ("Tulis voltan maksimum: (2 tempat perpuluhan)") |
jelas () |
lain: |
amaran #start |
untuk i inange (11, 24, 1): # gelung bermula di PIN 11 dan berhenti di PIN 24 |
jika i! = 14 dan i! = 17 dan i! = 20: #PIN 14 dan 20 adalah pin GND dan 20 adalah pin 3.3 V |
gpio.output (i, gpio. LOW) # nyalakan lampu |
masa. tidur (0.5) |
k = 10 |
untuk i inange (23, 10, -1): |
jelas () |
jika saya! = 14dan i! = 17dan i! = 20: |
subproses. Buka (['aplay', 'Audios /' + str (k) + '. wav']) |
masa. tidur (0.03) |
jelas () |
cetak "Siapkan! / n", k |
masa. tidur (1) |
k- = 1 |
gpio.output (i, gpio. HIGH) # matikan lampu (satu persatu) |
subprocess. Popen (['aplay', 'Audios / go.wav']) #memainkan muzik permulaan |
masa. tidur (0.03) |
jelas () |
cetak "GO!" |
masa. tidur (1) |
jelas () |
#voltage dibaca |
arus_voltage = 0.00 |
voltan1 = 0.00 |
untuk i inange (200): |
ser.flushInput () |
sebelumnya = voltan1 |
voltage1 = float (ser.readline ()) # mengumpulkan data Arduino yang dipindahkan oleh RX-TX |
jelas () |
voltan cetak1, "V" |
jika voltan1> voltan_ arus: |
arus_voltage = voltan1 |
# bergantung pada voltan yang dihasilkan, lebih banyak lampu menyala. |
jika voltan1 <max / 10: |
untuk i inange (11, 24, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. HIGH) |
jika voltan1> = maksimum / 10: |
gpio.output (11, gpio. LOW) |
untuk i inange (12, 24, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 2 * maksimum / 10: |
untuk i inange (11, 13, 1): |
gpio.output (i, gpio. LOW) |
untuk i inange (13, 24, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 3 * maksimum / 10: |
untuk i inange (11, 14, 1): |
gpio.output (i, gpio. LOW) |
untuk i inange (15, 24, 1): |
jika saya! = 17dan i! = 20: |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 4 * maksimum / 10: |
untuk i inange (11, 16, 1): |
jika saya! = 14: |
gpio.output (i, gpio. LOW) |
untuk i inange (16, 24, 1): |
jika saya! = 17dan i! = 20: |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 5 * maksimum / 10: |
untuk i inange (11, 17, 1): |
jika saya! = 14: |
gpio.output (i, gpio. LOW) |
untuk i inange (18, 24, 1): |
jika saya! = 20: |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 6 * maksimum / 10: |
untuk i inange (11, 19, 1): |
jika saya! = 14dan i! = 17: |
gpio.output (i, gpio. LOW) |
untuk i inange (19, 24, 1): |
jika saya! = 20: |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 7 * maksimum / 10: |
untuk i inange (11, 20, 1): |
jika saya! = 14dan i! = 17: |
gpio.output (i, gpio. LOW) |
untuk i inange (21, 24, 1): |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 8 * maksimum / 10: |
untuk i inange (11, 22, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. LOW) |
untuk i inange (22, 24, 1): |
gpio.output (i, gpio. HIGH) |
jika voltan1> = 9 * maksimum / 10: |
untuk i inange (11, 23, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. LOW) |
gpio.output (23, gpio. HIGH) |
jika voltan1> = maksimum: |
untuk i inange (11, 24, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. LOW) |
sekiranya voltan1 |
rehat |
# matikan lampu |
untuk i inange (11, 24, 1): |
jika saya! = 14dan i! = 17dan i! = 20: |
gpio.output (i, gpio. HIGH) |
#victory muzik |
jika current_voltage> = maks: |
subproses. Buka (['aplay', 'Audios / rocky.wav']) |
masa. tidur (0.03) |
jelas () |
cetak "SANGAT BAIK, ANDA MENANG!"% (u '\u00c9', u '\u00ca', u '\u00c2') |
untuk i inange (10): |
untuk j inrange (11, 24, 1): |
jika j! = 14dan j! = 17dan j! = 20: |
gpio.output (j, gpio. LOW) |
masa. tidur (0.05) |
untuk j inrange (11, 24, 1): |
jika j! = 14dan j! = 17dan j! = 20: |
gpio.output (j, gpio. HIGH) |
masa. tidur (0.05) |
masa. tidur (0.5) |
subproses. Buka (['aplay', 'Audios / end.wav']) |
masa. tidur (0.03) |
jelas () |
cetak "Tamat permainan … / n", arus_voltage, "V" |
#rekod |
masa. tidur (1.2) |
dicapai = 0 |
untuk i inange (10): |
jika arus_voltage> voltan : |
dicapai + = 1 |
temp_voltage = voltan |
voltan = voltan semasa |
current_voltage = temp_voltage |
temp_name = nama |
nama = nama_ semasa |
current_name = temp_name |
jika dicapai> 0: |
subproses. Buka (['aplay', 'Audios / record.wav']) |
masa. tidur (0.03) |
jelas () |
f = terbuka ('rekod', 'w') |
untuk i inange (10): |
f.write (nama ) |
f.write ("\ n") |
f.write (str (voltan )) |
f.write ("\ n") |
f. tutup () |
jelas () |
lihat rawlamps_bike.py dihoskan dengan ❤ oleh GitHub
Langkah 8: Skim Elektrik:
Arduino dan Raspberry Pi 3 dikuasakan oleh sumber 5V dengan arus 3A.
Litar elektrik dimulakan dengan penyambungan penjana DC (digabungkan dengan basikal) ke Arduino melalui penapis voltan yang terdiri daripada diod Zener 5.3V, kapasitor 10μF dan perintang 1kΩ - input penapis disambungkan ke terminal penjana dan output disambungkan ke port A0 dan GND pengawal.
Arduino disambungkan ke Raspberry melalui komunikasi RX-TX - dilakukan melalui pembahagi resistif menggunakan perintang 10kΩ (diperlukan oleh port pengawal yang beroperasi pada voltan yang berbeza).
GPIO Raspberry Pi disambungkan ke relay yang bertanggungjawab menyalakan lampu. "COM" dari semua relay saling berkaitan dan dihubungkan ke fasa (grid AC) dan "N. O" (biasanya terbuka) setiap relay disambungkan ke setiap lampu dan netral grid AC saling berkaitan dengan semua lampu. Oleh itu, apabila GPIO yang bertanggungjawab untuk setiap relay diaktifkan, relay dihidupkan ke fasa rangkaian AC dan hidupkan lampu masing-masing.
Langkah 9: Hasil:
Setelah pemasangan terakhir projek, disahkan bahawa ia berfungsi seperti yang diharapkan - mengikut kelajuan pengguna mengayuh basikal, lebih banyak voltan dihasilkan dan lebih banyak lampu menyala.
Disyorkan:
Menjana Seni Dari Komen: 5 Langkah (dengan Gambar)
Menjana Seni Dari Komen: Projek ini bercita-cita tinggi, di mana kami ingin menggunakan beberapa bahagian internet, bahagian komen dan ruang sembang yang paling dipersoalkan, untuk membuat seni. Kami juga ingin menjadikan projek ini mudah diakses sehingga ada yang boleh berusaha menjana
Monitor Voltan untuk Bateri Voltan Tinggi: 3 Langkah (dengan Gambar)
Monitor voltan untuk bateri voltan tinggi: Dalam panduan ini saya akan menerangkan kepada anda bagaimana saya membina monitor voltan bateri saya untuk papan panjang elektrik saya. Pasang sesuka anda dan sambungkan hanya dua wayar ke bateri anda (Gnd dan Vcc). Panduan ini menganggap bahawa voltan bateri anda melebihi 30 volt, dengan
Bekalan Kuasa Voltan DC Boleh Laras Menggunakan Pengatur Voltan LM317: 10 Langkah
Bekalan Kuasa Voltan DC Boleh Laras Menggunakan Pengatur Voltan LM317: Dalam projek ini, saya telah merancang bekalan kuasa voltan mudah laras DC menggunakan IC LM317 dengan gambarajah litar bekalan kuasa LM317. Oleh kerana litar ini mempunyai penerus jambatan terbina dalam sehingga kita dapat menghubungkan bekalan AC 220V / 110V secara langsung pada input
Bagaimana Menjana Kunci Pintar Ogos Dari Kuasa Dinding Outlet?: 7 Langkah (dengan Gambar)
Bagaimana Menjana Kunci Pintar Ogos Dari Outlet Wall Power?: Baru-baru ini, ayah saya membeli kunci pintar Ogos dan dipasang di pintu garaj kami. Masalahnya ialah ia menggunakan bateri dan ayah saya tidak mahu risau untuk menukar bateri dengan kerap. Oleh itu, dia memutuskan untuk mengaktifkan kunci pintar Ogos dari luar
Kasut Menjana Kuasa: 10 Langkah (dengan Gambar)
Kasut Menjana Tenaga: Instruktif ini akan menunjukkan kepada anda cara membuat kasut yang menjana elektrik. Ia melakukannya dengan menggunakan tenaga anda semasa anda berjalan dan menukarnya menjadi elektrik. Sekiranya anda kehilangan kuasa telefon bimbit anda di mana-mana, maka