Binome2018-6
Sommaire
Resume
Nous avons choisis la proie, nous voudrions appuyer notre travail sur la progammation et le design du support.
Les quelques fonctions retenues pour les robots sont
- Déplacement rapide et visiblement chaotique
- Prendre en paramètre l'environnement
- Emmètre du son
Séance 1
Découverte des installations et du materiel.
Pour la prochaine séance :
- Découverte du projet et première écriture du CDC
Séance 2
Nous avons pu choisir notre sujet, *la proie* et choisissons de travaille sur l'ensemble du projet, programmation, chasis et carte électronique. Nous voudrions la designer comme une Ray Manta.
Taches effectuées :
- Definitions des objectifs du projet
- Choix de la proie
- Début de design du châssis
Pour la prochaine séance :
- Première utilisation de Fusion360
Séance 3
Avancement du modèle du chasis, et exportation au format svg pour la découpe laser. Nous n'avons designé que la plus grande surface et n'avons pas encore prévu la pose des moteurs, du troisième pieds et le cablage. Ce chasis est la finalité de notre première étude, surtout orienté sur l'optimisation de la masse et de la forme du robot. Nous avons donc tout de même préparé le model pour y effectuer les percages necessaire pour les moteurs, les capteurs. Il nous faut encore choisir nos capteurs et nos moteurs pour finaliser ce châssis.
Taches effectuées :
- Design du chasis
- Optimisation du volume
- Test des capteurs et emeteurs IR
Pour la prochaine séance :
- Téléchargement des datasheets des différents capteurs et de l'ATMEGA
Séance 4
Etude des capteurs et des moteurs pour le dimensionnement de notre robot. Le capteur US fonctionne correctement nous avons pu faire un premier programme
const byte TRIGGER_PIN = 7; // Broche TRIGGER const byte ECHO_PIN = 3; // Broche ECHO /* Constantes pour le timeout */ const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s /* Vitesse du son dans l'air en mm/us */ const float SOUND_SPEED = 340.0 / 1000; void setup() { /* Initialise le port série */ Serial.begin(115200); /* Initialise les broches */ pinMode(TRIGGER_PIN, OUTPUT); digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos pinMode(ECHO_PIN, INPUT); } void loop() { /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */ digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGGER_PIN, LOW); /* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */ long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT); /* 3. Calcul la distance à partir du temps mesuré */ float distance_mm = measure / 2.0 * SOUND_SPEED; /* Affiche les résultats en mm, cm et m */ Serial.print(F("Distance: ")); Serial.print(distance_mm); Serial.print(F("mm (")); Serial.print(distance_mm / 10.0, 2); Serial.print(F("cm, ")); Serial.print(distance_mm / 1000.0, 2); Serial.println(F("m)")); /* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */ delay(500); }
Taches effectuées :
- Teste du capteur US
- Etudes des datasheet des différents éléments
- Modification légère de notre carte
Pour la prochaine séance :
- Lire la doc du TSOP et programmer de quoi faire sa lecture en fréquence.
Séance 5
Durant cette séance nous avons finaliser notre schématique de la carte imprimé. Nous nous sommes mis d'accord sur deux mode de fonctionnement, une proie semi-aléatoire qui se déplace dans son environnement sans le connaitre au préalable et une proie MAPEUSE, qui aura déjà cartographié son milieu, de manière à pouvoir s'y déplacer plus rapidement. Les deux ferons usages des capteurs/émetteurs US. Nous avons discuter la possibilité d'ajouter des leurres infrarouge, mais il faudra qu'ils soient très léger et qu'il ne s'active qu'à la lancé, il nous faudra trouver une solution si nous souhaitons continuer.
Nous utiliserons 3 sonars, après avoir considéré l'amplitude relative de notre robot par rapport aux angles pratiques de mesure des capteurs HC-SR04 ainsi qu'un émetteur et un récepteur infrarouge, de manière à pouvoir communiquer avec le robot prédateur
Taches effectuées :
- Questionnement sur les fonctions du robots
- Vérification et finalisation de la schématique du robot
Pour la prochaine séance :
- Faire le SVG de forme du PCB.
Partie PCB
Un objectif de ce projet était de designer notre propre carte PCB pour gérer les capteurs et les moteurs du robot sans passer par une carte Arduino. Pour designer notre carte, nous avons utilisé le logiciel Fritzing et sommes partis de la carte standard fournie par les enseignants.
Il nous a fallu plusieurs séance avant de maitriser Fritzing. Nous avons tout d'abord eu à choisir les fonctionnalités du robot que nous souhaitions implémenter (combien de capteurs infra rouge ? d'émetteur-récepteur ultra son ?) puis nous avons modifié la carte en fonction de manière à prendre en compte ces contraintes (réattributation des entrées / sorties des ports digitaux / analogiques du micro-controlleur).
Une fois les fonctionnalités de la carte fixées, nous avons re-routé le PCB, c'est-à-dire réarrangé le tracé des fils électriques reliant les composants de la carte de telle manière que deux fils ne se croisent pas.
Nous avons effectué une première tentative de routage mais nous avons ensuite appris qu'il fallait favoriser des angles de 45°, utiliser des largeurs de fils plus petites pour faciliter le routage et prendre en compte le Design Rule Check. En prenant en compte toutes ces contraintes, nous sommes finalement parvenus à une carte fonctionnelle prête à être imprimée.
Après l'impression, il nous a fallut souder la majorité des composants de la carte. Tâche qui s'est révélée difficile de par la précision requise lors de la manipulation des composants. Cela nous a permis, entre autre, de nous familiariser avec la soudure.
Partie Code
Nous nous sommes également chargés de la programmation du robot. Pour cela, nous avons utilisé le logiciel d'Arduino qui nous a permis de programmer et de téléverser le programme sur la carte. Idéalement, le programme permettrait de faire se déplacer le robot en se basant sur trois capteurs ultra-sons orientés à l'avant du robot et espacés d'un angle d'environ 45°. Dès que la distance d'un des capteurs devient inférieure à un seuil donné, le robot choisit, selon la situation, de: tourner, si la distance indiquée par les autres capteurs le permet reculer, si les autres capteurs indiquent une distance également inférieure à un seuil donné, jusqu'à ce que la distance repasse au dessus du seuil, puis tourner pour ne plus emprunter le même chemin.
Il serait également possible pour le robot d'anticiper un obstacle en tournant légèrement lors du déplacement lorsqu'il perçoit que la distance d'un des capteurs ne fait que diminuer (cette fonctionnalité se déclencherait même si la distance devait supérieure au seuil mentionné plus haut).
Nous aurions aimé pouvoir implémenter ce programme. Seulement, il fallait tout d'abord s'assurer d'avoir une carte fonctionnelle. Sans celle-ci, nous n'aurions pas pu tester le dit programme pour paramétrer les seuils, définir les sens de rotations des moteurs, etc. Or, la confection de cette carte nous a pris plus de temps que prévu, et malgré que le programme existe, nous n'avons pas pu le faire fonctionner sur le robot dans le temps imparti.
De plus, une erreur de conception de la carte pcb nous empêchait de brancher directement les 3 capteurs ultra-sons les uns à coté des autres (manque de place), c'est pourquoi nous nous sommes finalement rabattus sur un programme plus simple du type: tant que distance au capteur > seuil : avancer , sinon : tourner
Difficultés rencontrées:
- Prise en main de Fritzing
- Court circuits lors du design du schematic
- Routage de la carte en prennant en compte toutes les contraintes
- Soudure des composants de petites tailles
Annexes
Sources
A venir
Doc
Outils utilisés
- Fritzing avec le modèle fournit en début de projet
- Fusion 360 License étudiant, pour la modélisation du chasis
- Edge parce que on a vraiment aucun respect pour le web