İçindekiler:

Havalı Tüfek Kronograf, Kronoskop. 3D Basılı: 13 Adım
Havalı Tüfek Kronograf, Kronoskop. 3D Basılı: 13 Adım

Video: Havalı Tüfek Kronograf, Kronoskop. 3D Basılı: 13 Adım

Video: Havalı Tüfek Kronograf, Kronoskop. 3D Basılı: 13 Adım
Video: HATSAN JET MUZZLE #shorts #hatsan #hatsanarms #airpistol #jet #pistol #pcp #hatsanjet #airsoft 2024, Temmuz
Anonim
Image
Image
Özellik
Özellik

Herkese merhaba, bugün 2010 yılında yapmış olduğum bir projemi tekrar gözden geçireceğiz. Havalı Tüfek Kronograf. Bu cihaz size bir merminin hızını söyleyecektir. Pelet, BB veya hatta hava yumuşak BB plastik top.

2010 yılında eğlenmek için havalı tüfek aldım. Teneke kutulara, şişelere, nişan alıyordu. Bu silahın hızının maksimum 500 fit/sn olduğunu biliyorum. Çünkü bu Kanada'nın kanunu. Bazı daha güçlü havalı tüfekler mevcuttur ancak lisansınızın olması gerekir ve bunları Walmart'tan satın alamazsınız.

Artık bu lisansa sahiptim, başka bir tane satın alabilirdim. Ancak kısa hikaye, aynı silah ABD'de 1000 fit/sn'de mevcuttu. NE!? Aynı silah mı? evet… Kanada'da vuruşun içinde bir delik var ve yay daha yumuşak.

Yapılacak ilk şey, deliği doldurmaktır. Ben lehimle böyle yaptım. Yapılacak bir sonraki şey, bir yedek yay sipariş etmekti. Ama bekleyin… yeni oyuncağımın şu anki hızı nedir? Bahar gerçekten gerekli mi? bilmiyorum ve bilmek istiyorum. Şimdi bilmek istiyorum ama nasıl?

Bu yüzden bu projeyi yaptım. Tek ihtiyacım olan 2 sensör, bir uC ve bir ekrandı ve işimizin başındayız.

Geçen hafta, eski mavi kronografımı bir rafta gördüm ve kendi kendime konuşuyorum: "Neden bunu paylaşmıyorsun ve onunla bir talimat kitabı yapmıyorsun?" Bu arada, doğruluğu artırabilir ve bir pil göstergesi ekleyebiliriz. Açma/kapama için 2 yerine 1 düğme koyun. Tüm yüzey montajı. Artık 2020'deyiz!

İşte burada… hadi başlayalım!

1. Adım: Özellik

-Pelet hızı

-Hız

-20 mhz çalışma, büyük doğruluk

-Otomatik kapalı

-Görüntülenen pil voltajı

-şematik mevcut

-pcb mevcut

-parça listesi mevcut

-STL mevcut

-C kodu mevcut

Adım 2: Çalışma Teorisi ve Doğruluk

-20Mhz'de çalışan bir uC'miz var. Kullanılan osilatör bir TCX0 +-2,5 ppm'dir.

-Birbirinden 3 inç uzakta 2 sensörümüz var.

- Mermi ilk sensöre çarptı. uC saymaya başla (zamanlayıcı1)

- Mermi ikinci sensöre çarptı. uC saymayı bırak.

-uC timer1 değerini kontrol edin, matematiği yapın ve hız ve hızı görüntüleyin.

16 bit timer1 + taşma bayrağı tov1 kullanıyorum. Tam sayım için 131071 "tic" için toplam 17 bit.

1/20 mhz = 50 ns. Her tik 50ns

3 inç yapmak için 131071 x 50 ns = 6.55355 ms.

12 inç yapmak için 6.55355 ms x 4 = 26.21 ms.

1/26.21 ms = 38.1472637 fit/sn

Bu, cihazın ölçebileceği en düşük hızdır.

Neden 20mhz? Neden dahili 8 mhz veya hatta bir kristal kullanmıyorsunuz?

İlk cihazım dahili osilatörü kullanıyordu. Çalışıyordu ama bu yeterince doğru değildi. Varyasyon çok büyük. Bir kristal daha iyidir, ancak sıcaklık değişen frekanstır. Bununla doğru bir ölçüm cihazı yapamayız. Ayrıca, frekans ne kadar yüksekse, aynı hız için daha fazla tik sayılır. Örnekleme, çok iyi bir doğruluğa sahip olmak için daha iyi olacaktır. Tik bölünebilir olmadığından, görev döngüsü hızlıysa kayıp azdır.

20 MHz'de 50 ns'lik adımlara sahibiz. 38 ft/s'de bir mermi için 50 ns'nin ne kadar doğru olduğunu biliyor muyuz?

38.1472637 ft/sn bölü 131071 = 0, 000291042 fit

0, 0003880569939956207 fit x 12 = 0, 003492512 inç

1/0, 003492512 = 286,37 ". Diğer bir deyişle. 50 ft/s'de +- 1/286" veya +- 0, 003492512 inç hassasiyete sahibiz

Ama osilatörüm en kötüsüyse ve 20 mhz +2,5 ppm'de çalışıyorsa sorun olur mu? Hadi bulalım…

20 000 000'ın 2,5 ppm'si: (20000000/1000000) x 2,5 = 20000050 Hz

En kötü durum senaryosu, 20 mhz'de 50 saat daha var. 1 saniyede 50 saat. Pelet aynı hızda çalışıyorsa (38.1472637 fit/s veya 6.55ms) timer1'de kaç tik daha var?

1/20000050 = 49.999875 ns

49.999875 ns x 131071 = 6, 553533616 ms

6, 553533616 ms x 4 = 26.21413446 ms

1/26.21413446 ms = 38.14735907 fit/sn

Yani 38.1472637 fit/sn yerine 38.14735907 fit/sn var

Artık 2.5 ppm'nin sonucu etkilemediğini biliyoruz.

İşte farklı hız bazı örnek

1000 ft/sn için

1000 ft/sn x 12, 12000 inç/sn

12000 için 1 saniye "3" kaç kez yapılır? 3x1/12000 = 250 us saniye

250 us / 50 ns = 5000 tic.

Zamanlayıcı1 5000'de olacak

uC matematiği yapın ve 1000 ft/sn görüntülenir. Çok uzak çok iyi

900 ft/sn için

900 ft/sn 10800 /sn

3x1/10800 = 277,77 bize

277, 77 ns / 50 ns = 5555, 5555 tik

Zamanlayıcı 1 5555'te olacak

uC matematiği yapın ve 900 yerine 900, 09 görüntülenecektir

Niye ya ? çünkü zamanlayıcı 1 5555'te ve 0, 5555 kayıp. Zamanlayıcıdaki tik bölünemez.

900 ft/s'de 0, 09 hatası var

0, 09/900x100 = sadece %0,01 hata

1500 ft/sn için1500 ft/sn 18000 /sn 3x1/10800 =166,66 us

166.66 us / 50 ns = 3333.333 tic Zamanlayıcı 1 3333'te olacak

uC matematiği yapın ve 1500 yerine 1500.15 görüntülenecektir,.15/1500x100= %0,01

9000 ft/sn için

9000 x 12 = 180000 inç/s

3x1/180000 = 27.7777 bize

27.77 us / 50 ns = 555, 555

Zamanlayıcı1 555'te olacak ve 4/(1/555x50ns) görüntülenecek 9009, 00 görüntülenecek

Burada hata 9000 = 0, 1%'de 9 fit/sn'dir.

Gördüğünüz gibi hız arttıkça % hata artıyor. Ama kal < %0,1

Bu sonuçlar çok iyi.

Ancak doğruluk doğrusal değildir. 10000 ft/s'de 0, % 1'dir. İyi haber, asla 10.000 ft/sn peleti test etmiyoruz.

Akılda tutulması gereken başka bir şey. Bir kesinti olduğunda, uC her zaman kesmeye girmeden önce son komutu bitirir. Bu normaldir ve tüm uC bunu yapar. Arduino'yu C'de veya hatta montajcıda kodlarsanız. Çoğu zaman sonsuza kadar bir döngü içinde bekleyeceksiniz… beklemek için. Sorun şu ki, bir döngüde 2 döngü harcıyoruz. Normalde bu önemli değil. Ama bizim durumumuzda. EVET, her tik önemlidir. Sonsuz bir döngüye bakalım:

montajcı:

döngü:

rjmp döngüsü

C'de:

süre (1){}

Aslında C derleyicisi rjmp komutunu kullanır. RJMP 2 döngüdür.

Bunun anlamı, kesinti ilk döngüde olursa, bir döngü(tic)(50ns) kaybederiz.

Bunu düzeltmenin yolu, döngüye birçok nop talimatı eklemektir. NOP 1 döngüdür.

döngü:

hayır

hayır

hayır

hayır

hayır

rjmp döngüsü

Kesinti bir nop komutunda gerçekleşirse. Biz iyiyiz. Eğer rjmp komutunun ikinci döngüsünde olursa sorun yok. Ama rjmp komutunun ilk döngüsünde olursa, bir tik kaybederiz. Evet, sadece 50 ns ama yukarıda gördüğünüz gibi, 3 inçte 50 ns hiçbir şey değil. Bunu yazılımla düzeltemiyoruz çünkü kesintinin tam olarak ne zaman olduğunu bilmiyoruz. Bu yüzden kodda çok fazla nop talimatı göreceksiniz. Şimdi, kesintinin bir nop talimatına düşeceğinden oldukça eminim. 2000 nop eklersem, rjmp talimatına düşmek için% 0, 05'im var.

Akılda tutulması gereken başka bir şey. Kesinti olduğunda. Derleyici birçok itme ve çekme işlemi yapar. Ama hep aynı numara. Şimdi bir yazılım düzeltmesi yapabiliriz.

Bu konuda sonuca varmak için:

Ortalama 1000 ft/sn'lik bir pelet için doğruluk %0,01'dir

Piyasadaki diğer %1'den 100 kat daha doğru. Frekans daha yüksektir ve TCXO ile daha doğrudur

Örneğin, 1000 ft/sn'nin %1'i aşağı yukarı 10 ft/sn'dir. Bu çok büyük bir fark.

Adım 3: Şematik ve Parça Listesi

Şematik ve Parça Listesi
Şematik ve Parça Listesi

Burada tek düğmeli açma/kapama devremi uyguladım. (son talimatıma bakın) Bu devre çok kullanışlı ve çok iyi çalışıyor.

atmega328p kullanıyorum. Bu, C'de programlanmıştır.

Ekran standart 2 satırlı lcd HD44780 uyumludur. 4 bit modu kullanılır.

TCXO 20mhz'ye voltaj sağlamak için bir 3.3v regülatör kullanılır.

D1, lcd arka ışığı içindir. İsteğe bağlı. D1'i yüklemezseniz pil daha uzun süre dayanır.

Tüm dirençler ve kapaklar 0805 pakettir

C1.1uf 25v

C2 1uf 16v

C3 2.2uf 10v

C4.1uf

C5.1uf

C6.1uf

C7 1uf

C8.1uf

C9.1uf

C10.1uf

D1 1n4148 SM SOT123

D2 5.1v SOT123

IC1 ATMEGA328p

IC2 MIC5225-5.0YM5-TR TPS70950DBVT SOT23-DBV

OSC1 TXETDCSANF-20.000000

R1 1M

R2 1M

R4 2.2k

R5 160

R6 160

R7 1M

R8 1M

U1 MIC5317-3.3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

Ekran lcd 2 satır HD44780. i2c modülünü satın almaya gerek yok.

Sensörler:

2x Verici OP140A

2x Alıcı OPL530

Enkoder: PEC11R-4215K-S0024 *Enkoder filtresini yapmak için 4x 10k direnç ve 2x.01uf eklemeyi unutmayınız. aşağıdaki resme bakın

Adım 4: PCB Gerber Dosyası

PCB Gerber Dosyası
PCB Gerber Dosyası
PCB Gerber Dosyası
PCB Gerber Dosyası
PCB Gerber Dosyası
PCB Gerber Dosyası
PCB Gerber Dosyası
PCB Gerber Dosyası

İşte gerber dosyaları

Adım 5: Pcb'nizi Lehimleyin

Pcb'nizi Lehimleyin
Pcb'nizi Lehimleyin
Pcb'nizi Lehimleyin
Pcb'nizi Lehimleyin
Pcb'nizi Lehimleyin
Pcb'nizi Lehimleyin

Şematik yardımla, tüm bileşenlerinizi pcb'ye lehimleyin. Her parça veya üzerine yazılan pcb, r1, r2… vb.

D1'i yüklemedim. Bu lcd arka ışık içindir. Güzel ama pil ömrü etkilenir. Bu yüzden lcd arka ışığını kapalı tutmayı seçiyorum.

Adım 6: Atmega328p'nin Programlanması

Atmega328p'yi programlama
Atmega328p'yi programlama

atmega328p'yi programlamak için 12. adımda burayı kontrol edin. Bunun için burada.hex dosyasını sağlıyorum.

İşte avrdude programı toplu iş dosyasını programlamaya hazır. Sadece usbasp.bat programına tıklayın ve usbasp'ınız doğru şekilde kurulur. Sigorta biti dahil her şey otomatik olarak yapılacaktır.

1drv.ms/u/s!AnKLPDy3pII_vXaGPIZKMXxaXDul?e…

Bu projede ayrıca C kaynak kodunu da paylaşıyorum. İçindeki bazı notların fransızca olabileceğini unutmayın.https://1drv.ms/u/s!AnKLPDy3pII_vXUMXHdxajwGRFJx?e…

Adım 7: LCD Ekran

LCD ekran
LCD ekran
LCD ekran
LCD ekran

Biraz bant takın ve pcb ile lcd'yi birbirine bağlayın

Adım 8: STL Dosyası

STL Dosyası
STL Dosyası
STL Dosyası
STL Dosyası
STL Dosyası
STL Dosyası

stl dosyası

1drv.ms/u/s!AnKLPDy3pII_vgezy0i0Aw3nD-xr?e…

Muhafaza, sensör borusu ve tüfek tutucu için destek gereklidir.

Hepsini 0,2 mm yükseklikte yazdırdım.

Adım 9: DÖNER ENKODER

DÖNER ENKODER
DÖNER ENKODER
DÖNER ENKODER
DÖNER ENKODER
DÖNER ENKODER
DÖNER ENKODER

Bu döner kodlayıcı, ISP konektörüne bağlanır. pelet ağırlığını değiştirmek ve cihazı açıp kapatmak için kullanılır.

vcc isp pin 2 (çekme direnci)

Terminal A (sarı) ISP pin 1'e gidin

Terminal B (yeşil) ISP pin 3'e git

Terminal C (gnd) isp pin 6

Filtreye sahip olmak ile filtresiz olmak arasındaki farkı görmek için 2 resim ekliyorum. İkisi arasındaki farkı kolayca görebilirsiniz.

Basma düğmesi pcb SW konektörüne gider.

Adım 10: Sensör Borusu

Sensör Borusu
Sensör Borusu
Sensör Borusu
Sensör Borusu
Sensör Borusu
Sensör Borusu

ÖNEMLİ:

Sensör borusu Siyah olmalı ve sensör alıcısı gizlenmelidir

İlk denemelerim güzel bir kırmızı pipoya sahip olmaktı. Ama bu zor! Hiç çalışmıyordu. Dış ışığın plastikten geldiğini ve alıcı sensörünün her zaman açık olduğunu anladım.

İyi bir sonuç elde etmek için rengi siyaha çevirme seçeneğim yoktu.

Alıcıyı üstüne takın. Ve şeffaf plastiği siyah boya, bant veya sakız, siyah silikon ile gizleyin.

Yayıcıyı alta takın. Sensörlerin iyi tepki verip vermediğini bir kalemle kontrol edin. Belki emitörün deliğinin biraz büyütülmesi gerekecektir. yazıcınızın kalibrasyonuna bağlı olacaktır.

Gölgede de daha iyi sonuç aldım. Doğrudan güneş ışığından kaçının.

Adım 11: Sensör Borusu Alternatifi

Sensör Borusu Alternatifi
Sensör Borusu Alternatifi
Sensör Borusu Alternatifi
Sensör Borusu Alternatifi

3d yazıcınız yoksa bakır boru ile de yapabilirsiniz. için çok iyi çalışacaktır. Yapılması zor olan şey, delik tam olarak 3 inçtir ve alıcı ve verici aynı hizada olmalıdır.

Adım 12: Osiloskop ve Kalibrasyon Üzerine Bir Pelet

Osiloskop ve Kalibrasyon Üzerine Bir Pelet
Osiloskop ve Kalibrasyon Üzerine Bir Pelet

Bu, borudan geçen gerçek bir pelettir. Prob 1 sarı, sensör 1'dir. Prob 2 mor, sensör 2'dir.

Zaman/böl 50 bize.

50us'un 6 bölümünü sayabiliriz. 50 us x 6 = 300 us (3 inç için). 1 fit için 300 us x 4 = 1,2 ms

1/1.2ms= 833.33 ft/sn

Sensörün normalde 5v'de olduğunu da görebiliriz. Ve verici ışığını engelleyebilir miyiz, sensör 0'a düşer.

Bu, uC'nin yarışmasını başlatma ve durdurma şeklidir (zamanlayıcı1)

Ama hızın doğru olup olmadığını tam olarak bilmek için, bunu ölçmenin bir yoluna ihtiyacım vardı.

Yazılım kalibrasyonu yapmak ve bu cihazın doğruluğunu test etmek için 10 mhz referans osilatör kullandım. Diğer talimatlardaki GPSDO'ma bakın.

Bu 10 mhz ile başka bir atmega328 besliyorum. Ve bunu montajcıda, bir peleti simüle etmek için bir düğmeye her bastığımda bana 2 darbe gönderecek şekilde programla. Aynen resimde gördüğümüz gibi ama gerçek bir pelet almak yerine bana 2 darbe gönderen başka bir uC oldu.

Düğmeye her basıldığında 1 darbe gönderildi ve tam olarak 4 ms sonra başka bir darbe gönderildi.

Bu şekilde, yazılım derleyicisini her zaman 1000 ft/sn görüntülenecek şekilde dengeleyebilirim.

Adım 13: Daha Fazlası…

Daha…
Daha…
Daha…
Daha…

Bu benim 2010'daki ilk prototipim.

Herhangi bir soru veya hata raporu için bana e-posta gönderebilirsiniz. İngiliz ya da Fransız. Yardım etmek için elimden geleni yapacağım.

Önerilen: