Cuprins:
- Pasul 1: caracteristică
- Pasul 2: Teoria funcționării și preciziei
- Pasul 3: Lista schematică și a pieselor
- Pasul 4: PCB Gerber File
- Pasul 5: lipiți PC-ul
- Pasul 6: Programarea Atmega328p
- Pasul 7: Afișaj LCD
- Pasul 8: fișier STL
- Pasul 9: codificator rotativ
- Pasul 10: conducta senzorului
- Pasul 11: Alternativă la conducta senzorului
- Pasul 12: O peletă pe osciloscop și calibrare
- Pasul 13: Mai multe …
Video: Cronograf cu pușcă cu aer, cronoscop. Imprimat 3D: 13 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:42
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
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
Iată fișierele Gerber
Pasul 5: lipiți PC-ul
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
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
Instalați o bandă și conectați PCB și LCD împreună
Pasul 8: 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
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
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
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
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 …
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:
Arduino pentru Nerf: Cronograf și Contor de fotografii: 28 de pași (cu imagini)
Arduino pentru Nerf: Cronograf și Contor de fotografii: Instrucțiunile mele anterioare au acoperit elementele de bază ale detectării vitezei săgeții folosind un emițător și un detector cu infraroșu. Acest proiect face un pas mai departe, folosind o placă de circuite imprimate, afișaj și baterii pentru a face un contor de muniție portabil și cronograf
Aer mai rece! pentru mai puțini bani! Supraalimentarea aparatului de aer condiționat !!: 14 pași (cu imagini)
Aer mai rece! pentru mai puțini bani! Supraîncărcarea aparatului de aer condiționat !!: Puteți obține o răcire îmbunătățită și costuri mai mici de energie cu această metodă. Un aparat de aer condiționat funcționează prin comprimarea unui agent frigorific gazos până când se condensează în condensatorul (l-ați ghicit) din partea exterioară. Acest lucru eliberează căldură în exterior. Atunci când
Pușcă Knex: 12 pași
Knex Rifle: aceasta este pușca knex pe care am arătat-o ca forum. a fost conceput în principal pentru aspect și are o gamă OK. butoiul său este detașabil și reduce autonomia atunci când este atașat. are un mâner de transport care este, de asemenea, detașabil și un bipod. folosește o buncăr de bază pentru a încărca ca
Pușca Storm 220 V1.7 Knex Bolt Action: 10 pași
Pușca Storm 220 V1.7 Knex Bolt Action: Aceasta este pistolul meu nou Knex, Storm 220. A fost conceput în principal pentru aspect, dar funcționează bine și are o autonomie decentă. Nu voi spune să fii drăguț, chiar dacă acesta este primul meu instructabil, deoarece cred că oamenii au dreptul la opiniile lor
Pușcă Knex „XFN Snowflak3”: 9 pași
"XFN Snowflak3" Knex Rifle: XFN Snowflak3: arma care a avut același concept general de doi ani. 8 coli de carton ondulat) Destul de ușor de făcut, simplu