Tabla de contenido:

Cronógrafo de rifle de aire, cronógrafo. Impreso en 3D: 13 pasos
Cronógrafo de rifle de aire, cronógrafo. Impreso en 3D: 13 pasos

Video: Cronógrafo de rifle de aire, cronógrafo. Impreso en 3D: 13 pasos

Video: Cronógrafo de rifle de aire, cronógrafo. Impreso en 3D: 13 pasos
Video: Bullet Speed Meter | Homemade Chronograph 2024, Noviembre
Anonim
Image
Image
Característica
Característica

Hola a todos, hoy volveremos a visitar un proyecto que hice en 2010. Un cronógrafo de rifle de aire. Este dispositivo te dirá la velocidad de un proyectil. Pellet, BB o incluso bola de plástico BB air soft.

En 2010 compré un rifle de aire por diversión. Estaba golpeando latas, botellas, puntería. Sé que la velocidad de esta pistola era máxima de 500 pies / s. Porque es la ley de Canadá. Hay disponibles algunos rifles de aire más fuertes, pero necesita tener una licencia y no puede comprarlos en Walmart.

Ahora que tenía esta licencia, podría comprar otra. Pero cuento, la misma arma estaba disponible para los EE. UU. A 1000 pies / s. ¿¡QUÉ!? ¿La misma arma? sí… En Canadá, el trazo tiene un agujero y el resorte es más suave.

Lo primero que debe hacer es llenar el agujero. Eso es lo que hice con la soldadura. Lo siguiente que debía hacer era pedir un resorte de repuesto. Pero espera … ¿cuál es la velocidad actual de mi nuevo juguete? ¿Es realmente necesaria la primavera? No lo sé y quiero saberlo. Quiero saberlo ahora pero ¿cómo?

Por eso hice este proyecto. Todo lo que necesitaba eran 2 sensores, un uC y una pantalla y estamos en el negocio.

La semana pasada, vi mi viejo cronógrafo azul en un estante y me hablo a mí mismo: "¿Por qué no compartir esto y hacer un instructivo con él?" Y, por cierto, podríamos aumentar la precisión y agregar un indicador de batería. Ponga 1 botón en lugar de 2 para encender / apagar. Todo montaje en superficie. ¡Estamos en 2020!

Así que ahí está … ¡comencemos!

Paso 1: Característica

-Velocidad de pellet

-Velocidad

-20 mhz en funcionamiento, gran precisión

-Apagado automático

-Se muestra el voltaje de la batería

-esquemático disponible

-pcb disponible

-lista de piezas disponible

-STL disponible

-Código C disponible

Paso 2: teoría de funcionamiento y precisión

-Tenemos un uC funcionando a 20Mhz. El oscilador utilizado es un TCX0 + -2.5 ppm

-Tenemos 2 sensores a 3 pulgadas de distancia entre sí.

-El proyectil golpeó el primer sensor. uC comienza a contar (temporizador1)

-El proyectil golpeó el segundo sensor. uC deja de contar.

-uC comprueba el valor del temporizador1, haz los cálculos y muestra la velocidad y la velocidad.

Estoy usando el temporizador 1 de 16 bits + el indicador de desbordamiento tov1. 17 bits en total para 131071 "tic" para un recuento completo.

1/20 mhz = 50 ns. Cada tic es 50ns

131071 x 50 ns = 6.55355 ms para hacer 3 pulgadas.

6.55355 ms x 4 = 26.21 ms para hacer 12 pulgadas.

1 / 26,21 ms = 38,1472637 pies / s

Esta es la velocidad más lenta que puede medir el dispositivo.

¿Por qué 20 mhz? ¿Por qué no usar los 8 mhz internos o incluso un cristal?

Mi primer dispositivo estaba usando el oscilador interno. Estaba funcionando, pero este no era lo suficientemente preciso. La variación es demasiado grande. Un cristal es mejor pero la temperatura varía en frecuencia. No podemos hacer un dispositivo de medición preciso con eso. Además, cuanto más alta sea la frecuencia, más tic se contarán para la misma velocidad. El muestreo será mejor para tener una muy buena precisión. Debido a que un tic no es divisible, la pérdida es pequeña si el ciclo de trabajo es rápido.

A 20 MHz tenemos pasos de 50 ns. ¿Sabemos qué precisión tiene 50 ns para un proyectil a 38 pies / s?

38.1472637 pies / s dividir por 131071 = 0, 000291042 pies

0, 0003880569939956207 pies x 12 = 0, 003492512 pulgadas

1/0, 003492512 = 286,37 ". En otras palabras. A 50 pies / s tenemos una precisión de + - 1/286" o + - 0, 003492512 pulgadas

Pero si mi oscilador es el peor y funciona a 20 mhz +2,5 ppm, ¿está bien? Vamos a averiguar…

2,5 ppm de 20000000 es: (20000000/1000000) x 2,5 = 20000050 Hz

En el peor de los casos, tenemos 50 relojes más en 20 mhz. Son 50 en 1 segundo. ¿Cuántos tic más en el temporizador1 si el pellet está a la misma velocidad (38.1472637 pies / so 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 pies / s

Entonces tenemos 38.14735907 pies / s en lugar de 38.1472637 pies / s

Ahora sabemos que 2,5 ppm no afecta el resultado.

Aquí hay algunos ejemplos de diferentes velocidades.

Por 1000 pies / s

1000 pies / s x 12 es 12000 pulgadas / s

1 segundo para 12000 "¿cuánto tiempo para hacer 3"? 3x1 / 12000 = 250 segundos

250 us / 50 ns = 5000 tic.

Timer1 estará en 5000

uC haga los cálculos y se mostrará 1000 pies / s. Hasta aquí todo bien

Por 900 pies / s

900 pies / s son 10800 / s

3x1 / 10800 = 277,77 nosotros

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

El temporizador 1 estará en 5555

uC haga los cálculos y se mostrará 900, 09 en lugar de 900

Por qué ? porque el temporizador 1 está en 5555 y 0, 5555 se pierde. Tic en el temporizador no es divisible.

Tenemos un error de 0, 09 en 900 pies / s

0, 09 / 900x100 = 0, 01% de error solamente

Para 1500 pies / s 1500 pies / s es 18000 / s 3x1 / 10800 = 166,66 nosotros

166,66 us / 50 ns = 3333,333 tic El temporizador 1 estará en 3333

uC haga los cálculos y se mostrará 1500.15 en lugar de 1500 es.15 / 1500x100 = 0, 01%

Por 9000 pies / s

9000 x 12 = 180000 pulgadas / s

3x1 / 180000 = 27,7777 nosotros

27,77 us / 50 ns = 555, 555

El temporizador1 estará en 555 y se mostrará 4 / (1 / 555x50ns) 9009, se mostrará 00

Aquí el error es de 9 pies / s en 9000 = 0, 1%

Como puede ver, el% de error aumenta cuando la velocidad es mayor. Pero quédate <0,1%

Esos resultados son muy buenos.

Pero la precisión no es lineal. A 10000 pies / s es 0,1%. La buena noticia es que nunca probamos un balín de 10.000 pies / s.

Otra cosa a tener en cuenta. Cuando ocurre una interrupción, uC siempre termina la última instrucción antes de entrar en interrupción. Esto es normal y todos los uC hacen esto. Si codifica arduino, en C o incluso en ensamblador. La mayoría de las veces esperará en un bucle eterno … para esperar. El problema es que en un bucle pasamos 2 ciclos. Normalmente esto no es importante. Pero en nuestro caso. SÍ, cada tic es importante. Veamos un bucle infinito:

ensamblador:

círculo:

bucle rjmp

C ª:

mientras (1) {}

De hecho, el compilador de C usa la instrucción rjmp. RJMP es de 2 ciclos.

Eso significa que si la interrupción ocurre en el primer ciclo, perdemos un ciclo (tic) (50ns).

Mi forma de solucionarlo es agregar muchas instrucciones nop en el ciclo. NOP es 1 ciclo.

círculo:

nop

nop

nop

nop

nop

bucle rjmp

Si la interrupción ocurre en una instrucción nop. Estamos bien. Si sucede en el segundo ciclo de instrucción rjmp, estamos bien. Pero si sucede en el primer ciclo de instrucción rjmp, perderemos un tic. Sí, son solo 50 ns, pero como puede ver arriba, 50 ns en 3 pulgadas no es nada. No podemos corregir esto por software porque no sabemos cuándo ocurre exactamente la interrupción. Es por eso que en el código verá muchas instrucciones nop. Ahora estoy bastante seguro de que la interrupción caerá en una instrucción nop. Si agrego 2000 nop, tengo 0, 05% para caer en la instrucción rjmp.

Otra cosa a tener en cuenta. Cuando suceda una interrupción. El compilador hace muchos tira y afloja. Pero siempre es el mismo número. Entonces ahora podemos hacer una corrección de software.

Para concluir sobre esto:

La precisión para un pellet promedio de 1000 pies / s es 0, 01%

100 veces más preciso que otro 1% del mercado. La frecuencia es más alta y con TCXO, más precisa

Por ejemplo, el 1% de 1000 pies / s es más o menos 10 pies / s. Es una gran diferencia.

Paso 3: Esquema y lista de piezas

Lista esquemática y de piezas
Lista esquemática y de piezas

Aquí implementé mi circuito de encendido / apagado de un botón. (ver mi último instructable) Este circuito es muy útil y funciona muy bien.

Estoy usando un atmega328p. Éste está programado en C.

La pantalla es una lcd estándar de 2 líneas compatible con HD44780. Se utiliza el modo de 4 bits.

Se utiliza un regulador de 3.3v para proporcionar voltaje al TCXO 20mhz.

D1 es para retroiluminación lcd. Opcional. La batería durará más si no instala D1.

Todas las resistencias y tapas son paquete 0805

C1.1uf 25v

C2 1uf 16v

C3 2,2 uf 10 v

C4.1uf

C5.1uf

C6.1uf

C7 1 uf

C8.1uf

C9.1uf

C10.1uf

D1 1n4148 SM SOT123

D2 5,1 v 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

Pantalla lcd de 2 líneas HD44780. No es necesario comprar el módulo i2c.

Sensores:

2x emisor OP140A

2x Receptor OPL530

Codificador: PEC11R-4215K-S0024 * No olvide agregar 4 resistencias de 10k y 2x.01uf para hacer el filtro del codificador. ver la imagen de abajo

Paso 4: Archivo Gerber de PCB

Archivo Gerber de PCB
Archivo Gerber de PCB
Archivo Gerber de PCB
Archivo Gerber de PCB
Archivo Gerber de PCB
Archivo Gerber de PCB
Archivo Gerber de PCB
Archivo Gerber de PCB

Aquí están los archivos gerber

Paso 5: suelde su pcb

Suelde su pcb
Suelde su pcb
Suelde su pcb
Suelde su pcb
Suelde su pcb
Suelde su pcb

Con ayuda esquemática, suelde todos sus componentes en la PCB. Cada parte o escrito en pcb, r1, r2… y así sucesivamente.

No tengo instalado D1. Esto es para la luz de fondo de la pantalla LCD. Es hermoso, pero la duración de la batería se ve afectada. Así que elijo mantener apagada la luz de fondo de la pantalla LCD.

Paso 6: Programación del Atmega328p

Programando el Atmega328p
Programando el Atmega328p

Consulte aquí en el paso 12 para programar el atmega328p. Proporciono aquí el archivo.hex para esto.

Aquí está el programa avrdude listo para programar archivos por lotes. Solo haga clic en el programa usbasp.bat y su usbasp se instalará correctamente. Todo se hará automáticamente, incluido el fusible.

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

En este proyecto también estoy compartiendo el código fuente de C. Tenga en cuenta que alguna nota puede estar en francés.https://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…

Paso 7: pantalla LCD

Pantalla LCD
Pantalla LCD
Pantalla LCD
Pantalla LCD

Instale un poco de cinta y conecte el pcb y el lcd juntos

Paso 8: archivo STL

Archivo STL
Archivo STL
Archivo STL
Archivo STL
Archivo STL
Archivo STL

archivo stl

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

Se necesita soporte para la caja, el tubo del sensor y el soporte del rifle.

He impreso todo a 0,2 mm de altura.

Paso 9: CODIFICADOR ROTATIVO

CODIFICADOR ROTATORIO
CODIFICADOR ROTATORIO
CODIFICADOR ROTATORIO
CODIFICADOR ROTATORIO
CODIFICADOR ROTATORIO
CODIFICADOR ROTATORIO

Este codificador rotatorio está conectado al conector isp. se utiliza para cambiar el peso del pellet y para encender y apagar el dispositivo.

vcc isp pin 2 (resistencia de extracción)

El terminal A (amarillo) va al pin 1 del ISP

La terminal B (verde) va al pin 3 del ISP

Terminal C (tierra) isp pin 6

Estoy agregando 2 imágenes para ver la diferencia entre tener un filtro y no tener filtro. Puedes ver fácilmente la diferencia entre ambos.

El pulsador va al conector SW de la PCB.

Paso 10: tubo sensor

Tubo sensor
Tubo sensor
Tubo sensor
Tubo sensor
Tubo sensor
Tubo sensor

IMPORTANTE:

La tubería del sensor debe ser negra y el receptor del sensor debe estar oculto

Mi primer intento fue tener una hermosa pipa roja. ¡Pero esto es complicado! No estaba funcionando en absoluto. Me di cuenta de que la luz exterior estaba entrando por el plástico y el sensor del receptor siempre estaba encendido.

Para obtener un buen resultado, no tuve opción de cambiar el color a negro.

Instale el receptor en la parte superior. Y esconda el plástico transparente con pintura negra, cinta o goma de mascar, silicona negra.

Instale el emisor en la parte inferior. Compruebe con un bolígrafo si los sensores responden bien. Tal vez sea necesario agrandar un poco el orificio del emisor. dependerá de la calibración de su impresora.

También tengo un mejor resultado en la sombra. Evite la luz solar directa.

Paso 11: Alternativa de tubería de sensor

Alternativa de tubería de sensor
Alternativa de tubería de sensor
Alternativa de tubería de sensor
Alternativa de tubería de sensor

Si no tiene una impresora 3D, puede hacer lo mismo con un tubo de cobre. Funcionará muy bien. Lo difícil de hacer es el orificio a exactamente 3 pulgadas y el receptor y el emisor deben estar alineados.

Paso 12: Pellet sobre osciloscopio y calibración

Una pelotilla sobre osciloscopio y calibración
Una pelotilla sobre osciloscopio y calibración

Este es un verdadero pellet que pasa tirar la tubería. La sonda 1 amarilla es el sensor 1. La sonda 2 violeta es el sensor 2.

El tiempo / div es 50 us.

Podemos contar 6 divisiones de 50us. 50 us x 6 = 300 us (para 3 pulgadas). 300 us x 4 = 1.2 ms por 1 pie

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

También podemos ver que el sensor está normalmente a 5v. Y podemos bloquear la luz del emisor, el sensor cae a 0.

Es la forma en que el uC comienza y detiene su cont (temporizador1)

Pero para saber exactamente si la velocidad era precisa, necesitaba una forma de medir esto.

Para realizar la calibración del software y probar la precisión de este dispositivo, utilicé un oscilador de referencia de 10 mhz. Vea mi GPSDO en otro instructable.

Alimento otro atmega328 con este 10 mhz. Y programe este en ensamblador para que me envíe 2 pulsos cada vez que presione un botón para simular un pellet. Exactamente como vimos en la imagen, pero en lugar de tener una pastilla real, fue otro uC enviándome 2 pulsos.

Cada vez que se presionaba un botón, se enviaba 1 pulso y exactamente 4 ms después de que se enviaba otro pulso.

De esta manera, puedo equilibrar el compilador de software para que siempre se muestren 1000 pies / s.

Paso 13: Más…

Más…
Más…
Más…
Más…

Este es mi primer prototipo de 2010.

Para cualquier pregunta o informe de error, puede enviarme un correo electrónico. Ingl `es` o frances. Haré todo lo posible para ayudar.

Recomendado: