Outils pour utilisateurs

Outils du site


wiki:god:maverick:programmation_de_la_carte_de_vol

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
wiki:god:maverick:programmation_de_la_carte_de_vol [2015/06/30 15:09]
maverick créée
wiki:god:maverick:programmation_de_la_carte_de_vol [2017/10/27 10:50] (Version actuelle)
fpi typo
Ligne 9: Ligne 9:
 Pour la centrale inertielle nous avons utilisé le code de Jeff Rowberg. Pour l'installation : http://42bots.com/tutorials/arduino-uno-and-the-invensense-mpu-6050-6dof-imu/ Pour la centrale inertielle nous avons utilisé le code de Jeff Rowberg. Pour l'installation : http://42bots.com/tutorials/arduino-uno-and-the-invensense-mpu-6050-6dof-imu/
  
-<file c++ afficherDistanceSol.ino> +\\
-/* Utilisation du capteur Ultrason HC-SR04 */+
  
-#define US_TRIG 12 +Le code commenté pour notre drone peut être consulté sur [[https://www.gitlab.com/vaajmu/drone ?|le dépôt git du projet]].
-#define US_ECHO 8+
  
-// Programme pour afficher la distance entre le drone et la surface en +\\
-// dessous (en général le sol) +
- +
-long lecture_echo; +
-long cm; +
- +
-void setup() +
-+
-  // Initialisation +
- +
-  pinMode(US_TRIG, OUTPUT); +
-  digitalWrite(US_TRIG, LOW); +
- +
-  pinMode(US_ECHO, INPUT); +
-  Serial.begin(9600); +
-+
- +
-void loop() +
-+
-  // mettre US_TRIG à haut pendant 10 microsecondes +
-  digitalWrite(US_TRIG, HIGH); +
-  delayMicroseconds(10); +
- +
-  // remettre ensuite US_TRIG à bas +
-  digitalWrite(US_TRIG, LOW); +
- +
-  // récupérer la durée du signal de réponse +
-  lecture_echo = pulseIn(US_ECHO, HIGH); +
-  // transformer le résultat vers la bonne unitée +
-  cm = lecture_echo / 58; +
- +
-  // Afficher la distance +
-  Serial.print("Distance m : "); +
-  Serial.println(lecture_echo); +
- +
-  // Attendre avant la prochaine lecture +
-  delay(1000); +
-+
-</file> +
- +
-Note :\\ +
-Dans les codes suivants, nous parlons de valeur transmise aux moteurs. Pour commencer, cette valeur est transmise aux ESC et pas aux moteurs. L'ESC se débrouillera lui même avec le moteur. De plus il est important de différencier plusieurs valeurs :\\ +
-- La valeur sous laquelle l'ESC ne sait même pas qu'il reçoit quelque chose\\ +
-- La valeur au dessus de laquelle le moteur commence à tourner\\ +
-- La valeur maximale que l'ESC peut transmettre\\ +
-Au dessus de la première valeur, le moteur s'initialise, et c'est cette valeur que le programme suivant recherche. +
- +
-<file c++ afficherValeursMPU.ino> +
-#include <Servo.h> +
- +
-#define MAXESC1 2000 +
-#define MINESC1 700 +
-#define ESC1 9 +
-#define PAS 5 +
- +
- // Programme pour faire varier la puissance d'un moteur. +
- // Utile pour déterminer la valeur minimum à appliquer au moteur pour l'initialiser +
- +
- +
-void setup() { +
-  Servo esc1; +
-  int val = MINESC1; +
-  char c; +
- +
-  Serial.begin(9600); +
-  Serial.println("DEBUT OK"); +
- +
-  // initialiser la variable ESC +
-  esc1.attach(ESC1); +
- +
-  // Attendre 1 seconde +
-  delay(1000); +
- +
-  // Affecter la valeur minimale à l'ESC +
-  esc1.writeMicroseconds(MINESC1); +
-  Serial.println("MIN OK"); +
- +
-  Serial.println(val); // Afficher la valeur initiale +
- +
-  while(1) { // Jusqu'à la fin +
- +
-    while (!Serial.available()); // Attendre un caractère +
-    c = Serial.read(); +
-    if(c == 'p') { // Si p : augmenter la vitesse +
-      val += PAS; +
-      esc1.writeMicroseconds(val); +
-    } +
-    else if(c == 'm') { // Si m : diminuer la vitesse +
-      val -= PAS; +
-      esc1.writeMicroseconds(val); +
-    } +
-    else // Sinon, message d'erreur +
-      Serial.println("non reconnu"); +
-     +
-    Serial.println(val); +
-  }   +
- +
-+
- +
-void loop() {   +
- +
-+
-</file> +
- +
-Note : Pour appliquer ce code à un autre ESC, il suffit de modifier la valeur de ESC1. +
- +
-Note 2 : MINESC1 est la valeur trouvée par le programme précédent. +
- +
-Note 3 : MAXESC1 a été trouvée sur internet et n'as pas plus de fondements. +
- +
-<file c++ calibrationFinaleESC1.ino> +
-#include <Servo.h> +
- +
-#define MAXESC1 2000 +
-#define MINESC1 703 +
-#define ESC1 9 +
- +
-// Programme pour calibrer le premier ESC  +
- +
-// la valeur de MINESC1 est trouvée avec le programmer +
-// varierVitesseMoteur Avec la valeur min, à l'établissement du +
-// courant, le moteur doit se comporter comme sur la documentation. En +
-// ce qui nous concerne, une suite de bips +
- +
-void setup() { +
-  Servo esc1; +
-  char c; +
-      +
-        +
-  // Début prg +
-  Serial.begin(9600); +
-  esc1.attach(ESC1); +
-  Serial.println("DEBUT OK"); +
- +
-  // Attendre 1 seconde +
-  delay(1000); +
- +
-  // Mettre au max +
-  esc1.writeMicroseconds(MAXESC1); +
- +
-  // Brancher batterie à ce moment +
- +
-  Serial.println("Connecter la batterie et attendre les bips\nEnsuite envoyer un char"); +
- +
-  // Attendre autorisation utilisateur +
-  while (!Serial.available()); +
-  c = Serial.read(); +
- +
-  // Écrire la valeur minimale +
-  esc1.writeMicroseconds(MINESC1); +
- +
-+
- +
-void loop() {   +
- +
-+
-</file> +
-Note : Pour calibrer les autres ESCs, changez la valeur de ESC1 et MINESC1 +
- +
-Puisque le servo ne réagit pas aux valeurs par défaut, le programme suivant sert à trouver la valeur minimum et la valeur maximumde ce modèle +
-<file c++ calibrationServo.ino> +
-#include <Servo.h> +
- +
-#define SERVO_PIN_CMD 6 +
- +
-// Programme pour rechercher la plage de valeur du servomoteur +
- +
-// Envoyer un caractère quelconque pour tester la valeur suivante +
-// Envoyer s (select) si le servo commence à se déplacer +
-// Envoyer s (select) de nouveau si le servo arrête de se déplacer +
- +
-void setup() { +
- +
-  // Déclarations +
-  Servo servo; +
-  char c; +
-  int val = 0; +
-  int pas = 20; +
-  int min = 0, max = 0; +
- +
-  Serial.begin(9600); +
-  Serial.println("DEBUT OK\nEn attente"); +
-   +
-  while(!Serial.available()); // Attendre un caractère pour commencer la recherche +
-  c = Serial.read(); +
- +
-  while(min == 0 || max == 0) { // Tant que les deux valeurs n'ont pas été trouvés +
-    Serial.println(val); // Afficher la valeur courante +
-     +
-    servo.attach(6, val, val); // Initialiser le servo avec la valeur +
-    servo.write(0); +
-     +
-    while(!Serial.available()); // Attendre avant la valeur suivante +
-    c = Serial.read(); +
- +
-    if(c == 's') { // Si l'utilisateur selectionne cette valeur +
-        if(min == 0) min = val; // modifier la bonne variable +
-        else max = val; +
-    } +
- +
-    servo.detach(); // Relacher le servo +
-    val += pas; // Incrémenter la valeur +
-  } +
- +
-  Serial.println("FIN\nTESTS !"); +
- +
-  while(!Serial.available()); +
-  c = Serial.read(); +
- +
-  // Utiliser la plage trouvée +
-  servo.attach(6, min, max); +
-  servo.write(0); +
-  while(!Serial.available()); +
-  c = Serial.read(); +
-  servo.write(180); +
-  while(!Serial.available()); +
-  c = Serial.read(); +
- +
-+
- +
-void loop() { +
- +
-+
-</file> +
- +
-Le programme suivant ne compile pas, il faut d'abord renseigner les constantes min et max, qui sont trouvées grace au code précédent. +
-<file c++ varierOrientationServo.ino> +
-#include <Servo.h> +
- +
-#define SERVO_PIN_CMD 6 +
-#define SERVO_MIN_VAL +
-#define SERVO_MAX_VAL +
- +
-// Programme pour tester le servomoteur +
- +
-void setup() { +
- +
-  // Déclarations +
-  Servo servo; +
-  char c; +
- +
-  // Initialisation +
-  servo.attach(SERVO_PIN_CMD, SERVO_MIN_VAL, SERVO_MAX_VAL); +
- +
-  // Attendre l'utilisateur pour mettre à 0° +
-  while(!Serial.available()); +
-  c = Serial.read(); +
-  servo.write(0); +
- +
-  // Attendre l'utilisateur pour mettre à 90° +
-  while(!Serial.available()); +
-  c = Serial.read(); +
-  servo.write(90); +
- +
-  // Attendre l'utilisateur pour mettre à -90° +
-  while(!Serial.available()); +
-  c = Serial.read(); +
-  servo.write(-90); +
- +
-+
- +
-void loop() { +
- +
-+
-</file>+
  
 Nous avons rencontré plusieurs difficultés à cette étape. À commencer Nous avons rencontré plusieurs difficultés à cette étape. À commencer
wiki/god/maverick/programmation_de_la_carte_de_vol.1435676960.txt.gz · Dernière modification: 2016/09/11 11:00 (modification externe)