Cours:SaeRobotiqueSuiviLigne

De troyesGEII
Révision datée du 9 juin 2024 à 15:48 par Bjacquot (discussion | contributions) (Ressources)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Utiliser des librairies arduino avec un main

Arduino sans loop/setup


Un certain nombre de librairies utilisent les fontions arduino delay/delayMicroseconds/millis/micros

Ces fonctions utilisent le Timer0 et en particulier l'interruption de débordement.

Ce Timer est configuré dans la fonction init(), qui est appelée dans le "main arduino"

On peut donc initialiser ce Timer0 pour qu'il génère un débordement tel qu'attendu.

Ainsi les fonctions de gestion du temps Arduino peuvent fonctionner comme prévu et on peut ainsi utiliser les librairies qui en dépendent :

void initFonctionsTempsArduino()
{
  sei();
  // marche pour 328p et 2560 et autres ...
  // à adapter suivant le µc
  // cf https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
  TCCR0A=(1<<WGM01)|(1<<WGM00);
  TCCR0B=(1<<CS01)|(1<<CS00);
  TIMSK0=(1<<TOIE0);
}

int main()
{
  initFonctionsTempsArduino();
  Serial.begin(115200);
  while(1)
  {
    delay(100);
    Serial.println(millis());
  }
}


/*
Exemple pour le capteur vl53l1x :
cf exemple de la librairie pour des commentaires
*/
#include <Wire.h>
#include <VL53L1X.h>
VL53L1X sensor;

void initFonctionsTempsArduino()
{
  sei();
  // marche pour 328p et 2560 et autres ...
  // à adapter suivant le µc
  // cf https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
  TCCR0A=(1<<WGM01)|(1<<WGM00);
  TCCR0B=(1<<CS01)|(1<<CS00);
  TIMSK0=(1<<TOIE0);
}

int main()
{
  initFonctionsTempsArduino();
  while (!Serial) {}
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(400000); // use 400 kHz I2C
  sensor.setTimeout(500);
  if (!sensor.init())
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1);
  }
  sensor.setDistanceMode(VL53L1X::Long);
  sensor.setMeasurementTimingBudget(50000);
  sensor.startContinuous(50);
  while(1)
  {
    Serial.print(sensor.read());
    if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
    Serial.println();
  }
}

Augmenter la rapidité des Lidars

   sensors[i].setMeasurementTimingBudget(20000);
   sensors[i].setDistanceMode(VL53L1X::Short);
   sensors[i].startContinuous(20);
   sensors[0].read(false);

Séquence 1 : tâches élémentaires individuelles

  • Tâches de suivi de ligne (un étudiant sur chaque tâche) :
    • suivi avec caméra Pixy
    • suivi avec capteurs photorélectifs (nombre de capteurs à choisir)
    • suivi avec Lidar, en suivant un mur sur le côté
  • s'arrêter à la fin du parcours
  • À faire globalement : câblage robot, sécurité

Livrable 1

  • faire des recherches pour rendre un dossier par groupe (pour lundi 27/05) expliquant : le pont en H, schéma sécurité et chaque partie (a, b, c)
  • évaluation le 24/05 (code + questions + fonctionnement)

Séquence 2 : tâches complexes individuelles + réalisation shield

  • Tâches de suivi
    • Caméra Pixy : gestion des intersections (comportement programmé, par ex : droite puis gauche puis tout droit)
    • Capteurs photoréflectifs : détection de marques à droite (si marque : on tourne à droite à l'intersection, sinon tout droit). Détection des marques à gauche : stop et recul pendant 1 seconde (environ) et on repart (pas d'arrêt sur le second passage)
    • Lidar : suivi de mur à gauche ET à droite (priorité en suivi à droite). Faire tomber une première barre, pas la seconde.
  • Trois cartes à réaliser (une par étudiant)
    • carte avec capteurs photoreflectifs
    • carte pour détection marques gauches et droites
    • carte shield arduino nano

Note : penser à laisser libres PB3, PB4 et PB5 pour la Pixy (connecteur ICSP, cf https://commons.wikimedia.org/wiki/File:Arduino-nano-pinout.png )

Livrable 2

  • évaluation le 30/06 (code + questions + fonctionnement)

Séquence 3 : Fusion des trois tâches et programmation globale

Livrable 3

Rapport final

  • Rapport final :
    • À envoyer au format pdf par mail avant le DD/MM/YY à HH
    • Diagramme de Gantt
    • diagramme algorithme général
    • stratégie de résolution de chaque tâche
    • Mini-concours à la fin pour sélectionner le meilleur robot (évaluation des capacités du robot, par étudiant en fonction de l'organisation prévue).
    • Chiffrage incluant le matériel ainsi que les ressources humaines.


Organisation

  • Fonctionnement en trinôme sur 12 jours
    • 9h-12h
    • 13h30-16h30
  • 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

Composants/cartes

liens (dont règlement concours)