ernesto wrote: ↑Mon Jul 15, 2019 4:39 pm
1) Il doit s'agir de 470 ohm et non pas 470
kohm.
2) Effectivement les faux positifs sont dus à la longueur de câble. L'entrée gpio est instable et vous allez capter France Inter

(des parasites).
Ou pire encore , dés que le temps sera orageux vous allez capter des parasites de tensions élevés , qui vont détruire l'entrée gpio voir le RPI.
J'ai réalisé un projet comparable au votre, de boite aux lettre "connectée" (mail + sms lorsque le facteur ouvre la trappe) . Voila le schéma pour connecter le contacteur au gpio:. J'ai parfois par temps orageux des faux positifs.
3) Coté logiciel: Je suis proche de votre solution mais plutôt que d'utiliser :
GPIO.add_event_detect(pin_flotteur, GPIO.FALLING, callback=my_callback, bouncetime=1000)
je préfère l'instruction suivante qui est beaucoup moins gourmande en ressource CPU .Le prog est stoppé puis débloqué lors de l'événement, pas besoin de boucle while pour rien faire (consommatrice de ressource CPU)
GPIO.wait_for_edge(intPin, GPIO.FALLING)
Comme le conseil JumpZero il faut d'abord mettre au point le prog "sur table" avec un BP et des longueurs de fils raisonnable (max 1 m).
Puis s'attaquer au problème de la longueur du câble.
Bon courage.
Bonjour ,
1°) effectivement , mon doigt a glisse
2°) je ne sais pas trop si il existe des solutions a ce soucis de longueur de cables.
3°) je vais tester de remplacer le callback par ( GPIO.wait_for_edge(intPin, GPIO.FALLING)
dans le code , si j ' ai besoin plus tard d' ajouter d ' autres fonctions je le ferais dans des fichiers separes .
je ne suis pas tres doué et ne connait pas bien les composants , je sais qu ' un optocoupleur permet d' isoler le passage du courant afin d' eviter les retours un peu comme une diode , mais quel est l' interet ici ?
je vous tiens au courant des resultats , merci a vous .
EDIT donc si dans le corps du programme je met :
Code: Select all
while True :
if ( GPIO.wait_for_edge(pin_flotteur, GPIO.FALLING) ) :
time.sleep(0.2) # anti-rebond
ecrire_log ("Initialisation sur le pin : " + str(pin_flotteur),1)
il detecte le falling , mais aussi l ' autre front le montant et me met donc un print a chaque changement d' etat
apres me direz vous il suffit de faire une lecture du pin et de regarder si il vaut 0 ( contact etabli ) , mais bon , il me semble que c' est deja ce qu ' est censé faire le ( wait for edge , falling ) non ? ( attente du passage d' un etat haut a bas) .
Hors-mis ce detail , comme avec la fonction callback , les test passent impec ...
j ' ai peut etre un probleme avec le truc du pi qui gere ou lit les pins ( hardware ) ou alors je suis tres mauvais en programation

ou bien j ' ai pas compris un truc ...
qu ' en pensez vous ?
EDIT 2 : si je branche le contact NO du contacteur , j ' ai 5 messages par secondes
je sais pas , mais ce qui est sur , c ' est que mon contacteur serait grille depuis longtemps si il se mettrait en route et arret 5 fois par seconde MDR
avec un code d ' exemple pris sur le net : meme resultat que precedement ( on dirait une boucle classique )
Code: Select all
while True :
edge_detect = GPIO.wait_for_edge (pin_flotteur, GPIO.FALLING, bouncetime=1000)
if edge_detect is not None:
ecrire_log ("Initialisation sur le pin : " + str(pin_flotteur),1)
Si je chint avec un morceau de cable , le defilement se stoppe , pourtant le contacteur est bien ouvert ... une fois les deux cables telephones debranché et test de resistance a l ' omhmetre , zero permanent ...