Mesurer la vitesse de fléchettes Nerf (4 / 4 étapes)

Étape 4: Electronics

La vitesse de la dart est mesurée à l’aide de deux barrières optiques qui sont situés à l’avant et à l’extrémité du canon. Les barrières photoélectriques se composent d’une LED infrarouge (Osram LD 274-3) et un transistor photo (Q3 et Q4) (SFH 3100 F) chacun. Les LEDs sont irradier les transistors de photo à travers le Canon (voir photo) et permettent un courant entre le VCC 5V et la masse respectivement. Cela conduit à un signal mesurable dans A1 et A0. Le transistor photo contient également un filtre de lumière du jour qui maintient la lumière ambiante d’interférer avec les mesures.

Quand un dard passe le barrage photoélectrique bloquant l’IR-LED, le courant diminue instantanément à zéro. En ce moment le microcontrôleur commence à compter les microsecondes jusqu'à ce que le deuxième LED est bloqué. Comme nous le savons la distance entre les LED, nous pouvons calculer la vitesse de la dart.
La valeur est envoyée à une puce de conducteur de LED (SAA 1064) pour l’afficher sur l’afficheur 7 segments situé sur le côté du canon.

J’ai utilisé un Arduino UNO pour télécharger le code suivant à l’Atmega :

#include « Wire.h » / / I2C commande #include « Bounce.h » byte diaplayAddr = 0 x 70 >> 1 ; Adresse de l’I2C contrôle 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, point décimal = +128 //light barrière int LSFrontPin = A0 ; barrière lumineuse à l’avant du canon int LSBackPin = A1 ; barrière lumineuse à l’arrière du canon int TriggerPin = 11 ; float meanVal = 0 ; float meanCount = 0 ; Datenverarbeitung int LSFrontVal = 0 ; int LSBackVal = 0 ; int BaseLineFront = 0 ; int BaseLineBack = 0 ; seuil, de reconnaître un dart int TriggerFront = 0 ; int TriggerBack = 0 ; mesurer la vitesse int measuringBack = 0 ; flotteur de longueur = 0,173 ; loopTime int m = 100 ; du point de mesure en micro secondes unsigned long measureLoops = 0 ; unsigned long battement de coeur = 0 ; float TempBaseLineFront = 0 ; float TempBaseLineBack = 0 ; Bounce Taster = Bounce (TriggerPin, 10) ; void setup() {Serial.begin(9600) ; Wire.Begin() ; démarrage I2C bus delay(500) ; createDisplay() ; pinMode (entrée, LSFrontPin) ; pinMode (entrée, LSBackPin) ; pinMode (entrée, TriggerPin) ; Delay(1000) ; créer une ligne de base pour (ii int = 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) ; Montrent que l’initialisation est effectuée : clignote trois fois avec le writeNumber de valeurs de ligne de base (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 ; début de mesure et d’attendre les jeux de fléchettes} void createDisplay() {Wire.beginTransmission(diaplayAddr) ; Wire.Write(B00000000) ; entgegen / / Subadressing : B00000001 = chiffre 1, Subadressing : B00000010 = chiffre 2, Subadressing : B00000011 = chiffre 3, Subadressing : B00000100 = chiffre 4 Wire.write(B00110111) ; octet de contrôle (modus dynamique sur, 9 mA) Wire.endTransmission() ; Wire.beginTransmission(diaplayAddr) ; Wire.Write(1) ; instruction byte - premier chiffre de contrôle est 1 (côté droit) Wire.write(digitBytes[0]) ; Numéro 1 (ERS) Wire.write(digitBytes[1]) ; chiffre 2 Wire.write(digitBytes[2]) ; chiffre 3 Wire.endTransmission() ; Wire.beginTransmission(diaplayAddr) ; Wire.Write(1) ; instruction byte - premier chiffre de contrôle est 1 (côté droit) Wire.write(digitBytes[9]) ; Numéro 1 (ERS) Wire.write (digitBytes [0] + 128) ; chiffre 2 + Dezimal point de Wire.write(digitBytes[1]) ; chiffre 3 Wire.endTransmission() ; } void writeNumber (int number, int waitTime) {/ / creat numéro et montrez-le pour waitTime ms int digit1 = nombre/100 ; int digit2 = (numéro - (digit1 * 100)) / 10 ; int digit3 = nombre - 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) ; instruction byte - premier chiffre de contrôle est 1 (côté droit) Wire.write(digitBytes[digit3]) ; Numéro 1 (ERS) Wire.write (digitBytes [digit2] + 128) ; chiffre 2 + virgule Wire.write(digitBytes[digit1]) ; chiffre 3 Wire.endTransmission() ; Delay(waitTime) ; Wire.beginTransmission(diaplayAddr) ; Wire.Write(1) ; instruction byte - premier chiffre de contrôle est 1 (côté droit) Wire.write(0) ; Numéro 1 (ERS) Wire.write(0) ; chiffre 2 + virgule Wire.write(0) ; chiffre 3 Wire.endTransmission() ; } void heartBeatBeat() {//lets un point décimal clin Wire.beginTransmission(diaplayAddr) ; Wire.Write(1) ; instruction byte - premier chiffre de contrôle est 1 (côté droit) Wire.write(0) ; Numéro 1 (ERS) Wire.write(128) ; chiffre 2 + virgule Wire.write(0) ; chiffre 3 Wire.endTransmission() ; Delay(100) ; Wire.beginTransmission(diaplayAddr) ; Wire.Write(1) ; instruction byte - premier chiffre de contrôle est 1 (côté droit) Wire.write(0) ; Numéro 1 (ERS) Wire.write(0) ; chiffre 2 + virgule Wire.write(0) ; chiffre 3 Wire.endTransmission() ; } void loop() {//Hearbeat intervalle si (millis() > (rythme cardiaque + 5000)) {pulsation = millis() ; heartBeatBeat();} //read la touche Taster.update() ; int TasterStatus = Taster.read() ; unsigned longue durée = Taster.duration() ; if ((TasterStatus == HIGH) & & (durée < 2000)) {writeNumber((int)(meanVal*10/meanCount), 1000);} ElseIf (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 ("Start Trigger:") ; Serial.println(TriggerBack) ; Serial.println(LSBackVal) ; }} else {//dart a été détecté, mais ne sont pas arrivés à l’avant, LSFrontVal = analogRead(LSFrontPin) ; if (LSFrontVal < TriggerFront) {unsigned long stopTime=micros() ; float deltaTus = (float)(stopTime-measureLoops) ; deltaTus = deltaTus / 1.0e6 ; float mSpeed = longueur / 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 après 1 s si ((measuringBack == 0) & & (micros() > (measureLoops + 1000000))) {measuringBack = 1;}}

Articles Liés

Mesurer la vitesse de rotation avec téléphone et LED

Mesurer la vitesse de rotation avec téléphone et LED

C' est amusant de vérifier à quelle vitesse pour diverses choses--ventilateurs, perceuses et autres--sont en rotation. Et il est facile à faire avec les ingrédients suivants que beaucoup d'entre nous auront à la maison :Téléphone (j'utilise Android,
Arduino Nano et Visuino : mesurer la vitesse du moteur (tr/min) avec optocoupleur et encodeur disque

Arduino Nano et Visuino : mesurer la vitesse du moteur (tr/min) avec optocoupleur et encodeur disque

Lorsque vous générez une voiture robot, il est important de contrôler la vitesse de la rotation des roues. Avant que nous pouvons contrôler la vitesse cependant, nous devons être capable de la mesurer. Un des moyens plus faciles et les plus populaire
Comment mesurer la vitesse de la lumière... À l’aide de chocolat !

Comment mesurer la vitesse de la lumière... À l’aide de chocolat !

Dans ce Instructable, le premier d'une série à l'aide du livre Comment fossiliser votre Hamster et autres incroyables expériences pour le fauteuil savant comme source d'inspiration, nous utilisons une tablette de chocolat pour mesurer la vitesse de l
Remodeler votre fléchettes Nerf usé, ne pas acheter plus, récupérer les "anciens".

Remodeler votre fléchettes Nerf usé, ne pas acheter plus, récupérer les "anciens".

Fléchettes Nerf peuvent vous donner tellement de plaisir, surtout la nouvelle élite ones, mais n'importe quel genre de dart commencera à écraser et à plier après une utilisation intensive. Fléchettes progressivement devient plus minces. Fléchettes mi
Comment faire pour fléchettes nerf mod

Comment faire pour fléchettes nerf mod

ok, c'est un instrucable vous dire comment à fléchettes nerf mod.après que environ 175 balles tirées, vous devrez leur poudre à nouveau.la poudre (vous aurez besoin) augmentera la gamme et la puissanceÉtape 1: recueillir des choses get simple poudre,
Jeux de fléchettes Nerf brisé ? Difficulté em !

Jeux de fléchettes Nerf brisé ? Difficulté em !

Hey, les gens de Instructables. J'ai eu deux événements m'arriver récemment :1. j'ai enfin compris comment obtenir des images de désactiver mon Nintendo DSi2. j'ai passé à 3,00 $ sur un Nerf Raider CS-35 à une vente de garage.Chose est, cependant, qu
Système de mesure de vitesse de chute basées sur Arduino

Système de mesure de vitesse de chute basées sur Arduino

ICStation équipe a fait ce projet concernant le liquide tomber le système de mesure de vitesse. Il utilise DC 5V pour travailler. Lorsqu'il n'y a pas de liquide dans le domaine infrarouge, l' avertisseur sonore se déclenche et lorsqu'il est liquide d
Mesurer la vitesse d’écoulement par advection de la chaleur

Mesurer la vitesse d’écoulement par advection de la chaleur

Mesurer la vitesse d'écoulement par advection de la chaleurPour le cours « Meten aan water » (TU Delft), nous avons fait un dispositif pour mesurer la vitesse d'écoulement par advection d'eau chaude. Dans cet article, nous décrivons comment nous avon
Faire de rationaliser les fléchettes Nerf, le Easy Way

Faire de rationaliser les fléchettes Nerf, le Easy Way

Voici un guide pour savoir comment modifier facilement les fléchettes tagger Nerf afin qu'ils coïncident en Nerf pistolets comme une Recon ou Longshot. Vous n'aurez besoin d'aucun outil, les seuls jeux de fléchettes Nerf tagger (le genre avec des bou
Fléchettes NERF géant

Fléchettes NERF géant

J'ai fait quelques fléchettes géant de NERF pour une fête d'anniversaire. Initialement conçu pour"décoration", ils sont accessible avec l'ajout d'un lanceur comme celui de NightHawkInLight (États-Unis).Pour la sécurité raisons j'ai finalement dé
Comment mesurer la vitesse du son avec deux morceaux de bois...

Comment mesurer la vitesse du son avec deux morceaux de bois...

... un chronomètre et un mur pratique.Étape 1: L'idéeVitesse est de savoir jusqu'où quelque chose se déplace dans un temps connu Vitesse = distance / temps.Dans la vie quotidienne, la vitesse est généralement mesurée en soit miles / heure (ou kilomèt
Cuisine physique - mesurer la vitesse de la lumière avec du chocolat !

Cuisine physique - mesurer la vitesse de la lumière avec du chocolat !

En l'honneur de l'année internationale de la lumière, ma fille de 6 an, calcule la vitesse de la lumière à l'aide de barres chocolatées et four à micro-ondes.Les micro-ondes sont partie de la lumière ou le spectre électromagnétique. Nous avons étéà l
Faire fléchettes nerf à partir de zéro

Faire fléchettes nerf à partir de zéro

jouant avec Nerf guns est une amusante activité fun activité appréciée par beaucoup de gens. Malheureusement, l'amusement souvent s'épuise une fois que tous les jeux de fléchettes ont été perdus. Faire vos propres jeux de fléchettes est beaucoup moin
Comment faire votre LongShot tirer tous les fléchettes Nerf.

Comment faire votre LongShot tirer tous les fléchettes Nerf.

Bonjour cette instructable vous apprendra une des choses plus cool que vous pouvez faire pour votre Nerf LongShot. Quand j'étais un gamin en 2006 quand le longshot est sorti, j'ai pensé qu'il était impossible de faire un LongShot à coup de DartTags o