Arduino Laser Tag - Duino Tag (8 / 11 étapes)

Étape 8: Le Code

Le Code

Notes du code :
Je ne vais pas aller dans les détails sur comment le code fonctionne j’espère que les commentaires assez étendues prévues par le code sera suffisant pour l’expliquer, si ce n’est l’il y a déjà de bons tutoriaux là-bas.

Limites :
Le code ne fonctionne qu’est configuré de sorte qu’il ne peut le faire une chose à un moment et jusqu'à l’arduino double cœur est plus facile juste composer avec ça.
Cela signifie qu’un tagger est en tournage il ne remarqueront pas si il obtient coup/tag.  Vous pourriez compliquer le code en utilisant les interruptions, mais dans le monde réel, qu'il n’est pas vraiment un gros problème, le coup de feu de tournage ou obtenir arrive si rapidement qu’elles interfèrent très rarement entre eux.
À l’avenir les itérations du code j’ai va probablement faire en sorte que le tagger vérifie pour voir si il a été étiqueté entre-deux chaque bit il transmet, rend très peu probable qu’il manquerait un message entrant (hit / tag). J’ai joué quelques matchs à l’aide de ce code et le code similaire et il semble bien fonctionner.

------------------------------------------------------------------------------------------------------------------

Début du code (copier et coller dans sketch arduino)
//
Communiqué de Duino Tag V1.01
Laser Tag pour l’arduino basé sur le protocole de balise de Miles.
Par J44industries : www.J44industries.blogspot.com
Pour plus d’informations sur la création de votre propre Duino Tagger, allez à:
//
Beaucoup de crédit mérite d’aller à Duane o ' Brien, si elle n’avait pas été pour l’excellents tutoriels de Duino Tag que écrit-il, que j’aurait jamais été capable d’écrire ce code.
Tutoriels de Duane sont fortement recommandés de lecture afin de mieux comprendre de l’arduino et de la communication de l’IR. Voir son http://aterribleidea.com/duino-tag-resources/ site
//
Ce code établit les bases pour arduino basé système de laser tag et tente de s’en tenir au protocole tag miles lorsque c’est possible.
Détails du miles Tag : http://www.lasertagparts.com/mtdesign.htm
Il y a une portée beaucoup pour étendre les capacités de ce système, et j’espère que le jeu va continuer d’évoluer pendant un certain temps à venir.
Licence : Attribution Share Alike : donner crédit où le crédit est dû, mais vous pouvez faire ce que vous aimez avec le code.
Si vous avez des améliorations de code ou ajouts s’il vous plaît aller à http://duinotag.blogspot.com
//

Digital e / s
int triggerPin = 3 ;      Bouton poussoir pour feu primaire. Faible = pressé
int trigger2Pin = 13 ;     Bouton poussoir pour feu secondaire. Faible = pressé
int speakerPin = 4 ;      Sortie directe au sondeur/haut-parleur piézo
int audioPin = 9 ;      Déclencheur de l’audio. Peut être utilisé pour déclencher les sons captés dans le genre de l’électronique, vous pouvez obtenir en carte de voeux que jouer un message personnalisé.
int lifePin = 6 ;      Un niveau de sortie analogique (PWM) correspond à la durée restant à courir. De fiches PWM : 3,5,6,9,10 ou 11. Peut être utilisé pour piloter les graphiques à barres LED. par exemple LM3914N
int ammoPin = 5 ;      Un niveau de sortie analogique (PWM) correspond au reste des munitions. De fiches PWM : 3,5,6,9,10 ou 11.
int hitPin = 7 ;      Broche de sortie LED servant à indiquer quand le joueur a été touché.
int IRtransmitPin = 2 ;      Goupille de feu primaire mode IR émetteur : utiliser les broches 2,4,7,8,12 ou 13. NE pas les broches PWM d’utilisation ! Plus d’informations : http://j44industries.blogspot.com/2009/09/arduino-frequency-generation.html#more
int IRtransmit2Pin = 8 ;      Goupille de feu secondaire mode IR émetteur : utiliser les broches 2,4,7,8,12 ou 13. NE pas les broches PWM d’utilisation !
int IRreceivePin = 12 ;     La goupille qui les signaux IR entrants sont lus dans
int IRreceive2Pin = 11 ;     Permet de vérifier des capteurs externes sont attachés ainsi que faire la distinction entre les emplacements des capteurs (par exemple repérer les coups de tête)
Exigences minimales de pistolet : frappé de déclenchement, récepteur, IR led, LED.

Détails de joueur et le jeu
int myTeamID = 1 ;      1-7 (0 = message de système)
int myPlayerID = 5 ;      Identifiant de joueur
int myGameID = 0 ;      Interprited de la sous-routine configureGane ; permet un changement rapide des types de jeu.
int myWeaponID = 0 ;      Deffined par type de jeu et configureGame sous-routine.
int myWeaponHP = 0 ;      Deffined par type de jeu et configureGame sous-routine.
maxAmmo int = 0 ;      Deffined par type de jeu et configureGame sous-routine.
maxLife int = 0 ;      Deffined par type de jeu et configureGame sous-routine.
automatique int = 0 ;      Deffined par type de jeu et configureGame sous-routine. Tir automatique 0 = Semi Auto, 1 = entièrement automatique.
int automatic2 = 0 ;      Deffined par type de jeu et configureGame sous-routine. Auto feu secondaire ?

Détails du signal entrant
int a reçu [18] ;                    Données reçues : reçu [0] = capteur qui, reçue [1] - [17] octet1 octet2 parité (structure de balise de Miles)
cocher int = 0 ;      Variable utilisée pour le contrôle de parité

Ses stats
munitions int = 0 ;      Munitions actuelles
la vie int = 0 ;      Vie actuelle

Variables de code
int timeOut = 0 ;      Deffined dans frequencyCalculations (IRpulse + 50)
FEU d’int = 0 ;      0 = ne pas tirer, 1 = feu primaire, 2 = feu secondaire
int TR                     = 0;      Lecture de détente
int l = 0 ;      Dernière lecture détente
int T2R = 0 ;      Gâchette 2 lecture (pour le feu secondaire)
int LT2R = 0 ;      Dernière lecture 2 de déclencheur (pour feu secondaire)

Propriétés de signal
int IRpulse = 600 ;    Durée de l’impulsion fondamentale de 600uS MilesTag standard 4 * IRpulse pour l’en-tête de type bit, 2 * IRpulse pour 1, 1 * IRpulse pour 0.
int IRfrequency = 38 ;     Fréquence en kHz, les valeurs Standard sont: 38KHz, 40kHz. Selon vos caractéristiques de récepteur
int IRt = 0 ;      CONDUIT à l’heure de donner la fréquence de transmission correcte, calculée dans le programme d’installation.
int IRpulses = 0 ;      Nombre d’oscillations nécessaires pour rendre un IRpulse complet, calculé dans le programme d’installation.
en-tête int = 4 ;      Longueur de l’en-tête en impulsions. 4 = Miles balise standard
int maxSPS = 10 ;     Coups maximum par secondes. Non encore utilisés.
int SCT = 0 ;      Temps entre les prises. Non encore utilisés.

Données de transmission
int octet1 [8] ;                        Chaîne pour stocker octet1 des données qui sont transmises lorsque le joueur se déclenche.
int octet2 [8] ;                        Chaîne pour stocker octet1 des données qui sont transmises lorsque le joueur se déclenche.
int myParity = 0 ;      Chaîne pour stocker la parité des données qui sont transmises lorsque le joueur se déclenche.

Données reçues
mémoire int = 10 ;     Nombre de signaux à enregistrer : permet pour les données du jeu être revues après le match, aucune disposition ne prévoit la transmission / y accéder encore bien.
hitNo int = 0 ;      Frapper le nombre
Octet1
lecteur int [10] ;                      Array doit être plus grande que la mémoire
équipe int [10] ;                        Array doit être plus grande que la mémoire
Octet2
int arme [10] ;                      Array doit être plus grande que la mémoire
hp int [10] ;                          Array doit être plus grande que la mémoire
parité int [10] ;                      Array doit être plus grande que la mémoire

void setup() {}
Coms de série mis en place pour faciliter le débogage.
Serial.Begin(9600) ;
Serial.println("Startup...") ;
Déclarations de broche
pinMode (triggerPin, entrée) ;
pinMode (trigger2Pin, entrée) ;
pinMode (speakerPin, sortie) ;
pinMode (audioPin, sortie) ;
pinMode (lifePin, sortie) ;
pinMode (ammoPin, sortie) ;
pinMode (hitPin, sortie) ;
pinMode (IRtransmitPin, sortie) ;
pinMode (IRtransmit2Pin, sortie) ;
pinMode (entrée, IRreceivePin) ;
pinMode (entrée, IRreceive2Pin) ;

frequencyCalculations() ;   Calcule la longueur d’impulsion etc. pour la fréquence désirée
configureGame() ;           Consulter et configurer les détails de jeu
tagCode() ;                 Basé sur jeu détaille les travaux etc. les données qui seront transmises quand un coup est tiré


digitalWrite (triggerPin, HIGH) ;      Pas vraiment nécessaire si votre circuit a la traction correcte des résistances déjà mais ne nuit pas
digitalWrite (trigger2Pin, HIGH) ;     Pas vraiment nécessaire si votre circuit a la traction correcte des résistances déjà mais ne nuit pas

pour (int i = 1; j’ai < 254; i ++) {/ / pièces de boucle de démarrage bruit
analogWrite(ammoPin, i) ;
playTone((3000-9*i), 2) ;
}

Ensuite 4 lignes initialiser l’affichage LEDs
analogWrite (ammoPin, ((int) munitions)) ;
analogWrite (lifePin, ((int) vie)) ;
lifeDisplay() ;
ammoDisplay() ;

Serial.println("Ready...") ;
}

Grande boucle la plupart du code est dans les routines sub
void loop() {}
receiveIR() ;
Si (feu! = 0) {}
Shoot() ;
ammoDisplay() ;
}
Triggers() ;
}

VOID ROUTINES

void ammoDisplay() {/ / sortie LED munitions mises à jour
float ammoF ;
ammoF = (260/maxAmmo) * munitions ;
Si (ammoF < = 0) {ammoF = 0;}
if(ammoF > 255) {ammoF = 255;}
analogWrite (ammoPin, ((int) ammoF)) ;
}

void lifeDisplay() {/ / sortie LED munitions mises à jour
float lifeF ;
lifeF = (260/maxLife) * la vie ;
Si (lifeF < = 0) {lifeF = 0;}
if(lifeF > 255) {lifeF = 255;}
analogWrite (lifePin, ((int) lifeF)) ;
}

void receiveIR() {/ / vide vérifie un signal entrant et décode s’il voit un.
erreur d’int = 0 ;

if(digitalRead(IRreceivePin) == faible) {/ / si la fiche de réception soit faible un signal est reçu.
digitalWrite(hitPin,HIGH) ;
if(digitalRead(IRreceive2Pin) == faible) {/ / est le nouveau signal reçu par les capteurs de tête ?
reçu [0] = 1 ;
}
else {}
reçu [0] = 0 ;
}

while(digitalRead(IRreceivePin) == faible) {}
}
pour (int i = 1; j’ai < = 17; i ++) {/ / se répète à plusieurs reprises pour s’assurer que le signal entier a été reçu
reçu [i] = pulseIn (IRreceivePin, faible, timeOut) ;  pulseIn commande attend une impulsion et enregistre alors sa durée (en microsecondes).
}

Serial.Print ("capteur:") ;                            Impressions si c’était une tête tourné ou pas.
Serial.Print(received[0]) ;
Serial.Print("...") ;

pour (int i = 1; j’ai < = 17; i ++) {/ / ressemble à chacun des impulsions reçues
int receivedTemp [18] ;
receivedTemp [i] = 2 ;
Si (a reçu [i] > (IRpulse - 200) & & reçus [i] < (IRpulse + 200)) {receivedTemp [i] = 0;}                      Fonctionne de la longueur de l’impulsion s’il s’agissait d’une données 1 ou 0, ce qui a été reçu écrit le résultat dans la chaîne de receivedTemp
Si (a reçu [i] > (IRpulse + IRpulse - 200) & & reçus [i] < (IRpulse + IRpulse + 200)) {receivedTemp [i] = 1;}  Fonctionne de la longueur de l’impulsion s’il s’agissait d’une données 1 ou 0, ce qui a été reçu
reçu [i] = 3 ;                   Efface les données brutes reçues
reçu [i] = receivedTemp [i] ;     Entrées interprété les données

Serial.Print("") ;
Serial.Print(received[i]) ;         Imprimer les résultats de l’interprétation des données
}
Serial.println("") ;                  Nouvelle ligne de ranger résultats imprimés

Contrôle de parité. Les données a reçu un signal correct ?
vérifier = 0 ;
pour (int i = 1; i < = 16; i ++) {}
Si (a reçu [i] == 1) {vérifier = cocher + 1;}
Si (a reçu [i] == 2) {erreur = 1;}
}
Serial.println(Check) ;
vérifier = vΘrifier >> 0 & B1 ;
Serial.println(Check) ;
Si (vérifier! = received[17]) {erreur = 1;}
Si (erreur == 0){Serial.println ("Signal valide");}
else{Serial.println("Error");}
Si (erreur == 0){interpritReceived();}
digitalWrite(hitPin,LOW) ;
}
}

void interpritReceived() {/ / après un message a été reçu par la sous-routine ReceiveIR cette sous-routine decidedes comment il doit réagir aux données
if(hitNo == Memory) {hitNo = 0;} / / hitNo trie où les données doivent être conservées si instruction moyens anciennes données obtient écrasées si trop sont reçu
équipe [hitNo] = 0 ;
lecteur [hitNo] = 0 ;
arme [hitNo] = 0 ;
HP [hitNo] = 0 ;
Quelques lignes Effectivly convertit les données binaires en décimal
Im sûr il doit y avoir un moyen beaucoup plus efficace d’y parvenir
Si (reçu [1] == 1) {équipe [hitNo] = team [hitNo] + 4;}
Si (a reçu [2] == 1) {équipe [hitNo] = team [hitNo] + 2;}
Si (a reçu [3] == 1) {équipe [hitNo] = team [hitNo] + 1;}

Si (a reçu [4] == 1) {joueur [hitNo] = joueur [hitNo] + 16;}
Si (reçu [5] == 1) {joueur [hitNo] = joueur [hitNo] + 8;}
Si (a reçu [6] == 1) {joueur [hitNo] = joueur [hitNo] + 4;}
Si (reçues [7] == 1) {joueur [hitNo] = joueur [hitNo] + 2;}
Si (reçus [8] == 1) {joueur [hitNo] = joueur [hitNo] + 1;}

Si (reçue [9] == 1) {arme [hitNo] = arme [hitNo] + 4;}
Si (a obtenu [10] == 1) {arme [hitNo] = arme [hitNo] + 2;}
Si (reçues [11] == 1) {arme [hitNo] = arme [hitNo] + 1;}

Si (a reçu [12] == 1) {hp [hitNo] = hp [hitNo] + 16;}
Si (a reçu [13] == 1) {hp [hitNo] = hp [hitNo] + 8;}
Si (a reçu [14] == 1) {hp [hitNo] = 4; + hp [hitNo]}
Si (a reçu [15] == 1) {hp [hitNo] = hp [hitNo] + 2;}
Si (a reçu [16] == 1) {hp [hitNo] = hp [hitNo] + 1;}

parité [hitNo] = reçus [17] ;

Serial.Print ("frapper non:") ;
Serial.Print(hitNo) ;
Serial.Print ("joueur:") ;
Serial.Print(Player[hitNo]) ;
Serial.Print ("Team:") ;
Serial.Print(Team[hitNo]) ;
Serial.Print ("arme:") ;
Serial.Print(Weapon[hitNo]) ;
Serial.Print ("HP:") ;
Serial.Print(HP[hitNo]) ;
Serial.Print ("parité:") ;
Serial.println(Parity[hitNo]) ;


Il s’agit probablement où plus de code doit être ajoutée à étendre les capacités de jeu à l’heure actuelle, que le code vérifie seulement que les données reçues n’était pas un message système et déduit une vie si ce n’était pas.
Si (joueur [hitNo]! = 0){hit();}
hitNo ++ ;
}

void shoot() {}
if(Fire == 1) {/ / si le déclencheur a été enfoncé ?
Serial.println ("FIRE 1") ;
sendPulse (IRtransmitPin, 4) ; Transmettre les impulsions de l’en-tête, envoyer la sous-routine impulsion traite les détails
delayMicroseconds(IRpulse) ;

pour (int i = 0; j’ai < 8; i ++) {/ / octet1 transmettre
Si (octet1 [i] == 1) {}
sendPulse (IRtransmitPin, 1) ;
Serial.Print ("1") ;
}
else{Serial.Print ("0");}
sendPulse (IRtransmitPin, 1) ;
delayMicroseconds(IRpulse) ;
}

pour (int i = 0; j’ai < 8; i ++) {/ / transmettre octet2
Si (octet2 [i] == 1) {}
sendPulse (IRtransmitPin, 1) ;
Serial.Print ("1") ;
}
else{Serial.Print ("0");}
sendPulse (IRtransmitPin, 1) ;
delayMicroseconds(IRpulse) ;
}

if(myParity == 1) {/ / parité
sendPulse (IRtransmitPin, 1) ;
}
sendPulse (IRtransmitPin, 1) ;
delayMicroseconds(IRpulse) ;
Serial.println("") ;
Serial.println ("DONE 1") ;
}

if(Fire == 2) {/ / où on ajouterait un mode de tir secondaire
Serial.println ("feu 2") ;
sendPulse (IRtransmitPin, 4) ; En-tête
Serial.println ("fait 2") ;
}
FEU = 0 ;
munitions = munitions - 1 ;
}

void sendPulse (int code pin, int length) {/ / importation de variables comme celui-ci permet pour les modes de feu secondaire etc..
Cette genertates Sub la fréquence porteuse pour transmettre l’information
int i = 0 ;
o int = 0 ;
tandis que (j’ai < longueur) {}
i ++ ;
tandis que (o < IRpulses) {}
o ++ ;
digitalWrite (tige, haute) ;
delayMicroseconds(IRt) ;
digitalWrite (broches, faible) ;
delayMicroseconds(IRt) ;
}
}
}

void triggers() {/ / vérifie si les déclencheurs ont été presses
LTR = TR ;       État précédent Records. Feu principal
LT2R = T2R ;     État précédent Records. Feu secondaire
TR = digitalRead(triggerPin) ;      Lève les yeux actuel état du bouton de déclenchement
T2R = digitalRead(trigger2Pin) ;    Lève les yeux actuel état du bouton de déclenchement
Code recherche des changements dans l’état de détente pour lui donner un comportement de prise de vue automatique semi
Si (TR! = LTR & & TR == faible) {}
FEU = 1 ;
}
Si (T2R! = LT2R & & T2R == faible) {}
FEU = 2 ;
}
Si (TR == LOW & & automatique == 1) {}
FEU = 1 ;
}
Si (T2R == LOW & & automatic2 == 1) {}
FEU = 2 ;
}
Si (feu == 1 || LE FEU == 2) {}
if(AMMO < 1) {feu = 0; noAmmo();}
if(Life < 1) {feu = 0; dead();}
Code du taux à ajouter ici le feu
}

}

void configureGame() {/ / où sont stockés les caractéristiques de jeu, permet le jeu plusieurs types d’être enregistrées et vous n’avez qu’à changer une variable (myGameID) pour prendre le jeu.
if(myGameID == 0) {}
myWeaponID = 1 ;
maxAmmo = 30 ;
munitions = 30 ;
maxLife = 3 ;
vie = 3 ;
myWeaponHP = 1 ;
}
if(myGameID == 1) {}
myWeaponID = 1 ;
maxAmmo = 100 ;
munitions = 100 ;
maxLife = 10 ;
vie = 10 ;
myWeaponHP = 2 ;
}
}

void frequencyCalculations() {/ / fonctionne sur tous les timings nécessaires pour donner la fréquence correcte pour le signal IR
IRt = (int) (500/IRfrequency) ;
IRpulses = (int) (IRpulse / (2 * IRt)) ;
IRt = IRt - 4 ;
Pourquoi-4 j’entends tu pleures. Il permet le temps pris pour les commandes à exécuter.
Plus d’informations : http://j44industries.blogspot.com/2009/09/arduino-frequency-generation.html#more

Serial.Print ("oscillation temps période 2:") ;
Serial.println(IRt) ;
Serial.Print ("impulsions:") ;
Serial.println(IRpulses) ;
timeOut = IRpulse + 50 ; Ajout de 50 à l’impulsion attendue temps donne une petite marge d’erreur à l’écoute lire la valeur de délai d’expiration
}

void tagCode() {/ / fonctionne ce qui est le code de tagger des joueurs (le code qui sera transmis quand ils tirent)
octet1 [0] = myTeamID >> 2 & B1 ;
octet1 [1] = myTeamID >> 1 & B1 ;
octet1 [2] = myTeamID >> 0 & B1 ;

octet1 [3] = myPlayerID >> 4 & B1 ;
octet1 [4] = myPlayerID >> 3 & B1 ;
octet1 [5] = myPlayerID >> 2 & B1 ;
octet1 [6] = myPlayerID >> 1 & B1 ;
octet1 [7] = myPlayerID >> 0 & B1 ;

octet2 [0] = myWeaponID >> 2 & B1 ;
octet2 [1] = myWeaponID >> 1 & B1 ;
octet2 [2] = myWeaponID >> 0 & B1 ;

octet2 [3] = myWeaponHP >> 4 & B1 ;
octet2 [4] = myWeaponHP >> 3 & B1 ;
octet2 [5] = myWeaponHP >> 2 & B1 ;
octet2 [6] = myWeaponHP >> 1 & B1 ;
octet2 [7] = myWeaponHP >> 0 & B1 ;

myParity = 0 ;
pour (int i = 0; i < 8; i ++) {}
Si (octet1 [i] == 1) {myParity = myParity + 1;}
Si (octet2 [i] == 1) {myParity = myParity + 1;}
myParity = myParity >> 0 & B1 ;
}

Quelques lignes d’imprimer le code complet de tagger.
Serial.Print ("octet1:") ;
Serial.Print(byte1[0]) ;
Serial.Print(byte1[1]) ;
Serial.Print(byte1[2]) ;
Serial.Print(byte1[3]) ;
Serial.Print(byte1[4]) ;
Serial.Print(byte1[5]) ;
Serial.Print(byte1[6]) ;
Serial.Print(byte1[7]) ;
Serial.println() ;

Serial.Print ("octet2:") ;
Serial.Print(byte2[0]) ;
Serial.Print(byte2[1]) ;
Serial.Print(byte2[2]) ;
Serial.Print(byte2[3]) ;
Serial.Print(byte2[4]) ;
Serial.Print(byte2[5]) ;
Serial.Print(byte2[6]) ;
Serial.Print(byte2[7]) ;
Serial.println() ;

Serial.Print ("parité:") ;
Serial.Print(myParity) ;
Serial.println() ;
}

playTone Sub (ton int, int duration) {/ / une sous-routine pour jouer des tonalités comme l’exemple de mélodie arduino standard
pour (long j’ai = 0; i < durée * 1000L; i += ton * 2) {
digitalWrite (speakerPin, HIGH) ;
delayMicroseconds(tone) ;
digitalWrite (speakerPin, basse) ;
delayMicroseconds(tone) ;
}
}

void dead() {/ / vide détermine ce que fait le tagger, lorsqu’il est hors la vie
Quelques bruits et clignote quelques lumières
pour (int i = 1; i < 254; i ++) {
analogWrite(ammoPin, i) ;
playTone((1000+9*i), 2) ;
}
analogWrite (ammoPin, ((int) munitions)) ;
analogWrite (lifePin, ((int) vie)) ;
Serial.println("Dead") ;

pour (int i = 0; i < 10; i ++) {}
analogWrite (ammoPin, 255) ;
digitalWrite(hitPin,HIGH) ;
retard (500) ;
analogWrite (ammoPin, 0) ;
digitalWrite(hitPin,LOW) ;
retard (500) ;
}
}

void noAmmo() {/ / faire du bruit et le flash des lumières lorsque plus de munitions
digitalWrite(hitPin,HIGH) ;
playTone (500, 100) ;
playTone(1000, 100) ;
digitalWrite(hitPin,LOW) ;
}

void hit() {/ / faire du bruit et le flash des lumières quand vous tirer dessus
digitalWrite(hitPin,HIGH) ;
vie = vie - hp [hitNo] ;
Serial.Print ("Life:") ;
Serial.println(Life) ;
playTone (500, 500) ;
Si (vie < = 0){dead();}
digitalWrite(hitPin,LOW) ;
lifeDisplay() ;
}

Articles Liés

Arduino Laser Tag système cible

Arduino Laser Tag système cible

Cette instructable vous montrera comment construire une base interactive cible de sensibles au laser, idéal pour ceux qui juste obtenir commencé avec Arduino. Cela pourrait facilement être utilisé comme une plate-forme pour un système de laser tag, o
Laser Tag

Laser Tag

Comment faire pour améliorer ce projet...Il n'y a aucune API Python pour Azure et je n'ai pas assez de temps pour comprendre comment faire fonctionner l'API d'Azure C sur Python à poster des messages. Autrement dit, qu'il est actuellement limitée à u
BIRRD. Un dispositif de tricherie Laser Tag.

BIRRD. Un dispositif de tricherie Laser Tag.

Laser Tag est impressionnant. N'est pas de perdre. Sortir avec des amis, courir, vieux jeux d'arcade dans le hall d'entrée-ce qui est ne pas pour aimer ?Autrement dit, sauf si vous êtes comme moi, et on travaille la plupart du jeu Taggé.Ainsi, en plu
Laser Tag peluches

Laser Tag peluches

toujours envie il n'ya pas assez de jouets à l'intersection de câlin et terrifiante ? Souhaitez que vos animaux en peluche pourrait doubler comme des armes ? Ensuite, j'ai le jouet pour vous.Ces animaux en peluche de Laser Tag transformer facilement
Laser Tag Drone

Laser Tag Drone

Il semble que le fossé grandissant entre le Drone Haters et amoureux de la Drone. Nous avons donc une solution. Drone Laser Tag. Drone Haters, ramassage de vos armes. Mais attention, ces Drones sont pilotés par Drone amoureux, et ils tirent retour...
DIY Laser Tag System (Revamped)

DIY Laser Tag System (Revamped)

Voici un de ces jeux classique vous probablement joué avec vos amis comme un gosse à des fêtes d'anniversaire, la formation militaire maquette ou simplement traîner avec vos papilles. Vous jouez sans doute cela avec vos amis encore, mais c'est une do
Arduino Laser Tripwire

Arduino Laser Tripwire

Hey, fabricants de là-bas, les pirates et les inventeurs tout simples ! Cette instructable est un amusement et un projet Arduino facile pour les débutants (ou avancée) qui vous montre comment faire... ahem... roulement de tambour s'il vous plaît !Un
Arduino Laser Show (adapté de Instructable des NothingLabs)

Arduino Laser Show (adapté de Instructable des NothingLabs)

ce projet utilise un Arduino, une paire de haut-parleurs et un pointeur laser pour créer un projecteur laser capable de tracer des dessins dans une pièce sombre. Pour le pouvoir, j'ai cannibalisé une alimentation ATX de PC capable de délivrer beaucou
ALARME de 2 minutes ARDUINO LASER

ALARME de 2 minutes ARDUINO LASER

ce dont vous avez besoinArduinoLaserCarte de prototypageFils de raccordementLEDRésistance de 10KÉtape 1: connexions Tout d'abord vous connecter la résistance à la résistance de la photo et puis cela ira à la - ligne dans le jury puis la résistance ph
Distance de Universal Laser Tag

Distance de Universal Laser Tag

Blast loin vos amis pendant des heures avec ce laser personnalisé tag system. Qui a besoin de payer pour jouer dans une arène lorsque vous pouvez faire votre propre jeu ? Meilleur de tous, aucun équipement spécial est nécessaire, car les « guns » son
DIY Laser Tag System (verison microcontrôleur)

DIY Laser Tag System (verison microcontrôleur)

ici est le système de tag laser tant attendu avec l'installation de microcontrôleur ! Si vous avez avez un microcontrôleur avec plusieurs entrées, puis il vous dira comment l'utiliser pour créer et programmer un système de tag laser de votre propre a
BRICOLAGE | Système de sécurité simple Arduino Laser Tripwire !

BRICOLAGE | Système de sécurité simple Arduino Laser Tripwire !

Dans ce tutoriel je vais enseigner vous comment vous pouvez construire votre propre système de sécurité Laser Tripwire à la maison !Vous devez les composants et les matériaux suivants :Lumière LEDModule laserModule de capteur laserHaut-parleur ou Buz
Arduino Laser graveur bois Design !

Arduino Laser graveur bois Design !

Salut tout le monde, mon nom est Michiel et je vais vous montrer comment faire graveur laser regardant génial !Quelques mois auparavant, il y avait ici un défi CNC à instructables, tout en vérifiant les entrées de ce concours, j'ai vu des machines de
3W 4 « x 4 » Arduino Laser Cutter/graveur

3W 4 « x 4 » Arduino Laser Cutter/graveur

Dans ce tutoriel, vous apprendrez comment faire votre propre 4 pieds par 4 pieds, Arduino contrôlée, graveur laser 3 watt / fraise (pour les matériaux minces) pour environ 300$. La principale chose qui sépare ce tutoriel d'autres tutoriels de graveur