Daftar Isi:
- Langkah 1: Bahan:
- Langkah 2: Diagram Blok Sistem:
- Langkah 3: Operasi Sistem:
- Langkah 4: Aspek Mekanika
- Langkah 5: Pembacaan Tegangan:
- Langkah 6: Pemrograman Arduino:
- Langkah 7: Pemrograman Raspberry Pi 3:
- Langkah 8: Skema Listrik:
- Langkah 9: Hasil:
Video: Membangkitkan Tegangan Dengan Sepeda Ergometer: 9 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:57
Elaborasi proyek terdiri dari perakitan “permainan” dengan tujuan mengayuh sepeda ergometer yang terhubung ke generator dan menara lampu yang diaktifkan saat kecepatan mesin meningkat – yang terjadi sesuai dengan pengayuh sepeda. Sistem ini didasarkan pada pembacaan – melalui port analog Arduino Mega – tegangan instan yang dihasilkan, kemudian mentransmisikan data ini ke Raspberry Pi 3 melalui komunikasi serial RX-TX dan aktivasi lampu selanjutnya melalui relai.
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 Sepeda Ergometer;
- 1 Mesin Listrik (Generator) 12 V;
- Resistor (1x1kΩ, 2x10kΩ);
- 1 Kapasitor Elektrolit 10 F;
- 1 Dioda Zener 5.3 V;
- Kabel 1,5 mm (merah, hitam, coklat);
- 1 menara MDF dengan dukungan untuk 10 lampu.
Langkah 2: Diagram Blok Sistem:
Langkah 3: Operasi Sistem:
Sistem ini didasarkan pada transformasi energi kinetik yang dihasilkan saat mengayuh sepeda menjadi energi listrik yang bertanggung jawab untuk aktivasi relai yang akan menyalakan lampu.
Tegangan yang dihasilkan oleh generator dibaca oleh pin analog Arduino dan dikirim melalui RX-TX ke Raspberry Pi. Aktivasi relai sebanding dengan tegangan yang dihasilkan - semakin tinggi tegangan, semakin banyak relai yang terpicu dan semakin banyak lampu yang menyala.
Langkah 4: Aspek Mekanika
Untuk memasangkan generator DC ke sepeda secara mekanis, sistem sabuk harus diganti dengan sistem yang digunakan pada sepeda biasa (terdiri dari mahkota, rantai, dan pinion). Pelat logam dilas ke rangka sepeda sehingga mesin dapat diamankan dengan sekrup. Setelah itu, pinion dilas ke poros generator sehingga rantai dapat ditempatkan, menghubungkan sistem pedal ke generator.
Langkah 5: Pembacaan Tegangan:
Untuk membaca tegangan generator menggunakan Arduino perlu menghubungkan kutub positif mesin listrik ke pin A0 controller dan kutub negatif ke GND – untuk menghindari tegangan maksimum generator lebih besar dari 5 V dari generator. Pin Arduino, filter tegangan menggunakan kapasitor 10 F, resistor 1 kΩ dan dioda Zener 5,3 V dibangun dan dihubungkan antara pengontrol dan generator. Firmware yang dimuat di Arduino sangat sederhana dan hanya terdiri dari membaca port analog, mengalikan nilai yang dibaca dengan konstanta 0,0048828125 (5/1024, yaitu tegangan GPIO Arduino dibagi dengan jumlah bit port analognya) dan mengirimkan variabel ke Serial – kode akan tersedia di artikel.
Prosedur untuk mengaktifkan komunikasi RX-TX di Raspberry Pi sedikit lebih rumit, dan Anda harus mengikuti prosedur yang dijelaskan dalam tautan. Secara singkat, Anda perlu mengedit file bernama “inittab” – terletak di “/etc/inittab” –, beri komentar pada baris “T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100” (jika file tidak didirikan di OS Raspberry, Anda harus memasukkan perintah: "sudo leafpad /boot/config.txt" dan tambahkan baris "enable_uart=1" di akhir file). Setelah ini selesai, Anda harus membuka kembali Terminal LX dan menonaktifkan Serial dengan perintah "sudo systemctl stop [email protected]" dan "sudo systemctl disable [email protected]". Setelah itu Anda harus menjalankan perintah "sudo leafpad /boot/cmdline.txt", hapus baris "console = serial0, 115200", simpan file dan restart perangkat. Agar komunikasi RX-TX dapat dilakukan, perpustakaan Serial harus diinstal pada Raspberry Pi dengan perintah "sudo apt-get install -f python-serial" dan impor perpustakaan ke dalam kode dengan memasukkan baris "import serial", inisialisasi serial dengan memasukkan baris "ser = serial. Serial (" / dev / ttyS0 ", 9600)" dan pembacaan tegangan yang dikirim oleh Arduino menggunakan perintah "ser.readline()" – kode lengkap yang digunakan di Raspberry akan tersedia di akhir artikel.
Mengikuti prosedur yang dijelaskan di atas, langkah membaca dan mengirim tegangan selesai.
Langkah 6: Pemrograman Arduino:
Seperti yang dinyatakan sebelumnya, kode yang bertanggung jawab untuk membaca tegangan yang dihasilkan saat bersepeda sangat sederhana.
Pertama, perlu memilih pin A0 sebagai yang bertanggung jawab untuk membaca tegangan.
Pada fungsi "void setup ()", Anda perlu menyetel pin A0 ke INPUT dengan perintah "pinMode(sensor, INPUT)" dan memilih kecepatan transmisi port serial menggunakan perintah "Serial.begin(9600)".
Dalam "void loop()", fungsi "Serial.flush()" digunakan untuk mengosongkan buffer setiap kali berhenti mengirim informasi melalui serial; pembacaan tegangan dilakukan oleh fungsi "analogRead (sensor)" – mengingat bahwa perlu untuk mengubah nilai yang dibaca oleh port analog ke Volt – proses yang disebutkan di bagian "membaca tegangan" artikel.
Juga, dalam fungsi "void loop ()", perlu untuk mengubah variabel x dari float ke string, karena ini adalah satu-satunya cara untuk mengirim variabel melalui RX-TX. Langkah terakhir dalam fungsi loop adalah mencetak string di port serial agar dapat dikirim ke Raspberry - untuk ini Anda harus menggunakan fungsi "Serial.println (y)". Baris "delay (100)" telah ditambahkan ke kode saja sehingga variabel dikirim dalam interval 100 ms - jika waktu ini tidak dipatuhi, Serial overload akan terjadi, menghasilkan kemungkinan crash dalam program.
voltage_read.ino
sensor pelampung = A0; |
voidsetup() { |
pinMode(sensor, INPUT); |
Serial.begin(9600); |
} |
batal () { |
Serial.flush(); |
float x=analogRead(sensor)*0.0048828125*16.67; |
String y=""; |
y+=x; |
Serial.println(y); |
penundaan(100); |
} |
lihat rawvoltage_read.ino dihosting dengan ❤ oleh GitHub
Langkah 7: Pemrograman Raspberry Pi 3:
lamps_bike.py
import os #import os library (digunakan untuk membersihkan layar bila perlu) |
import RPi. GPIOas gpio #import library digunakan untuk mengontrol GPIO Raspnerry |
impor serial #import library yang bertanggung jawab atas komunikasi serial |
import time #import library yang memungkinkan penggunaan fungsi delay |
import subprocess #import library yang bertanggung jawab untuk memutar lagu |
#mulai serial |
ser = serial. Serial("/dev/ttyS0", 9600) #menentukan nama perangkat dan baud rate |
#bersihkan layar |
jelas = lambda: os.system('clear') |
#set pin untuk kontrol relai |
gpio.setmode(gpio. BOARD) |
gpio.setup(11, gpio. OUT) #lampu 10 |
gpio.setup(12, gpio. OUT) #lampu 9 |
gpio.setup(13, gpio. OUT) #lampu 8 |
gpio.setup(15, gpio. OUT) #lampu 7 |
gpio.setup(16, gpio. OUT) #lampu 6 |
gpio.setup(18, gpio. OUT) #lampu 5 |
gpio.setup(19, gpio. OUT) #lamp 4 |
gpio.setup(21, gpio. OUT) #lampu 3 |
gpio.setup(22, gpio. OUT) #lampu 2 |
gpio.setup(23, gpio. OUT) #lampu 1 |
#mulai rekaman |
nama=["Tidak ada"]*10 |
tegangan=[0.00]*10 |
#baca file catatan |
f =buka('catatan', 'r') |
for i inrange(10): #10 skor terbaik muncul di daftar |
nama=f.readline() |
nama=nama[:len(nama)-1] |
tegangan=f.readline() |
tegangan=float(tegangan[:len(tegangan)-1]) |
f.tutup() |
jernih() |
#atur tegangan maks |
maks = 50.00 |
#matikan lampu |
untuk i inrange(11, 24, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. HIGH) #set ke HIGH, relay dimatikan |
#Mulailah |
sementara Benar: |
#layar awal |
print"Catatan:\n" |
untuk saya inrange(10): |
nama cetak, ":", voltase, "V" |
current_name=raw_input("Tuliskan nama Anda untuk memulai: ") |
jernih() |
#Ubah nilai maksimal |
jika current_name ="maks": |
max=input("Tuliskan tegangan maksimum: (2 tempat desimal)") |
jernih() |
lain: |
#mulai peringatan |
untuk i inrange(11, 24, 1): #loop dimulai di PIN 11 dan berhenti di PIN 24 |
if i!=14and i!=17and i!=20: #PIN 14 dan 20 adalah pin GND dan 20 adalah pin 3,3 V |
gpio.output(i, gpio. LOW) #nyalakan lampu |
waktu.tidur(0.5) |
k=10 |
untuk i inrange (23, 10, -1): |
jernih() |
jika saya!=14dan saya!=17dan saya!=20: |
subproses. Popen(['aplay', 'Audios/'+str(k)+'.wav']) |
waktu.tidur(0.03) |
jernih() |
print"Siapkan!\n", k |
waktu.tidur(1) |
k-=1 |
gpio.output(i, gpio. HIGH) #mematikan lampu (satu per satu) |
subprocess. Popen(['aplay', 'Audios/go.wav']) #memainkan musik awal |
waktu.tidur(0.03) |
jernih() |
cetak "PERGI!" |
waktu.tidur(1) |
jernih() |
# pembacaan tegangan |
tegangan_arus = 0,00 |
tegangan1 = 0,00 |
untuk saya inrange(200): |
ser.flushInput() |
sebelumnya = tegangan1 |
voltage1=float(ser.readline()) #mengumpulkan data Arduino yang ditransfer oleh RX-TX |
jernih() |
tegangan cetak1, "V" |
jika voltage1> current_voltage: |
arus_tegangan = tegangan1 |
# tergantung pada tegangan yang dihasilkan, lebih banyak lampu menyala. |
jika voltage1<max/10: |
untuk i inrange(11, 24, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. HIGH) |
jika voltase1>=maks/10: |
gpio.output(11, gpio. LOW) |
untuk i inrange(12, 24, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. HIGH) |
jika voltase1>=2*maks/10: |
untuk i inrange (11, 13, 1): |
gpio.output(i, gpio. LOW) |
untuk i inrange(13, 24, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. HIGH) |
jika voltase1>=3*maks/10: |
untuk i inrange (11, 14, 1): |
gpio.output(i, gpio. LOW) |
untuk i inrange(15, 24, 1): |
jika saya!=17dan saya!=20: |
gpio.output(i, gpio. HIGH) |
jika voltase1>=4*maks/10: |
untuk i inrange (11, 16, 1): |
jika saya!=14: |
gpio.output(i, gpio. LOW) |
untuk i inrange(16, 24, 1): |
jika saya!=17dan saya!=20: |
gpio.output(i, gpio. HIGH) |
jika voltase1>=5*maks/10: |
untuk i inrange (11, 17, 1): |
jika saya!=14: |
gpio.output(i, gpio. LOW) |
untuk saya inrange (18, 24, 1): |
jika saya!=20: |
gpio.output(i, gpio. HIGH) |
jika voltase1>=6*maks/10: |
untuk i inrange (11, 19, 1): |
jika saya!=14dan saya!=17: |
gpio.output(i, gpio. LOW) |
untuk i inrange(19, 24, 1): |
jika saya!=20: |
gpio.output(i, gpio. HIGH) |
jika voltase1>=7*maks/10: |
untuk i inrange (11, 20, 1): |
jika saya!=14dan saya!=17: |
gpio.output(i, gpio. LOW) |
untuk saya inrange (21, 24, 1): |
gpio.output(i, gpio. HIGH) |
jika voltase1>=8*maks/10: |
untuk i inrange (11, 22, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. LOW) |
untuk saya inrange (22, 24, 1): |
gpio.output(i, gpio. HIGH) |
jika voltase1>=9*maks/10: |
untuk i inrange (11, 23, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. LOW) |
gpio.output(23, gpio. HIGH) |
jika voltase1>=maks: |
untuk i inrange (11, 24, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. LOW) |
jika tegangan1 |
merusak |
#matikan lampu |
untuk i inrange (11, 24, 1): |
jika saya!=14dan saya!=17dan saya!=20: |
gpio.output(i, gpio. HIGH) |
#musik kemenangan |
jika current_voltage>=max: |
subprocess. Popen(['aplay', 'Audios/rocky.wav']) |
waktu.tidur(0.03) |
jernih() |
print"SANGAT BAIK, ANDA MENANG!"% (u'\u00c9', u'\u00ca', u'\u00c2') |
untuk saya inrange(10): |
untuk j inrange(11, 24, 1): |
jika j!=14dan j!=17dan j!=20: |
gpio.output(j, gpio. LOW) |
waktu.tidur(0.05) |
untuk j inrange(11, 24, 1): |
jika j!=14dan j!=17dan j!=20: |
gpio.output(j, gpio. HIGH) |
waktu.tidur(0.05) |
waktu.tidur(0.5) |
subprocess. Popen(['aplay', 'Audios/end.wav']) |
waktu.tidur(0.03) |
jernih() |
print"Akhiri permainan…\n", tegangan_saat ini, "V" |
#rekor |
waktu.tidur(1.2) |
tercapai = 0 |
untuk saya inrange(10): |
jika tegangan_arus > tegangan: |
mencapai +=1 |
temp_voltage=tegangan |
tegangan=tegangan_arus |
current_voltage=temp_voltage |
temp_name=nama |
nama=nama_saat ini |
current_name=nama_temp |
jika mencapai >0: |
subprocess. Popen(['aplay', 'Audios/record.wav']) |
waktu.tidur(0.03) |
jernih() |
f =buka('catatan', 'w') |
untuk saya inrange(10): |
f.tulis(nama) |
f.tulis("\n") |
f.tulis(str(tegangan)) |
f.tulis("\n") |
f.tutup() |
jernih() |
lihat rawlamps_bike.py dihosting dengan ❤ oleh GitHub
Langkah 8: Skema Listrik:
Arduino dan Raspberry Pi 3 ditenagai oleh sumber 5V dengan arus 3A.
Rangkaian listrik dimulai dengan koneksi generator DC (dipasangkan ke sepeda) ke Arduino melalui filter tegangan yang terdiri dari dioda Zener 5.3V, kapasitor 10μF dan resistor 1kΩ – input filter terhubung ke terminal generator dan output terhubung ke port A0 dan GND controller.
Arduino terhubung ke Raspberry melalui komunikasi RX-TX – dilakukan melalui pembagi resistif menggunakan resistor 10kΩ (diperlukan oleh port pengontrol yang beroperasi pada voltase berbeda).
GPIO Raspberry Pi terhubung ke relai yang bertanggung jawab untuk menyalakan lampu. “COM” dari semua relai saling berhubungan dan terhubung ke fasa (grid AC) dan “N. O” (biasanya terbuka) dari setiap relai terhubung ke setiap lampu dan netral dari grid AC terhubung ke semua lampu. Jadi, ketika GPIO yang bertanggung jawab untuk setiap relai diaktifkan, relai dialihkan ke fase jaringan AC dan menyalakan lampu masing-masing.
Langkah 9: Hasil:
Setelah perakitan akhir proyek, diverifikasi bahwa itu bekerja seperti yang diharapkan - sesuai dengan kecepatan yang pengguna pedal pada sepeda, lebih banyak tegangan dihasilkan dan lebih banyak lampu menyala.
Direkomendasikan:
Monitor Tegangan untuk Baterai Tegangan Tinggi: 3 Langkah (dengan Gambar)
Monitor Tegangan untuk Baterai Tegangan Tinggi: Dalam panduan ini saya akan menjelaskan kepada Anda bagaimana saya membuat monitor tegangan baterai untuk longboard listrik saya. Pasang sesuka Anda dan sambungkan hanya dua kabel ke baterai Anda (Gnd dan Vcc). Panduan ini mengasumsikan bahwa tegangan baterai Anda melebihi 30 volt, w
Catu Daya DC Tegangan Disesuaikan Menggunakan Regulator Tegangan LM317: 10 Langkah
Catu Daya DC Tegangan Disesuaikan Menggunakan Regulator Tegangan LM317: Pada proyek ini, saya telah merancang catu daya DC tegangan sederhana yang dapat disesuaikan menggunakan IC LM317 dengan diagram rangkaian catu daya LM317. Karena rangkaian ini memiliki penyearah jembatan bawaan sehingga kita dapat langsung menghubungkan suplai AC 220V/110V pada input
Membangkitkan RB Pleo Mati Anda Dengan PSU Tethered: 5 Langkah (dengan Gambar)
Bangkitkan RB Pleo Mati Anda Dengan PSU Tertambat: Harap dicatat semua foto untuk instruksi ini diambil setelah saya menyelesaikan modifikasi sehingga Anda harus melihat lebih dekat pada bagian-bagian yang Anda miliki setelah membongkar kotak baterai dan membandingkannya dengan gambar yang disediakan di sini sebelum memodifikasi
Tampilan Ergometer Sederhana Berbasis Arduino Dengan Umpan Balik Diferensial: 7 Langkah (dengan Gambar)
Tampilan Ergometer Sederhana Berbasis Arduino Dengan Umpan Balik Diferensial: Latihan kardio membosankan, terutama saat berolahraga di dalam ruangan. Beberapa proyek yang ada mencoba untuk mengatasi hal ini dengan melakukan hal-hal keren seperti memasangkan ergometer ke konsol game, atau bahkan mensimulasikan sepeda nyata di VR. Seru seperti
Sistem Pelacakan Sepeda Dengan Peringatan Orang Mati Dengan Sigfox: 7 Langkah (dengan Gambar)
Sistem Pelacakan Sepeda Dengan Peringatan Orang Mati Dengan Sigfox: Sistem keamanan untuk pengendara sepeda dengan fitur pelacakan dan pengiriman peringatan. Jika terjadi kecelakaan, alarm dikirim dengan posisi GPS. Keamanan bagi pengendara sepeda adalah suatu keharusan, dengan kecelakaan sepeda jalan atau sepeda gunung terjadi dan sesegera mungkin darurat per