Tabla de contenido:
- Paso 1: Característica
- Paso 2: teoría de funcionamiento y precisión
- Paso 3: Esquema y lista de piezas
- Paso 4: Archivo Gerber de PCB
- Paso 5: suelde su pcb
- Paso 6: Programación del Atmega328p
- Paso 7: pantalla LCD
- Paso 8: archivo STL
- Paso 9: CODIFICADOR ROTATIVO
- Paso 10: tubo sensor
- Paso 11: Alternativa de tubería de sensor
- Paso 12: Pellet sobre osciloscopio y calibración
- Paso 13: Más…
Video: Cronógrafo de rifle de aire, cronógrafo. Impreso en 3D: 13 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
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
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
Aquí están los archivos gerber
Paso 5: 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
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
Instale un poco de cinta y conecte el pcb y el lcd juntos
Paso 8: 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
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
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
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
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…
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:
Cronógrafo Nerf y barril de velocidad de disparo: 7 pasos
Nerf Chronograph y Rate of Fire Barrel: Introducción Como retocador, siempre es muy satisfactorio ver los resultados numéricos de tus retoques. Muchos de nosotros hemos modificado las pistolas Nerf antes y ¿a quién no le encanta arrojar trozos de espuma por la casa a más de 100 fps? Después de modificar muchos Nerf g
Detección de contaminación del aire + filtración de aire: 4 pasos
Detección de contaminación del aire + filtración del aire: los estudiantes (Aristobulus Lam, Victor Sim, Nathan Rosenzweig y Declan Loges) de German Swiss International School trabajaron con el personal de MakerBay para producir un sistema integrado de medición de la contaminación del aire y la eficacia de la filtración del aire. Esta
Arduino para Nerf: cronógrafo y contador de disparos: 28 pasos (con imágenes)
Arduino para Nerf: cronógrafo y contador de disparos: mi Instructable anterior cubría los conceptos básicos de la detección de la velocidad de los dardos utilizando un emisor y un detector de infrarrojos. Este proyecto va un paso más allá, utilizando una placa de circuito impreso, pantalla y baterías para hacer un contador de munición portátil y un cronógrafo
Controlador Arduino HRV (Intercambiador de aire doméstico) con economizador de aire: 7 pasos (con imágenes)
Controlador Arduino HRV (Intercambiador de aire doméstico) con economizador de aire: Controlador Arduino HRV con economizador de aire Así que mi historia con este proyecto es que vivo en Minnesota y mi placa de circuito está frita en mi LifeBreath 155Max HRV. No quería pagar los $ 200 por uno nuevo, siempre quería algo con un economizador de aire sin
¡Aire más frío! por menos dinero! ¡Sobrealimentación del aire acondicionado!: 14 pasos (con imágenes)
¡Aire más frío! por menos dinero! ¡¡Sobrealimentación del acondicionador de aire !!: Puede obtener un enfriamiento mejorado y reducir los costos de energía con este método. Un acondicionador de aire funciona comprimiendo un refrigerante gaseoso hasta que se condensa en el condensador (lo adivinó) en el lado exterior. Esto libera calor al exterior. Entonces cuando eso