martincornu / videoplayer

Automatic display of a video on the HDMI output of a raspberry pi 3 depending on the status of an input.
0 stars 0 forks source link

Video launching automatically #2

Closed martincornu closed 2 years ago

martincornu commented 3 years ago

Video is launching automatically when players put the hook on and it opens the room's door. It is maybe due to bounce effect on the rpi input.

What we could try: instead of wait for edge, use add_event + callback with debounce delay.

martincornu commented 3 years ago

Problem still here with debounce time of 100ms and 2k external pullups

martincornu commented 3 years ago

Room's door is open or close thanks to an electromagnet. So maybe the problem is due to Back ElectroMotiveForce (EMF). See https://progeny.co.uk/back-emf-suppression/ .

But this is strange because with the old python script (videoplayer.py), it didn't launched so often on electromagnet open. Maybe 1 on 20. Now it is every time.

martincornu commented 3 years ago

Analyse des problèmes à date avec V1.4 :

  1. A peine on touche le bouton B1 (cf. /hw dans le repo) ça déclenche l'ombre, alors que l'on a pas appuyé. Comment cela est-il possible alors qu'il y a une pull-up de 2k2 sur l'entrée rpi ?
  2. Après quelques semaines de fonctionnement, la vidéo se lance toute seule, en boucle.

Voici une analyse des bugs possibles :

  1. La sortie D12 Arduino en "floating input" peut être perturbée par des parasites et générer de faux états LOW.
  2. Les back EMF des EA génèrent des parasites (cf. comment ci dessus).
  3. La carte SD s'use trop vite à cause de la vidéo. Mais pourquoi cela aurait-il un impact sur le déclenchement ?

A ce stade, voici les étapes de debug que l'on pourrait mener et les questions qu'on peut se poser :

  1. L'alimentation de l'électroaimant est-elle séparée de celles de Arduino et Raspberry ? Il semble que les alimentations soient séparées mais c'est le même réseau électrique.

  2. Tester de mettre en route la raspberry sans Arduino (Arduino débranchée) et voir si ça bug. Cela permettra de dire si le problème vient de l'Arduino ou de la Raspberry. Testé : la vidéo se déclenche toute seule en boucle même si l'Arduino est débranché.

  3. Tester de mettre un pont diviseur de tension avec des résistances de 3k3 et 2k2 pour fournir du 3V3 par la sortie Arduino, plutôt que de mettre la sortie en haute impédance (peut-être perturbée par des parasites). image

3.bis Si le pont diviseur ne fonctionne pas, tester de piloter un transistor.

  1. Tester d'ajouter une diode de roue libre ou équivalent au montage des électroaimants.

  2. Vérifier le signal du 3V3 côté rpi à l'oscilloscope lorsqu'on pilote les électroaimants.

  3. Tester sur une pin différente de la raspberry pour voir si c'est une usure de la pin d'entrée raspberry.

Côté firmware, doit-on garder la dernière version avec le replay ? Cela a-t-il pu introduire des bugs ? Différentes possibilités :

  1. Garder le dernier firmware car le replay de la vidéo est implémenté (en modifiant seulement l'état des entrées / sorties pull up / down si besoin) et tester avec le pont diviseur et ajout d'un diode de roue libre ou équivalent sur les EA.
  2. Revenir au firmware 3.0 (callback + debounce) voir 2.0 (wait for edge) en mettant des pulls up / down externes et tester avec le pont diviseur et ajout d'un diode de roue libre ou équivalent sur les EA.

Dans les cas 1. et 2. on testera le pont diviseur via Arduino et ajout d'un diode de roue libre ou équivalent sur les EA. On peut donc faire les modifications hardware et tester les firmware les uns après les autres en commençant par le dernier 1.4.

martincornu commented 3 years ago

La piste des parasites générés par les back EMF des électroaimants s'éloigne car il y a des protections incluses avec les électroaimants (MOV) et les relais (diode de roue libre).

Voici le plan de debug :

  1. Ne pas tenir compte des électroaimants et corriger en premier lieu le fait que la vidéo tourne en boucle et se déclenche seule.
  2. Tester avec le dernier firmware v1.4 et le pont diviseur.
  3. Si le 2. ne marche pas alors tester avec les anciens firmware et le pont diviseur.
  4. Une fois que ce problème sera corrigé, alors traiter le problème de déclenchement sur désactivation d'un électroaimant.
martincornu commented 3 years ago

Prochains essais grâce aux conseils de l'auteur de cet excellent article :

  1. Implémentation du circuit V1B avec anti-bouncing grâce au NE555 (trigger de Schmidt) et voltage shifter 5V-3.3V grâce au 2N7000.

schema-v1B

  1. Isolation des cartes Arduino et Raspberry dans une cage de Faraday
  2. Séparation de l'alimentation de l'Arduino qui était sur la même alimentation que des électroaimants.
  3. A voir : remplacement des relais par des optocoupleurs pour les autres systèmes incluant le pilotage d'un électroaimant.
martincornu commented 2 years ago

Le problème a été résolu en connectant la raspberry aux boutons avec un filtre anti-rebond basé sur deux MAX1768EUT. L'Arduino a été supprimé du système. L'alimentation de la raspberry a été séparée de celle des électroaimants. La raspberry a été mise dans une cage de Faraday.