Binome2017-8 : Différence entre versions
(→Programmation) |
|||
(19 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | [[Fichier:Robot Vincent Dubois.jpg| | + | <include nopre noesc src="/home/pedago/ppeip/include/video-Robot_Binome08_2017-iframe.html" /> |
+ | __TOC__ | ||
+ | [[Fichier:Robot Vincent Dubois.jpg|200px|right]] | ||
+ | <br style="clear: both;"> | ||
Ligne 6 : | Ligne 9 : | ||
A l’occasion de ce bureau d’étude, j’ai décidé de réaliser un robot communiquant « proie » miniature et entièrement autonome. Étant seul pour ce projet, j’ai préféré ne pas m’attarder sur la partie télécommande (Raspberry Pi) du robot. | A l’occasion de ce bureau d’étude, j’ai décidé de réaliser un robot communiquant « proie » miniature et entièrement autonome. Étant seul pour ce projet, j’ai préféré ne pas m’attarder sur la partie télécommande (Raspberry Pi) du robot. | ||
J’ai décidé de travailler autour de trois grands axes : | J’ai décidé de travailler autour de trois grands axes : | ||
− | + | * Réalisation de la carte électronique. | |
− | + | * Découpe et impression 3D du châssis. | |
− | + | * Programmation du robot. | |
=<div class="mcwiki-header" style="border-radius: 7px; padding: 7px; font-weight: bold; text-align: center; font-size: 80%; background: #8D8D8D; vertical-align: top; width: 98%;"> Cahier des charges </div>= | =<div class="mcwiki-header" style="border-radius: 7px; padding: 7px; font-weight: bold; text-align: center; font-size: 80%; background: #8D8D8D; vertical-align: top; width: 98%;"> Cahier des charges </div>= | ||
Ligne 18 : | Ligne 21 : | ||
[[Fichier:PCB_Vincent_Dubois.png|300px|thumb|left]] | [[Fichier:PCB_Vincent_Dubois.png|300px|thumb|left]] | ||
− | La conception de la carte de A à Z aurait été trop ambitieux étant donné le nombre de séances et les | + | La conception de la carte de A à Z aurait été trop ambitieux étant donné le nombre de séances et les connaissances nécessaires en électronique. J'ai donc décidé de reprendre le modèle déja existant des années précédentes. Toujours dans un soucis de taille, j'ai enlevé toutes la partie contrôleur de moteur qui n'est d'aucune utilité dans mon cas (propulsion uniquement avec les servomoteurs). J'ai également remplacé le suiveur de ligne par un capteur Hall sans oublier d'ajouter une résistance (10k) entre la sortie et l'alimentation du capteur. Enfin, j'ai essayé de diminuer au maximum les dimensions de la carte en comblant la place laissée par le contrôleur de moteur. |
[[Fichier:PCB_Vincent-Dubois.jpg|200px|thumb|center|PCB final]] | [[Fichier:PCB_Vincent-Dubois.jpg|200px|thumb|center|PCB final]] | ||
Ligne 24 : | Ligne 27 : | ||
La version finale du PCB : [[Média:PCB_Vincent-Dubois.zip]] | La version finale du PCB : [[Média:PCB_Vincent-Dubois.zip]] | ||
− | Pour ce qui est du soudage des | + | Pour ce qui est du soudage des composants : tous les composants surfaciques ont été soudé au four et les composants traversants au fer. |
=<div class="mcwiki-header" style="border-radius: 7px; padding: 7px; font-weight: bold; text-align: center; font-size: 80%; background: #8D8D8D; vertical-align: top; width: 98%;"> Châssis </div>= | =<div class="mcwiki-header" style="border-radius: 7px; padding: 7px; font-weight: bold; text-align: center; font-size: 80%; background: #8D8D8D; vertical-align: top; width: 98%;"> Châssis </div>= | ||
[[Fichier:Chassis_Vincent_Dubois.png|400px|thumb|left|Modèle SVG du châssis]] | [[Fichier:Chassis_Vincent_Dubois.png|400px|thumb|left|Modèle SVG du châssis]] | ||
− | Comme énoncé dans le cahier des charges, le robot doit avoir la taille la plus petite possible pour éviter d’être facilement repérable. Je suis donc | + | Comme énoncé dans le cahier des charges, le robot doit avoir la taille la plus petite possible pour éviter d’être facilement repérable. Je suis donc parti sur une forme circulaire à 2 étages. |
Afin de gagner du temps sur sa conception, le châssis a été entièrement découpé au laser sur une plaque de 3mm d'épaisseur (et non imprimé en 3D). | Afin de gagner du temps sur sa conception, le châssis a été entièrement découpé au laser sur une plaque de 3mm d'épaisseur (et non imprimé en 3D). | ||
− | L'étage du dessus est entièrement circulaire. Des trous ont été | + | L'étage du dessus est entièrement circulaire. Des trous ont été prévu à l'avant afin de fixer le PCB à l'aide de petites entretoises permettant de le surélever légèrement. |
− | La plaque du dessous est également circulaire avec deux dégagements pour les roues à l'arrière. Elle | + | La plaque du dessous est également circulaire avec deux dégagements pour les roues à l'arrière. Elle inclut des emplacements pour fixer la roue folle à l'avant, ainsi que pour le support des servo-moteurs placés à l'arrière sous la plaque. Ce dernier est imprimé en 3D. |
[[Fichier:Support_servo-moteur.jpg|thumb|200px|center|Support servo-moteurs]] | [[Fichier:Support_servo-moteur.jpg|thumb|200px|center|Support servo-moteurs]] | ||
Ligne 38 : | Ligne 41 : | ||
La batterie est placée entre les deux étages et est maintenue à l'aide de "T" traversants les deux plaques. | La batterie est placée entre les deux étages et est maintenue à l'aide de "T" traversants les deux plaques. | ||
Le sonar est également maintenue par des "T" à l'avant du robot. | Le sonar est également maintenue par des "T" à l'avant du robot. | ||
− | Le | + | Le maintien des deux plaques ensemble est réalisé par 3 entretoises placées en périphérie. |
− | Les roues sont aussi | + | Les roues sont aussi réalisées à la découpe laser même si on pourra les remplacer par d'autres imprimées en 3D en plastique souple. |
Le modèle de découpe final et le support de servomoteurs: [[Média:Châssis_Vincent-Dubois.zip]] | Le modèle de découpe final et le support de servomoteurs: [[Média:Châssis_Vincent-Dubois.zip]] | ||
Ligne 49 : | Ligne 52 : | ||
=='''Avancer'''== | =='''Avancer'''== | ||
+ | void avancer(int vitesse1, int vitesse2) { | ||
+ | servo1.write(90+vitesse1); | ||
+ | servo2.write(90-vitesse2); | ||
+ | } | ||
=='''Sonar'''== | =='''Sonar'''== | ||
+ | float sonar() { | ||
+ | digitalWrite(trig_pin, HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trig_pin, LOW); | ||
+ | long temps = pulseIn(echo_pin, HIGH); | ||
+ | float distance = (temps/2)*(340.0/1000); | ||
+ | return distance; | ||
+ | } | ||
=='''TSOP'''== | =='''TSOP'''== | ||
+ | int Tsop() { | ||
+ | if (irrecev.decode(&results)) { | ||
+ | int val = results.value; | ||
+ | irrecev.resume(); | ||
+ | return val; | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
=='''Emetteur IR'''== | =='''Emetteur IR'''== | ||
+ | void IR() { | ||
+ | iremet.sendNEC(2, 32); | ||
+ | irrecev.enableIRIn(); | ||
+ | } | ||
=='''Capteur Hall'''== | =='''Capteur Hall'''== | ||
+ | |||
+ | int Hall() { | ||
+ | if (digitalRead(hall_pin) == 0) { | ||
+ | return 1; | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
=<div class="mcwiki-header" style="border-radius: 7px; padding: 7px; font-weight: bold; text-align: center; font-size: 80%; background: #8D8D8D; vertical-align: top; width: 98%;"> Déroulement des séances </div>= | =<div class="mcwiki-header" style="border-radius: 7px; padding: 7px; font-weight: bold; text-align: center; font-size: 80%; background: #8D8D8D; vertical-align: top; width: 98%;"> Déroulement des séances </div>= | ||
Ligne 80 : | Ligne 114 : | ||
Modifications sur la carte existante : | Modifications sur la carte existante : | ||
− | + | *Enlever un TSOP car une proie n’a pas besoin d’autant de capteur infrarouge. | |
− | + | *Enlever le contrôleur de moteur car on veut un robot de petite taille donc la propulsion sera gérée par 2 servo-moteurs | |
− | + | *Enlever le détecteur de ligne (obsolète pour notre projet). | |
− | + | *Ajouter le capteur à effet Hall. | |
Le plus gros du travail consiste à réarranger la carte afin de gagné un peu de place et réduire la taille du robot. Il faut néanmoins penser a la difficulté à soudre les composant et donc ne pas trop serrer les connexions sur le PCB. | Le plus gros du travail consiste à réarranger la carte afin de gagné un peu de place et réduire la taille du robot. Il faut néanmoins penser a la difficulté à soudre les composant et donc ne pas trop serrer les connexions sur le PCB. | ||
Ligne 180 : | Ligne 214 : | ||
=='''15/03/2018'''== | =='''15/03/2018'''== | ||
− | Essai des TSOP : problème de masse. J'ai oublié de | + | Essai des TSOP : problème de masse. J'ai oublié de connecter un des deux TSOP à la masse sur le PCB |
+ Soudure au fer d'un fil de masse | + Soudure au fer d'un fil de masse | ||
+ essais. | + essais. |
Version actuelle datée du 16 juillet 2018 à 15:37
Sommaire
- 1 Introduction
- 2 Cahier des charges
- 3 PCB
- 4 Châssis
- 5 Programmation
- 6 Déroulement des séances
- 6.1 15/01/2018
- 6.2 16/01/2018
- 6.3 18/01/2018
- 6.4 19/01/2018
- 6.5 22/01/2018
- 6.6 25/01/2018
- 6.7 26/01/2018 - 29/01/2018
- 6.8 01/02/2018
- 6.9 05/02/2018
- 6.10 08/02/2018 - 12/02/2018
- 6.11 15/02/2018
- 6.12 19/02/2018
- 6.13 22/02/2018
- 6.14 05/03/2018
- 6.15 08/03/2018
- 6.16 12/03/2018
- 6.17 15/03/2018
- 6.18 19/03/2018 et 26/03/2018
- 6.19 09/04/2018
- 6.20 23/04/2018
Introduction
A l’occasion de ce bureau d’étude, j’ai décidé de réaliser un robot communiquant « proie » miniature et entièrement autonome. Étant seul pour ce projet, j’ai préféré ne pas m’attarder sur la partie télécommande (Raspberry Pi) du robot. J’ai décidé de travailler autour de trois grands axes :
- Réalisation de la carte électronique.
- Découpe et impression 3D du châssis.
- Programmation du robot.
Cahier des charges
PCB
La conception de la carte de A à Z aurait été trop ambitieux étant donné le nombre de séances et les connaissances nécessaires en électronique. J'ai donc décidé de reprendre le modèle déja existant des années précédentes. Toujours dans un soucis de taille, j'ai enlevé toutes la partie contrôleur de moteur qui n'est d'aucune utilité dans mon cas (propulsion uniquement avec les servomoteurs). J'ai également remplacé le suiveur de ligne par un capteur Hall sans oublier d'ajouter une résistance (10k) entre la sortie et l'alimentation du capteur. Enfin, j'ai essayé de diminuer au maximum les dimensions de la carte en comblant la place laissée par le contrôleur de moteur.
La version finale du PCB : Média:PCB_Vincent-Dubois.zip
Pour ce qui est du soudage des composants : tous les composants surfaciques ont été soudé au four et les composants traversants au fer.
Châssis
Comme énoncé dans le cahier des charges, le robot doit avoir la taille la plus petite possible pour éviter d’être facilement repérable. Je suis donc parti sur une forme circulaire à 2 étages. Afin de gagner du temps sur sa conception, le châssis a été entièrement découpé au laser sur une plaque de 3mm d'épaisseur (et non imprimé en 3D). L'étage du dessus est entièrement circulaire. Des trous ont été prévu à l'avant afin de fixer le PCB à l'aide de petites entretoises permettant de le surélever légèrement. La plaque du dessous est également circulaire avec deux dégagements pour les roues à l'arrière. Elle inclut des emplacements pour fixer la roue folle à l'avant, ainsi que pour le support des servo-moteurs placés à l'arrière sous la plaque. Ce dernier est imprimé en 3D.
La batterie est placée entre les deux étages et est maintenue à l'aide de "T" traversants les deux plaques. Le sonar est également maintenue par des "T" à l'avant du robot. Le maintien des deux plaques ensemble est réalisé par 3 entretoises placées en périphérie. Les roues sont aussi réalisées à la découpe laser même si on pourra les remplacer par d'autres imprimées en 3D en plastique souple.
Le modèle de découpe final et le support de servomoteurs: Média:Châssis_Vincent-Dubois.zip
Programmation
Le code final consiste en une boucle dans laquelle chaque fonction est appelée à différent moment. Chacune de ces fonctions à un rôle bien précis et cible généralement un seul composant du robot.
Avancer
void avancer(int vitesse1, int vitesse2) { servo1.write(90+vitesse1); servo2.write(90-vitesse2); }
Sonar
float sonar() { digitalWrite(trig_pin, HIGH); delayMicroseconds(10); digitalWrite(trig_pin, LOW); long temps = pulseIn(echo_pin, HIGH); float distance = (temps/2)*(340.0/1000); return distance; }
TSOP
int Tsop() { if (irrecev.decode(&results)) { int val = results.value; irrecev.resume(); return val; } return 0; }
Emetteur IR
void IR() { iremet.sendNEC(2, 32); irrecev.enableIRIn(); }
Capteur Hall
int Hall() { if (digitalRead(hall_pin) == 0) { return 1; } return 0; }
Déroulement des séances
15/01/2018
Présentation du projet + Découverte des outils (informatique et matériel) et des robots des années précédentes. + Établissement du cahier des charges (dans les grandes lignes).
16/01/2018
Prise en main du logiciel Fritzing pour la création de la carte électronique. Ne voulant pas perdre trop de temps sur la création de la carte, je décide de reprendre un modèle déjà existant tout en le modifiant pour mon propre robot. + Découverte du modèle existant et lecture de la documentation du microcontrôleur.
18/01/2018
Choix du capteur a effet Hall avec le binôme 4 (US1881 fonctionnant pour un champs magnétique de 0,5 à 9,5 mT). Ce composant possède 3 pattes : une pour l’alimentation, une pour la masse et une pour la sortie digitale. Il ne faut pas oublier de relier l’alimentation et la sortie par une résistance de 10kΩ.
Modifications sur la carte existante :
- Enlever un TSOP car une proie n’a pas besoin d’autant de capteur infrarouge.
- Enlever le contrôleur de moteur car on veut un robot de petite taille donc la propulsion sera gérée par 2 servo-moteurs
- Enlever le détecteur de ligne (obsolète pour notre projet).
- Ajouter le capteur à effet Hall.
Le plus gros du travail consiste à réarranger la carte afin de gagné un peu de place et réduire la taille du robot. Il faut néanmoins penser a la difficulté à soudre les composant et donc ne pas trop serrer les connexions sur le PCB.
19/01/2018
Réorganisation du PCB et vérifivations des connexion en vue d’une impression prochaine.
Pour gagner du temps pendant les séances, j'ai décider de commencer la conception du châssis a la maison. Après mure réflexion et quelques croquis je suis arrivé a définir une forme ou chaque élément du robot aurait sa place. La prochaine étape est donc de connaitre exactement la taille de chaque élément (servo-moteurs, batterie, roues, etc...) afin de fixer la taille du chassis
22/01/2018
Régler les problèmes de connexion sur le PCB à pris plus de temps que prévue. Cette séance est dédié à la finalisation de la carte électronique (orientation des TSOP, modification des connexions trop proches les unes des autres, etc...).
+ Prise en main de FreeCAD et Inkscape pour modéliser le chassis.
25/01/2018
Mesure des éléments du robot (servo moteur = sg90 -> voir datasheet). + Début de la modélisation du châssis.
26/01/2018 - 29/01/2018
Conception châssis.
01/02/2018
Finalisation du châssis: création d'un unique fichier .svg rassemblant toute les pièces (contours rouges de 0.1mm d'épaisseur).
+ Réinitialisation d'une carte Arduino afin de se familiariser avec les composant du robot: controle des servo-moteurs, sonar, ...
05/02/2018
Découpe laser du châssis au fabricarium + impression support servo-moteurs.
Petits problèmes de conception sur le châssis: les encoches pour positionner le PCB sur la plaque du haut n'ont pas été placées dans le bon sens et les petits "T" permettant le maintient de la batterie et du sonar ne sont pas à la bonne taille.
08/02/2018 - 12/02/2018
Réception du PCB + soudure des composants de surface au four.
08/02/2018 | 12/02/2018 | 15/02/2018 |
15/02/2018
Soudure au fer des éléments traversants + vérifications.
19/02/2018
Réception du support servo-moteurs: problème de dimensions. Modification de la pièce en laissant une marge (0.5mm) pour chaque mesure + envoie de la deuxieme impression.
22/02/2018
Réception nouveau support servo-moteurs : tout est bon. Montage du châssis + servo + roues + roue folle.
22/02/2018 |
Essais sur le PCB avec des programmes de base: visiblement il y a un problème avec le microcontrôleur. En réduisant les dimensions de la carte, j'ai malencontreusement créé une connexion entre 2 pattes du microcontrôleur.
05/03/2018
Essais sur une nouvelle carte (piste en trop coupée au cutter) : tout fonctionne parfaitement + codage du PCB (contrôle des servos et du sonar)
08/03/2018
Fixation du PCB sur le robot + calibration du temps nécessaire pour réaliser une rotation de 90° + essais.
08/03/2018 |
12/03/2018
Essai des TSOP : problème avec la bibliothèque IRremote.
15/03/2018
Essai des TSOP : problème de masse. J'ai oublié de connecter un des deux TSOP à la masse sur le PCB + Soudure au fer d'un fil de masse + essais.
15/03/2018 |
19/03/2018 et 26/03/2018
Codage du PCB (programme final incluant chaque sous programme précédemment réalisés)
09/04/2018
Problème avec le capteur de Hall: il y a un court circuit entre la masse et la pin 19 (ADC6) du microcontrôleur à laquelle le capteur est relié +Soudure au fer d'un fil entre la sortie du capteur et la pin 28 (ADC5)
09/04/2018 |
23/04/2018
Finalisation du code + derniers ajustements (compensation entre les 2 roues)