İçindekiler:

Ergometre Bisikleti ile Voltaj Üretme: 9 Adım (Resimli)
Ergometre Bisikleti ile Voltaj Üretme: 9 Adım (Resimli)

Video: Ergometre Bisikleti ile Voltaj Üretme: 9 Adım (Resimli)

Video: Ergometre Bisikleti ile Voltaj Üretme: 9 Adım (Resimli)
Video: Elektrikli Bisiklet Uzun Kullanım Testi: Tırmanış ve Hızlanma (Yüksek Voltaj) 2024, Temmuz
Anonim
Ergometre Bisikleti ile Voltaj Üretme
Ergometre Bisikleti ile Voltaj Üretme
Ergometre Bisikleti ile Voltaj Üretme
Ergometre Bisikleti ile Voltaj Üretme
Ergometre Bisikleti ile Voltaj Üretme
Ergometre Bisikleti ile Voltaj Üretme

Projenin detaylandırılması, bir jeneratöre bağlı bir ergometre bisikletinde ve motor devri arttıkça devreye giren bir lamba kulesinde pedal çevirmeyi amaçlayan bir “oyun” montajından oluşuyordu - bu, bisiklet pedalına göre gerçekleşir. Sistem, üretilen anlık voltajı bir Arduino Mega'nın analog portu üzerinden okumaya, ardından bu verileri seri RX-TX iletişimi yoluyla bir Raspberry Pi 3'e iletmeye ve ardından lambaların röle aracılığıyla etkinleştirilmesine dayanıyordu.

Adım 1: Malzemeler:

  • 1 Ahududu Pi 3;
  • 1 Arduino Mega 2560;
  • 10 Röleli 1 Röle Kalkanı 12 V;
  • 10 Akkor Lamba 127 V;
  • 1 Ergometre Bisikleti;
  • 1 Elektrik Makinası (Jeneratör) 12 V;
  • Dirençler (1x1kΩ, 2x10kΩ);
  • 1 Elektrolitik Kondansatör 10 µF;
  • 1 Zener Diyot 5.3 V;
  • 1,5 mm Kablo (kırmızı, siyah, kahverengi);
  • 10 lamba desteğine sahip 1 MDF kule.

Adım 2: Sistem Blokları Şeması:

Sistem Blokları Şeması
Sistem Blokları Şeması

Adım 3: Sistem Çalışması:

Sistem, bisiklet sürerken oluşan kinetik enerjinin, lambaları yakacak rölelerin devreye girmesinden sorumlu olan elektrik enerjisine dönüştürülmesine dayanmaktadır.

Jeneratör tarafından üretilen voltaj Arduino'nun analog pini tarafından okunur ve RX-TX üzerinden Raspberry Pi'ye gönderilir. Rölelerin aktivasyonu, üretilen voltajla orantılıdır - voltaj ne kadar yüksek olursa, o kadar fazla röle tetiklenir ve daha fazla lamba yanar.

4. Adım: Mekanik Yönleri

Mekanik Yönleri
Mekanik Yönleri

DC jeneratörü bisiklete mekanik olarak bağlamak için, kayış sisteminin yaygın bisikletlerde kullanılan sistemle (bir taç, zincir ve pinyondan oluşan) değiştirilmesi gerekiyordu. Motorun vidalarla sabitlenebilmesi için bisiklet çerçevesine metal bir plaka kaynaklandı. Bundan sonra, zincirin yerleştirilebilmesi için pinyon jeneratör miline kaynak yapılarak pedal sistemini jeneratöre bağladı.

Adım 5: Voltaj Okuması:

Jeneratörün voltajını Arduino kullanarak okumak için, elektrik makinesinin pozitif kutbunu kontrolörün A0 pinine ve negatif kutbunu GND'ye bağlamak gerekir - jeneratörün maksimum voltajının 5 V'tan daha büyük olmasını önlemek için Arduino pinleri, 10 µF kondansatör, 1 kΩ direnç ve 5,3 V Zener diyot kullanan bir voltaj filtresi yapıldı ve kontrolör ile jeneratör arasına bağlandı. Arduino'ya yüklenen ürün yazılımı çok basittir ve yalnızca bir analog bağlantı noktasını okumaktan, okunan değeri 0.0048828125 (5/1024, yani Arduino'nun GPIO voltajının analog bağlantı noktasının bit sayısına bölünmesidir) ile çarpmaktan ve göndermekten oluşur. Seriye göre değişken - kod makalede mevcut olacak.

Raspberry Pi'de RX-TX iletişimini etkinleştirme prosedürü biraz daha karmaşıktır ve bağlantıda açıklanan prosedürü izlemelisiniz. Kısaca, “/etc/inittab” içinde bulunan “inittab” adlı bir dosyayı düzenlemeniz gerekiyor, “T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100” satırını yorumlayın (dosya değilse Raspberry'nin işletim sisteminde kurulmuşsa, şu komutu girmelisiniz: “sudo yaprak pedi /boot/config.txt” ve dosyanın sonuna “enable_uart=1” satırını ekleyin). Bu yapıldıktan sonra, LX Terminalini yeniden açmalı ve "sudo systemctl stop [email protected]" ve "sudo systemctl disable [email protected]" komutlarıyla Seri'yi devre dışı bırakmalısınız. Bundan sonra "sudo leafpad /boot/cmdline.txt" komutunu çalıştırmanız, "console = serial0, 115200" satırını silmeniz, dosyayı kaydetmeniz ve cihazı yeniden başlatmanız gerekir. RX-TX haberleşmesinin mümkün olması için Raspberry Pi üzerinde "sudo apt-get install -f python-serial" komutu ile Serial library kurulmalı ve "import serial" satırını ekleyerek kütüphaneyi koda import etmelisiniz., "ser = serial. Serial (" / dev / ttyS0 ", 9600)" satırını ekleyerek seriyi başlatın ve Arduino tarafından “ser.readline()” komutu kullanılarak gönderilen voltajın okunması – kullanılan tam kod Ahudududa makalenin sonunda sunulacaktır.

Yukarıda açıklanan prosedür izlenerek voltaj okuma ve gönderme adımı tamamlanır.

Adım 6: Arduino Programlama:

Daha önce belirtildiği gibi, döngü sırasında üretilen voltajı okumaktan sorumlu kod çok basittir.

İlk olarak, voltajı okumaktan sorumlu olarak A0 pinini seçmek gerekir.

"void setup()" fonksiyonunda "pinMode(sensor, INPUT)" komutu ile A0 pinini INPUT olarak ayarlamanız ve "Serial.begin(9600)" komutunu kullanarak seri port iletim hızını seçmeniz gerekmektedir.

"Void loop ()" içinde, "Serial.flush ()" işlevi, seri yoluyla bilgi göndermeyi her sonlandırdığında arabelleği temizlemek için kullanılır; voltaj okuması "analogRead (sensör)" işlevi tarafından gerçekleştirilir - analog port tarafından okunan değeri Volt'a dönüştürmenin gerekli olduğunu hatırlayarak - makalenin "voltaj okuma" bölümünde belirtilen işlem.

Ayrıca, "void loop ()" işlevinde, değişkeni RX-TX yoluyla göndermenin tek yolu bu olduğundan, değişken x'i float'tan string'e dönüştürmek gereklidir. Döngü işlevindeki son adım, Raspberry'ye gönderilebilmesi için diziyi seri bağlantı noktasında yazdırmaktır - bunun için "Serial.println (y)" işlevini kullanmanız gerekir. "Gecikme (100)" satırı, yalnızca değişkenin 100 ms'lik aralıklarla gönderilmesi için koda eklenmiştir - bu süreye uyulmaması durumunda, programda olası çökmelere neden olan Seri aşırı yük meydana gelecektir.

voltaj_oku.ino

şamandıra sensörü = A0;
voidsetup() {
pinMode(sensör, GİRİŞ);
Seri.başla(9600);
}
boşluk döngüsü() {
Seri.flush();
kayan nokta x=analogOku(sensör)*0.0048828125*16.67;
y="" dizisi;
y+=x;
Seri.println(y);
gecikme(100);
}

GitHub tarafından ❤ ile barındırılan rawvoltage_read.ino'yu görüntüle

Adım 7: Raspberry Pi 3 Programlama:

lamps_bike.py

işletim sistemini içe aktar # işletim sistemi kitaplığını içe aktar (gerektiğinde ekranı temizlemek için kullanılır)
Raspnerry'nin GPIO'sunu kontrol etmek için kullanılan gpio #import kitaplığı olarak RPi. GPIO'yu içe aktarın
seri iletişimden sorumlu seri #import kitaplığını içe aktar
gecikme işlevini kullanmayı mümkün kılan içe aktarma zamanı #import kitaplığı
şarkıları çalmaktan sorumlu alt işlem #import kütüphanesini içe aktar
#seri başla
ser = serial. Serial("/dev/ttyS0", 9600) #cihaz adını ve baud hızını tanımlayın
#temiz ekran
temizle =lambda: os.system('temizle')
#röle kontrolü için pinleri ayarla
gpio.setmode(gpio. BOARD)
gpio.setup(11, gpio. OUT) #lamba 10
gpio.setup(12, gpio. OUT) #lamba 9
gpio.setup(13, gpio. OUT) #lamba 8
gpio.setup(15, gpio. OUT) #lamba 7
gpio.setup(16, gpio. OUT) #lamba 6
gpio.setup(18, gpio. OUT) #lamba 5
gpio.setup(19, gpio. OUT) #lamba 4
gpio.setup(21, gpio. OUT) #lamba 3
gpio.setup(22, gpio. OUT) #lamba 2
gpio.setup(23, gpio. OUT) #lamba 1
#başlangıç kayıtları
isim=["Yok"]*10
voltaj=[0.00]*10
#kayıt dosyasını oku
f =açık('kayıtlar', 'r')
for i inrange(10): #en iyi 10 puan listede görünür
isim=f.readline()
isim=isim[:len(isim)-1]
voltaj=f.readline()
voltaj=float(voltaj[:len(voltaj)-1])
f.kapat()
açık()
#maksimum voltajı ayarla
maks=50,00
#lambaları kapat
inrange(11, 24, 1) için:
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. HIGH) #HIGH olarak ayarlandığında, röleler kapatılır
#Başlat
whileTrue:
#ilk ekran
yazdır"Kayıtlar:\n"
inrange(10) için:
adı yazdır, ":", voltaj, "V"
current_name=raw_input("Başlamak için adınızı yazın: ")
açık()
#Maksimum değeri değiştir
akım_adı =="maks" ise:
max=input("Maksimum voltajı yazın: (2 ondalık basamak)")
açık()
Başka:
#başlangıç uyarısı
i inrange(11, 24, 1) için: #döngü PIN 11'de başlar ve PIN 24'te durur
eğer i!=14ve i!=17ve i!=20: #PIN 14 ve 20, GND pinleri ve 20, 3.3 V pin ise
gpio.output(i, gpio. LOW) #lambaları aç
zaman.uyku(0.5)
k=10
i aralığı için (23, 10, -1):
açık()
eğer i!=14ve i!=17ve i!=20 ise:
subprocess. Popen(['aplay', 'Audios/'+str(k)+'.wav'])
zaman.uyku(0.03)
açık()
print"Hazırlan!\n", k
zaman.uyku(1)
k-=1
gpio.output(i, gpio. HIGH) #lambaları tek tek kapat
subprocess. Popen(['aplay', 'Audios/go.wav']) #başlangıç müziğini çalar
zaman.uyku(0.03)
açık()
"GO!" yazdır
zaman.uyku(1)
açık()
#voltaj okuma
akım_voltajı=0,00
voltaj1=0,00
inrange için (200):
ser.flushInput()
önceki=voltaj1
voltaj1=float(ser.readline()) #Arduino'nun RX-TX tarafından aktarılan verilerini toplar
açık()
baskı voltajı1, "V"
eğer voltaj1>akım_voltaj:
akım_voltaj=voltaj1
# üretilen voltaja bağlı olarak daha fazla lamba yanar.
voltaj1<maks/10 ise:
inrange(11, 24, 1) için:
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=maks/10:
gpio.output(11, gpio. LOW)
inrange(12, 24, 1) için:
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=2*maks/10:
inrange için (11, 13, 1):
gpio.output(i, gpio. LOW)
inrange(13, 24, 1) için:
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=3*maks/10:
inrange için (11, 14, 1):
gpio.output(i, gpio. LOW)
inrange(15, 24, 1) için:
eğer i!=17ve i!=20 ise:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=4*maks/10:
inrange için (11, 16, 1):
eğer ben!=14:
gpio.output(i, gpio. LOW)
inrange(16, 24, 1) için:
eğer i!=17ve i!=20 ise:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=5*maks/10:
inrange için (11, 17, 1):
eğer ben!=14:
gpio.output(i, gpio. LOW)
inrange(18, 24, 1) için:
eğer ben!=20:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=6*maks/10:
inrange için (11, 19, 1):
eğer i!=14ve i!=17 ise:
gpio.output(i, gpio. LOW)
inrange(19, 24, 1) için:
eğer ben!=20:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=7*maks/10:
inrange için (11, 20, 1):
eğer i!=14ve i!=17 ise:
gpio.output(i, gpio. LOW)
inrange(21, 24, 1) için:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=8*maks/10:
inrange için (11, 22, 1):
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. LOW)
inrange(22, 24, 1) için:
gpio.output(i, gpio. YÜKSEK)
eğer voltaj1>=9*maks/10:
inrange için (11, 23, 1):
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. LOW)
gpio.output(23, gpio. YÜKSEK)
eğer voltaj1>=maks:
inrange için (11, 24, 1):
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. LOW)
eğer voltaj1
kırmak
#lambaları kapat
inrange için (11, 24, 1):
eğer i!=14ve i!=17ve i!=20 ise:
gpio.output(i, gpio. YÜKSEK)
#zafer müziği
akım_voltajı>=maks ise:
subprocess. Popen(['aplay', 'Audios/rocky.wav'])
zaman.uyku(0.03)
açık()
print"ÇOK İYİ, KAZANDIN!"% (u'\u00c9', u'\u00ca', u'\u00c2')
inrange(10) için:
j aralığı(11, 24, 1) için:
j!=14ve j!=17ve j!=20 ise:
gpio.output(j, gpio. LOW)
zaman.uyku(0.05)
j aralığı(11, 24, 1) için:
j!=14ve j!=17ve j!=20 ise:
gpio.output(j, gpio. YÜKSEK)
zaman.uyku(0.05)
zaman.uyku(0.5)
subprocess. Popen(['aplay', 'Audios/end.wav'])
zaman.uyku(0.03)
açık()
print"Oyunu bitir…\n", current_voltage, "V"
#kayıtlar
zaman.uyku(1.2)
ulaşıldı=0
inrange(10) için:
akım_voltaj > voltaj ise:
ulaşıldı+=1
temp_voltage=voltaj
voltaj=akım_voltaj
current_voltage=temp_voltage
temp_name=ad
isim=geçerli_isim
current_name=temp_name
>0'a ulaşılırsa:
subprocess. Popen(['aplay', 'Audios/record.wav'])
zaman.uyku(0.03)
açık()
f =açık('kayıtlar', 'w')
inrange(10) için:
f.write(isim)
f.write("\n")
f.write(str(voltaj))
f.write("\n")
f.kapat()
açık()

GitHub tarafından ❤ ile barındırılan rawlamps_bike.py'yi görüntüleyin

Adım 8: Elektrik Şeması:

Elektrik Şeması
Elektrik Şeması
Elektrik Şeması
Elektrik Şeması
Elektrik Şeması
Elektrik Şeması

Arduino ve Raspberry Pi 3, 3A akıma sahip 5V'luk bir kaynaktan güç alır.

Elektrik devresi, DC jeneratörün (bisiklete bağlı) 5,3V Zener diyot, 10μF kondansatör ve 1kΩ dirençten oluşan bir voltaj filtresi aracılığıyla Arduino'ya bağlanmasıyla başlar - filtre girişi, ağa bağlanır. jeneratör terminalleri ve çıkış, kontrolörün A0 portuna ve GND'sine bağlanır.

Arduino, Raspberry'ye RX-TX iletişimi ile bağlanır - 10kΩ dirençler kullanılarak dirençli bir bölücü aracılığıyla gerçekleştirilir (kontrolörlerin farklı voltajlarda çalışan portları için gereklidir).

Raspberry Pi'nin GPIO'ları, lambaların açılmasından sorumlu rölelere bağlanır. Tüm rölelerin “COM”u birbirine bağlandı ve faza (AC şebekesi) bağlandı ve her rölenin “N. O” (normalde açık) her lambaya bağlandı ve AC şebekesinin nötrü tüm lambalara birbirine bağlandı. Böylece her bir röleden sorumlu GPIO etkinleştirildiğinde röle AC şebekesinin fazına geçer ve ilgili lambayı yakar.

9. Adım: Sonuçlar:

Image
Image

Projenin son montajından sonra, beklendiği gibi çalıştığı doğrulandı - kullanıcının bisiklet üzerinde pedal çevirdiği hıza göre, daha fazla voltaj üretiliyor ve daha fazla lamba yanıyor.

Önerilen: