Cuprins:

Cronograf cu pușcă cu aer, cronoscop. Imprimat 3D: 13 pași
Cronograf cu pușcă cu aer, cronoscop. Imprimat 3D: 13 pași

Video: Cronograf cu pușcă cu aer, cronoscop. Imprimat 3D: 13 pași

Video: Cronograf cu pușcă cu aer, cronoscop. Imprimat 3D: 13 pași
Video: NEW: FX Airguns Radar Wireless Mini Pocket Chronograph - Arrows CO2 Airsoft - Air Rifle Power Test 2024, Iulie
Anonim
Image
Image
Caracteristică
Caracteristică

Bună tuturor, astăzi vom revedea un proiect pe care l-am făcut în 2010. Un cronograf cu pușcă aeriană. Acest dispozitiv vă va spune viteza unui proiectil. Minge de plastic pentru pelete, BB sau chiar aer moale BB.

În 2010 am cumpărat o pușcă cu aer pentru distracție. Lovea cutii, sticle, ținta. Știu că viteza acestei arme a fost de maxim 500 picioare / s. Pentru că este legea Canadei. Sunt disponibile câteva puști cu aer mai puternice, dar trebuie să aveți o licență și nu le puteți cumpăra la Walmart.

Acum aveam această licență, aș putea cumpăra alta. Dar nuvela, aceeași armă a fost disponibilă și pentru SUA la 1000 de picioare / s. CE!? Aceeasi arma? da … În Canada, cursa are o gaură și arcul este mai moale.

Primul lucru de făcut este să umpleți gaura. Asta am făcut cu lipirea. Următorul lucru de făcut a fost să comandați un arc de schimb. Dar așteaptă … care este viteza actuală a noii mele jucării? Este cu adevărat necesar primăvara? Nu știu și vreau să știu. Vreau să știu acum, dar cum?

De aceea am făcut acest proiect. Tot ce îmi trebuia era 2 senzori, un uC și un afișaj și suntem în afaceri.

Săptămâna trecută, am văzut vechiul meu cronograf albastru pe un raft și am vorbit cu mine: „De ce să nu împărtășesc acest lucru și să fac un instructable cu el?” Și apropo, am putea crește precizia și adăuga un indicator al bateriei. Puneți 1 buton în loc de 2 pentru pornire / oprire. Montare pe toată suprafața. Suntem acum în 2020!

Deci, iată-l … să începem!

Pasul 1: caracteristică

-Viteza peletelor

-Viteză

-20 MHz funcționează, precizie imensă

-Oprire automata

-Tensiunea bateriei afișată

-schematic disponibil

-buc disponibil

- lista pieselor disponibile

-STL disponibil

-Cod disponibil

Pasul 2: Teoria funcționării și preciziei

-Avem un uC care rulează la 20Mhz. Oscilatorul utilizat este un TCX0 + -2,5 ppm

-Avem 2 senzori la 3 centimetri distanță unul de celălalt.

-Proiectilul a lovit primul senzor. uC începe numărarea (timer1)

-Proiectilul a lovit al doilea senzor. uC nu mai numărați.

-Controlați valoarea timer1, faceți calculul și afișați viteza și viteza.

Folosesc timer1 pe 16 biți + pavilionul de deversare tov1. 17 biți în total pentru 131071 „tic” pentru un număr complet.

1/20 mhz = 50 ns. Fiecare tic este de 50ns

131071 x 50 ns = 6.55355 ms pentru a face 3 inci.

6,55355 ms x 4 = 26,21 ms pentru a face 12 inci.

1 / 26.21 ms = 38.1472637 picioare / s

Aceasta este cea mai mică viteză pe care o poate măsura dispozitivul.

De ce 20 mhz? De ce să nu folosiți 8 MHz intern sau chiar un cristal?

Primul meu dispozitiv a fost să folosesc oscilatorul intern. Lucra, dar acesta nu era suficient de precis. Variația este prea mare. Un cristal este mai bun, dar temperatura variază în frecvență. Nu putem face un dispozitiv de măsurare precis cu asta. De asemenea, cu cât frecvența este mai mare, cu atât mai multe ticuri vor fi calculate pentru aceeași viteză. Eșantionarea va fi mai bună pentru a avea o precizie foarte bună. Deoarece un tic nu este divizibil, pierderea este mică dacă ciclul de funcționare este rapid.

La 20 MHz avem trepte de 50 ns. Știm cât de precis este 50 ns pentru un proiectil la 38 ft / s.

38.1472637 ft / s împarte la 131071 = 0, 000291042 picioare

0, 0003880569939956207 picioare x 12 = 0, 003492512 țoli

1/0, 003492512 = 286,37 ". Cu alte cuvinte. La 50 ft / s avem o precizie de + - 1/286" sau + - 0, 003492512 inch

Dar dacă oscilatorul meu este cel mai rău și funcționează la 20 mhz +2,5 ppm este ok? Să aflăm…

2,5 ppm de 20 000 000 este: (20000000/1000000) x 2,5 = 20000050 Hz

Deci, cel mai rău scenariu avem încă 50 de ceasuri pe 20 mhz. Este 50 de ceasuri pe 1 secundă. Câte tic mai mult pe timer1 dacă peleta face aceeași viteză (38.1472637 picioare / s sau 6.55ms)?

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 picioare / s

Deci avem 38.14735907 picioare / s în loc de 38.1472637 picioare / s

Acum știm că 2,5 ppm nu afectează rezultatul.

Iată câteva exemple de viteză diferită

Pentru 1000 ft / s

1000 ft / s x 12 este 12000 inch / s

1 secundă pentru 12000 "cât timp să faci 3"? 3x1 / 12000 = 250 us secunde

250 us / 50 ns = 5000 tic.

Temporizatorul 1 va fi la 5000

uC faceți matematica și este afișat 1000 ft / s. Până acum, bine

Pentru 900 ft / s

900 ft / s este 10800 / s

3x1 / 10800 = 277,77 noi

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

Temporizatorul 1 va fi la 5555

uC faceți matematica și 900, 09 va fi afișat în loc de 900

De ce ? deoarece temporizatorul 1 este la 5555 și 0, 5555 este pierdut. Tic-ul temporizatorului nu poate fi divizat.

Avem o eroare de 0, 09 la 900 ft / s

0, 09 / 900x100 = 0, 01% numai eroare

Pentru 1500 ft / s1500 ft / s este 18000 / s 3x1 / 10800 = 166,66 us

166,66 us / 50 ns = 3333,333 tic Timer 1 va fi la 3333

uC faceți matematica și 1500.15 va fi afișat în loc de 1500 este.15 / 1500x100 = 0, 01%

Pentru 9000 ft / s

9000 x 12 = 180000 inci / s

3x1 / 180000 = 27.7777 noi

27,77 us / 50 ns = 555, 555

Timer1 va fi la 555 și 4 / (1 / 555x50ns) va fi afișat 9009, 00 va fi afișat

Aici eroarea este de 9 picioare / s pe 9000 = 0, 1%

După cum puteți vedea, eroarea% crește atunci când viteza este mai mare. Dar rămâneți <0,1%

Aceste rezultate sunt foarte bune.

Dar precizia nu este liniară. La 10000 ft / s este 0, 1%. Bine este că nu testăm niciodată o peletă de 10 000 ft / s.

Un alt lucru de reținut. Când se produce o întrerupere, uC termină întotdeauna ultima instrucțiune înainte de a intra în întrerupere. Acest lucru este normal și toți uC fac acest lucru. Dacă codificați arduino, în C sau chiar asamblator. De cele mai multe ori vei aștepta într-o buclă pentru totdeauna … să aștepți. Problema este că, într-o buclă, petrecem 2 cicluri. În mod normal, acest lucru nu este important. Dar în cazul nostru. DA, fiecare tic este important. Să arătăm o buclă infinită:

asamblator:

buclă:

bucla rjmp

În C:

while (1) {}

De fapt, compilatorul C folosește instrucțiunile rjmp. RJMP este de 2 cicluri.

Asta înseamnă că, dacă întreruperea se întâmplă cu primul ciclu, pierdem un ciclu (tic) (50ns).

Modul meu de a remedia acest lucru este să adaug multe instrucțiuni nop în buclă. NOP este de 1 ciclu.

buclă:

nop

nop

nop

nop

nop

bucla rjmp

Dacă întreruperea se întâmplă pe o instrucțiune nop. Suntem in regula. Dacă se întâmplă la al doilea ciclu de instrucțiuni rjmp suntem ok. Dar dacă se întâmplă în primul ciclu de instrucțiuni rjmp, vom pierde un tic. Da, sunt doar 50 ns, dar așa cum puteți vedea mai sus, 50 ns pe 3 inci nu este nimic. Nu putem corecta acest lucru prin software deoarece nu știm când se întâmplă exact întreruperea. De aceea, în cod veți vedea o mulțime de instrucțiuni nop. Acum sunt destul de sigur că întreruperea va cădea pe o instrucțiune nop. Dacă adăug 2000 de nop, am 0, 05% să cad pe instrucțiunile rjmp.

Un alt lucru de reținut. Când se întâmplă întreruperea. Compilatorul face multe împingere și tracțiune. Dar este întotdeauna același număr. Deci, acum putem face o corecție software.

Pentru a încheia acest lucru:

Precizia pentru o peletă medie de 1000 ft / s este 0, 01%

De 100 de ori mai precis decât alte 1% de pe piață. Frecvența este mai mare și cu TCXO, mai precisă

De exemplu, 1% din 1000 ft / s este mai mult sau mai puțin 10 ft / s. Este o diferență uriașă.

Pasul 3: Lista schematică și a pieselor

Schema și lista pieselor
Schema și lista pieselor

Aici am implementat un singur buton de pornire / oprire a circuitului. (vezi ultimul meu instructable) Acest circuit este foarte la îndemână și funcționează foarte bine.

Folosesc un atmega328p. Acesta este programat în C.

Afișajul este un standard de 2 linii compatibil LCD HD44780. Este utilizat modul 4 biți.

Un regulator de 3,3 V este utilizat pentru a furniza tensiune TCXO 20mhz.

D1 este pentru iluminare de fundal LCD. Opțional. Bateria va dura mai mult dacă nu instalați D1.

Toate rezistențele și capacele sunt pachet 0805

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

Afișează lcd 2 linii HD44780. Nu este nevoie să cumpărați modulul i2c.

Senzori:

2x Emițător OP140A

2x Recipient OPL530

Codificator: PEC11R-4215K-S0024 * Nu uitați să adăugați rezistențe 4x 10k și 2x.01uf pentru a face filtrul codificatorului. vezi poza de mai jos

Pasul 4: PCB Gerber File

Fișier PCB Gerber
Fișier PCB Gerber
Fișier PCB Gerber
Fișier PCB Gerber
Fișier PCB Gerber
Fișier PCB Gerber
Fișier PCB Gerber
Fișier PCB Gerber

Iată fișierele Gerber

Pasul 5: lipiți PC-ul

Lipiți PC-ul dvs
Lipiți PC-ul dvs
Lipiți Pcb
Lipiți Pcb
Lipiți PC-ul dvs
Lipiți PC-ul dvs

Cu ajutorul schematic, lipiți toate componentele de pe PCB. Fiecare parte sau scrisă pe pcb, r1, r2 … și așa mai departe.

Nu am instalat D1. Aceasta este pentru lumina de fundal LCD. Este frumos, dar durata de viață a bateriei este afectată. Așa că aleg să mențin lumina de fundal lcd oprită.

Pasul 6: Programarea Atmega328p

Programarea Atmega328p
Programarea Atmega328p

Verificați aici la pasul 12 pentru a programa atmega328p. Furnizez aici fișierul.hex pentru aceasta.

Iată programul avrdude gata pentru a programa fișierul lot. Faceți clic doar pe programul usbasp.bat și usbasp dvs. este instalat corect. Toate se vor face automat, inclusiv bitul siguranței.

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

În acest proiect împărtășesc și codul sursă C. Rețineți că unele note din acesta pot fi în franceză.https://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E …

Pasul 7: Afișaj LCD

Ecran LCD
Ecran LCD
Ecran LCD
Ecran LCD

Instalați o bandă și conectați PCB și LCD împreună

Pasul 8: fișier STL

Fișier STL
Fișier STL
Fișier STL
Fișier STL
Fișier STL
Fișier STL

fișier stl

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

Suportul este necesar pentru carcasă, țeavă senzor și suport pentru pușcă.

Am imprimat toate la.2 mm înălțime.

Pasul 9: codificator rotativ

ROTATIV
ROTATIV
ROTATIV
ROTATIV
ROTATIV
ROTATIV

Acest codificator rotativ este conectat la conectorul isp. este folosit pentru a schimba greutatea peletei și pentru a porni și opri dispozitivul.

vcc isp pin 2 (trageți rezistența)

Terminalul A (galben) mergeți la pinul ISP 1

Terminalul B (verde) mergeți la pinul 3 al ISP

Terminalul C (gnd) este pinul 6

Adăug 2 imagini pentru a vedea diferența dintre a avea un filtru și fără filtru. Puteți vedea cu ușurință diferența dintre ambele.

Butonul se deplasează la conectorul SW al plăcii.

Pasul 10: conducta senzorului

Țeava senzorului
Țeava senzorului
Țeava senzorului
Țeava senzorului
Țeava senzorului
Țeava senzorului

IMPORTANT:

Țeava senzorului trebuie să fie neagră, iar receptorul senzorului trebuie să fie ascuns

Primele mele încercări au fost să am o frumoasă țeavă roșie. Dar acest lucru este dificil! Nu mergea deloc. Mi-am dat seama că intră lumina exterioară, aruncă senzorul din plastic și receptorul este întotdeauna aprins.

Pentru a avea un rezultat bun, nu am avut de ales să schimb culoarea în negru.

Instalați receptorul deasupra. Și ascundeți plasticul clar cu vopsea neagră, bandă sau gumă, silicon negru.

Instalați emițătorul pe partea de jos.. Verificați cu un stilou dacă senzorii răspund bine. Poate că gaura emițătorului va trebui să fie mărită puțin. va depinde de calibrarea imprimantei.

Am, de asemenea, rezultate mai bune la umbră. Evitați lumina directă a soarelui.

Pasul 11: Alternativă la conducta senzorului

Alternativă la conducta senzorului
Alternativă la conducta senzorului
Alternativă la conducta senzorului
Alternativă la conducta senzorului

Dacă nu aveți o imprimantă 3D, puteți face același lucru cu o țeavă de cupru. Va funcționa foarte bine. Lucrul greu de făcut este gaura de exact 3 inci și receptorul și emițătorul trebuie aliniate.

Pasul 12: O peletă pe osciloscop și calibrare

O peletă pe osciloscop și calibrare
O peletă pe osciloscop și calibrare

Acesta este un adevărat pelet care trece prin aruncarea țevii. Sonda 1 galben este senzorul 1. Sonda 2 mov este senzorul 2.

Timpul / div este de 50 de noi.

Putem număra 6 divizii de 50us. 50 us x 6 = 300 us (pentru 3 inci). 300 us x 4 = 1,2 ms pentru 1 picioare

1 / 1,2 ms = 833,33 ft / s

De asemenea, putem vedea că senzorul este în mod normal la 5v. Și putem bloca lumina emițătorului, senzorul cade la 0.

Este modul în care începe și oprește conter-ul (timer1)

Dar pentru a ști exact dacă viteza era exactă, aveam nevoie de o modalitate de a măsura acest lucru.

Pentru a face calibrarea software-ului și a testa acuratețea acestui dispozitiv, am folosit un oscilator de referință de 10 MHz. Vedeți GPSDO-ul meu în alte instrucțiuni.

Alimentez încă un atmega328 cu acest 10 mhz. Și programează-l în asamblare pentru a-mi trimite 2 impulsuri de fiecare dată când apăs un buton pentru a simula o peletă. Exact așa cum am văzut în imagine, dar, în schimb, pentru a avea o peletă reală, a fost un alt uC care mi-a trimis 2 impulsuri.

De fiecare dată când a fost apăsat butonul, a fost trimis un impuls și exact 4 ms după ce a fost trimis un alt impuls.

În acest fel, voi putea echilibra compilatorul software pentru a afișa întotdeauna 1000 ft / s.

Pasul 13: Mai multe …

Mai mult…
Mai mult…
Mai mult…
Mai mult…

Acesta este primul meu prototip din 2010.

Pentru orice întrebare sau raport de eroare puteți să mă trimiteți prin e-mail. Engleză sau franceză. Voi face tot posibilul pentru a ajuta.

Recomandat: