Go Down

Topic: Combat dans les airs arduino (Read 3023 times) previous topic - next topic

voodou

Jan 08, 2011, 07:06 pm Last Edit: Jan 08, 2011, 07:15 pm by voodou Reason: 1
Bonjour à tous, étant fan d'aéromodélisme et surtout de FPV j'ai comme projet d'utiliser un arduino mini pour simuler un combat, je m'explique.

La carte serait munie d'un ou deux émetteur IR (canon), d'un ou plusieurs récepteurs IR (cible) et de quelques leds pour simuler le degré de dégâts, voire un buzzer pour déclarer la mort de l'avion et bien sur une voie utilisable sur la radio pour le tir. Après beaucoup d'options inutiles peuvent êtres rajoutées... (compteur de tir, pourcentage, ...)

Mon problème est le suivant:
Quel type d'émetteur et de récepteur IR faut il prévoir car je ne connais pas la portée et surtout la diffusion d'une simple led.

Si vous avez quelques idées.

Merci d'avance à tous!

voodou

#1
Jan 09, 2011, 12:00 am Last Edit: Jan 09, 2011, 05:38 pm by voodou Reason: 1
Voilà l'idée de l'implantation.
En FPV on peut intégrer sur le signal vidéo une mire donc un réglage sera obligatoire avant utilisation pour faire correspondre la mire et le signal. Pour l'instant le "tir" est permanent.
Si quelqu'un à une idée pour envoyer le signal...
J'avais pensé à un laser comme ceux vendu pas cher, couplé à une cellule photo-sensible. Parce qu'en IR je ne sais pas si on peut arriver à un trait plus ou moins fin ou réglable... Là je suis dans le flou pour la partie émission/réception...




J'ai mis une led à 4 pattes vu que je n'ai pas le composant Ir receiver.

//Leds barre de vie
int ledvie1 = 4;
int ledvie2 = 5;
int ledvie3 = 6;
int ledvie4 = 7;

//Buzzer
int buzzer = 3;

// Emetteurs, récepteurs
const int IRE = 10;
int IRR = 2;

//Compteur, hit
int compteur = 0;
int hit = 0;



void setup(){
 
 pinMode(ledvie1, OUTPUT);
 pinMode(ledvie2, OUTPUT);
 pinMode(ledvie3, OUTPUT);
 pinMode(ledvie4, OUTPUT);
 pinMode(buzzer, OUTPUT);
 pinMode(IRE, OUTPUT);
 pinMode(IRR, INPUT);
 digitalWrite(IRE,HIGH);
 
}

void loop(){
 
 delay(3000);
 analogWrite (buzzer, LOW);
 hit = analogRead(IRR);
 if
   (compteur = 0);{
   digitalWrite (ledvie1, LOW);
   digitalWrite (ledvie2, LOW);
   digitalWrite (ledvie3, LOW);
   digitalWrite (ledvie4, LOW);
   }
   
 if
   (compteur = 1);{
   digitalWrite (ledvie1, HIGH);
   digitalWrite (ledvie2, LOW);
   digitalWrite (ledvie3, LOW);
   digitalWrite (ledvie4, LOW);
   }
   
 if
   (compteur = 3);{
   digitalWrite (ledvie1, HIGH);
   digitalWrite (ledvie2, HIGH);
   digitalWrite (ledvie3, LOW);
   digitalWrite (ledvie4, LOW);
   }
   
 if
   (compteur <= 4);{
   digitalWrite (ledvie1, HIGH);
   digitalWrite (ledvie2, HIGH);
   digitalWrite (ledvie3, HIGH);
   digitalWrite (ledvie4, LOW);
   }
   
 if
   (compteur <= 4);{
   digitalWrite (ledvie1, HIGH);
   digitalWrite (ledvie2, HIGH);
   digitalWrite (ledvie3, HIGH);
   digitalWrite (ledvie4, HIGH);
   analogWrite (buzzer, HIGH);
   delay (15000);
   }

 if (hit > 0);{
   analogWrite (buzzer, HIGH);
   compteur = compteur + 1;
   }
}

Jean-François

Avec un laser le risque d'un accident occulaire n'est pas une option, qu'en serait-il si tu abimes la rétine d'un spectateur de passage ?

Regarde avec Processing, le traitement video comporte des "blob" détection, ça pourrait être une piste....
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

voodou

#3
Jan 09, 2011, 12:53 am Last Edit: Jan 09, 2011, 12:56 am by voodou Reason: 1
En fait ça serait le même principe que le laser game mais en aérien. Je me suis peut être mal expliqué pour la mire, le but n'étant pas de tirer dans la camera mais sur les capteurs sur l'avion.

Jean-François

#4
Jan 09, 2011, 01:12 am Last Edit: Jan 09, 2011, 07:55 am by jfs Reason: 1
J'ai bien compris.... mais les laser games sont dans des enceintes fermées ou tout les participant ont un équipement adéquat pour se protéger les yeux.

Un avion qui évolue dans le ciel n'est pas dans une enceinte fermée et le risque de "frapper" quelqu'un avec le laser existe.

Je ne suis même pas sur qu'une pratique de la sorte soit autorisée avec un laser.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Binette228

Salut,

Tu devrais faire une liste de paramètres de jeux souhaité, différentes "armes", différentes précisions et portés.
Ensuite tu pourra voir précisément quelles sont tes options.

Tu pourrais utiliser des LEDs IR avec un angle de vue très petit, et tu pourrais même faire que seul un certain pourcentage des tirs réussis comptent, si c'est trop facile de toucher un ennemi.

Mais bon, je te donne seulement des suggestions et je suis loin d'être un expert.
À toi de voir se que tu as besoin et bonne recherche google!

voodou

#6
Jan 09, 2011, 08:11 am Last Edit: Jan 09, 2011, 08:12 am by voodou Reason: 1
Pour Jean-François:
Laser c'était plus une expression qu'un choix, l'IR semble plus adapté dans ce cas évidement.

Pour Binette228:
Pour l'instant j'essaie de programmer au plus simple et au fur et à mesure j'intègre des fonctions. Je suis débutant en Arduino mais apprendre ne me fait pas peur!

D'ailleurs est ce que mon implantation semble correcte?

Luj06

Tu peux utiliser des lentilles pour que ton faisceau IR devienne rectiligne.

voodou

#8
Jan 09, 2011, 09:30 am Last Edit: Jan 09, 2011, 10:22 am by voodou Reason: 1
Oui c'est ce à quoi j'avais pensé, une lentille convergente mais quelle distance maximum pourrais-je atteindre (je sais me doute que ça sera la place de la lentille qui définit la distance finale). Et peut être une divergente pour agrandir la surface de réception.

Pour l'émetteur, je pensais à une ou 2 leds infra-rouge 950 NM:
http://www.robotshop.com/sfe-infrared-950nm-led-2.html

Pour le récepteur, un simple binaire qui sort du 0 ou +0,3v comme ici me suffirait.
http://www.robotshop.com/sfe-ir-receiver-breakout-for-vishay-tsop85.html

Qu'en pensez vous?

Merci d'avance en tout cas. J'espère ne pas dire trop de conneries.

Edit: petite mise à jour de la platine.

voodou

J'ai rajouté le code, est ce que quelqu'un pourrait me dire si il est bon? Ça serait bien sympa!

Sinon y a t'il une façon moins lourde que le IF pour allumer les leds en fonctions du compteur?

Merci d'avance pour les futures réponses.

Binette228

#10
Jan 09, 2011, 07:25 pm Last Edit: Jan 09, 2011, 07:41 pm by Binette228 Reason: 1
Salut,

Je ne suis pas très bon programmeur mais je peux voir quelques petites erreures dans ton code (à vérifier tout de même).

Code: [Select]
//Leds barre de vie
int ledvie1 = 4;
int ledvie2 = 5;
int ledvie3 = 6;
int ledvie4 = 7;

//Buzzer
int buzzer = 3;

// Emetteurs, récepteurs
const int IRE = 10;
int IRR = 2;

//Compteur, hit
int compteur = [glow]4; //Tu veux que le jeu commence avec 4 vies[/glow]
int hit = 0;



void setup(){

pinMode(ledvie1, OUTPUT);
pinMode(ledvie2, OUTPUT);
pinMode(ledvie3, OUTPUT);
pinMode(ledvie4, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(IRE, OUTPUT);
pinMode(IRR, INPUT);
digitalWrite(IRE, HIGH); //

}

void loop(){

delay(3000); [glow]//delay de 3 secondes?[/glow]
[glow] //enlève ceci et tu le remplacera plus tard par la fonction tone (analogWrite (buzzer, LOW);)
[/glow]
hit = [glow]digitalRead[/glow](IRR);
if
  (compteur = 0){
  digitalWrite (ledvie1, LOW);
  digitalWrite (ledvie2, LOW);
  digitalWrite (ledvie3, LOW);
  digitalWrite (ledvie4, LOW);
  [glow]tone(buzzer, 200);
  digitalWrite(IRE, LOW);[/glow]
  delay(100000);
  }
 
if
  (compteur [glow]==[/glow] 1){
  digitalWrite (ledvie1, HIGH);
  digitalWrite (ledvie2, LOW);
  digitalWrite (ledvie3, LOW);
  digitalWrite (ledvie4, LOW);
  }
 
if
  (compteur [glow]== 2[/glow]){
  digitalWrite (ledvie1, HIGH);
  digitalWrite (ledvie2, HIGH);
  digitalWrite (ledvie3, LOW);
  digitalWrite (ledvie4, LOW);
  }
 
if
  (compteur [glow]== 3[/glow]){
  digitalWrite (ledvie1, HIGH);
  digitalWrite (ledvie2, HIGH);
  digitalWrite (ledvie3, HIGH);
  digitalWrite (ledvie4, LOW);
  }
 
if
  (compteur [glow]== 4[/glow]){
  digitalWrite (ledvie1, HIGH);
  digitalWrite (ledvie2, HIGH);
  digitalWrite (ledvie3, HIGH);
  digitalWrite (ledvie4, HIGH);
  }

[glow] if (hit == 1){
  tone(buzzer, 1000, 500);
  compteur--;
  delay(15000);
  }[/glow]
}


http://arduino.cc/en/Reference/Tone

Fait des test et reviens nous la dessus!
N'hésite pas si tu veux d'autre aide!

Binette228

#11
Jan 09, 2011, 07:36 pm Last Edit: Jan 09, 2011, 07:37 pm by Binette228 Reason: 1
Et tu dois utiliser une résistance avec ton buzzer (tout dépendament de la résistance interne).

Donc à 5 volts, pour avoir 30 mA, il faut un résistance totale de 160 ohm environ.

Il te faut aussi une résistance pour tes IRE.

voodou

Salut Binette228 merci pour tes réponses. Je ne peux malheureusement pas tester vu que je n'ai pas encore reçu mon arduino.
Pour la programmation je vais jeter un ?il sur tes modifications.
Que penses tu des composants que j'ai sélectionné? As tu meilleur à proposer?

Merci d'avance.

Binette228

Pour les IR LEDs se que tu as choisi peut faire l'affaire, mais seulement pour faire un prototype. Tu n'as pas assez d'information comme l'angle et la puissance du faisceau.

Pour ce qui est du récepteur, je ne m'y connais pas vraiment mais ça devrait faire l'affaire pour le prototype aussi.

Je te conseille d'aller faire des recherches sur mouser.com et lire les datasheet pour en apprendre plus sur se qui est disponible.

fdufnews

Le récepteur IR que tu proposes détecte un signal modulé à 38KHz. Cela veux dire que la LED d'émission doit envoyer un signal modulé à cette même fréquence.
Concernant les LED d'émission. La puissance du signal s'atténue proportionnellement au carré de la distance. Si tu fais quelques calculs tu vas t'apercevoir qu'il faut pas mal de puissance à l'émission si tu veux que ton signal soit reçu à plusieurs mètres. Il ne faut pas se laisser abuser par les télécommandes des télévisions qui fonctionnent à quelques mètres avec une petite pile. Dans ton cas, tu es en extérieur et il peut y avoir du soleil qui va éblouir le récepteur ou masquer l'émetteur s'il n'est pas assez puissants.
En conséquence de ce que j'ai dit au-dessus il faudra que tu émettes avec pas mal de puissance. En plus, si tu places une lentille devant tes LED pour collimater le faisceau tu vas te retrouver avec une puissance élevée dans un faisceau étroit et donc POTENTIELLEMENT DANGEREUX. Il faut être très prudent avec les infrarouges car il n'y a pas de réflexe de protection oculaire puisqu'ils sont invisibles.

Go Up