Sommario:
- Passaggio 1: funzionalità
- Fase 2: Teoria del funzionamento e dell'accuratezza
- Passaggio 3: schema e elenco delle parti
- Passaggio 4: file Gerber PCB
- Passaggio 5: saldare il PCB
- Passaggio 6: programmazione dell'Atmega328p
- Passaggio 7: display LCD
- Passaggio 8: file STL
- Passaggio 9: ENCODER ROTANTE
- Passaggio 10: tubo sensore
- Passaggio 11: alternativa al tubo del sensore
- Passaggio 12: un pellet sull'oscilloscopio e calibrazione
- Passaggio 13: altro…
Video: Cronografo per carabina ad aria compressa, cronoscopio. Stampa 3D: 13 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
Ciao a tutti, oggi rivisiteremo un progetto che ho fatto nel 2010. Un cronografo per fucile ad aria compressa. Questo dispositivo ti dirà la velocità di un proiettile. Palline, pallini o anche pallina di plastica morbida ad aria.
Nel 2010 ho comprato un fucile ad aria compressa per divertimento. Colpiva lattine, bottiglie, mira. So che la velocità di questa pistola era al massimo di 500 piedi/s. Perché è la legge del Canada. Sono disponibili alcuni fucili ad aria compressa più potenti, ma è necessario disporre di una licenza e non è possibile acquistarli su Walmart.
Ora che avevo questa licenza, potrei comprarne un'altra. Ma per farla breve, la stessa pistola era disponibile per gli Stati Uniti a 1000 piedi/s. CHE COSA!? La stessa pistola? si… In Canada il tratto ha un buco e la molla è più morbida.
La prima cosa da fare è riempire il buco. Questo è quello che ho fatto con la saldatura. La prossima cosa da fare è stata ordinare una molla di ricambio. Ma aspetta… qual è la velocità attuale del mio nuovo giocattolo? La primavera è davvero necessaria? Non lo so e voglio saperlo. Voglio saperlo ora ma come?
Ecco perché ho realizzato questo progetto. Tutto ciò di cui avevo bisogno erano 2 sensori, un uC e un display e siamo in affari.
La scorsa settimana, ho visto il mio vecchio cronografo blu su uno scaffale e mi sono detto: "Perché non condividere questo e fare un'istruzione con esso?" E a proposito, potremmo aumentare la precisione e aggiungere un indicatore della batteria. Metti 1 pulsante invece di 2 per on/off. Tutto il montaggio di superficie. Siamo ormai nel 2020!
Ecco fatto… cominciamo!
Passaggio 1: funzionalità
-Velocità pellet
-Velocità
-20 mhz in esecuzione, enorme precisione
-Spegnimento automatico
-Tensione della batteria visualizzata
-schema disponibile
-pc disponibile
-elenco delle parti disponibile
-STL disponibile
-Codice C disponibile
Fase 2: Teoria del funzionamento e dell'accuratezza
-Abbiamo un uC in esecuzione a 20Mhz. L'oscillatore utilizzato è un TCX0 +-2,5 ppm
-Abbiamo 2 sensori a 3 pollici di distanza l'uno dall'altro.
-Il proiettile ha colpito il primo sensore. uC inizio conteggio (timer1)
-Il proiettile ha colpito il secondo sensore. uC smetti di contare.
-uC controlla il valore del timer1, fa i calcoli e visualizza la velocità e la velocità.
Sto usando timer1 a 16 bit + il flag di overflow tov1. 17 bit totali per 131071 "tic" per un conteggio completo.
1/20 mhz = 50 ns. Ogni tic è 50ns
131071 x 50 ns = 6,55355 ms per fare 3 pollici.
6,55355 ms x 4 = 26,21 ms per eseguire 12 pollici.
1/26.21 ms = 38.1472637 piedi/s
Questa è la velocità più lenta che il dispositivo può misurare.
Perché 20MHz? Perché non usare l'8 mhz interno o anche un cristal?
Il mio primo dispositivo utilizzava l'oscillatore interno. Funzionava ma questo non era abbastanza preciso. La variazione è troppo grande. Un cristal è migliore ma la temperatura varia di frequenza. Non possiamo fare un dispositivo di misurazione accurato con quello. Inoltre, più la frequenza è alta, più tic verranno conteggiati per la stessa velocità. Il campionamento sarà migliore per avere una precisione molto buona. Poiché un tic non è divisibile, la perdita è minima se il ciclo di lavoro è rapido.
A 20 MHz abbiamo passi di 50 ns. Sappiamo quanto sono precisi 50 ns per un proiettile a 38 piedi/s.
38.1472637 ft/s divide per 131071 = 0, 000291042 piedi
0, 0003880569939956207 piedi x 12 = 0, 003492512 pollici
1/0, 003492512 = 286,37 ". In altre parole. A 50 piedi/s abbiamo una precisione di +- 1/286 " o +- 0, 003492512 pollici
Ma se il mio oscillatore è il peggiore e funziona a 20 mhz +2,5 ppm va bene? Scopriamolo…
2,5 ppm di 20 000 000 è: (20000000/1000000) x 2,5 = 20000050 Hz
Quindi, nel peggiore dei casi, abbiamo 50 clock in più sui 20 mhz. Sono 50 orologio su 1 secondo. Quanti tic in più sul timer1 se il pellet sta facendo la stessa velocità (38,1472637 piedi/s o 6,55 ms)?
1/2000050 = 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 piedi/sec
Quindi abbiamo 38.14735907 piedi/s invece di 38.1472637 piedi/s
Ora sappiamo che 2,5 ppm non influiscono sul risultato.
Ecco qualche esempio di diversa velocità
Per 1000 piedi/s
1000 piedi/s x 12 è 12000 pollici/s
1 secondo per 12000 "quanto tempo per fare 3"? 3x1/2000 = 250 us secondi
250 us / 50 ns = 5000 tic.
Timer1 sarà a 5000
uC eseguire i calcoli e viene visualizzato 1000 piedi/s. Fin qui tutto bene
Per 900 piedi/s
900 piedi/s è 10800 /s
3x1/10800 = 277,77 us
277, 77 ns / 50 ns = 5555, 5555 tic
Il timer 1 sarà a 5555
uC fai i conti e verrà visualizzato 900, 09 invece di 900
Come mai ? perché il timer 1 è a 5555 e 0, 5555 è perso. I tic sul timer non sono divisibili.
Abbiamo un errore per 0, 09 su 900 ft/s
0, 09/900x100 = 0, 01% solo errore
Per 1500 piedi/s 1500 piedi/s è 18000 /s 3x1/10800 = 166,66 us
166,66 us / 50 ns = 3333,333 tic Il timer 1 sarà a 3333
uC fai i conti e verrà visualizzato 1500.15 invece di 1500 è.15/1500x100= 0, 01%
Per 9000 piedi/s
9000 x 12 = 180000 pollici/s
3x1/180000 = 27.7777 noi
27,77 us / 50 ns = 555, 555
Timer1 sarà a 555 e verrà visualizzato 4/(1/555x50ns) 9009, verrà visualizzato 00
Qui l'errore è di 9 piedi/s su 9000 = 0, 1%
Come puoi vedere, l'errore % aumenta quando la velocità è maggiore. Ma resta < 0,1%
Questi risultati sono molto buoni.
Ma la precisione non è lineare. A 10.000 piedi/s è 0, 1%. La buona notizia è che non testiamo mai un pellet da 10.000 piedi/s.
Un'altra cosa da tenere a mente. Quando si verifica un interrupt, uC termina sempre l'ultima istruzione prima di entrare in interrupt. Questo è normale e tutti gli uC lo fanno. Se codi arduino, in C o anche in assembler. La maggior parte delle volte aspetterai in un ciclo eterno… di aspettare. Il problema è che in un ciclo trascorriamo 2 cicli. Normalmente questo non è importante. Ma nel nostro caso. S, ogni tic è importante. Diamo un'occhiata a un ciclo infinito:
assemblatore:
ciclo continuo:
ciclo rjmp
In C:
mentre (1){}
Infatti il compilatore C usa l'istruzione rjmp. RJMP è di 2 cicli.
Ciò significa che se l'interruzione si verifica nel primo ciclo, perdiamo un ciclo (tic) (50 ns).
Il mio modo per risolvere il problema è aggiungere molte istruzioni nop nel ciclo. NOP è 1 ciclo.
ciclo continuo:
no
no
no
no
no
ciclo rjmp
Se l'interrupt si verifica su un'istruzione nop. Stiamo bene. Se succede al secondo ciclo di istruzione rjmp siamo a posto. Ma se succede al primo ciclo di istruzioni rjmp, perderemo un tic. Sì, sono solo 50 ns ma come puoi vedere sopra, 50 ns su 3 pollici non sono niente. Non possiamo correggerlo via software perché non sappiamo quando si verifica esattamente l'interruzione. Ecco perché nel codice vedrai molte istruzioni nop. Ora sono abbastanza sicuro che l'interruzione cadrà su un'istruzione nop. Se aggiungo 2000 nop ho 0, 05% per cadere sull'istruzione rjmp.
Un'altra cosa da tenere a mente. Quando si verifica l'interruzione. Il compilatore fa molti push and pull. Ma è sempre lo stesso numero. Quindi ora possiamo fare una correzione software.
Per concludere su questo:
La precisione per un pellet medio di 1000 ft/s è 0, 01%
100 volte più preciso dell'altro 1% sul mercato. La frequenza è più alta e con TCXO, più accurata
Ad esempio, l'1% di 1000 piedi/s è più o meno 10 piedi/s. È una differenza enorme.
Passaggio 3: schema e elenco delle parti
Qui ho implementato il mio circuito on/off con un solo pulsante. (vedi la mia ultima istruzione) Questo circuito è molto utile e funziona molto bene.
Sto usando un atmega328p. Questo è programmato in C.
Il display è uno standard lcd a 2 linee compatibile con HD44780. Viene utilizzata la modalità a 4 bit.
Un regolatore da 3,3 V viene utilizzato per fornire tensione al TCXO 20 mhz.
D1 è per la retroilluminazione dell'affissione a cristalli liquidi. Opzionale. La batteria durerà più a lungo se non installi D1.
Tutti i resistori e i cappucci sono in confezione 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,2 k
R5 160
R6 160
R7 1M
R8 1M
U1 MIC5317-3.3 MIC5317 SOT23-5
U2 DMG6601LVT DMG6601LVT SOT23-6
Display lcd 2 righe HD44780. Non è necessario acquistare il modulo i2c.
Sensori:
2x Emettitore OP140A
2x Ricevitore OPL530
Encoder: PEC11R-4215K-S0024 *Non dimenticare di aggiungere 4 resistori da 10k e 2x.01uf per il filtro dell'encoder. vedi l'immagine sotto
Passaggio 4: file Gerber PCB
Ecco i file gerber
Passaggio 5: saldare il PCB
Con l'aiuto schematico, salda tutti i tuoi componenti sul pcb. Ogni parte o scritta su pcb, r1, r2… e così via.
Non ho installato D1. Questo è per la retroilluminazione lcd. È bello ma la durata della batteria ne risente. Quindi scelgo di tenere spenta la retroilluminazione dell'LCD.
Passaggio 6: programmazione dell'Atmega328p
Controllare qui al punto 12 per programmare l'atmega328p. Fornisco qui il file.hex per questo.
Ecco il programma avrdude pronto per programmare file batch. Fai clic solo sul programma usbasp.bat e il tuo usbasp è installato correttamente. Tutto verrà eseguito automaticamente, incluso il bit del fusibile.
1drv.ms/u/s!AnKLPDy3pII_vXaGPIZKMXxaXDul?e…
In questo progetto condivido anche il codice sorgente C. Tieni presente che alcune note possono essere in francese.https://1drv.ms/u/s!AnKLPDy3pII_vXUMXHdxajwGRFJx?e…
Passaggio 7: display LCD
Installa del nastro e collega pcb e lcd insieme
Passaggio 8: file STL
file stl
1drv.ms/u/s!AnKLPDy3pII_vgezy0i0Aw3nD-xr?e…
È necessario il supporto per custodia, tubo sensore e supporto per fucile.
Ho stampato tutto a 0,2 mm di altezza.
Passaggio 9: ENCODER ROTANTE
Questo codificatore rotante è collegato al connettore ISP. serve per modificare il peso del pellet e per accendere e spegnere il dispositivo.
vcc isp pin 2 (resistenza di pull up)
Il terminale A (giallo) va al pin 1 dell'ISP
Il terminale B (verde) va al pin 3 dell'ISP
Terminale C (terra) isp pin 6
Sto aggiungendo 2 immagini per vedere la differenza tra avere un filtro e nessun filtro. Puoi vedere facilmente la differenza tra i due.
Il pulsante va al connettore SW della scheda.
Passaggio 10: tubo sensore
IMPORTANTE:
Il tubo del sensore deve essere nero e il ricevitore del sensore deve essere nascosto
Il mio primo tentativo è stato quello di avere una bella pipa rossa. Ma questo è complicato! Non funzionava affatto. Ho capito che la luce esterna entrava dalla plastica e il sensore del ricevitore era sempre acceso.
Per avere un buon risultato non avevo scelta di cambiare il colore in nero.
Installa il ricevitore sopra. E nascondi la plastica trasparente con vernice nera, nastro adesivo o gomma, silicone nero.
Installare l'emettitore sul fondo. Controllare con una penna se i sensori rispondono bene. Forse il foro dell'emettitore dovrà essere allargato un po'. dipenderà dalla calibrazione della stampante.
Ho anche un risultato migliore all'ombra. Evitare la luce solare diretta.
Passaggio 11: alternativa al tubo del sensore
Se non hai una stampante 3D, puoi fare lo stesso con un tubo di rame. Funzionerà molto bene per. La cosa difficile da fare è il foro a esattamente 3 pollici e ricevitore ed emettitore devono essere allineati.
Passaggio 12: un pellet sull'oscilloscopio e calibrazione
Questo è un vero pellet che passa attraverso il tubo. La sonda 1 gialla è il sensore 1. La sonda 2 viola è il sensore 2.
Il tempo/div è 50 us.
Possiamo contare 6 divisioni di 50us. 50 us x 6 = 300 us (per 3 pollici). 300 us x 4 = 1.2 ms per 1 piede
1/1,2 ms = 833,33 piedi/s
Possiamo anche vedere che il sensore è normalmente a 5v. E possiamo bloccare la luce dell'emettitore, il sensore scende a 0.
È il modo in cui th uC avvia e ferma il suo contatore (timer1)
Ma per sapere esattamente se la velocità fosse accurata, avevo bisogno di un modo per misurarlo.
Per eseguire la calibrazione del software e testare la precisione di questo dispositivo, ho utilizzato un oscillatore di riferimento da 10 mhz. Vedi il mio GPSDO su altri istruibili.
Alimento un altro atmega328 con questo 10 mhz. E programma questo in assembler per inviarmi 2 impulsi ogni volta che premo un pulsante per simulare un pellet. Esattamente come abbiamo visto in foto ma invece ad avere un vero pellet era un altro uC che mi mandava 2 impulsi.
Ad ogni pressione del pulsante è stato inviato 1 impulso ed esattamente 4 ms dopo l'invio di un altro impulso.
In questo modo, sono in grado di bilanciare il compilatore software per visualizzare sempre 1000 piedi/s.
Passaggio 13: altro…
Questo è il mio primo prototipo del 2010.
Per qualsiasi domanda o segnalazione di errore puoi inviarmi un'e-mail. inglese o francese. Farò del mio meglio per aiutare.
Consigliato:
Stampa di assegni senza software speciale o stampante con MS Excel (stampa assegni bancari): 6 passaggi
Stampa di assegni senza software speciale o stampante con MS Excel (stampa di assegni bancari): questa è una semplice cartella di lavoro Excel, che sarà molto utile per qualsiasi azienda per scrivere molti assegni bancari in secondo luogo ai loro fornitori. Non hai bisogno di stampanti o software speciali, ti serve solo un computer con MS Excel e una stampante normale. Sì, ora puoi
Sistema per il monitoraggio della qualità dell'aria per l'inquinamento da particolato: 4 passaggi
Sistema per il monitoraggio della qualità dell'aria per l'inquinamento da particolato: INTRO: 1 In questo progetto mostro come costruire un rilevatore di particelle con visualizzazione dei dati, backup dei dati su scheda SD e IOT. Visivamente un display ad anello in neopixel indica la qualità dell'aria. 2 La qualità dell'aria è una preoccupazione sempre più importante per
Arduino per Nerf: Cronografo e Contacolpi: 28 Passi (con Immagini)
Arduino per Nerf: cronografo e contatore di colpi: il mio precedente Instructable trattava le basi del rilevamento della velocità del dardo utilizzando un emettitore e un rilevatore a infrarossi. Questo progetto fa un ulteriore passo avanti, utilizzando un circuito stampato, un display e batterie per creare un contatore di munizioni e un cronografo portatile
Aria più fredda! per meno soldi! Sovralimentazione del condizionatore d'aria!!: 14 passaggi (con immagini)
Aria più fredda! per meno soldi! Sovralimentazione del condizionatore d'aria!!: con questo metodo è possibile ottenere un raffreddamento migliore e ridurre i costi energetici. Un condizionatore d'aria funziona comprimendo un refrigerante gassoso fino a quando non si condensa nel condensatore (avete indovinato) sul lato esterno. Questo rilascia calore all'esterno. Poi quando quello
Mitra ad aria compressa Marshmallow: 8 passaggi
Mitragliatrice ad aria compressa Marshmallow: in questo tutorial, ti mostrerò come realizzare una mitragliatrice ad aria compressa. È facile e veloce da realizzare