Medir la velocidad de Nerf dardos (4 / 4 paso)

Paso 4: electrónica

La velocidad del dardo se mide mediante dos barreras de luz que se encuentran en el frente y el extremo del cañón. Las barreras de luz consisten en un LED infrarrojo (Osram LD 274-3) y un transistor de la foto (Q3 y Q4) (SFH 3100 F) cada uno. Los LEDs son los transistores de la foto de irradiación a través del cañón (ver imagen) y permiten una corriente entre el VCC de 5V y tierra, respectivamente. Esto conduce a una señal mensurable en A1 y A0. El transistor de la foto también contienen un filtro de luz natural que mantiene la luz ambiental de interferir con las mediciones.

Cuando un dardo pasa la barrera de luz IR-LED de bloqueo de la corriente cae instantáneamente a cero. En este momento el microcontrolador empieza a contar los microsegundos hasta que se bloquea el segundo LED. Como sabemos la distancia entre los LEDs podemos calcular la velocidad del dardo.
El valor es enviar a un chip de controlador de LED (SAA 1064) para mostrarlo en el display de siete segmentos ubicado a un costado del cañón.

Usé un Arduino UNO para cargar el código siguiente en el Atmega:

#include "Wire.h" / / I2C control #include "Bounce.h" byte diaplayAddr = 0x70 >> 1; Dirección del I2C control int digitBytes [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113}; 0 1 2 3 4 5 6 7 8 9, punto decimal = +128 //light barrera int LSFrontPin = A0; barrera de luz en la parte delantera de la barril int LSBackPin = A1; barrera de luz en la parte posterior del barril int TriggerPin = 11; Float meanVal = 0; Float meanCount = 0; Datenverarbeitung int LSFrontVal = 0; int LSBackVal = 0; int BaseLineFront = 0; int BaseLineBack = 0; umbral, a reconocer un dardo int TriggerFront = 0; int TriggerBack = 0; medición de la velocidad int measuringBack = 0; Float longitud = 0.173; m int loopTime = 100; tiempo del punto que mide en micro segundos measureLoops larga sin signo = 0; sin firmar largo latido = 0; Float TempBaseLineFront = 0; Float TempBaseLineBack = 0; Catador de rebote = rebote (TriggerPin, 10); void setup() {Serial.begin(9600); Wire.Begin(); puesta en marcha delay(500) de bus I2C; createDisplay(); pinMode (LSFrontPin, entrada); pinMode (LSBackPin, entrada); pinMode (TriggerPin, entrada); Delay(1000); crear una línea base para (int ii = 0; ii < 100; ii ++) {TempBaseLineFront = TempBaseLineFront + analogRead(LSFrontPin); TempBaseLineBack = TempBaseLineBack + analogRead(LSBackPin); Delay(10); } BaseLineFront = (int)(TempBaseLineFront / 100); TriggerFront = (int)(0.8*BaseLineFront); BaseLineBack = (int)(TempBaseLineBack / 100); TriggerBack = (int)(0.8*BaseLineBack); Mostrar que la inicialización se hace: abrir y cerrar tres veces con la línea de base valores writeNumber (TriggerFront, 500); Delay(200); writeNumber (TriggerBack, 500); Delay(200); writeNumber (888, 500); Delay(200); writeNumber (888, 500); Delay(200); writeNumber (888, 500); Delay(200); measuringBack = 1; medición de inicio y esperar a que los dardos} void createDisplay() {Wire.beginTransmission(diaplayAddr); Wire.Write(B00000000); entgegen / / Subadressing: B00000001 = dígito 1, Subadressing: B00000010 = 2 dígitos, Subadressing: B00000011 = dígito 3, Subadressing: B00000100 = Wire.write(B00110111) de 4 dígitos; byte de control (modo dinámico de 9 mA) Wire.endTransmission(); Wire.beginTransmission(diaplayAddr); Wire.Write(1); byte de la instrucción - primer dígito de control es 1 (lado derecho) Wire.write(digitBytes[0]); dígito 1 (lado derecho) Wire.write(digitBytes[1]); dígito 2 Wire.write(digitBytes[2]); dígitos 3 Wire.endTransmission(); Wire.beginTransmission(diaplayAddr); Wire.Write(1); byte de la instrucción - primer dígito de control es 1 (lado derecho) Wire.write(digitBytes[9]); dígito 1 (lado derecho) Wire.write (digitBytes [0] + 128); dígitos 2 + Dezimal Wire.write(digitBytes[1]) punto; dígitos 3 Wire.endTransmission(); } void writeNumber (int cantidad, int waitTime) {/ / creat número y mostrar de waitTime ms int digit1 = número/100; int digit2 = (número de - (digit1 * 100)) / 10; int digit3 = número - digit1 * 100 - digit2 * 10; Serial.println(Number); Serial.Print ("digit1:"); Serial.println(digit1); Serial.Print ("digit2:"); Serial.println(digit2); Serial.Print ("digit3:"); Serial.println(digit3); Wire.beginTransmission(diaplayAddr); Wire.Write(1); byte de la instrucción - primer dígito de control es 1 (lado derecho) Wire.write(digitBytes[digit3]); dígito 1 (lado derecho) Wire.write (digitBytes [digit2] + 128); dígitos 2 + punto decimal Wire.write(digitBytes[digit1]); dígitos 3 Wire.endTransmission(); Delay(waitTime); Wire.beginTransmission(diaplayAddr); Wire.Write(1); byte de la instrucción - primer dígito de control es 1 (lado derecho) Wire.write(0); dígito 1 (lado derecho) Wire.write(0); dígitos 2 + punto decimal Wire.write(0); dígitos 3 Wire.endTransmission(); } void heartBeatBeat() {//lets el punto decimal parpadea Wire.beginTransmission(diaplayAddr); Wire.Write(1); byte de la instrucción - primer dígito de control es 1 (lado derecho) Wire.write(0); dígito 1 (lado derecho) Wire.write(128); dígitos 2 + punto decimal Wire.write(0); dígitos 3 Wire.endTransmission(); Delay(100); Wire.beginTransmission(diaplayAddr); Wire.Write(1); byte de la instrucción - primer dígito de control es 1 (lado derecho) Wire.write(0); dígito 1 (lado derecho) Wire.write(0); dígitos 2 + punto decimal Wire.write(0); dígitos 3 Wire.endTransmission(); } void loop() {intervalo //Hearbeat si (millis() > (heartBeat + 5000)) {latido = millis(); heartBeatBeat();} //read el botón Taster.update(); int TasterStatus = Taster.read(); unsigned larga duración = Taster.duration(); si ((TasterStatus == HIGH) & & (duración < 2000)) {writeNumber((int)(meanVal*10/meanCount), 1000);} else if (TasterStatus == HIGH) {Serial.println("reset") writeNumber (0, 500); delay(200); writeNumber (0, 500); delay(200); writeNumber (0, 500); delay(200); meanVal = 0; meanCount = 0; delay(500);} / / delayMicroseconds(loopTime); //if (digitalRead(TriggerPin) == HIGH) {Serial.println ("Trigger
!"); } Si (measuringBack == 1) {//Pfeil wurde noch nicht detektiert LSBackVal = analogRead(LSBackPin); if (LSBackVal < TriggerBack) {measuringBack = 0; measureLoops = micros(); Serial.Print ("iniciar activación:"); Serial.println(TriggerBack); Serial.println(LSBackVal); }} más {//dart fue detectado, pero no llegan a la parte delantera LSFrontVal = analogRead(LSFrontPin); if (LSFrontVal < TriggerFront) {stopTime=micros() largo sin firmar; float deltaTus = (float)(stopTime-measureLoops); deltaTus = deltaTus / 1.0e6; float mSpeed = longitud / deltaTus; measuringBack = 1; Serial.println(measureLoops); Serial.println(stopTime); Serial.println(deltaTus); Serial.println(mSpeed); meanCount = meanCount + 1; meanVal = meanVal + mSpeed; Serial.println(meanVal); Serial.println(meanCount); writeNumber((int)(mSpeed*10), 500); Delay(200); //#Reset {}} después de 1 s si ((measuringBack == 0) & & (micros() > (measureLoops + 1000000))) {measuringBack = 1;}}

Artículos Relacionados

Nerf dardos de pintura

Nerf dardos de pintura

Pintura Dart Mod es que un mod sencillo a estándar e incluso Stephen Nerf dardos. Es seguro para mantenerte entretenido y hace Nerf blanco de una ráfaga de disparos o debería decir un splat! Cuesta alrededor de $20 para hacer multi color para diversi
Arduino Nano y Visuino: medir la velocidad del Motor (RPM) con optoacoplador y Encoder de disco

Arduino Nano y Visuino: medir la velocidad del Motor (RPM) con optoacoplador y Encoder de disco

Al construir un coche de la robusteza, es importante controlar la velocidad de la rotación de las ruedas. Antes de que podemos controlar la velocidad sin embargo, necesitamos ser capaces de medirlo. Una de las maneras más populares y más fácil de med
Cómo medir la velocidad de la luz... Uso de Chocolate!

Cómo medir la velocidad de la luz... Uso de Chocolate!

En este Instructable, el primero de una serie con el libro Cómo fosilizar su hámster y otros sorprendentes experimentos para el científico del sillón como inspiración, utilizamos una barra de chocolate para medir la velocidad de la luz.Lo que necesit
¿Cómo muchos Nerf dardos están en existencia?

¿Cómo muchos Nerf dardos están en existencia?

"¿Cuántos dardos Nerf siempre se han hecho? Alguna vez?"Es una pregunta que pocas personas, incluso los más ávidos de Nerf entusiastas - alguna vez pensar en pedir. En medio del caos de nuestra vida cotidiana, el ajetreo y el bullicio de la prep
Nerf dardos de modding Stock

Nerf dardos de modding Stock

este instructable le mostrará la forma correcta de mod stock nerf dardos para ser mejor.Paso 1: materiales Estas:Navaja de bolsilloNerf dartpistola de pegamentoBalas-Softair bbPaso 2: Desmontaje de Dart Rompan el dardo. Luego, realizar la parte super
Cómo hacer homeade nerf dardos

Cómo hacer homeade nerf dardos

fácil homade nerf dardosPaso 1: materiales necesita sizors espuma respaldo varilla (FBR) municiones y una pistola de pegamento calientePaso 2: cortar la fbr corta el fbr con el tamaño de un dardo nerfPaso 3: derretir los agujeros en el fbr derretir 2
Cómo medir la velocidad con un Casio g-shock

Cómo medir la velocidad con un Casio g-shock

Funciona solamente con G-choques que ofrecen velocidad de medición como el GA 110Paso 1: Especificar distancia1. Cambie al modo de cronómetro2. Mantenga el botón de ajuste para especificar un valor de distancia entre 0.0 y 99.9. Pulsando el botón atr
KVG nerf dardos de punta

KVG nerf dardos de punta

como el nombre de KVG punta dardos nerfAl leer este ible por favor mirar todas las imágenes y leer todas las notasPaso 1: cosas que necesitará 1) una pistola de pegamento caliente y palillos2) nerf dardos (preferentemente los que no les importa arrui
Cómo medir la velocidad del sonido con dos trozos de madera...

Cómo medir la velocidad del sonido con dos trozos de madera...

... un cronómetro y una corriente adecuada.Paso 1: La ideaLa velocidad es hasta qué punto algo viaja en un tiempo conocido velocidad = distancia / tiempo.En la vida cotidiana, la velocidad se mide generalmente en cualquiera de los dos millas por hora
Cómo mod nerf dardos

Cómo mod nerf dardos

ok, esto es un instrucable diciendo que a dardos nerf mod.después de cerca de 175 balas tienes polvo de nuevo.el polvo (se necesita) aumentará la gama y el poderPaso 1: recoger cosas get simple polvo, servilletas y un dart(s) de nerfPaso 2: mod los d
WHISTLER magnético de NERF dardos

WHISTLER magnético de NERF dardos

NERF es uno de mi favoritos juguete del alivio de tensión, generalmente juego con mi hijo, Memduh Ahmet (una 7 años creativo y loca forma de vida de alegría y felicidad). Hemos desarrollado un nuevo tipo de etiqueta de dart con imanes de neodimio.Ust
Mi modded nerf dardos:]

Mi modded nerf dardos:]

ok así que yo estaba jugando con mi primera pistola de nerf y quería mostrar a todos cómo enfriar los dardos son así que aquí están!
(Sin embargo, otro) Manera de hacer su propio Nerf dardos

(Sin embargo, otro) Manera de hacer su propio Nerf dardos

Ok, así que. Tienes una pistola de Nerf, impresionante. Pero, sólo 12 dardos y más dardos son demasiado caros, ¿qué haces? HAGA SUS LOS PROPIOS!Ahora, esto no es de cero, sino más bien una adaptación a los dardos. Para su información, sólo sé que ést
Nerf dardos Dodeca

Nerf dardos Dodeca

nerf dart Dodeca es una Granada de 12 dardos o perdigones. Esto puede servir como un magnum redonda en una escopeta casera de nerf. En la foto, es una Granada.Paso 1: Se necesita 12 dardos elite u optimizada2 gomas elásticas que se ajustan cómodament