Pages: [1] 2 3 4   Go Down
Author Topic: [WIP] Projet : Laser Game  (Read 2116 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour les gens, j'ai pas mal de choses a raconter alors je vais tâcher d'être succinct.

Mon objectif final : Un systeme complet de Laser Game


(03/08/2014)

Objectifs :
  • [OK] Emission/reception IR avec reconnaissance du tireur.
  • [WIP] Serveur RF.

Probleme actuel : Utilisant un module 2.4GHz (Frequence assez utilisé), existe-t-il des risques d'interferences avec d'autres appareil ?
Comment les minimiser ?
« Last Edit: August 07, 2014, 04:33:27 am by Hidjy » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tout betement, quelquechose comme ca pourrais marcher :
Code:
void loop(){
  if (analogRead(A0) >= 170) { 
    Serial.println(time);
    time = 0;
  }
  time++;
  delay(1);
}

Mais ca pose des soucis de precision, le reglage est plutot coton :
Je peux avoir des valeurs plutot constantes mais pour certains reglages ca deviens assez aléatoire :/
Logged

Gatineau, Quebec, Canada
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

As-tu pensé à utiliser millis() ou micros()?

http://arduino.cc/en/Reference/Millis
http://arduino.cc/en/Reference/Micros

« Last Edit: December 30, 2013, 01:04:19 pm by ypelletier » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour ta reponse, c'est plus propre, en effet  smiley

J'en suis donc a ce code :
Code:
int sensorPin = A0;
int threshold = 200;
int sensorValue = 0;
int time = 0;
int last = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
 
  time = micros();
  sensorValue = analogRead(sensorPin);
 
  if (sensorValue >= threshold) {
    Serial.println(time - last);
    last = time;
  }
             
}

Si je fais clignoter une LED toutes les secondes, j'obtiens des valeurs autours de 18000.
Je devrais pas avoir 1 000 000 ?

Lorsque je laisse le capteur a la lumiere ambiente, j'ai exactement 6240. (Meme chose a la lumiere de mon laser par exemple)
Cela correspond a quoi ? au rafraichissement de mon capteur ?

PS : Il n'y a pas de balise "spoiler" sur ce forum ?
Logged

Gatineau, Quebec, Canada
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si la LED clignote une fois par seconde, ça signifie qu'elle est allumée pendant une fraction de cette seconde, puis éteinte pendant le reste de la seconde. 
Si sensorValue est plus grand que threshold pendant tout le temps que la LED est allumée, ton script devrait à mon avis afficher une suite de temps très courts pendant que la LED est allumée, puis un temps beaucoup plus long pendant que la LED est éteinte.
C'est quoi comme capteur?  Une photorésistance?
Logged


Gatineau, Quebec, Canada
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dans ton code, time et last devraient être des unsigned long  plutôt que des int.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah bah oui, s'il compte les microsecondes, il a vite fait le tour d'un int...    smiley-roll-sweat
Merci.

J'utilise une photoresistance.

Du coups, pour ma LED, j'ai à peu près ces valeurs :
Quand elle clignote toutes les 0.1s , autours de 100 200.
Quand elle clignote toutes les 1s, autours de 1 002 200 .
Quand elle clignote toutes les 10s, autours de 10 022 000.

L'imprécision (si je puis dire) a donc l'air proportionnelle. Elle est du a quoi ?
De toute maniere, il me suffira de couper les 3 derniers chiffre pour tomber sur la bonne valeur envoyé. (Et donc le bon joueur)

Et le 6240 en lumiere continue c'est la vitesse d'execution d'une seule loop enfaite, non ?
Pourtant desfois j'ai des valeurs biens plus petites.

Au passage, quelqu'un sait comment les systeme "pro" fonctionnent ?
EDIT : Apperemment, certains fonctionne comme ce que je compte faire, mais la plupart utilise -en plus des lasers- des LEDs et capteurs IR.
« Last Edit: January 16, 2014, 11:27:12 am by Hidjy » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Apparemment, la fonction pulseIn pourrait etre une bonne sloution pour mesurer la frequence... si mon etrée n'était pas une photoresistance mais un bouton  smiley-sad

(Même chose pour la librairie FreqCounter)
« Last Edit: January 02, 2014, 09:56:25 am by Hidjy » Logged

Gatineau, Quebec, Canada
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La photorésistance est un capteur analogique, mais rien ne nous empêche de la brancher à une entrée numérique pour qu'elle présente deux états logiques:  HIGH quand elle est éclairée, LOW quand elle ne l'est pas (ou l'inverse, ça dépend comment on la branche).   
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mais dans ce cas, impossible de regler le seuil pour lequel le capteur donne HIGH, si ?

(je viens de comprendre que tu es l'auteur de ce blog, qui est depuis peu une de mes references smiley-wink )
« Last Edit: January 02, 2014, 10:22:05 am by Hidjy » Logged

Gatineau, Quebec, Canada
Offline Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu devrais pouvoir ajuster la frontière entre LOW et HIGH en ajustant la valeur de la résistance de gauche dans le circuit illustré ci-dessous (tu augmente cette résistance pour diminuer le voltage seuil).



(On dirait que mon blog commence à être connu!)     smiley
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai fais pas mal de test avec cette technique du digitalRead, je galère vraiment avec le seuil je trouve ca pas pratique du tout, je pense repasser à l'analogRead. Je vous tiens au courant smiley

En attendant, quelqu'un a des suggestion sur ça ou autre chose que j'aurais évoqué ?
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3778
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Utiliser un analogRead() n'a pas de sens ici : d'une part ça va compliquer la prog, et une mesure analogique n'a aucun intérêt.

PulsIn() est également à proscrire, car blocante. Donc si ton joueur capter un signal parasite (néon ou autre) alors il ne pourra plus tirer ...
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En gros je reprend mon ancien code (corrigé) mais avec une lecture en digital, ça serai la meilleure methode ?
Ok, je test ça ce soir, merci smiley

Au fait, en digitalRead, on obtient HIGH quand le signal est à l'equivalant de la moitié de la valeur max de la valeur analog, non ? (je testerais ça ce soir aussi, tiens)
EDIT : C'est bizarre, le seuil à l'air d'être 460 en analogique... Enfin, à la limite on s'en fou enfaite.
« Last Edit: January 16, 2014, 11:28:43 am by Hidjy » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour bonjour, ça fait longtemps, mon projet était en stand by.

De retour, j'ai laissé tombé l'idée du pulse laser, j'utilise maintenant une led IR, le capteur qui va bien et la lib IRremote.
=> Tout marche.

Maintenant, je voudrais que les clients (les guns/les joueurs) puissent communiquer avec le serveur :
Rien de bien compliqué, un module nRF24L01 et la lib Mirf (Ca, ça marche).
Mais chaque client doit avoir une adresse qui lui ai propre et je refuse de toutes les rentrer à la main dans chacun des guns. Alors comment faire ?
Logged

Pages: [1] 2 3 4   Go Up
Jump to: