Binome2017-2

De Wiki de bureau d'études PeiP

Copyright Valérianne et Théo

Séance du 15 janvier 2018:

Découverte des objectifs et mise en place du cahier des charges. Nous souhaitons réaliser un robot "prédateur". Nous allons concevoir un robot simple car nous voulons nous concentrer sur la partie électronique et informatique. Nous allons réaliser notre circuit imprimé en nous basant sur celui qui nous est donné en exemple. Enfin, nous allons programmer le robot pour qu'il puisse se déplacer de manière autonome. Cependant, lorsqu'il captera un signal wifi avec son raspberry pi, on pourra le commander depuis notre téléphone.

Matériel nécessaire pour la partie mécanique: - Châssis à partir de plexiglas - Roues motorisées - Roue libre (bille) - Servo-moteurs - Boîtier Piles


✓ ✓ ✓ ✓ ✓ ✓ ✓

Composants électroniques nécessaires:

- Carte électronique - Micro-contrôleur ATMega328p - Adaptateur FTDI (USB-UART) et port USB - Contrôleur-moteur - 3 Capteurs infrarouge - Capteur Ultrasons - Régulateur 5V - Quartz 16 MHz - 2 capacités 10microF - 6 capacités 100nF - 1 capacité 1mF - 1 résistance 1kOhm - 1 résistance 220Ohm - 1 Diode


✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓

Matériel informatique:

- Carte Raspberry Pi 3 - Caméra - Batterie Raspberry


Séance du 16 janvier:

Nous avons réfléchi sur l'aspect esthétique de notre futur robot. (Image ?) Je trompe mon copain. Nous avons analysé le circuit imprimé fournit par les professeurs sur le logiciel Fritzing pour ne garder que les éléments dont nous avions besoin. Nous avons donc enlevé le détecteur de ligne, un servo moteur. Nous avons passé du temps pour rétablir les connections compromises par la suppression de ces éléments. C'est très interessant de travailler sur le circuit imprimé, et de voir les différentes vues proposées, qui permettent de bien se rendre compte de la forme de chaque fonction, et comment elles sont reliées entre elles.


Séance du 18 janvier:

Nous avons travaillé sur le routage de notre circuit imprimé pour qu'il soit le plus efficace possible. Nous avons modifié le placement de la capacité 4, qui était trop loin de l'alimentation. Elle ne remplissait pas sa fonction, qui est de lisser la tension dans les câbles. Notre circuit est prêt à être imprimé. Nous avons ensuite commencé le code de notre robot. La difficulté est de savoir dans quelle direction tourner en fonction de là où est la proie et de trouver la manière la plus efficace de tourner dans le but de rattraper la proie. Nous avons 3 capteurs infrarouge sur notre robot. La meilleure solution pour nous est de réduire le champs de balayage des capteurs pour avoir une plus grande information de l'emplacement de la proie. Par exemple, si le capteur de droite et du milieu détecte une présence, alors on fera tourner le robot vers la droite, à l'aide du servo-moteur qui va incliner l'axe des roues. S'il y a uniquement le capteur de droite qui détecte une proie, alors on fera tourner le robot en faisant tourner la roue gauche plus vite que l'autre.

Séance du 19 janvier:

Nous avons commencé le squelette du code. Cependant, nous avons beaucoup d'interrogations sur la façon dont va réagir notre robot. La difficulté est que nous ne pouvons pas tester notre code sur le robot pour le moment et que beaucoup de parties vont rester en suspens. Nous avons choisi d'utiliser la fonction milis(). Cette fonction permet d'effectuer plusieurs actions en même temps, ici tourner et repérer une proie, contrairement à la fonction delay().

  1. include <Servo.h>

Servo myServo; unsigned long previousRotation = 0; unsigned long TimeRotaion = 5000


void setup() {

pinMode(1, OUTPUT); // moteur pinMode(2, OUTPUT); // moteur pinMode(3, OUTPUT); // Servo pinMode(4, OUTPUT); // Infra pinMode(5, OUTPUT); // Infra pinMode(6, OUTPUT); // Infra pinMode(7, OUTPUT); // Sonar }

void loop() {

 Obstacle = analogRead(A0);
 Cible1= analogRead(A1);
 Cible2= analogRead(A2);
 Cible3= analogRead(A3);
 AngleDir = analogRead(A4);
 Rotation ()
 if cibleDetecté {
     StopRotation
     Poursuite {
       if (Infra 1) {
         90° Droite
       }
       else if (Infra 1 +2) {
         30° Droite
       }
       else if (Infra 2) {
         Tout Droit
       }
       else if (Infra 2 + 3) {
         30° Gauche
       }
       else if (Infra 3) {
         90° Gauche
       }
       else if (Infra 1 + 2 + 3) {
         Tout droit
       }
     }
 
 if (millis() - previousRotation >= TimeRotation) {
   previousRotation = millis();
   StopRotation 
   Avancer()   
 }
 }


   }
 Avance 3 secondes


 if (DistanceObstacle < 10) {
   Virage 90°    
 }
 // put your main code here, to run repeatedly:

}