|
|
Ligne 2 : |
Ligne 2 : |
| [[Cours:SaeRobotique correction|{{Vert|<big><big>Corrections enseignants</big></big>}}]] | | [[Cours:SaeRobotique correction|{{Vert|<big><big>Corrections enseignants</big></big>}}]] |
| | | |
− | =Evaluations=
| |
| | | |
− | ==1ère évaluation==
| + | [[Cours:SaeRobotiqueSuiviLigne]] |
| + | [[Cours:SaeRobotiqueTennis]] |
| | | |
− | *Travail sur suivi de ligne :
| |
− | **on pose le robot au départ
| |
− | **il doit suivre cette ligne
| |
− | **bonus : s'arrêter lorsqu'il n'y a plus de ligne
| |
− | *travail évitement d'obstacles
| |
− | **on pose le robot le long d'une bordure
| |
− | **il doit suivre la bordure à 10cm du bord
| |
− | **bonus : s'arrêter lorsqu'il y a un obstacle
| |
− | *travail suivi de ligne par caméra
| |
− | **on pose le robot au départ
| |
− | **le robot doit suivre la ligne
| |
− | **bonus :
| |
| | | |
− | ==2ème évaluation==
| |
| | | |
− | La 2ème évaluation portera sur :
| |
− | *l'assemblage de votre robot :
| |
− | **aspect mécanique (propulseur principalement)
| |
− | **aspect électrique
| |
− | ***cartes fabriquées
| |
− | ***câblage
| |
− | *la "fusion" de l'étude de la 1ère semaine avec un robot qui devra
| |
− | **{{Rouge|au strict minimum}}
| |
− | ***se déplacer(suivre) vers une balle pendant un certain temps
| |
− | ***ensuite se tourner vers le terrain adverse
| |
− | ***avancer en direction du terrain adverse jusqu'à la ligne du milieu
| |
− | ***s'arrêter sur la ligne du milieu
| |
− | **{{Rouge|pour obtenir la note maximum}}
| |
− | ***attendre l'appui sur un bouton pour que le robot démarre
| |
− | ***chercher une balle
| |
− | ***se déplacer(suivre) vers la balle
| |
− | ***attraper la balle
| |
− | ***s'orienter vers le terrain adverse
| |
− | ***propulser la balle dans le terrain adverse
| |
− | ***avancer jusqu'à la ligne centrale
| |
− | ***s'arrêter
| |
| | | |
− |
| |
− | =Robot "joueur de tennis"=
| |
− |
| |
− |
| |
− | ==Tâches matérielles (8 jours)==
| |
− |
| |
− |
| |
− |
| |
− | * mat pour tenir ballon : on donne un tube (32) à couper (prévoir boite à onglet et scie) avec la base et les étudiants doivent fabriquer le support ballon
| |
− | * système perçage ballon
| |
− | * système démarrage avec ficelle à tirer
| |
− | * système détection murs : choix du capteur distance avec liste donnée (ultrason, lidar ou infrarouge)
| |
− | * fabrication shield pour Arduino Uno
| |
− |
| |
− | == Tâches logicielles==
| |
− | (1 étudiant sur chaque étape)
| |
− | # Localiser balle avec caméra Pixy
| |
− | # Attraper balle (détection opto)
| |
− | # Renvoyer balle dans le camp adverse en s’orientant avec magnétomètre
| |
− | # Recommencer
| |
− | Codage des tâches en explicitant la structure du programme
| |
− |
| |
− | * Ajouter transmission sans fil pour supervision/débogage (Xbee ou HF) : affichage sur terminal pc de l’étape en cours (et éventuellement état de variables)
| |
− |
| |
− | == Livrable ==
| |
− |
| |
− | * Rapport final :
| |
− | ** '''À envoyer au format pdf par mail avant le 27 juin 23h59'''
| |
− | ** Description du problème posé en introduction
| |
− | ** Diagramme de Gantt
| |
− | ** diagramme algorithme général
| |
− | ** stratégie de résolution et description de chaque tâche :
| |
− | ** Chiffrage incluant le matériel ainsi que les ressources humaines.
| |
− | ** Évolution possible
| |
− | ** Conclusion
| |
− |
| |
− | =Organisation=
| |
− |
| |
− | *Fonctionnement en trinôme sur 12 jours
| |
− | **9h-12h
| |
− | **13h30-16h30
| |
− | *{{Rouge|Compte rendu écrit quotidien individuel}}
| |
− | **sera contrôlé chaque matin
| |
− | **doit indiquer les tâches réalisées la veille
| |
− | **doit indiquer le travail à réaliser le jour même
| |
− |
| |
− |
| |
− |
| |
− | =Ressources=
| |
− |
| |
− | ==structure du programme==
| |
− |
| |
− | Vous pourrez utiliser la structure de programme suivante :
| |
− |
| |
− | <source lang=cpp>
| |
− | enum state {etapeInit,etapeChercheBalle,etapeDeplacementVersBalle};
| |
− |
| |
− | state etapeSuivante=etapeInit;
| |
− | state etapeActive=etapeInit;
| |
− |
| |
− |
| |
− | void setup() {
| |
− |
| |
− | }
| |
− |
| |
− | void loop() {
| |
− |
| |
− | // lecture des capteurs
| |
− |
| |
− | switch (etapeActive)
| |
− | {
| |
− | case etapeInit:
| |
− |
| |
− | // si ... etapeSuivante=
| |
− | break;
| |
− | case etapeChercheBalle:
| |
− |
| |
− | // si ... etapeSuivante=
| |
− | break;
| |
− | case etapeDeplacementVersBalle:
| |
− |
| |
− | // si ... etapeSuivante=
| |
− | break;
| |
− | }
| |
− |
| |
− | // on modifie l'étape active pour la prochaine boucle
| |
− | etapeActive=etapeSuivante;
| |
− | }
| |
− | </source>
| |
− |
| |
− | ==Programmation : comment faire==
| |
− |
| |
− | ===Exécuter une action une seule fois :===
| |
− | <source lang=cpp>
| |
− | void loop()
| |
− | {
| |
− | static bool dejaFait=false;
| |
− | if (dejaFait==false)
| |
− | {
| |
− | executerMonAction();
| |
− | dejaFait=true;
| |
− | }
| |
− | }
| |
− | </source>
| |
− |
| |
− | ===Répéter une action régulièrement===
| |
− | {| class="wikitable"
| |
− | |-
| |
− | |
| |
− | <source lang=cpp>
| |
− | void loop()
| |
− | {
| |
− | static uint32_t triggerTime=millis();
| |
− | uint32_t currentTime=millis();
| |
− |
| |
− | if (currentTime>=triggerTime)
| |
− | {
| |
− | faireMonAction();
| |
− | triggerTime += 500; // prochaine exécution dans 500ms
| |
− | }
| |
− | }
| |
− | </source>
| |
− | ||
| |
− | <source lang=cpp>
| |
− | void loop()
| |
− | {
| |
− | static uint32_t triggerTime=0;
| |
− | uint32_t currentTime=millis();
| |
− |
| |
− | switch (etapeActive)
| |
− | {
| |
− | ....
| |
− | case etapeX:
| |
− | if ( qqch)
| |
− | {
| |
− | etapeSuivante=etapeY;
| |
− | triggerTime=currentTime;
| |
− | }
| |
− | break;
| |
− | case etapeY:
| |
− | if ( currentTime >= (triggerTime + duree ) )
| |
− | {
| |
− | etapeSuivante=etapeZ;
| |
− | }
| |
− | break;
| |
− | case etapeZ:
| |
− | ...
| |
− | break;
| |
− | }
| |
− | etapeActive=etapeSuivante;
| |
− | }
| |
− | </source>
| |
− | |}
| |
− |
| |
− | ===Affichage provisoire pour deboggage===
| |
− |
| |
− | <source lang=cpp>
| |
− | #define debug // mode debug
| |
− | //ou
| |
− | #undef debug // mode sans debug
| |
− |
| |
− | void loop()
| |
− | {
| |
− | #ifdef debug
| |
− | Serial.println("juste si debug");
| |
− | #endif
| |
− | }
| |
− |
| |
− | </source>
| |
− |
| |
− | ==Composants/cartes==
| |
− | *[[Cours:capteurPhotoReflectif|capteur '''photoréflectif''' pour détection de la {{Rouge|ligne}}]]
| |
− | *Batterie LiFePo4
| |
− | **assemblage de 4 éléments LiFePo4
| |
− | **documentation sur les cellules [[Media:CellulesLiFePo4.pdf]]
| |
− | **tensions à ne pas dépasser :
| |
− | ***maximum : 3,45V/élément
| |
− | ***minimum : 2,65V/élément
| |
− | ***ne pas démarrer le robot : 2,85V/élément
| |
− | *divers
| |
− | **Commutateur d'arrêt d'urgence https://fr.farnell.com/idec/yw1b-v4e01r/commut-bp-e-stop-spst-nc-10a-120v/dp/2833849?ost=2833849
| |
− | **Régulateur ajustable 1,25 à 30 Vcc https://www.gotronic.fr/art-regulateur-ajustable-1-25-a-30-vcc-gt134-26094.htm
| |
− | *driver de moteur
| |
− | **https://www.cytron.io/p-13amp-6v-30v-dc-motor-driver
| |
− | *capteurs de distance/contact
| |
− | **HC-SR04 cf fiche technique sur la page : https://www.gotronic.fr/art-module-de-detection-us-hc-sr04-20912.htm
| |
− | **VL53L1X
| |
− | ***https://www.robotshop.com/eu/fr/platine-deploiement-capteur-distance-tof-regulateur-tension-vl53l1x.html
| |
− | ***https://github.com/pololu/vl53l1x-arduino
| |
− | **Mini Microrupteur - SPDT https://www.robotshop.com/eu/fr/mini-microrupteur-spdt-levier-rouleau.html
| |
− | **GP2Yxxxx https://www.gotronic.fr/art-capteur-de-mesure-sharp-gp2y0a41sk0f-18338.htm
| |
− | **lidar tfmini-s
| |
− | ***https://www.robotshop.com/eu/fr/module-micro-lidar-tfmini-s-benewake-i2c-12m.html
| |
− | ***https://www.arduino.cc/reference/en/libraries/tfmpi2c/
| |
− | **lidar Lite 3
| |
− | ***https://www.robotshop.com/eu/fr/capteur-distance-laser-haute-performance-lidar-lite-3-llv3hp.html
| |
− | ***https://github.com/RobotShop/LIDARLite_v3_Arduino_Library
| |
− | *caméra
| |
− | **pixyv2
| |
− | ***https://pixycam.com/pixy2/
| |
− | ***[[Cours:TPS_2103_tp_pixy|TP caméra pixy]]
| |
− | ***Avoir un PixyMon plus rapide dans la g.008 :
| |
− | ****utiliser un 2ème poste
| |
− | ****ne pas se connecter sur nomachine
| |
− | ****lancer un terminal
| |
− | ****lancer la commande PixyMon
| |
− | *IMU
| |
− | **Explications du principe du capteur mpu9250 : https://learn.sparkfun.com/tutorials/mpu-9250-hookup-guide/all
| |
− | **Bibliothèque à utiliser : dans le gestionnaire de bibliothèque => ''by hideakitai'' (v 0.4.8) ou https://github.com/hideakitai/MPU9250
| |
− | **Étapes :
| |
− | ***Réaliser la calibration et noter les valeurs affichées,
| |
− | ***les entrer dans votre programme (fonctions setMagBias() et setMagScale()
| |
− | ***Pour réaliser une mesure, se servir des programmes d'exemples
| |
− | *Robot Arrex :
| |
− | ** [[Cours:RobotArrex]] (section documents)
| |
− | ** avec shield moteur
| |
− |
| |
− | ==liens (dont règlement concours) ==
| |
− | * concours robotique Cachan, lien vers le règlement en pdf : https://robotique-iut-2023.sciencesconf.org/data/pages/Reglement_rencontres_de_robotique_GEII_8_9_10_juin_2023_BUT1.pdf
| |
− | *[[Cours:archive SAÉ robot joueur de tennis]]
| |
− | *[[Cours:archive SAÉ suivi de ligne]]
| |
− | *https://www.youtube.com/watch?v=xH8EIqh-2_Y
| |
| | | |
| ==Composants Kicad== | | ==Composants Kicad== |