Aller au contenu


Photo

Comment sortir de cette boucle ??


  • Veuillez vous connecter pour répondre
77 réponses à ce sujet

#61 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 20 février 2018 - 02:45

En théorie il faut une notion de temps et de distance, en gros faire la dérivé du signal distance mesuré ... 
Si la dérivé est positive ça veut dire que la personne s'éloigne, si elle est négative ça veut dire que la personne se rapproche en fonction de si le capteur est du côté intérieur ou extérieur on peut savoir si la personne rentre ou sors ... 

Par contre il faut bien discriminer les deux cas car grosso modo le capteur va renvoyer une grande distance pendant longtemps, puis d'un coup la distance renvoyé est très faible puis la distance grandie progressivement ... ou à l'inverse la distance va se réduire progressivement puis d'un coup grandir ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#62 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 20 février 2018 - 04:09

Pour essayer de formaliser un peu le problème : l'information qui doit être extraite pour détecter le sens du déplacement est une variation dans le temps.
Au moins deux solutions :
- avec deux capteurs, facile : on détecte juste le passage devant chacun, chaque capteur pointant en travers de la porte. Je pense qu'on comprend tous que si le capteur le plus en dehors de la pièce est activé d'abord, c'est que la personne vient de l'extérieur, donc entre. Et vice-versa.
- avec un capteur : pas possible si on ne mesure que le passage par la porte. Par contre, comme l'a suggéré Pmdd, si on place le capteur plus ou moins en face de la porte, on peut mesurer la distance des obstacles qui passent par la porte (les gens en général). Celle-ci vaut une certaine valeur par défaut quand personne n'est là (e.g. 4m), une certaine valeur quand la personne est au milieu du montant, etc.
Comme le déplacement de la personne à travers la porte cause l'évolution de cette mesure de distance dans le temps, on peut, comme le dit Mike, calculer la dérivée de ce signal et en déduire le sens (une simple soustraction suffit d'ailleurs).
Comme il le suggère également, il faut aussi penser au fait que la personne va apparaître dans le faisceau par rapport à la distance par défaut, mais si ce que je viens de dire est clair, ça ne devrait pas être dur :)
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#63 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 20 février 2018 - 11:31

Ok, revenons au programme.

- tu commence par faire 2 boucles infinies imbriquées. Pourquoi ? A mon avis, une seule suffit.
- tu utilises 2 capteurs infrarouges, alors que tu n'en as qu'un seul !
- tu as 2 capteurs de lumière. Pourquoi ne les utilises-tu pas ?
- tu fais du multitâche. Cela complique énormément la situation.
- pourquoi ne pas partir d'une situation simple, puis monter en complexité.

Explique moi exactement ce que tu veux faire.

L'idée de pmdd est intéressante.
Tu utilises un capteur de lumière pour l'entrée et un autre pour la sortie.
Ainsi, on sait immédiatement si une personne sort ou entre dans la pièce.
Ces 2 capteurs se trouvant à une distance raisonnable l'un de l'autre.

 

Bonjour Oracid,
 
 
- alors les 2 boucles imbriqués servent a revenir au tout debut de la deuxième boucle, parceque sinon, a cause du multitache a l'interieur de la boucle, comme tu le vois, la condition du bas ne peut pas être relié à la boucle (il n'y a pas de fil sur le condition du bas; ce n'est pas un oubli, mais c'est juste qu'un multitache a l'interieur d'une boucle ne permet pas de relier la condition en bas a la sortie de boucle.
Ce qui fait que si on n'agit pas de cette façon, il garde des données du capteur du passage précedent, et le programme ne fonctionne pas correctement
C'est assez difficile a expliquer, en fait faut vraiment tester le programme avec la brique relié au pc et suivre sur l'ecran de l'ordi ou se trouve le programme a chaque étape (ça montre en live ou est le programme) pour comprendre.
 
- Non Oracid, en fait je n'utilise pas deux capteurs infrarouge ou deux capteurs ultrason
A chaque fois, c'est le même capteur qui est utilisé, je déclare le même capteur sur le même port.
En gros c'est une double condtion:
 
1) dans un premier temps le programme attends de voir si la distance du capteur infrarouge ou ultrason est inférieure ou égale à une certaine distance et se dirige respéctivement soit vers la branche du haut du programme soit vers celle du bas.
 
2) Mettons que le programme a detecté une valeur sur le capteur ultrason inférieure ou égale à 40 cm, le programme est donc dans la branche du haut
 
3) puisque il est dans la branche du haut c'est que quelqu'un est passé devant le capteur
 
4) le selecteur qui vien après, determiné qu'il faut que la distance du capteur infrarouge doit etre superieure a 90, donc personne n'est devant.
 
5) pour finir il faut que le capteur infrarouge capte une valur inferieure à 50 pour rentré dans la condition ou il dit hello.
 
En gros, il dira hello que si quelqu'un passe d'abord devant le capteur ultrason et ensuite devant le capteur IR
 
C'est pareil pour la branche du bas mais en inversé on va dire
 
Je ne sais pas si je m'explique bien sinon posez moi des questions.
Mais faut vraiment suivre le programme en live sur le PC avec la brique relié au PC pour bien comprendre le fonctionnement
 
Le raisonnement de mon programme est apparament juste, puisque je continue à le tester et il semble fonctionner parfaitement.
Je souhaiterais quand même que des personnes ici testent aussi de leur côté, pour me dire si tout fonctionne bien
 
- Oui je pense que si j'utilisais les deux capteurs de lumière, en utilisant le même principe que dans mon programme, ça devrait fonctionner tout aussi bien.
 
PS: il me reste un seul souci a regler dans mon programme.
C'est par exemple quand on passe devant le premier capteur et pas devant le second ou inversement (on veut rentrer ou sortir mais on change d'avis)
c'est apparament le seul moment ou mon programme ne fonctionne plus correctement, je suis en train de regarder ça
Une fois ce souci reglé il restera surement à optimiser le programme, enlever ce qui n'est pas strictement necessaire...nettoyer un peu le code en quelques sorte


#64 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 21 février 2018 - 08:07

Je vois ce que tu veux dire pour les 2 boucles imbriquées.

Mais je n'ai pas tout compris.
Pourrais-tu exprimer en bon français, pas en pseudo-code, ce que tu veux faire.
Et me dire exactement quel est le matériel en ta possession.

#65 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 21 février 2018 - 12:16

Ce que je veux que ça fasse une fois le programme completement terminé:

- que ça dise bonjour, uniquement losque l'on a passé le capteur ultrason suivi du capteur Infrarouge et que ça affiche sur l'ecran ENTREES: le chiffre en format 000 (trois chiffres)

 

' que ça dise au revoir, uniquement lorsque on est passé devant le capteur infrarouge (c'est a dire lorsque on passe devant le capteur infrarouge et qu'on le depasse) et qu'on dépasse ensuite le capteur ultrason.
Sur l'ecran le ligne SORTIES: affiche le chiffre mis à jour en format 000

 
Alors, le matériel utilisé dans ce projet est un capteur ultrason et un capteur infrarouge.
sinon je posséde:

- 1 capteur ultrason
- 1 capteur infrarouge

- 2 capteur de lumière / couleur
- 1 capteur tactile
- 1 gyroscope
- 1 camera PIxy modèle spécial Lego

Je veux (et a priori c'est ce que mon programme fait) que quand on rentre, on détecte la diminution de distance face au capteur ultrason
Il faut que quand cette diminution est detecté le capteur infrarouge lui ai une grande distance de capté, ce qui veux dire que rien n'est devant.

Donc lorsque la diminution de distance est detecté devant le capteur Ultrason, et que ensuite après cela on détecte une diminution de distance devant le capteur infrarouge ça dit bonjour

Inversement lorsque, on détecte en premier lieu une diminution de distance sur le capteur infrarouge, suivi d'une diminution de distance sur le capteur ultrason, ça dit au revoir

le scèma précis est quand on rentre:

diminution de distance sur le capteur ultrason en même temps qu'une grande distance sur le capteur  infrarouge
cela est suivi d'une augmentation de distance sur le capteur ultrason, suivi par une diminution de distance sur le capteur infrarouge
et pour finir a nouveau une augmentation de distance sur le capteur infrarouge.

Quand cette chaine de detection a été effectué dans cet ordre, celà signifie que la personne est rentré.

Quand ça se passe dans le sens inverse c'est qu'une personne est sortie.
 

Voilà ce que c'est mon programme
comme je le disais, ça fonctionne bien, sauf quand quelqu'un passe devant un premier capteur et ensuite il fait demi tour sans passer devant le second.
Je regarderai dès que je peux comment ranger le programme.

Comme je le précisais aussi, ça fonctionne bien, mais faidra ensuite une fois le programme terminé que je vérifie, s'il n'y a pas des portion de code inutile et qui peuvent donc être supprimées histoire d'avoir un code plus propre

 

Est-ce que c'est un peu plus compréhensible ?? ou pas trop ?

PS: petit scèma du montage

explication2.jpg
 



#66 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 21 février 2018 - 01:27

Tu peux mettre les deux capteurs relativement proches (~5cm). S'ils tirent en parallèle mais que ce sont des technos différentes, il n'y a pas de risque d'interférence.
Avec ces deux capteurs en parallèle, tu peux juste détecter la présence devant le capteur (e.g. distance < valeur seuil), l'information de direction vient de l'activation successive des deux capteurs.
Bien entendu, il est toujours possible pour quelqu'un de "faire exprès" de ne passer que devant un des capteurs et de s'arrêter avant l'autre ; mais il faut le faire exprès. Et si ça arrive, ton système devrait juste ne pas réagir, c'est bien ça ?
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#67 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 21 février 2018 - 01:31

Tu peux mettre les deux capteurs relativement proches (~5cm). S'ils tirent en parallèle mais que ce sont des technos différentes, il n'y a pas de risque d'interférence.
Avec ces deux capteurs en parallèle, tu peux juste détecter la présence devant le capteur (e.g. distance < valeur seuil), l'information de direction vient de l'activation successive des deux capteurs.
Bien entendu, il est toujours possible pour quelqu'un de "faire exprès" de ne passer que devant un des capteurs et de s'arrêter avant l'autre ; mais il faut le faire exprès. Et si ça arrive, ton système devrait juste ne pas réagir, c'est bien ça ?

Justement, c'est la ou pour l'instant mon systeme, ne fonctionne pas encore correctement
Losque on passe devant le premier capteur et qu'on fait demi-tour sans passer devant le second, ça ne fonctionne plus correctement lorsque on passe ensuite devant les deux capteurs succèssivement
Je suis en train d'essayer de corriger celà

Pour le reste, lorsque l'on passe dans un sens ou dans l'autre devant les deux capteurs successivement, ça fonctionne bien



#68 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 21 février 2018 - 02:06

tu peux rajouter un délais ( TimeOut ) à partir duquel ça revient au début du programme sans chercher à savoir si la personne est  bien passée ou pas =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#69 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 932 messages
  • Gender:Male

Posté 21 février 2018 - 02:24

tu peux rajouter un délais ( TimeOut ) à partir duquel ça revient au début du programme sans chercher à savoir si la personne est  bien passée ou pas =) 

Je préconise de mettre un vérin pour frapper les chevilles des personnes qui font exprès de rentrer mais de ne pas sortir  :yahoo:  Faut pas exagérer ! 



#70 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 21 février 2018 - 02:43

Je vais voir ce que je peux faire.
Mais je vais plutôt partir sur quelque chose de plus simple et avec un capteur, en m'inspirant de la proposition de pmdd.
Tout ça me parait trop compliqué.

Plutôt que de faire 2 boucles imbriquées, tu pourrais faire 2 tâches parallèles (avec 2 balises début).

Cliquez moi.
Multitache.png

#71 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 21 février 2018 - 02:45

tu peux rajouter un délais ( TimeOut ) à partir duquel ça revient au début du programme sans chercher à savoir si la personne est  bien passée ou pas =) 

Le problème du délais, c'est qu'on ne peux jamais savoir combien de temps la personne va betement rester devant un capteur.
En gros, ça ne va pas gérer tous les cas de figure me semble-t-il

 

 

Je préconise de mettre un vérin pour frapper les chevilles des personnes qui font exprès de rentrer mais de ne pas sortir  :yahoo:  Faut pas exagérer ! 

:laugh1:  faut que je garde cette idée en réserve



#72 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 21 février 2018 - 03:24

un délais à partir du moment où la personne n'est plus détecté devant un capteur ... 

Grosso modo pour truander le système il faudra : 
passer devant un capteur, attendre un certain temps entre les deux capteurs puis passer le second capteur ... 
Mais si tu fais en sorte que c'est pas possible de rester entre les deux sans les déclencher eh bien ça marche!


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#73 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 21 février 2018 - 07:10

Voici ma solution, très simple, inspirée de l'idée de pmdd.

Lorsque le capteur US détecte un passage à moins de 50cm, si la distance est inférieure à 25cm, l'EV3 dit "Hello", sinon il dit "Goodbye".
On peut éventuellement faire de multiple améliorations, mais avec un seul capteur de distance, pour moi, la base est là.

Cliquez moi.
AvecUS.png

#74 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 21 février 2018 - 10:35

Voici ma solution, très simple, inspirée de l'idée de pmdd.

Lorsque le capteur US détecte un passage à moins de 50cm, si la distance est inférieure à 25cm, l'EV3 dit "Hello", sinon il dit "Goodbye".
On peut éventuellement faire de multiple améliorations, mais avec un seul capteur de distance, pour moi, la base est là.

 

Je ne l'ai pas encore testé, mais en regardant le code, il me semble en effet que ça devrait fonctionner.
Je testerai celà tout à l'heure

Du coup mon code avec les deux capteurs (qui fonctionne dans tous les cas maintenant) n'est peut etre plus très utille



#75 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 22 février 2018 - 07:24

Du coup mon code avec les deux capteurs (qui fonctionne dans tous les cas maintenant) n'est peut etre plus très utille

Tu peux essayer de l'améliorer.
- Déjà, fais 2 tâches en parallèle, comme je te l'ai proposé plus haut.
- Lorsque tu fais une mesure avec les capteurs US et IR, récupère la valeur mesurée dans une variable, pour éviter de relancer la mesure.
- Evite de casser les boucles.
- laisse tomber les comptages de personnes, dans un premier temps, pour faire le plus simple possible.
- pourquoi ne pas utiliser 2 capteurs de lumière. C'est beaucoup plus simple dans la logique d'utilisation de 2 capteurs. En analysant le sens de leur mesure, tu serais capable de savoir dans quel sens la personne se déplace.

Lorsque tout sera plus clair, alors peut-être que tu te rendras compte que le fait d'utiliser 2 capteurs est plus sécurisant, qu'un seul.

#76 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 22 février 2018 - 02:08

je viens de tester , c'est assez aléatoire quand ça dit bonjour ou au revoir, selon qu'on passe un peu plus a droite ou a gauche quand on rentre dans la piece.

Je sais pas si je suis le seul a constater celà dans mes test ????



#77 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 22 février 2018 - 06:50

je viens de tester , c'est assez aléatoire quand ça dit bonjour ou au revoir, selon qu'on passe un peu plus a droite ou a gauche quand on rentre dans la piece.

Lorsque tout sera plus clair, alors peut-être que tu te rendras compte que le fait d'utiliser 2 capteurs est plus sécurisant, qu'un seul.

Ce n'est pas vraiment aléatoire, c'est que l'on a du mal à apprécier la distance.
C'est pour cette raison que je pense que l'utilisation de 2 capteurs est une solution plus sécurisante.

#78 cuda71

cuda71

    Membre occasionnel

  • Membres
  • Pip
  • 87 messages

Posté 22 février 2018 - 07:03

Et bien c'est beaucoup plus compliqué que ce que j'avais cru cette histoire  :unsure:






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users