﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://bacasable.arpitania.eu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maelle</id>
	<title>Learning Lab Environnements Connectés - Contributions de l’utilisateur [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://bacasable.arpitania.eu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maelle"/>
	<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Sp%C3%A9cial:Contributions/Maelle"/>
	<updated>2026-04-06T21:55:02Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12885</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12885"/>
		<updated>2024-05-17T09:25:15Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Programmation des cartes==&lt;br /&gt;
* ESP32 :&lt;br /&gt;
::- Ajouter le support de la carte dans l'IDE Arduino en insérant ce lien dans Fichier → Préférences → URL de gestionnaire de carte supplémentaire : https://dl.espressif.com/dl/package_esp32_index.json&lt;br /&gt;
::- Dans Outils → Type de carte → Gestionnaire de cartes, rechercher et installer ESP32&lt;br /&gt;
::- Dans Outils → Type de carte sélectionner la carte ESP32&lt;br /&gt;
&lt;br /&gt;
* Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
Finalement, après ces modifications, de nombreuses erreurs étaient encore présentes. Les moteurs n'étaient pas reliés aux bonnes roues et certains tournaient dans le sens inverse.   &lt;br /&gt;
Nous avons également constaté qu'un faux contact intervenait sur le moteur 4 ; sa masse n'était pas non plus bien fixée. &lt;br /&gt;
&lt;br /&gt;
Par conséquent nous avons décidé de former deux équipes de travail : &lt;br /&gt;
: - La première étant chargée de vérifier l'état de marche des robots suiveurs utilisés par nos prédécesseurs afin de s'en servir comme remplacement du robot 1. &lt;br /&gt;
: - La deuxième ayant pour objectif de recréer une carte fonctionnel (sur une plaque d'essais) afin de gérer les 4 moteurs du robot n°1 et de remplacer l'ancienne qui présentait de nombreux problèmes. &lt;br /&gt;
&lt;br /&gt;
La première équipe ayant terminé plus rapidement, nous avons décidé de changer de robot et d'utiliser un robot suiveur. Néanmoins, un premier pont en H fonctionnel a été réalisé sur la plaquette d'essais. Celui-ci permet de faire tourner deux moteurs. Pour utiliser le robot n°1, il suffit d'effectuer les mêmes branchements avec le deuxième pont en H.&lt;br /&gt;
&lt;br /&gt;
==Nouveau robot principal==&lt;br /&gt;
Le robot suiveur n'étant pas holonome, nous avons effectué des modifications sur le code afin de faire tourner les moteurs. &lt;br /&gt;
Pour ce faire nous nous sommes appuyés sur l'équation (6) de [[Fichier:Techniques Ingenieur.pdf]] dans la partie &amp;lt;em&amp;gt; 2.1 Modélisation cinématique &amp;lt;/em&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Schema robot 2 roues.png|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le code utilisé est le suivant : [[Fichier:Essai moteur eclaireur v1.zip]]&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt; : [[Fichier:Techniques Ingenieur.pdf]].&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication entre teensy et ESP32==&lt;br /&gt;
&lt;br /&gt;
Les robots sont équipés de 2 cartes chacun : la teensy qui contrôle les moteurs, et la ESP32, sur laquelle sont branchés tous les capteurs. Ainsi, pour que le robot soit capable d'adapter ses déplacements en fonction des informations extéroceptives, il faut mettre en place un protocole de communication entre les 2 cartes. Pour cela, on utilise une liaison série, entre l'UART2 de la ESP32 (ports 16 et 17) et l'UART1 de la teenzy (port 0 et 1).&lt;br /&gt;
&lt;br /&gt;
Dans les premières phases de test, nous avons mis en place ce protocole pour transmettre la vitesse angulaire aux robots en temps réel, afin de réaliser le suivi de ligne (cf. partie correspondante du wiki).&lt;br /&gt;
&lt;br /&gt;
Par la suite, lorsque nous avons voulu implémenter davantage de fonctions de déplacement, comme arrêter le robot ou lui faire faire demi-tour, nous avons été confronté à plusieurs difficultés. Dans un premier temps, nous avons opté pour une solution qui semblait la plus simple : la carte ESP32 envoie en temps réel des valeurs de u, v et thetaP à la teensy, qui se contente de mettre à jour ces nouvelles valeurs dans sa mémoire et de faire tourner les moteurs en conséquence. Pour différencier les données envoyées au niveau du récepteur, la ESP32 envoie un identifiant avant d'envoyer la valeur de u, v ou thétaP. Nous avons testé cette solution dans le programme suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier: test_com_ESP_teensy.zip]]&lt;br /&gt;
&lt;br /&gt;
Pour que cette solution fonctionne, il faut que la carte teensy essaie de récupérer les données du buffer plus vite qu'elles n'arrivent. Lorsqu'on teste ce programme avec des valeurs arbitraires de u, v et théta, la communication marche relativement bien, mais certaines erreurs apparaissent parfois (par ex : u prend la valeur de v ou thétaP, ou même d'un identifiant (ou pareil avec u et théta)).&lt;br /&gt;
Lorsqu'on a testé d'utiliser ce même code pour faire réaliser au robot des fonctions de déplacements élémentaires, nous avons rencontré plusieurs difficultés : les valeurs étaient rarement transmises ou présentaient des erreurs. Malgré un débuggage prolongé, je ne suis toujours pas certain d'où venaient ces erreurs. J'ai cependant remarqué que le type des erreurs dépendent des délais présents dans le code de la ESP32.&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons opté pour une autre solution qui devrait provoquer moins d'erreurs : on ne communique par la liaison série que les valeurs de thétaP, ainsi que des valeurs servant d'identifiant au comportement que prend le robot (101 : avance, 102 : stop, ...). La différentiation du type de valeur transmise se fait au niveau du récepteur (teensy) selon la portée de la valeur reçue : si la valeur reçue est comprises entre -100 et 100, il s'agit d'une valeur de théta, et si elle est supérieure à 101, il s'agit d'une commande de comportement. On évite ainsi de transmettre la mauvaise valeur à une variable.&lt;br /&gt;
Chaque comportement élémentaire de déplacement (avancer, reculer, tourner sur soi, stop, …) devra donc être codée sur la teensy, et on y fera correspondre une valeur entre 101 et 127 à communiquer par l'UART.&lt;br /&gt;
&lt;br /&gt;
Afin d'assurer que la valeur est bel et bien transmise, on pourrait utiliser les bus Tx et Rx respectivement de la teensy et de la ESP32, respectivement, pour monter une liaison série en parallèle de l'existante, dans l'autre sens. De cette manière, on pourrait vérifier au niveau de le ESP que le signal a bien été reçu, et le renvoyer dans le cas contraire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
Les cibles ont été faites pour faciliter la préhension avec la pince&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo, et on va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
Suite à un problème de commande, nous avons du changer nos plan et partir sur une pince en impression 3D dont voici les plans. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:plan_pince_3D.zip]]&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
Valeur des pinces : &lt;br /&gt;
#grise : ouverture 155 ; fermeture 179&lt;br /&gt;
#orange : ouverture 130; fermeture 179&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 950nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:osram_opto_semiconductor_sfh_409_lead_pb_free_prod-2891523.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet AOP pour comparateur : [[Fichier:tlc271a.pdf]]&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps on réalise le montage avec la LED infrarouge :&lt;br /&gt;
Schéma montage LED : [[Fichier:MontageLED.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite on réalise le montage avec le phototransistor accompagné d'un comparateur qui va nous permettre d'avoir une sortie 5V si l'objet n'est pas détecté ou 0V si il est détecté :&lt;br /&gt;
Schéma montage phototransistor + comparateur : [[Fichier:MontagePhototransisitor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après plusieurs tests, on remarque que lorsque un objet sépare la diode du phototransistor, on a approximativement 0V aux bornes de la résistance. Lorsqu'il n'y a pas d'objet, on remarque que la tension aux bornes de la résistance est de plus de 100mV. Ainsi on choisie un seuil de 50mV pour le comparateur. On utilise un pont diviseur de tension pour obtenir cette tension :&lt;br /&gt;
Schéma montage pont diviseur : [[Fichier:PontDiv.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il nous faut 2 capteurs de ce type pour les 2 pinces qui seront sur les robots 2 et 3. Ainsi, on réalise ces montages sur 2 mini breadboard que l'on placera sur les robots avec les LED et phototransistors qui seront placés sur les pinces à l'aide de câbles plus long pour les excentrer des mini breadboard.&lt;br /&gt;
Image capteur sur mini breadboard : [[Fichier:Breadboard+capteur.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'objectif maintenant est de relier le capteur optique au servomoteur via une carte ESP32. On utilise une entrée analogique qui va lire la valeur en sortie du capteur (0V si présence d'objet et 5V si non présence). Lorsqu'on détecte le passage de 5V à 0V, on fait varier l'angle du servomoteur (ce qui fermera la pince).&lt;br /&gt;
&lt;br /&gt;
Code servo/capteur : [[Fichier: ServoCapteur.zip]]&lt;br /&gt;
&lt;br /&gt;
=Communication entre les robots et avec l'interface graphique=&lt;br /&gt;
Notre scénario inclut la nécessité de pouvoir échanger plusieurs informations entre les robots. Elles sont au nombre de deux : la couleur du G.I. Joe qui a été détecté par le robot 1 et l'arrivée de robot 2 ou robot 3 à sa base après avoir récupéré ledit G.I. Joe. On veut aussi pouvoir consulter en temps réel l'évolution du nombre de G.I. Joe récupérés par les robots. On utilisera une interface graphique sous la forme d'une page internet pour cela.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===La carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet : HttpClient. Il faut bien penser à l'installer avant de commencer à utiliser les codes suivants. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voilà le code: [[Fichier:fonction_connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce dernier est assez simple. On va appeler la fonction WiFi.begin() afin de se connecter à un réseau WiFi qui se trouve dans les environs de la carte. Pour cela, on peut passer jusqu'à deux arguments à la fonction. Le premier est le nom du réseau (obligatoire) et le second le mot de passe pour s'y connecter (optionnel). On note qu'accéder à un réseau sans utiliser le mot de passe est plus rapide, et donc bienvenu pour effectuer des tests. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut réfléchir à une structure qui va permettre aux robots d'échanger des informations entre eux. Pour cela, on va utiliser une API, qui est une collection de méthodes que nous allons créer et qui permettra à nos différents programmes de communiquer ensemble. Cette dernière démarrera son propre serveur sur lesquels toutes les machines vont se connecter. Nous y reviendrons dans la partie suivante. Gardez pour le moment à l'esprit que les quatre codes suivants vont envoyer une requête à cette API afin d'obtenir une information qui lui aura préalablement été communiquée par l'un des robots. &amp;lt;br&amp;gt;&lt;br /&gt;
Rappelons les deux fonctions principales de notre cahier des charges en ce qui concerne la communication inter robots : transmettre la couleur du G.I. Joe repéré et savoir quand le robot 2 ou le robot 3 est rentré à sa base après avoir récupéré le soldat. Pour chacune d'entre elles, il faut prévoir d'un côté l'envoi et de l'autre la réception, ce qui nous fait donc un total de quatre fonctions Arduino à créer. &amp;lt;br&amp;gt;&lt;br /&gt;
Commençons par la communication de la couleur. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
D'abord pour l'envoi : [[Fichier:fonction_envoi_couleur_robot_1.zip]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===L'interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
=Télémètre ultrason=&lt;br /&gt;
&lt;br /&gt;
On utilise un télémètre ultrason pour les robots 2 et 3 dans 2 circonstances :&lt;br /&gt;
&lt;br /&gt;
-Quand les robots reviennent à la base, ils détectent un amer (plafond) qui leur signale de bifurquer vers leur base.&lt;br /&gt;
&lt;br /&gt;
-Dans la base, ils détectent un amer qui leur indique de faire demi-tour&lt;br /&gt;
&lt;br /&gt;
=Problèmes rencontrés=&lt;br /&gt;
&lt;br /&gt;
Lors de ce projet nous avons rencontré plusieurs obstacles. Tout d'abord pendant la première semaine nous avons fait un inventaire sur le matériel nécessaire et le matériel déjà présent. A la fin de la première semaine nous avions donc tout le matériel nécessaire à part une pince afin d'attraper nos objets ainsi que des capteurs de suivi de ligne et du scotch blanc afin de faire la ligne pour la maquette. Nous avons donc envoyé un mail à Matthieu Dumay qui n'a malheureusement pas était pris en compte pendant les trois semaines que nous avons eu entre les deux semaines de robotique malgré un mail de rappel de la commande. Lors de la deuxième semaine nous avons donc du improviser. Nous avons utiliser des feuilles blanches découpées en lamelles pour le suivi de ligne. Nous avons également trouvé de nouveaux capteurs de suivi de ligne. Et enfin nous avons choisi d'imprimer des pinces au lieu de les commander.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:ServoCapteur.zip&amp;diff=12865</id>
		<title>Fichier:ServoCapteur.zip</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:ServoCapteur.zip&amp;diff=12865"/>
		<updated>2024-05-16T08:02:09Z</updated>

		<summary type="html">&lt;p&gt;Maelle : Maelle a téléversé une nouvelle version de Fichier:ServoCapteur.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12846</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12846"/>
		<updated>2024-05-15T07:28:36Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Programmation des cartes==&lt;br /&gt;
* ESP32 :&lt;br /&gt;
::- Ajouter le support de la carte dans l'IDE Arduino en insérant ce lien dans Fichier → Préférences → URL de gestionnaire de carte supplémentaire : https://dl.espressif.com/dl/package_esp32_index.json&lt;br /&gt;
::- Dans Outils → Type de carte → Gestionnaire de cartes, rechercher et installer ESP32&lt;br /&gt;
::- Dans Outils → Type de carte sélectionner la carte ESP32&lt;br /&gt;
&lt;br /&gt;
* Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
Après ces modifications, nous avons constaté que :&lt;br /&gt;
:- Le moteur 1 est lié à la roue 3 et est inversé&lt;br /&gt;
:- Le moteur 2 est lié à la roue 1 dans le bon sens&lt;br /&gt;
:- Le moteur 3 est lié à la roue 2 et est inversé&lt;br /&gt;
:- Le moteur 4 est lié à la roue 4 dans le bon sens&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, nous avons eu quelques difficultés avec le moteur 4. Celui-ci tournait lorsqu'il ne devait pas. Après avoir isolé les différentes parties du robot, le problème n'intervient plus. Nous en avons donc conclu un problème de faux contact.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt; : [[Fichier:Techniques Ingenieur.pdf]].&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
Les cibles ont été faites pour faciliter la préhension avec la pince&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo, et on va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
Suite à un problème de commande, nous avons du changer nos plan et partir sur une pince en impression 3D dont voici les plans. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:plan_pince_3D.zip]]&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 950nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:osram_opto_semiconductor_sfh_409_lead_pb_free_prod-2891523.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet AOP pour comparateur : [[Fichier:tlc271a.pdf]]&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps on réalise le montage avec la LED infrarouge :&lt;br /&gt;
Schéma montage LED : [[Fichier:MontageLED.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite on réalise le montage avec le phototransistor accompagné d'un comparateur qui va nous permettre d'avoir une sortie 5V si l'objet n'est pas détecté ou 0V si il est détecté :&lt;br /&gt;
Schéma montage phototransistor + comparateur : [[Fichier:MontagePhototransisitor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après plusieurs tests, on remarque que lorsque un objet sépare la diode du phototransistor, on a approximativement 0V aux bornes de la résistance. Lorsqu'il n'y a pas d'objet, on remarque que la tension aux bornes de la résistance est de plus de 100mV. Ainsi on choisie un seuil de 50mV pour le comparateur. On utilise un pont diviseur de tension pour obtenir cette tension :&lt;br /&gt;
Schéma montage pont diviseur : [[Fichier:PontDiv.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il nous faut 2 capteurs de ce type pour les 2 pinces qui seront sur les robots 2 et 3. Ainsi, on réalise ces montages sur 2 mini breadboard que l'on placera sur les robots avec les LED et phototransistors qui seront placés sur les pinces à l'aide de câbles plus long pour les excentrer des mini breadboard.&lt;br /&gt;
Image capteur sur mini breadboard : [[Fichier:Breadboard+capteur.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'objectif maintenant est de relier le capteur optique au servomoteur via une carte ESP32. On utilise une entrée analogique qui va lire la valeur en sortie du capteur (0V si présence d'objet et 5V si non présence). Lorsqu'on détecte le passage de 5V à 0V, on fait varier l'angle du servomoteur (ce qui fermera la pince).&lt;br /&gt;
&lt;br /&gt;
Code servo/capteur : [[Fichier: ServoCapteur.zip]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Télémètre ultrason=&lt;br /&gt;
&lt;br /&gt;
On utilise un télémètre ultrason pour les robots 2 et 3 dans 2 circonstances :&lt;br /&gt;
&lt;br /&gt;
-Quand les robots reviennent à la base, ils détectent un amer (plafond) qui leur signale de bifurquer vers leur base.&lt;br /&gt;
&lt;br /&gt;
-Dans la base, ils détectent un amer qui leur indique de faire demi-tour&lt;br /&gt;
&lt;br /&gt;
=Problèmes rencontrés=&lt;br /&gt;
&lt;br /&gt;
Lors de ce projet nous avons rencontré plusieurs obstacles. Tout d'abord pendant la première semaine nous avons fait un inventaire sur le matériel nécessaire et le matériel déjà présent. A la fin de la première semaine nous avions donc tout le matériel nécessaire à part une pince afin d'attraper nos objets ainsi que des capteurs de suivi de ligne et du scotch blanc afin de faire la ligne pour la maquette. Nous avons donc envoyé un mail à Matthieu Dumay qui n'a malheureusement pas était pris en compte pendant les trois semaines que nous avons eu entre les deux semaines de robotique malgré un mail de rappel de la commande. Lors de la deuxième semaine nous avons donc du improviser. Nous avons utiliser des feuilles blanches découpées en lamelles pour le suivi de ligne. Nous avons également trouvé de nouveaux capteurs de suivi de ligne. Et enfin nous avons choisi d'imprimer des pinces au lieu de les commander.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:ServoCapteur.zip&amp;diff=12845</id>
		<title>Fichier:ServoCapteur.zip</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:ServoCapteur.zip&amp;diff=12845"/>
		<updated>2024-05-15T07:26:52Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12843</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12843"/>
		<updated>2024-05-15T07:23:22Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Programmation des cartes==&lt;br /&gt;
* ESP32 :&lt;br /&gt;
::- Ajouter le support de la carte dans l'IDE Arduino en insérant ce lien dans Fichier → Préférences → URL de gestionnaire de carte supplémentaire : https://dl.espressif.com/dl/package_esp32_index.json&lt;br /&gt;
::- Dans Outils → Type de carte → Gestionnaire de cartes, rechercher et installer ESP32&lt;br /&gt;
::- Dans Outils → Type de carte sélectionner la carte ESP32&lt;br /&gt;
&lt;br /&gt;
* Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
Après ces modifications, nous avons constaté que :&lt;br /&gt;
:- Le moteur 1 est lié à la roue 3 et est inversé&lt;br /&gt;
:- Le moteur 2 est lié à la roue 1 dans le bon sens&lt;br /&gt;
:- Le moteur 3 est lié à la roue 2 et est inversé&lt;br /&gt;
:- Le moteur 4 est lié à la roue 4 dans le bon sens&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, nous avons eu quelques difficultés avec le moteur 4. Celui-ci tournait lorsqu'il ne devait pas. Après avoir isolé les différentes parties du robot, le problème n'intervient plus. Nous en avons donc conclu un problème de faux contact.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt; : [[Fichier:Techniques Ingenieur.pdf]].&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
Les cibles ont été faites pour faciliter la préhension avec la pince&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo, et on va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
Suite à un problème de commande, nous avons du changer nos plan et partir sur une pince en impression 3D dont voici les plans. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:plan_pince_3D.zip]]&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 950nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:osram_opto_semiconductor_sfh_409_lead_pb_free_prod-2891523.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet AOP pour comparateur : [[Fichier:tlc271a.pdf]]&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps on réalise le montage avec la LED infrarouge :&lt;br /&gt;
Schéma montage LED : [[Fichier:MontageLED.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite on réalise le montage avec le phototransistor accompagné d'un comparateur qui va nous permettre d'avoir une sortie 5V si l'objet n'est pas détecté ou 0V si il est détecté :&lt;br /&gt;
Schéma montage phototransistor + comparateur : [[Fichier:MontagePhototransisitor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après plusieurs tests, on remarque que lorsque un objet sépare la diode du phototransistor, on a approximativement 0V aux bornes de la résistance. Lorsqu'il n'y a pas d'objet, on remarque que la tension aux bornes de la résistance est de plus de 100mV. Ainsi on choisie un seuil de 50mV pour le comparateur. On utilise un pont diviseur de tension pour obtenir cette tension :&lt;br /&gt;
Schéma montage pont diviseur : [[Fichier:PontDiv.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il nous faut 2 capteurs de ce type pour les 2 pinces qui seront sur les robots 2 et 3. Ainsi, on réalise ces montages sur 2 mini breadboard que l'on placera sur les robots avec les LED et phototransistors qui seront placés sur les pinces à l'aide de câbles plus long pour les excentrer des mini breadboard.&lt;br /&gt;
Image capteur sur mini breadboard : [[Fichier:Breadboard+capteur.png]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Télémètre ultrason=&lt;br /&gt;
&lt;br /&gt;
On utilise un télémètre ultrason pour les robots 2 et 3 dans 2 circonstances :&lt;br /&gt;
&lt;br /&gt;
-Quand les robots reviennent à la base, ils détectent un amer (plafond) qui leur signale de bifurquer vers leur base.&lt;br /&gt;
&lt;br /&gt;
-Dans la base, ils détectent un amer qui leur indique de faire demi-tour&lt;br /&gt;
&lt;br /&gt;
=Problèmes rencontrés=&lt;br /&gt;
&lt;br /&gt;
Lors de ce projet nous avons rencontré plusieurs obstacles. Tout d'abord pendant la première semaine nous avons fait un inventaire sur le matériel nécessaire et le matériel déjà présent. A la fin de la première semaine nous avions donc tout le matériel nécessaire à part une pince afin d'attraper nos objets ainsi que des capteurs de suivi de ligne et du scotch blanc afin de faire la ligne pour la maquette. Nous avons donc envoyé un mail à Matthieu Dumay qui n'a malheureusement pas était pris en compte pendant les trois semaines que nous avons eu entre les deux semaines de robotique malgré un mail de rappel de la commande. Lors de la deuxième semaine nous avons donc du improviser. Nous avons utiliser des feuilles blanches découpées en lamelles pour le suivi de ligne. Nous avons également trouvé de nouveaux capteurs de suivi de ligne. Et enfin nous avons choisi d'imprimer des pinces au lieu de les commander.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:Plan_pince_3D.zip&amp;diff=12842</id>
		<title>Fichier:Plan pince 3D.zip</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:Plan_pince_3D.zip&amp;diff=12842"/>
		<updated>2024-05-15T07:22:38Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12841</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12841"/>
		<updated>2024-05-15T07:22:14Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Programmation des cartes==&lt;br /&gt;
* ESP32 :&lt;br /&gt;
::- Ajouter le support de la carte dans l'IDE Arduino en insérant ce lien dans Fichier → Préférences → URL de gestionnaire de carte supplémentaire : https://dl.espressif.com/dl/package_esp32_index.json&lt;br /&gt;
::- Dans Outils → Type de carte → Gestionnaire de cartes, rechercher et installer ESP32&lt;br /&gt;
::- Dans Outils → Type de carte sélectionner la carte ESP32&lt;br /&gt;
&lt;br /&gt;
* Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
Après ces modifications, nous avons constaté que :&lt;br /&gt;
:- Le moteur 1 est lié à la roue 3 et est inversé&lt;br /&gt;
:- Le moteur 2 est lié à la roue 1 dans le bon sens&lt;br /&gt;
:- Le moteur 3 est lié à la roue 2 et est inversé&lt;br /&gt;
:- Le moteur 4 est lié à la roue 4 dans le bon sens&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, nous avons eu quelques difficultés avec le moteur 4. Celui-ci tournait lorsqu'il ne devait pas. Après avoir isolé les différentes parties du robot, le problème n'intervient plus. Nous en avons donc conclu un problème de faux contact.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt; : [[Fichier:Techniques Ingenieur.pdf]].&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
Les cibles ont été faites pour faciliter la préhension avec la pince&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo, et on va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
Suite à un problème de commande, nous avons du changer nos plan et partir sur une pince en impression 3D dont voici les plans.&lt;br /&gt;
[[Fichier:plan_pince_3D.zip]]&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 950nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:osram_opto_semiconductor_sfh_409_lead_pb_free_prod-2891523.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet AOP pour comparateur : [[Fichier:tlc271a.pdf]]&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps on réalise le montage avec la LED infrarouge :&lt;br /&gt;
Schéma montage LED : [[Fichier:MontageLED.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite on réalise le montage avec le phototransistor accompagné d'un comparateur qui va nous permettre d'avoir une sortie 5V si l'objet n'est pas détecté ou 0V si il est détecté :&lt;br /&gt;
Schéma montage phototransistor + comparateur : [[Fichier:MontagePhototransisitor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après plusieurs tests, on remarque que lorsque un objet sépare la diode du phototransistor, on a approximativement 0V aux bornes de la résistance. Lorsqu'il n'y a pas d'objet, on remarque que la tension aux bornes de la résistance est de plus de 100mV. Ainsi on choisie un seuil de 50mV pour le comparateur. On utilise un pont diviseur de tension pour obtenir cette tension :&lt;br /&gt;
Schéma montage pont diviseur : [[Fichier:PontDiv.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il nous faut 2 capteurs de ce type pour les 2 pinces qui seront sur les robots 2 et 3. Ainsi, on réalise ces montages sur 2 mini breadboard que l'on placera sur les robots avec les LED et phototransistors qui seront placés sur les pinces à l'aide de câbles plus long pour les excentrer des mini breadboard.&lt;br /&gt;
Image capteur sur mini breadboard : [[Fichier:Breadboard+capteur.png]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Télémètre ultrason=&lt;br /&gt;
&lt;br /&gt;
On utilise un télémètre ultrason pour les robots 2 et 3 dans 2 circonstances :&lt;br /&gt;
&lt;br /&gt;
-Quand les robots reviennent à la base, ils détectent un amer (plafond) qui leur signale de bifurquer vers leur base.&lt;br /&gt;
&lt;br /&gt;
-Dans la base, ils détectent un amer qui leur indique de faire demi-tour&lt;br /&gt;
&lt;br /&gt;
=Problèmes rencontrés=&lt;br /&gt;
&lt;br /&gt;
Lors de ce projet nous avons rencontré plusieurs obstacles. Tout d'abord pendant la première semaine nous avons fait un inventaire sur le matériel nécessaire et le matériel déjà présent. A la fin de la première semaine nous avions donc tout le matériel nécessaire à part une pince afin d'attraper nos objets ainsi que des capteurs de suivi de ligne et du scotch blanc afin de faire la ligne pour la maquette. Nous avons donc envoyé un mail à Matthieu Dumay qui n'a malheureusement pas était pris en compte pendant les trois semaines que nous avons eu entre les deux semaines de robotique malgré un mail de rappel de la commande. Lors de la deuxième semaine nous avons donc du improviser. Nous avons utiliser des feuilles blanches découpées en lamelles pour le suivi de ligne. Nous avons également trouvé de nouveaux capteurs de suivi de ligne. Et enfin nous avons choisi d'imprimer des pinces au lieu de les commander.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:Essai_moteur_v3.zip&amp;diff=12819</id>
		<title>Fichier:Essai moteur v3.zip</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:Essai_moteur_v3.zip&amp;diff=12819"/>
		<updated>2024-05-14T14:14:15Z</updated>

		<summary type="html">&lt;p&gt;Maelle : Maelle a téléversé une nouvelle version de Fichier:Essai moteur v3.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12744</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12744"/>
		<updated>2024-04-19T14:42:51Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
Les cibles ont été faites pour faciliter la préhension avec la pince&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Par la suite, le phototransistor que l'on utilisait était trop sensible à la pollution par la lumière visible, on en a donc pris un nouveau :&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor_2 : [[Fichier:SFH_309_FA.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture_d'écran_2024-04-19_150732.png]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12743</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12743"/>
		<updated>2024-04-19T14:42:06Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
Les cibles ont été faites pour facilité la prehention avec la pince&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Par la suite, le phototransistor que l'on utilisait était trop sensible à la pollution par la lumière visible, on en a donc pris un nouveau :&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor_2 : [[Fichier:SFH_309_FA.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture_d'écran_2024-04-19_150732.png]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12742</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12742"/>
		<updated>2024-04-19T14:41:32Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Par la suite, le phototransistor que l'on utilisait était trop sensible à la pollution par la lumière visible, on en a donc pris un nouveau :&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor_2 : [[Fichier:SFH_309_FA.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture_d'écran_2024-04-19_150732.png]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12741</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12741"/>
		<updated>2024-04-19T14:41:20Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Par la suite, le phototransistor que l'on utilisait était trop sensible à la pollution par la lumière visible, on en a donc pris un nouveau :&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor_2 : [[Fichier:SFH_309_FA.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture_d'écran_2024-04-19_150732.png]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12740</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12740"/>
		<updated>2024-04-19T14:40:46Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
La plateforme du robot 1 est constituée de 4 roues suédoises. D'après le wiki de l'année dernière un des moteurs (le moteur 3) ne tournait que dans un sens. La cause était un des pont en H qui avait cessé de fonctionner correctement. On a alors décidé de dessouder et ressouder un nouveau pont en H. Mais en dessoudant nous avons abîmé la carte alors nous avons dû nous accommoder et rajouter des fils. Ensuite nous avons testé les moteurs qui ont tous fonctionné dans un sens mais dans l'autre sens nous avons envoyé trop de courant d'un coup. Le driver a alors de nouveau grillé. Pour y remédier nous avons pris une deuxième carte électronique sur laquelle il y avait déjà un driver pour deux moteurs que nous avons alors connecté en soudant des fils entre elle est la carte principale sur laquelle il y a la teensy. C'est après beaucoup de difficultés que nous avons réussit a faire tourner les quatre roues.&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie consiste au calcul du déplacement du robot en fonction de la rotation de ses moteurs Elle est très complexe à mettre en place. On a donc décidé de trouver des alternatives car dans notre application l'odométrie n'est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Conception des cibles=&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
Par la suite, le phototransistor que l'on utilisait était trop sensible à la pollution par la lumière visible, on en a donc pris un nouveau :&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor_2 : [[Fichier:SFH_309_FA.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture_d'écran_2024-04-19_150732.png]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;br /&gt;
&lt;br /&gt;
=Attention=&lt;br /&gt;
&lt;br /&gt;
Pour l'année prochaine, la carte électronique pour la teensy, les drivers et les moteurs de la plateforme principale serait a changer si possible vu comment elle est soudée. Le mieux serait de la refaire et de la commander.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12730</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12730"/>
		<updated>2024-04-19T08:38:12Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie==&lt;br /&gt;
L'odométrie est très complexe à mettre en place. On a donc décidé de trouver des alternatives.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12729</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12729"/>
		<updated>2024-04-19T08:36:19Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
=Contrôle des moteurs=&lt;br /&gt;
&lt;br /&gt;
==Robot 1==&lt;br /&gt;
&lt;br /&gt;
== Robot 2 et 3 ==&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Détection de ligne=&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
=Asservissement de ligne=&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
==Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;==&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Envoie de données==&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codes utilisés==&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Détection des cibles=&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
=Identification des cibles=&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
=Système de Préhension=&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
==Détection de saisie==&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Communication Wi-Fi=&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
==Connexion à la carte ESP32==&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12728</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12728"/>
		<updated>2024-04-19T08:32:18Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
Tout au long de la mission, l'utilisateur peut suivre le nombre de blessée rapatriés et d'ennemis capturés avec un interface.&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement de ligne==&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
===Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;===&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Envoie de données===&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Codes utilisés===&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préhension==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12727</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12727"/>
		<updated>2024-04-19T08:28:28Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
La fonction controleMoteur s'appuie sur la matrice donnée par Technique de l'ingénieur, à la partie 3.1 de &amp;lt;em&amp;gt;Robotique mobile : conception, modélisation et commande&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema angles 3 roues.png|center]].&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement de ligne==&lt;br /&gt;
Dans cette partie, nous expliquons la méthode utilisée pour que les différents robots puissent suivre la ligne noire.&lt;br /&gt;
&lt;br /&gt;
===Lien entre la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;===&lt;br /&gt;
Les capteurs de réflexion sont connectés à la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;. Nos moteurs sont contrôlés par la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. Afin, d'envoyer les données mesurés par ces capteurs à la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;, il est nécessaire de faire le lien via une connexion UART. &lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous avons utilisé les ports 16 et 17 de l'&amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt; qui correspondent à UART2, pour envoyer les commandes, nous avons donc utilisé Serial2 sur cette carte. &lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; c'est l'UART1  qui est connecté ; il faut donc utiliser le Serial1. &lt;br /&gt;
&lt;br /&gt;
Sur la carte &amp;lt;em&amp;gt;ESP32&amp;lt;/em&amp;gt;, il faut écrire : &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  Serial2.begin(115200); // Initialize serial communication at 115200 baud&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, dans la fonction concernée : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Serial2.write((int) thetaP); // Envoie du float à la carte teensy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manière réciproque sur le code de la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // send data only when you receive data:&lt;br /&gt;
  if (Serial1.available() &amp;gt; 0) {&lt;br /&gt;
    // read the incoming byte:&lt;br /&gt;
    thetatest = Serial1.read();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Envoie de données===&lt;br /&gt;
Une fois la connexion faite, nous avons du faire la conversion des valeurs. En effet, la fonction Serial.write() ne peut écrire qu'un octet. &lt;br /&gt;
Nous avons donc convertit les valeurs sur 12 bits récupérés par les 2 capteurs (grâce à &amp;lt;em&amp;gt;capteurD = analogRead(CAN1); &amp;lt;/em&amp;gt; en données d'un octet. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thetaP = ((255.0 / 8190.0) * thetaP) + 127.5;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Codes utilisés===&lt;br /&gt;
[[Fichier:AsservissementLigneESP.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Essai moteur v3.zip]]&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préhension==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent ramener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimant : Efficace uniquement à très courte distance (autour de 1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. De plus, il chauffe assez rapidement, alimenté sous 24V.&lt;br /&gt;
#Une spatule qui s'inclinerait, et qui passerait sous le personnage : problèmes de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable.&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On a envisagé plusieurs méthodes : conception en lego, pièce en imprimante 3D ou tout simplement un achat. C'est cette dernière solution qui a eu notre préférence.  On a choisit une pince adapté à notre servo; On va la modifié pour qu'elle corresponde aux dimension de la cible.&lt;br /&gt;
&lt;br /&gt;
Modèle de la pince : Kitronik Klaw MK2 Robotic Gripper Kit.&lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de capteurs correspondant à nos besoins, nous avons donc décidé d'en concevoir un par nous même. On utilise pour cela un émetteur fonctionnant avec une LED émettant dans l'infrarouge, à 880nm, et d'un récepteur fonctionnant avec un phototransistor, ayant un maximum de sensibilité vers 900nm.&lt;br /&gt;
&lt;br /&gt;
Datasheet LED : [[Fichier:SFH485P.pdf]]&lt;br /&gt;
&lt;br /&gt;
Datasheet phototransistor : [[Fichier:OFT-3301.pdf]]&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12707</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12707"/>
		<updated>2024-04-18T10:03:41Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préemption==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent remmener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Pour ce faire, plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimants: Efficace uniquement à très courte distance (1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. de plus il chauffe assez rapidement&lt;br /&gt;
#Une fourche qui se relèverait : soucis de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On va la faire en lego. &lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180° &amp;lt;br&amp;gt;&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:Servo.zip&amp;diff=12706</id>
		<title>Fichier:Servo.zip</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:Servo.zip&amp;diff=12706"/>
		<updated>2024-04-18T10:02:20Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12705</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12705"/>
		<updated>2024-04-18T10:01:08Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préemption==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent remmener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Pour ce faire, plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimants: Efficace uniquement à très courte distance (1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. de plus il chauffe assez rapidement&lt;br /&gt;
#Une fourche qui se relèverait : soucis de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On va la faire en lego. &lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180°&lt;br /&gt;
Code : [[Fichier:Servo.zip]]&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12704</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12704"/>
		<updated>2024-04-18T09:59:56Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préemption==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent remmener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Pour ce faire, plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimants: Efficace uniquement à très courte distance (1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. de plus il chauffe assez rapidement&lt;br /&gt;
#Une fourche qui se relèverait : soucis de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On va la faire en lego. &lt;br /&gt;
&lt;br /&gt;
On va utiliser le servo moteur suivant : MicroServo99 qui a une amplitude de 180°&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12703</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12703"/>
		<updated>2024-04-18T09:58:13Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préemption==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent remmener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Pour ce faire, plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimants: Efficace uniquement à très courte distance (1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. de plus il chauffe assez rapidement&lt;br /&gt;
#Une fourche qui se relèverait : soucis de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas. On va la faire en lego&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12702</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12702"/>
		<updated>2024-04-18T09:57:58Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillies afin d'appliquer les actions prédéfinies.&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il permet de détecter des obstacles imposants, nous allons donc l'utiliser plus tard pour la détection d'amers. &lt;br /&gt;
#Télémètre infrarouge : Distance minimale de détection trop élevée (environ 10 cm).&lt;br /&gt;
#Capteur à effet Hall : Ne capte que des aimants et uniquement de près et dans la direction du champ magnétique, ce qui est inutile dans notre cadre d'utilisation. &lt;br /&gt;
#Capteur de lumière infrarouge : Distance maximale de détection trop élevée (plusieurs mètres).&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc, bleu, rouge, vert) à une distance assez faible (environ 8cm). &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le capteur de couleur. Malgré sa faible distance de détection, il est assez fiable et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préemption==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent remmener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Pour ce faire, plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimants: Efficace uniquement à très courte distance (1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. de plus il chauffe assez rapidement&lt;br /&gt;
#Une fourche qui se relèverait : soucis de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter la présence de cible dans la pince pour activer sa fermeture. Pour cela nous avons décider d'utiliser un capteur optique qui arrêtera le robot lorsque la cible est détectée et fermera la pince.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12700</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12700"/>
		<updated>2024-04-18T09:56:31Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimale (couleur noir), il nous renvoie la valeur de la tension d'alimentation (autour de 3,3V ici). Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il est très bien pour détecter des obstacles mais pas pour notre cas. &lt;br /&gt;
#Capteur infrarouge : Distance de détection trop élevée.&lt;br /&gt;
#Capteur à effet Haull : Ne capte que des aimants et uniquement de près et dans la direction du champ. Trop peu pratique pour notre cas&lt;br /&gt;
#Capteur de lumière infrarouge : Il est fait pour détecter un signal type télécommande.&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc,bleu,rouge,vert) à une distance assez faible 8cm. &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le détection de couleur. Malgré sa faible distance de détection, si l'obstacle est en face il le détecte bien et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Préemption==&lt;br /&gt;
&lt;br /&gt;
===Capture===&lt;br /&gt;
Les robots 2 et 3 doivent remmener une cible à leur base &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Pour ce faire, plusieurs solution ont été envisagées :&lt;br /&gt;
#Un électro-aimants: Efficace uniquement à très courte distance (1cm). Pour palier à cela on a envisagé de le mettre sous le robot mais cela cause des problèmes de demi-tour et d'empilement dans les zones de dépôts. de plus il chauffe assez rapidement&lt;br /&gt;
#Une fourche qui se relèverait : soucis de stabilité et de précision.&lt;br /&gt;
#Une pince : plus stable, nécessite un servo moteur, plus maniable&lt;br /&gt;
&lt;br /&gt;
On a opté pour la pince qui semple être la solution la plus pratique et efficace pour notre cas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Détection de saisie===&lt;br /&gt;
Il va nous falloir détecter &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12698</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12698"/>
		<updated>2024-04-18T08:00:49Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il est très bien pour détecter des obstacles mais pas pour notre cas. &lt;br /&gt;
#Capteur infrarouge : Distance de détection trop élevée.&lt;br /&gt;
#Capteur à effet Haull : Ne capte que des aimants et uniquement de près et dans la direction du champ. Trop peu pratique pour notre cas&lt;br /&gt;
#Capteur de lumière infrarouge : Il est fait pour détecter un signal type télécommande.&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc,bleu,rouge,vert) à une distance assez faible 8cm. &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le détection de couleur. Malgré sa faible distance de détection, si l'obstacle est en face il le détecte bien et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12697</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12697"/>
		<updated>2024-04-18T08:00:14Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il est très bien pour détecter des obstacles mais pas pour notre cas. &lt;br /&gt;
#Capteur infrarouge : Distance de détection trop élevée.&lt;br /&gt;
#Capteur à effet Haull : Ne capte que des aimants et uniquement de près et dans la direction du champ. Trop peu pratique pour notre cas&lt;br /&gt;
#Capteur de lumière infrarouge : Il est fait pour détecter un signal type télécommande.&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc,bleu,rouge,vert) à une distance assez faible 8cm. &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le détection de couleur. Malgré sa faible distance de détection, si l'obstacle est en face il le détecte bien et nous permet de simplifier l'identification des cibles. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On utilise le capteur TCS3200&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12696</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12696"/>
		<updated>2024-04-18T07:58:16Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
===Robot 1===&lt;br /&gt;
&lt;br /&gt;
=== Robot 2 et 3 ===&lt;br /&gt;
Afin de contrôler les déplacements des robots 2 et 3 nous avons utilisés le code suivant : [[Fichier:Essai_moteurs.zip]].&lt;br /&gt;
Voici la procédure à suivre pour vérifier et tester le fonctionnement des moteurs :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
#Alimenter la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Téléverser ce code dans la carte &amp;lt;em&amp;gt;Teensy&amp;lt;/em&amp;gt;. &lt;br /&gt;
#Alimenter les moteurs via une batterie externe. &lt;br /&gt;
&lt;br /&gt;
Ce code contient : &lt;br /&gt;
:- La déclaration des constantes et variables utiles.&lt;br /&gt;
:- La défintion des fonctions MotorCCx (x correspondant au numéro du moteur) permettant de définir la vitesse et le sens de rotation de chaque moteur.&lt;br /&gt;
:- La fonction controleMoteur qui calcul l'orientation des roues.&lt;br /&gt;
:- La boucle principale permettant de vérifier que le robot avance, recule et tourne sur lui-même.&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;br /&gt;
&lt;br /&gt;
Plusieurs possibilités ont été envisagées : &lt;br /&gt;
#Capteur ultrason : ce capteur était trop imprécis de près. Il est très bien pour détecter des obstacles mais pas pour notre cas. &lt;br /&gt;
#Capteur infrarouge : Distance de détection trop élevée.&lt;br /&gt;
#Capteur à effet Haull : Ne capte que des aimants et uniquement de près et dans la direction du champ. Trop peu pratique pour notre cas&lt;br /&gt;
#Capteur de lumière infrarouge : Il est fait pour détecter un signal type télécommande.&lt;br /&gt;
#Capteur couleur : Ce capteur nous permet de capter des couleurs (blanc,bleu,rouge,vert) à une distance assez faible 8cm. &lt;br /&gt;
&lt;br /&gt;
On a donc choisi le détection de couleur. Malgré sa faible distance de détection, si l'obstacle est en face il le détecte bien et nous permet de simplifier l'identification des cibles&lt;br /&gt;
&lt;br /&gt;
==Identification des cibles==&lt;br /&gt;
Une fois que le robot a détecté la présence de cibles à proximité, encore faut-il les identifier pour différencier les alliés des ennemis. Pour cela, on utilise un capteur de couleur, plus précisément le modèle TCS3200.&lt;br /&gt;
&lt;br /&gt;
Datasheet : [[Fichier:TCS3200_(1).PDF]]&lt;br /&gt;
&lt;br /&gt;
Code Arduino_Uno : [[Fichier:Test_color_sensor_4.zip]]&lt;br /&gt;
&lt;br /&gt;
Code ESP32 THING : [[Fichier:Test_color_sensor_esp_1.zip]]&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur pour identifier les objets rouges et les objets bleus. La mesure fonctionne jusqu'à environ 5cm.&lt;br /&gt;
&lt;br /&gt;
==Communication Wi-Fi==&lt;br /&gt;
Notre cahier des charges inclut la nécessité de communication entre les trois machines ainsi que l'utilisateur. Deux choix s'offrent à nous, la communication Bluetooth ou bien la communication Wi-Fi. Après avoir vu les échecs essuyés par les groupes des années précédentes quand ils essayaient d'utiliser cette technologie, nous avons décidé d'utiliser la communication Wi-Fi. &lt;br /&gt;
&lt;br /&gt;
===Connexion à la carte ESP32===&lt;br /&gt;
La première marche à franchir est de réussir à connecter les robots à un point d'accès Wi-Fi. Pour cela, la carte ESP32 dispose d'un module qui le permet. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voilà le code: [[Fichier:Connexion_wifi.zip]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce dernier est assez simple. Dans un premier temps, on appelle une fonction permettant de rechercher et d'afficher dans la console tous les points d'accès Wi-Fi disponibles dans les environs de la carte. Ensuite, en remplaçant les valeurs des variables ssid et password par le nom du réseau et le mot de passe pour y accéder, on peut s'y connecter et récupérer l'adresse IP de la carte sur ledit réseau.&lt;br /&gt;
 Teensy :&lt;br /&gt;
::- Installer le support de la carte dans l'IDE Arduino via ce [https://www.pjrc.com/teensy/td_download.html lien]&lt;br /&gt;
&lt;br /&gt;
===Interface utilisateur===&lt;br /&gt;
Pour mettre en forme les deux informations sur le nombre de soldats sauvés et capturés et assurer un retour utilisateur clair, nous avons décidé de créer une page internet qui va mettre en forme les données susmentionnées.&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12664</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12664"/>
		<updated>2024-04-17T07:08:58Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:Test ligne.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12663</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12663"/>
		<updated>2024-04-17T07:07:39Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf &lt;br /&gt;
&lt;br /&gt;
Code : [[Fichier:test_ligne.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12662</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12662"/>
		<updated>2024-04-17T07:07:18Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf {\n}&lt;br /&gt;
Code : [[Fichier:test_ligne.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12661</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12661"/>
		<updated>2024-04-17T07:06:56Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
Datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf \n&lt;br /&gt;
Code : [[Fichier:test_ligne.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12660</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12660"/>
		<updated>2024-04-17T07:06:19Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf&lt;br /&gt;
Code : [[Fichier:test_ligne.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12659</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12659"/>
		<updated>2024-04-17T07:04:46Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf&lt;br /&gt;
Code test : Fichier:Test ligne.zip.&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;br /&gt;
La détection de cible consiste à repérer les cibles qui se trouvent à une certaine distance bien définie du robot, puis d'exécuter les actions nécessaires correspondantes. &lt;br /&gt;
Cela nécessite l'utilisation des capteurs afin de collecter les données de distance entre l'objet (cible) et le robot, puis lire les données recueillis afin d'appliquer les actions prédéfinies qu'ils fassent&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=Fichier:Test_ligne.zip&amp;diff=12658</id>
		<title>Fichier:Test ligne.zip</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=Fichier:Test_ligne.zip&amp;diff=12658"/>
		<updated>2024-04-17T07:03:07Z</updated>

		<summary type="html">&lt;p&gt;Maelle : Test du capteur de ligne&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Test du capteur de ligne&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12656</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12656"/>
		<updated>2024-04-16T15:55:26Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
datasheet :  https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
	<entry>
		<id>https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12655</id>
		<title>RAMBOT</title>
		<link rel="alternate" type="text/html" href="https://bacasable.arpitania.eu//index.php?title=RAMBOT&amp;diff=12655"/>
		<updated>2024-04-16T15:53:27Z</updated>

		<summary type="html">&lt;p&gt;Maelle : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
==Mission des robots==&lt;br /&gt;
&lt;br /&gt;
Le but est d'assiéger une base ennemie tout en récupérant les blessés sur le chemin. Pour cela nous avons trois robots:&lt;br /&gt;
&lt;br /&gt;
# L'éclaireur : &lt;br /&gt;
#* il assiège les ennemis&lt;br /&gt;
#* il suit une ligne (suiveur) qui forme un escargot pour finir sur un drapeau qui signalera la fin du siège&lt;br /&gt;
#* il envoie les positions des obstacles qu'il rencontre (blessé à sauver ou ennemi à capturer)&lt;br /&gt;
# Le sauveteur :&lt;br /&gt;
#* il reçoit les informations de position des blessés&lt;br /&gt;
#* il récupère les blessés et les ramène à la base (hôpital)&lt;br /&gt;
# Le blindé :&lt;br /&gt;
#* il reçoit les informations de position des ennemis&lt;br /&gt;
#* il récupère les ennemis et les ramène à la base (prison)&lt;br /&gt;
&lt;br /&gt;
==Décomposition des actions élémentaires des robots==&lt;br /&gt;
&lt;br /&gt;
Dans l'idéal voici toutes les étapes à réaliser avec les robots:&lt;br /&gt;
# Les trois robots sont au camp de base&lt;br /&gt;
# Tant que pas d'obstacles : robot 1 fait sa &amp;quot;ronde&amp;quot; en suiveur de ligne&lt;br /&gt;
# Détecte un obstacle&lt;br /&gt;
# Identification blessé / ennemi&lt;br /&gt;
# Communication avec tous les robots&lt;br /&gt;
# Le robot 1 se déplace vers l'extérieur (pour laisser la place aux autres robots de passer)&lt;br /&gt;
# Le robot 2 ou 3 (suivant celui qui est nécessaire) s'active et va à la position du robot 1 (suivant la ligne)&lt;br /&gt;
# Il attrape l'individu&lt;br /&gt;
# Retour à la base et dépose de l'individu&lt;br /&gt;
# Envoie d'un signal au robot 1 pour qu'il se réactive &lt;br /&gt;
# Envoie l'information à l'utilisateur&lt;br /&gt;
# On reboucle sur l'étape 2&lt;br /&gt;
# On atteint le drapeau et c'est gagné&lt;br /&gt;
&lt;br /&gt;
=Décomposition du travail=&lt;br /&gt;
&lt;br /&gt;
Tâches à réaliser par ordre de priorité : &lt;br /&gt;
# Contrôle des moteurs de la plateforme principale et des plateformes secondaires&lt;br /&gt;
# Odométrie et repérage dans l'espace&lt;br /&gt;
# Détection de ligne&lt;br /&gt;
# Asservissement&lt;br /&gt;
# Détection des cibles&lt;br /&gt;
# Identification&lt;br /&gt;
# Communication sans fil entre les robots et avec l'utilisateur &lt;br /&gt;
# Attrapage de la cible&lt;br /&gt;
# Interface utilisateur&lt;br /&gt;
&lt;br /&gt;
==Contrôle des moteurs==&lt;br /&gt;
&lt;br /&gt;
==Odométrie ==&lt;br /&gt;
&lt;br /&gt;
==Détection de ligne==&lt;br /&gt;
&lt;br /&gt;
On utilise le capteur SparkFun Line sensor Breakout QRE1113. Il s'agit d'un capteur de réflexion. Lorsque la réflexion est minimal (noir) il nous renvoie la valeur de la tension d'alimentation. Pour pouvoir détecter correctement il faudra le mettre à 2mm du sol.&lt;br /&gt;
&lt;br /&gt;
==Asservissement==&lt;br /&gt;
&lt;br /&gt;
==Détection des cibles==&lt;/div&gt;</summary>
		<author><name>Maelle</name></author>
		
	</entry>
</feed>