Solaire2012-1 : Différence entre versions

De Wiki de bureau d'études PeiP
(Deuxième étape: Programmer le robot)
(Conclusion)
 
(31 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
 
'''La première version du robot'''
 
'''La première version du robot'''
  
La première étape est la construction du robot. Cette première étape n'est pas la plus simple à réaliser, car il faut en effet poser sur un robot assez petit deux panneaux solaires relativement grands. Un premier robot fut donc construit en suivant la notice de montage fournie dans la boite de LégoMindstorm. Mais la configuration de ce premier robot faisait qu'il était très difficile d'accéder au contrôleur à cause de la position des panneaux solaires. De plus, le support des panneaux solaires qui était fragile faisait que ce robot n'était pas satisfaisant.
+
La première étape est la construction du robot. Cette première étape n'est pas la plus simple à réaliser, car il faut en effet poser sur un robot assez petit deux panneaux solaires relativement grands. Un premier robot fut donc construit en suivant la notice de montage fournie dans la boite de LégoMindstorm. Mais la configuration de ce premier robot faisait qu'il était très difficile d'accéder au contrôleur à cause de la position des panneaux solaires. De plus, le support des panneaux solaires était fragile, la solution n'était pas satisfaisante.
  
[[Image:First.jpg|thumb|upright=0.80|alt=First|center|Sur cette première version du robot, l'accès au contrôleur est difficile, et le robot fragile]]
+
[[Image:First.jpg|200px|thumb|upright=0.80|alt=First|center|Sur cette première version du robot, l'accès au contrôleur est difficile, et le robot fragile]]
  
 
'''La version finale'''
 
'''La version finale'''
  
Le premier robot fut entièrement démonté, et un deuxième robot fut alors construit. Un des deux panneaux solaires fut monté sur un servomoteur LégoMindstorm. L'idée est que le panneau s'incline en fonction de l'incidence des rayons lumineux pour un rendement optimal. Le panneau se retrouve alors en hauteur, ce qui permet aussi d’accéder plus facilement au contrôleur. Un emplacement fut également prévu pour la FoxBoard et l'Arduino. Le deuxième panneau solaire a quant à lui été installé sur l'emplacement prévu pour la FoxBoard-Arduino. Des roues de petite voiture ont été installées à l'arrière afin de renforcer cet emplacement, les légos n'étant pas assez résistants pour supporter la masse d'un panneau solaire, d'un Arduino et d'une FoxBoard. Enfin, un sonar a ultra-sons à été installé à l'avant afin de pouvoir éviter des obstacles.
+
Le premier robot fut entièrement démonté, et un deuxième robot fut alors construit. Un des deux panneaux solaires fut monté sur un servomoteur LégoMindstorm. L'idée est que le panneau s'incline en fonction de l'incidence des rayons lumineux pour un rendement optimal. Le panneau se retrouve alors en hauteur, ce qui permet aussi d’accéder plus facilement au contrôleur. Un emplacement fut également prévu pour la FoxBoard et l'Arduino. Le deuxième panneau solaire a quand à lui été installé sur l'emplacement prévu pour la FoxBoard-Arduino. Des roues de petite voiture ont été installées à l'arrière afin de renforcer cet emplacement, les legos n'étant pas assez résistants pour supporter la masse d'un panneau solaire, d'un Arduino et d'une FoxBoard. Enfin, un sonar à ultrasons à été installé à l'avant afin de pouvoir éviter des obstacles.
  
 +
=Deuxième étape: programmer le robot=
  
=Deuxième étape: Programmer le robot=
+
a) '''Le robot se déplace en autonomie
 +
'''
 +
 
 +
Le premier point imposé par le cahier des charges est que le robot doit pouvoir se déplacer à volonté dans une pièce, de manière autonome, tout en évitant les obstacles. Ce premier point fut programmé en "LegoMindstorm", car il est très facile d'utilisation. Sur la vidéo suivante, on voit que le robot peut en effet se déplacer de manière autonome (lien pour le téléchargement de la vidéo):
 +
 
 +
[[Fichier:Autonomie.mp4|400px|thumb|center|Le robot se déplace en évitant les obstacles]] 
  
''/* à compléter avec les algorithmes utilisés, l'ajout et l'interconnexion entre Arduino, Foxboard, brique NXT, ... */''
 
  
a) '''Le robot se déplace en autonomie
+
[[Fichier:Autonomie.jpg|450px|thumb|center|le robot se déplace en autonomie dans une pièce tout en évitant les obstacles]]
'''
 
Le premier point imposé par le cahier des charges est que le robot doit pouvoir se déplacer à volonté dans une pièce, de manière autonome, tout en évitant les obstacles. Ce premier point fut programmé en "LégoMindstorm", car il est très facile d'utilisation. Sur la vidéo suivante, on voit que le robot peut en effet se déplacer de manière autonome (lien pour le téléchargement de la vidéo):
 
  
[[Fichier:Autonomie.mp4|400px|thumb|center|Le robot se déplace en évitant les obstacles]]
 
  
 
b) '''Le robot mesure l'ensoleillement maximal
 
b) '''Le robot mesure l'ensoleillement maximal
 
'''
 
'''
Pendant que que robot se déplace en autonomie dans la pièce, il va mesurer l'ensoleillement maximale à l'aide d'une photorésistance branchée sur une plaquette Arduino. Plus la luminosité sera élevée, plus la valeur renvoyée par l'Arduino sera élevée; inversement, plus la luminosité est faible, plus la valeur renvoyée par l'Arduino sera faible. Voici l’algorithme qui permet d'obtenir la valeur maximale de luminosité:
+
 
 +
Pendant que que robot se déplace en autonomie dans la pièce, il va mesurer l'ensoleillement maximal à l'aide d'une photorésistance connectée à une plateforme Arduino. Plus la luminosité sera élevée, plus la valeur renvoyée par l'Arduino sera élevée; inversement, plus la luminosité est faible, plus la valeur renvoyée par l'Arduino sera faible. Voici le montage électronique qui permet d'obtenir la valeur de luminosité:
 +
 
 +
[[Fichier:Montage photor.jpg|450px|thumb|center| Montage pour Arduino]]
 +
 
 +
 
 +
 
 +
Ce montage ne fera que mesurer l'ensoleillement. Contrairement à la première version du robot, la valeur maximale ne sera pas enregistrée dans l'Arduino, mais envoyée au contrôleur NXC via Bluetooth. C'est ce dernier qui fera la comparaison entre toutes les valeurs enregistrée et gardera en mémoire la plus haute. Tout cela est détaillé dans la suite.
 +
 
 +
c) '''Récupérer les valeurs d'ensoleillement.'''
 +
 
 +
Une fois le programme chargé sur l'Arduino et ce dernier branché sur la Foxboard, il faut pouvoir récupérer la valeur d'ensoleillement mesurée par la photorésistance. Comment ? A l'aide d'un programme rédigé en langage C. Ce programme va récupérer la valeur lue sur la prise USB. Cette valeur sera alors envoyée par Bluetooth au contrôleur NXC. Ce sera lui qui va comparer et garder en mémoire la valeur maximale d'ensoleillement. Ce programme est disponible ci-dessous.
 +
 
 +
[[Fichier:progfinal.c|200px|thumb|center]]
 +
 
 +
Une fois la valeur d'ensoleillement envoyée, il faut pouvoir la comparer avec la précédente valeur. Un premier algorithme de comparaison a été créé, en utilisant le langage par bloc de LégoMindstorm. Les variables créées étaient ainsi de type 'Numérique'. Le problème était que, malgré avoir vérifié plusieurs fois que la FoxBoard était bien relié en Bluetooth à la brique NXT (redémarrer la FoxBoard, le boitier NXT, les reconnecter, etc), le programme ne s'exécutait pas. C'est-à-dire que le robot continuait de se promener dans la pièce pendant la seconde phase de recherche (recherche d'un certain poucentage de la luminosité maximum) et ne s'arrêtait jamais, même quand la photorésistance était soumise à une lumière intense (lumière d'un flash de téléphone portable). De plus, le programme a été modifié de sorte que la brique NXT affiche les valeurs reçues par la FoxBoard. La aussi, échec, l'écran n'affichait aucune valeur. Après plusieurs modification du programme, il s'est avéré que les données envoyées par la FoxBoard sont de type 'Texte', les variables des anciens programmes étant de type 'Numérique', il y avait forcément incompatibilité entre les données envoyées par la Foxboard et les données attendues par la brique NXT. La clé du problème était alors de changer les variables dans le programme LégoMindstorm.
 +
 
 +
Par la suite, le problème principal était qu'on ne peut pas comparer les valeurs de deux variables de types 'Texte', comme on le ferait avec deux variables de types 'Numérique'. L'idée alors fut de mettre les données reçues par la brique NXT dans un fichier, pour pouvoir ensuite comparer ce dernier avec un autre fichier. Malgré l'aide de plusieurs de mes collègues, le manque de temps dut à la difficulté du sujet et le fait que j'étais seul pour concevoir ce robot a fait que le problème n'a put être résolu dans les délais impartis.
 +
 
 +
Ci-dessous: le schéma utilisé pour que la brique NXT récupère la valeur d'ensoleillement:
 +
 
 +
[[Fichier:Montage.jpg|400px|thumb|center|]]
  
 
=Les difficultés rencontrées=
 
=Les difficultés rencontrées=
  
''/* à détailler aussi */''
+
Dans ce paragraphe seront détaillées les difficultés rencontrées, et comment elles ont été surmontées.
 +
 
 +
- Problèmes de conception liés à la taille des panneaux solaires. La solution: la première version du robot fut entièrement démontée. La version finale fut montée en pensant à l'agencement des panneaux solaires dès le début.
 +
 
 +
- Difficulté liée à au branchement de l'arduino sur le Foxboard. Il fallait pouvoir récupérer la valeur d'ensoleillement que l'arduino récupérait. Solution: Un programme rédigé en langage C à été utilisé pour pouvoir récupérer la valeur d'ensoleillement.
 +
 
 +
- Difficulté liée à la compatibilité des données envoyées par la FoxBoard.
 +
 
 +
-Difficultés liées à plusieurs problèmes informatiques: une première FoxBoard a été utilisé pour la réalisation du projet, mais après plusieurs séances, je me suis rendue compte que c'était la FoxBoard elle-même qui fonctionnait très mal, et ce n'était pas un problème de configuration comme je l'avais pensé au départ.
 +
 
 +
=Conclusion=
 +
 
 +
Dans cette partie sera traitée la conclusion du projet, et des conseils seront donnés aux futurs PeiP désireux de mener ce projet à son terme.
  
Dans ce paragraphe seront détaillées les difficultés rencontrées, et comment elles ont été surmontées.
+
Pour conclure, on peut dire que ce projet n'a put être conclu à temps à cause de difficultés majeures qui n'ont pas pu être résolues rapidement. Ainsi, le premier souci majeur rencontré fut la conception même du robot. Les deux panneaux solaires, imposants, devaient prendre place sur ce dernier. Il fallait de plus penser à faciliter au maximum l'accès à la brique NXT pour pouvoir changer les piles ou charger des programmes avec le plus d'aisance possible. Enfin, il faut avoir à l'idée qu'il faut prévoir une place assez conséquente sur le robot pour pouvoir installer dessus la FoxBoard, son alimentation, et l'arduino. Le second problème majeur était l'acquisition de la luminosité. Un arduino avec une photorésistance fut alors utilisé, mais il fallait que la brique NXT récupère cette valeur d'ensoleillement. Le programme progfinal.c disponible sur cette page a alors été utilisé et exécuté sur la FoxBoard. Par la suite, j'ai rencontré des soucis techniques avec cette même FoxBoard pendant la suite du projet. Enfin, le robot devait exécuter un programme qui, dans un premier temps, enregistrait la valeur maximale d'ensoleillement, puis dans un deuxième temps, recherchait un certain pourcentage de cette valeur maximale. Une fois que ce certain pourcentage était dépassé, le robot devait se stopper. La aussi, problème, le type de variable utilisé n'était pas la bonne, il fallait utiliser une variable de type texte, plutôt qu'une variable de type numérique.
 +
 
 +
Conseils pour les futurs PeiP:
 +
 
 +
-Dès la première séance, penser à bien agencer les panneaux solaires, installer la brique NXT de sorte qu'elle soit facile d'accès. Penser également à prévoir une place sur le robot pour pouvoir installer la FoxBoard, sa batterie et l'arduino.
 +
 
 +
-Utiliser le programme "progfinal.c" disponible sur  et l’exécuter sur la FoxBoard pour pouvoir récupérer les valeurs d'ensoleillement.
  
- Problèmes de conception liés à la taille des panneaux solaires.
+
-Mettre les données reçues par la FoxBoard dans un fichier (si programmation par bloc).
-> Solution: la première version du robot fut entièrement démontée. La version finale fut montée en pensant à l'agencement des panneaux solaires dès le début.
 

Version actuelle datée du 27 mai 2013 à 14:46

Première étape: Construire le robot

La première version du robot

La première étape est la construction du robot. Cette première étape n'est pas la plus simple à réaliser, car il faut en effet poser sur un robot assez petit deux panneaux solaires relativement grands. Un premier robot fut donc construit en suivant la notice de montage fournie dans la boite de LégoMindstorm. Mais la configuration de ce premier robot faisait qu'il était très difficile d'accéder au contrôleur à cause de la position des panneaux solaires. De plus, le support des panneaux solaires était fragile, la solution n'était pas satisfaisante.

First
Sur cette première version du robot, l'accès au contrôleur est difficile, et le robot fragile

La version finale

Le premier robot fut entièrement démonté, et un deuxième robot fut alors construit. Un des deux panneaux solaires fut monté sur un servomoteur LégoMindstorm. L'idée est que le panneau s'incline en fonction de l'incidence des rayons lumineux pour un rendement optimal. Le panneau se retrouve alors en hauteur, ce qui permet aussi d’accéder plus facilement au contrôleur. Un emplacement fut également prévu pour la FoxBoard et l'Arduino. Le deuxième panneau solaire a quand à lui été installé sur l'emplacement prévu pour la FoxBoard-Arduino. Des roues de petite voiture ont été installées à l'arrière afin de renforcer cet emplacement, les legos n'étant pas assez résistants pour supporter la masse d'un panneau solaire, d'un Arduino et d'une FoxBoard. Enfin, un sonar à ultrasons à été installé à l'avant afin de pouvoir éviter des obstacles.

Deuxième étape: programmer le robot

a) Le robot se déplace en autonomie

Le premier point imposé par le cahier des charges est que le robot doit pouvoir se déplacer à volonté dans une pièce, de manière autonome, tout en évitant les obstacles. Ce premier point fut programmé en "LegoMindstorm", car il est très facile d'utilisation. Sur la vidéo suivante, on voit que le robot peut en effet se déplacer de manière autonome (lien pour le téléchargement de la vidéo):

Fichier:Autonomie.mp4


le robot se déplace en autonomie dans une pièce tout en évitant les obstacles


b) Le robot mesure l'ensoleillement maximal

Pendant que que robot se déplace en autonomie dans la pièce, il va mesurer l'ensoleillement maximal à l'aide d'une photorésistance connectée à une plateforme Arduino. Plus la luminosité sera élevée, plus la valeur renvoyée par l'Arduino sera élevée; inversement, plus la luminosité est faible, plus la valeur renvoyée par l'Arduino sera faible. Voici le montage électronique qui permet d'obtenir la valeur de luminosité:

Montage pour Arduino


Ce montage ne fera que mesurer l'ensoleillement. Contrairement à la première version du robot, la valeur maximale ne sera pas enregistrée dans l'Arduino, mais envoyée au contrôleur NXC via Bluetooth. C'est ce dernier qui fera la comparaison entre toutes les valeurs enregistrée et gardera en mémoire la plus haute. Tout cela est détaillé dans la suite.

c) Récupérer les valeurs d'ensoleillement.

Une fois le programme chargé sur l'Arduino et ce dernier branché sur la Foxboard, il faut pouvoir récupérer la valeur d'ensoleillement mesurée par la photorésistance. Comment ? A l'aide d'un programme rédigé en langage C. Ce programme va récupérer la valeur lue sur la prise USB. Cette valeur sera alors envoyée par Bluetooth au contrôleur NXC. Ce sera lui qui va comparer et garder en mémoire la valeur maximale d'ensoleillement. Ce programme est disponible ci-dessous.

Fichier:Progfinal.c

Une fois la valeur d'ensoleillement envoyée, il faut pouvoir la comparer avec la précédente valeur. Un premier algorithme de comparaison a été créé, en utilisant le langage par bloc de LégoMindstorm. Les variables créées étaient ainsi de type 'Numérique'. Le problème était que, malgré avoir vérifié plusieurs fois que la FoxBoard était bien relié en Bluetooth à la brique NXT (redémarrer la FoxBoard, le boitier NXT, les reconnecter, etc), le programme ne s'exécutait pas. C'est-à-dire que le robot continuait de se promener dans la pièce pendant la seconde phase de recherche (recherche d'un certain poucentage de la luminosité maximum) et ne s'arrêtait jamais, même quand la photorésistance était soumise à une lumière intense (lumière d'un flash de téléphone portable). De plus, le programme a été modifié de sorte que la brique NXT affiche les valeurs reçues par la FoxBoard. La aussi, échec, l'écran n'affichait aucune valeur. Après plusieurs modification du programme, il s'est avéré que les données envoyées par la FoxBoard sont de type 'Texte', les variables des anciens programmes étant de type 'Numérique', il y avait forcément incompatibilité entre les données envoyées par la Foxboard et les données attendues par la brique NXT. La clé du problème était alors de changer les variables dans le programme LégoMindstorm.

Par la suite, le problème principal était qu'on ne peut pas comparer les valeurs de deux variables de types 'Texte', comme on le ferait avec deux variables de types 'Numérique'. L'idée alors fut de mettre les données reçues par la brique NXT dans un fichier, pour pouvoir ensuite comparer ce dernier avec un autre fichier. Malgré l'aide de plusieurs de mes collègues, le manque de temps dut à la difficulté du sujet et le fait que j'étais seul pour concevoir ce robot a fait que le problème n'a put être résolu dans les délais impartis.

Ci-dessous: le schéma utilisé pour que la brique NXT récupère la valeur d'ensoleillement:

Montage.jpg

Les difficultés rencontrées

Dans ce paragraphe seront détaillées les difficultés rencontrées, et comment elles ont été surmontées.

- Problèmes de conception liés à la taille des panneaux solaires. La solution: la première version du robot fut entièrement démontée. La version finale fut montée en pensant à l'agencement des panneaux solaires dès le début.

- Difficulté liée à au branchement de l'arduino sur le Foxboard. Il fallait pouvoir récupérer la valeur d'ensoleillement que l'arduino récupérait. Solution: Un programme rédigé en langage C à été utilisé pour pouvoir récupérer la valeur d'ensoleillement.

- Difficulté liée à la compatibilité des données envoyées par la FoxBoard.

-Difficultés liées à plusieurs problèmes informatiques: une première FoxBoard a été utilisé pour la réalisation du projet, mais après plusieurs séances, je me suis rendue compte que c'était la FoxBoard elle-même qui fonctionnait très mal, et ce n'était pas un problème de configuration comme je l'avais pensé au départ.

Conclusion

Dans cette partie sera traitée la conclusion du projet, et des conseils seront donnés aux futurs PeiP désireux de mener ce projet à son terme.

Pour conclure, on peut dire que ce projet n'a put être conclu à temps à cause de difficultés majeures qui n'ont pas pu être résolues rapidement. Ainsi, le premier souci majeur rencontré fut la conception même du robot. Les deux panneaux solaires, imposants, devaient prendre place sur ce dernier. Il fallait de plus penser à faciliter au maximum l'accès à la brique NXT pour pouvoir changer les piles ou charger des programmes avec le plus d'aisance possible. Enfin, il faut avoir à l'idée qu'il faut prévoir une place assez conséquente sur le robot pour pouvoir installer dessus la FoxBoard, son alimentation, et l'arduino. Le second problème majeur était l'acquisition de la luminosité. Un arduino avec une photorésistance fut alors utilisé, mais il fallait que la brique NXT récupère cette valeur d'ensoleillement. Le programme progfinal.c disponible sur cette page a alors été utilisé et exécuté sur la FoxBoard. Par la suite, j'ai rencontré des soucis techniques avec cette même FoxBoard pendant la suite du projet. Enfin, le robot devait exécuter un programme qui, dans un premier temps, enregistrait la valeur maximale d'ensoleillement, puis dans un deuxième temps, recherchait un certain pourcentage de cette valeur maximale. Une fois que ce certain pourcentage était dépassé, le robot devait se stopper. La aussi, problème, le type de variable utilisé n'était pas la bonne, il fallait utiliser une variable de type texte, plutôt qu'une variable de type numérique.

Conseils pour les futurs PeiP:

-Dès la première séance, penser à bien agencer les panneaux solaires, installer la brique NXT de sorte qu'elle soit facile d'accès. Penser également à prévoir une place sur le robot pour pouvoir installer la FoxBoard, sa batterie et l'arduino.

-Utiliser le programme "progfinal.c" disponible sur et l’exécuter sur la FoxBoard pour pouvoir récupérer les valeurs d'ensoleillement.

-Mettre les données reçues par la FoxBoard dans un fichier (si programmation par bloc).