Les broches d'entrée GPIO du Raspberry Pi donnent des valeurs aléatoires

12

J'ai beaucoup joué avec le Raspberry Pi ces derniers temps. Mais j'ai un problème.

Lorsque je mets en place une broche d'entrée pour vérifier si l'électricité lui est envoyée ou non, cela me donne des réponses plutôt instables.

Quelques observations que j'ai faites pour clarifier mon problème:

  1. Lorsque je connecte le circuit et que l'électricité circule sur la broche d'entrée, la valeur qu'elle me donne est VRAIMENT ou 1.

  2. Lorsque je coupe le circuit en supprimant une LED qui en fait partie (lorsque la valeur d'entrée doit être 0), cela me donne des valeurs aléatoires, passant de 0 à 1.

  3. Lorsque je retire tous les câbles de mon Pi, cela me donne la valeur constante de 0

  4. Si j'ai retiré tous les câbles GPIO, cela me donne la valeur 0, mais si je touche simplement la broche d'entrée avec un morceau de métal conducteur d'électricité (ne menant à rien à l'autre extrémité), cela recommence avec les valeurs aléatoires. Il ne me donne pas de valeurs aléatoires à moins que je ne connecte également quelque chose à la broche de sortie. Il n'a pas à conduire n'importe où, il suffit de toucher la broche de sortie. Et un autre morceau de métal doit toucher la broche d'entrée. Aucune connexion entre eux.

Je me demande pourquoi il commence à me donner des valeurs aléatoires car la broche d'entrée GPIO touche n'importe quel métal.

Et encore plus intéressant, pourquoi cela me donne-t-il des 1 ou des VRAIS constants quand je lui envoie de l'électricité?

Gustaf
la source
Modifier la déclaration numéro 4: cela ne me donne pas de valeurs aléatoires, sauf si j'ai quelque chose de connecté à la broche de sortie également. Il n'a pas à conduire n'importe où, il suffit de toucher la broche de sortie. Et un autre morceau de métal doit toucher la broche d'entrée. Aucun lien entre eux
Gustaf
Bienvenue sur Raspberry Pi Stack Exchange! Vous savez que vous pouvez modifier votre question pour corriger la modification de cette information au lieu de la commenter? De plus, entrez de temps en temps dans le chat. Nous aimons toujours les nouvelles entreprises et cela aidera à montrer que ce site est utile, en croissance et a une base d'utilisateurs impliqués. Merci!
RPiAwesomeness
1
En effet, les broches flottent. Plus d'informations sur electronics.stackexchange.com/a/35705
Gerben

Réponses:

14

Le problème

Lorsque je connecte le circuit et que l'électricité circule sur la broche d'entrée, la valeur qu'elle me donne est VRAIMENT ou 1.

Certes, mais que se passe-t-il lorsque la masse est connectée à la broche d'entrée GPIO? La valeur qu'il donnerait serait toujours fausse .

  • Lorsque l'alimentation est connectée à la broche d'entrée: La broche d'entrée détecte un 1 (vrai).
  • Lorsque la masse est connectée à la broche d'entrée: La broche d'entrée détecte un 0 (faux).
  • Lorsque rien n'est connecté à la broche d'entrée: la broche d'entrée est confuse.

Lorsque rien n'est connecté, la broche est dans un état "flottant" et la sortie n'est pas prévisible. il est dans un état indéfini, ce n'est ni 0 ni 1, et la valeur détectée peut changer étrangement, d'où vos résultats aléatoires. En électronique, c'est ce qu'on appelle le troisième état .

Quelques détails supplémentaires à partir d'un article Wikipedia :

Dans les circuits numériques, une sortie à haute impédance (également appelée Hi-Z, tri-déclarée ou flottante) n'est pas conduite à un niveau logique défini par le circuit de sortie. Le signal n'est ni conduit à un niveau logique haut ni bas; cette troisième condition conduit à la description "tri-déclarée". Un tel signal peut être vu comme un circuit ouvert (ou fil "flottant").

La solution générale

La solution est une résistance de rappel . Considérez cela comme un composant supplémentaire qui ne fait rien lorsque la ligne obtient un 0 ou 1. Mais lorsque la ligne est inactive, elle entre soudainement en action et donne un 0.

La solution Raspberry Pi

Heureusement pour vous, le Rpi a un menu déroulant intégré, vous devez l'activer par programme. Voici un script python pour cela:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
//Now your input is stable.

Note complémentaire

Ne connectez pas l'alimentation directement à la broche car cela serait dangereux! Assurez-vous qu'il y a suffisamment de résistance dans le circuit. De plus, ne connectez jamais l'alimentation 5V directement au GPIO car il n'accepte que 3,3V.

Bonjour le monde
la source
Connaissez-vous le code C # équivalent lors de l'exécution sur la plate-forme principale Windows 10 IoT?
Vijay Chavda
Cette réponse est dorée! Thx
domih