Daftar Isi:

Membangkitkan Tegangan Dengan Sepeda Ergometer: 9 Langkah (dengan Gambar)
Membangkitkan Tegangan Dengan Sepeda Ergometer: 9 Langkah (dengan Gambar)

Video: Membangkitkan Tegangan Dengan Sepeda Ergometer: 9 Langkah (dengan Gambar)

Video: Membangkitkan Tegangan Dengan Sepeda Ergometer: 9 Langkah (dengan Gambar)
Video: Webinar 2: Meningkatkan akurasi estimasi biaya preliminary menggunakan (SVR) 2024, November
Anonim
Menghasilkan Tegangan Dengan Sepeda Ergometer
Menghasilkan Tegangan Dengan Sepeda Ergometer
Menghasilkan Tegangan Dengan Sepeda Ergometer
Menghasilkan Tegangan Dengan Sepeda Ergometer
Menghasilkan Tegangan Dengan Sepeda Ergometer
Menghasilkan Tegangan Dengan Sepeda Ergometer

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:

Diagram Blok Sistem
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

Aspek Mekanika
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:

Skema Listrik
Skema Listrik
Skema Listrik
Skema Listrik
Skema Listrik
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:

Image
Image

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: