Isi kandungan:

Menjana Voltan Dengan Basikal Ergometer: 9 Langkah (dengan Gambar)
Menjana Voltan Dengan Basikal Ergometer: 9 Langkah (dengan Gambar)

Video: Menjana Voltan Dengan Basikal Ergometer: 9 Langkah (dengan Gambar)

Video: Menjana Voltan Dengan Basikal Ergometer: 9 Langkah (dengan Gambar)
Video: 220 В переменного тока от 12 В 90 А Автомобильный генератор переменного тока 1000 Вт DIY 2024, Julai
Anonim
Menjana Voltan Dengan Basikal Ergometer
Menjana Voltan Dengan Basikal Ergometer
Menjana Voltan Dengan Basikal Ergometer
Menjana Voltan Dengan Basikal Ergometer
Menjana Voltan Dengan Basikal Ergometer
Menjana Voltan Dengan Basikal Ergometer

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:

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

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

Skim Elektrik
Skim Elektrik
Skim Elektrik
Skim Elektrik
Skim Elektrik
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:

Image
Image

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: