IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Jeu du parcours électrique : problème faux positifs


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut Jeu du parcours électrique : problème faux positifs
    Bonjour.

    Pour la fête d'anniversaire de mon fils, je fabrique le célèbre jeu du parcours en fil tordu avec l'anneau.
    Nom : schema.png
Affichages : 1644
Taille : 179,4 Ko

    L'idée est simple : la led verte est allumée. si le contact est fait entre l'anneau et le parcours (contact rouge - jaune), la led verte, s'éteint, la led rouge s'allume et reste allumée (même si l'anneau ne touche plus).
    Le buzzer émet un son puis s'éteint si l'anneau ne touche plus.
    L'appui bref sur le bouton poussoir fait un raz (la led rouge s'éteint, la verte s'allume).

    Seulement, j'ai très souvent des faux positifs dès que le circuit est alimenté. Le pin 2 détecte un HIGH même sans contact. J'ai pourtant ajouté des résistances de 220ohm (pull down) et testé avec du 10k. Mais rien n'y fait.
    Il suffit de toucher du doigt l'isolant du câble qui va au pin 2 pour déclencher un HIGH
    Comment puis-je m'en sortir ? Voici mon code. Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    const int buzzer=13;
    const int ledVerte=9;
    const int ledRouge=8;
     
    const int bouton=7;
    const int filDeFer=5;
     
    boolean etatBouton;
    boolean ancienEtatBouton;
    boolean etatFilDeFer;
     
    void setup() {
     
      Serial.begin(9600);
     
      pinMode(buzzer, OUTPUT);
      pinMode(ledVerte, OUTPUT);
      pinMode(ledRouge, OUTPUT);
     
      pinMode(filDeFer, INPUT);
      pinMode(bouton, INPUT_PULLUP);
     
      etatBouton = HIGH;
      ancienEtatBouton = HIGH;
      etatFilDeFer = LOW;
     
      digitalWrite(ledVerte, HIGH);
      digitalWrite(ledRouge, LOW);
    }
     
    void loop() {
     
      boolean etatBouton=digitalRead(bouton);
      boolean etatFilDeFer=digitalRead(filDeFer);
      Serial.println(etatBouton);
     
      if (etatBouton == LOW && ancienEtatBouton == HIGH) {
        Serial.println("bouton presse");
        ancienEtatBouton = LOW;
        delay(500);
      }
      else if (etatBouton == HIGH && ancienEtatBouton == LOW) {
        Serial.println("bouton relache");
          digitalWrite(ledVerte, HIGH);
          digitalWrite(ledRouge, LOW);
          noTone(buzzer);
          ancienEtatBouton = HIGH;
          delay(500);
      }
      else {
        if (etatFilDeFer == HIGH) {
          digitalWrite(ledVerte, LOW);
          digitalWrite(ledRouge, HIGH);
          tone(buzzer, 500);
          delay(500);
          noTone(buzzer);
        }
        else {
          delay(500);
        }
      }
     }

  2. #2
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonsoir Cyclone14
    Citation Envoyé par Cyclone14 Voir le message
    Le pin 2 détecte un HIGH même sans contact. J'ai pourtant ajouté des résistances de 220ohm pour limiter cet effet (pull down). Mais rien n'y fait.
    Comment puis-je m'en sortir ?
    J'essayerai d'enlever la résistance de 220 ohm en série dans le fil de fer, elle ne sert pas beaucoup et, surtout, en cas de toucher, comme il y a une autre résistance (220 ohm) contre le GND, ton potentiel 5V. est divisé par 2 c'est pas très bon .
    Personnellement, dans ce type de montage, je ferais l'inverse, le fil de fer directement au GND, une résistance de 2200 ohm entre +5V et la pin 2. La pin 2 au bout de la perche avec une résistance de 220 ohm en série pour une "petite" protection.
    Ainsi le contact du fil de fer donne un LOW.

    Cordialement
    jpbbricole

    PS: Bon anniversaire à ton fils, quand ce sera le moment

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 019
    Par défaut
    Bonjour,
    Si les préconisations de jpbBricole ne donnent rien (elles sont logiques, un diviseur de tension n’est effectivement pas la solution).
    Le fait que quand tu touches l’isolant du fil fait un faux positif fait penser à de l’induction (rayonnement) HF
    Et donc En vrac :
    - Essayer une(des) autre(s) alimentation(s) (il y en a qui rayonnent beaucoup; les alimentations à découpage qui sont la règle maintenant sont à cet égard redoutables si elles sont de mauvaises qualité ou ont vieillies) , ou autre prise USB (éventuellement d’un autre PC ou bloc USB si alim par l’USB )

    Ensuite mais c'est plus aléatoire :
    - Remplacer fil rouge (5v à anneau), fil gris relié à borne 2 par câble blindé, les blindages connectés ensembles (important pas de boucle de masse) et au 0 V et ensuite au +5V (c’est bizarre mais parfois ça marche);
    - Ferrites autour des fils jaunes, rouges et gris précités (il faut en avoir …) ;
    - Eloigner le circuit jeu de la platine (en utilisant des câbles blindés avec blindages interconnectés) ;
    - pas de parallélisme ou le moins possible entre le fil rouge de l'anneau et le fil bleu d'alimentation de la platine (c'es parallèle sur le schéma, pas forcément dans la réalité

    Bon courage,en espérant que le problème soit résolu pour l'anniversaire !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Bonsoir Cyclone14
    Personnellement, dans ce type de montage, je ferais l'inverse, le fil de fer directement au GND, une résistance de 2200 ohm entre +5V et la pin 2. La pin 2 au bout de la perche avec une résistance de 220 ohm en série pour une "petite" protection.
    Ainsi le contact du fil de fer donne un LOW.
    Merci pour ta réponse. Je comprends l'idée du montage en pull up...
    J'ai donc branché le fil de fer en GND, j'ai mis deux résistances de 1K en série (car je n'avais pas de 2200) entre le +5V et la pin 2 et une résistance de 220ohm entre la pin 2 et la perche (l'anneau).
    Dans le programme, j'ai inversé la condition sur le fil. J'ai bien un HIGH permanent lorsque rien ne se touche.
    Malheureusement, il ne se passe rien quand je relie l'anneau au fil de fer L'état de la pin 2 est toujours HIGH et ne passe pas à LOW (mauvais gnd ?)
    J'ai biensûr fait le test directement en touchant les 2 fils dupont (sans fil de fer etc.). Désolé mais j'ai dû rater un truc.Nom : schema1.png
Affichages : 1218
Taille : 106,9 Ko

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Citation Envoyé par gaby277 Voir le message
    Bonjour,
    Si les préconisations de jpbBricole ne donnent rien (elles sont logiques, un diviseur de tension n’est effectivement pas la solution).
    Le fait que quand tu touches l’isolant du fil fait un faux positif fait penser à de l’induction (rayonnement) HF
    Et donc En vrac ...
    Whaou je n'y avais pas pensé mais c'est une piste intéressante. J'ai fait un test avec une alim pile 9V mais j'obtiens le même résultat. Je vais essayer les autres reco. Merci beaucoup.

  6. #6
    Membre confirmé

    Inscrit en
    Octobre 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 169
    Par défaut
    Bjr,
    Moi qui n'est pas de connaissance en électro. en vous lisant, j'ai l'impression que le projet devient une centrale nucléaire Juste par curiosité est il obligé de passer par un microcontrôleur pour ce projet ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Citation Envoyé par laurent1133 Voir le message
    Bjr,
    Moi qui n'est pas de connaissance en électro. en vous lisant, j'ai l'impression que le projet devient une centrale nucléaire Juste par curiosité est il obligé de passer par un microcontrôleur pour ce projet ?
    Non pas du tout obligé. Mais c'est pour y ajouter une touche de fun (c'est ma façon de faire des TP).
    Ceci dit, si tu veux exactement le même mécanisme (led rouge avec mémoire, bouton de raz, etc), le faire en hardware uniquement peut être un poil complexe (transistors, condo...).

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 019
    Par défaut
    Bonjour,
    est il obligé de passer par un microcontrôleur pour ce projet ?
    Non une pile et une ampoule qui s'allumera quand il y a contact pourraient suffire (éventuellement un buzzer en parallèle sur la lampe.)

    Mais après s'il veut mémoriser le contact, il va falloir autre chose , relais , composants électroniques, circuit intégré , carte Arduino

    Avec Arduino quand le montage basique marchera, il pourra compter le nombre de contacts, la durée du jeu (1 premier contact met en route (n'est pas compté) , en fin de parcours 1 contact arrête le jeu. Il pourra mémoriser les scores, classer les parties et les joueurs, la seule limité étant son imagination, ses compétences et le temps qu'il pourrra y consacrer et même mais là ça va nettement se complexifier transmettre tout cela à son smartphone et ce jeu bien connu deviendra connecté !
    Sans compter le plaisir d'être un maker et pas seulement un consommateur qui achète.

    Par ailleurs l'enfant a qui le jouet sera offert sera sans doute sensible au fait que c'est son papa qui a créé son cadeau.

  9. #9
    Membre confirmé

    Inscrit en
    Octobre 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 169
    Par défaut
    Ok bon dev

  10. #10
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Cyclone14
    Citation Envoyé par gaby277 Voir le message
    Par ailleurs l'enfant a qui le jouet sera offert sera sans doute sensible au fait que c'est son papa qui a créé son cadeau.
    Ca c'est de la motivation

    Citation Envoyé par Cyclone14 Voir le message
    Malheureusement, il ne se passe rien quand je relie l'anneau au fil de fer L'état de la pin 2 est toujours HIGH et ne passe pas à LOW (mauvais gnd ?)
    Mets ton programme modifié en ligne.

    Cordialement
    jpbbricole

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonjour à tous

    Déjà faire un schéma correct.
    Le conducteur du parcours branché au GND de manière direct c'est en ordre.
    Par contre l'anneau doit être tiré au 5V par une résistance en direct! (càd une résistance entre le 5V et le fil rouge). Valeur de départ aproximative 500ohm (soit deux de 1k en // soit une de 470ohm).
    Ensuite pour protéger un peu l'Arduino d'un contact avec autre chose on peut mettre une résistance de protection entre l'arrivée du fil rouge et l'entrée de l'Arduino, 1k à 10k valeur standard.
    On se retrouve donc avec un point à trois connections: L'anneau (fil rouge du schéma), une résistance vers le 5V et une 2ème résistance vers l'entrée de l'Arduino.

    Le problème c'est que relié à la masse de l'ordinateur, l'Arduino reçoit tous les parasites de l'ordi (car la masse n'est pas propre, elle varie par rapport à la terre et cela l'anneau le capte bien). Si il y a toujours des faux positif, on peut réduire la résistance de 500ohm (mais attention au courant consommé, ne pas dépasser ce que peut fournir l'Arduino). Puis ajouter un condensateur entre l'entrée de l'Arduino et la masse. Avec la résistance de protection cela formera un filtre RC contre les parasites que l'anneau-antenne capte.

    Bonne suite

    Delias

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Citation Envoyé par Delias Voir le message
    Le conducteur du parcours branché au GND de manière direct c'est en ordre.
    Par contre l'anneau doit être tiré au 5V par une résistance en direct! (càd une résistance entre le 5V et le fil rouge). Valeur de départ aproximative 500ohm (soit deux de 1k en // soit une de 470ohm).
    Ensuite pour protéger un peu l'Arduino d'un contact avec autre chose on peut mettre une résistance de protection entre l'arrivée du fil rouge et l'entrée de l'Arduino, 1k à 10k valeur standard.
    Delias
    Merci Delias, ça fonctionne beaucoup mieux ainsi ! J'ai mis 500ohm comme recommandé d'un côté et 1k pour l'entrée de l'arduino.
    Question subsidiaire : le contact s'il est très bref (ou l'effleurement) ne déclenche pas le bip. Pour améliorer ça j'ai raccourci le delay entre chaque loop.
    Puis-je agir au niveau des valeurs des résistances pour rendre le système plus sensible ?

    En tous cas un grand Merci !

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonsoir

    Oui si tu ne veux pas de latence dans la détection, il ne faut aucun délai dans la boucle sauf lors des traitements. Donc le dernier else et le delay(500); correspondant en ligne 59 et 60 du premier code n'ont rien à faire dans le programme. Ils introduisent un délai variable jusqu'à 0.5s avant la détection, alors que mon montage c'est quelques μs au plus. (Sauf si tu mets le condensateur et même avec c'est insignifiant. Par exemple avec 10k et 100n c'est moins de 1ms..., et là tu indiques ne pas l'avoir mis).

    Bonne suite

    Delias

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Nom : schema.png
Affichages : 1170
Taille : 183,9 Ko
    Voici mon proto actuel. Je posterai le programme une fois que j'aurai fait quelques améliorations :
    Je vais permettre 3 échecs (à chaque contact je ferai un cycle rouge->vert jusqu'au dernier échec où je laisserai rouge allumé).
    Bientôt aussi une photo du jeu...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Jeu python] Solutions à mes problémes
    Par moithibault dans le forum Général Python
    Réponses: 1
    Dernier message: 12/06/2010, 12h09
  2. Victime du faux positif McAfee
    Par steve77 dans le forum Sécurité
    Réponses: 1
    Dernier message: 23/04/2010, 14h11
  3. Jeu de la vie, problème d'affichage.
    Par -ezano- dans le forum Débuter
    Réponses: 5
    Dernier message: 22/09/2009, 12h55
  4. Jeu SDL utilisant Winsock2, problème réseau
    Par TONIAPEL dans le forum C
    Réponses: 2
    Dernier message: 22/08/2006, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo