Ci-dessous, les différences entre deux révisions de la page.
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' | Pour la centrale inertielle nous avons utilisé le code de Jeff Rowberg. Pour l' | ||
- | <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:// |
- | #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, | + | |
- | digitalWrite(US_TRIG, | + | |
- | + | ||
- | pinMode(US_ECHO, | + | |
- | Serial.begin(9600); | + | |
- | } | + | |
- | + | ||
- | void loop() | + | |
- | { | + | |
- | // mettre US_TRIG à haut pendant 10 microsecondes | + | |
- | digitalWrite(US_TRIG, | + | |
- | delayMicroseconds(10); | + | |
- | + | ||
- | // remettre ensuite US_TRIG à bas | + | |
- | digitalWrite(US_TRIG, | + | |
- | + | ||
- | // récupérer la durée du signal de réponse | + | |
- | lecture_echo = pulseIn(US_ECHO, | + | |
- | // transformer le résultat vers la bonne unitée | + | |
- | cm = lecture_echo / 58; | + | |
- | + | ||
- | // Afficher la distance | + | |
- | Serial.print(" | + | |
- | Serial.println(lecture_echo); | + | |
- | + | ||
- | // Attendre avant la prochaine lecture | + | |
- | delay(1000); | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | 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' | + | |
- | + | ||
- | <file c++ afficherValeursMPU.ino> | + | |
- | #include < | + | |
- | + | ||
- | #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' | + | |
- | + | ||
- | + | ||
- | void setup() { | + | |
- | Servo esc1; | + | |
- | int val = MINESC1; | + | |
- | char c; | + | |
- | + | ||
- | Serial.begin(9600); | + | |
- | Serial.println(" | + | |
- | + | ||
- | // initialiser la variable ESC | + | |
- | esc1.attach(ESC1); | + | |
- | + | ||
- | // Attendre 1 seconde | + | |
- | delay(1000); | + | |
- | + | ||
- | // Affecter la valeur minimale à l' | + | |
- | esc1.writeMicroseconds(MINESC1); | + | |
- | Serial.println(" | + | |
- | + | ||
- | Serial.println(val); | + | |
- | + | ||
- | while(1) { // Jusqu' | + | |
- | + | ||
- | while (!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | if(c == ' | + | |
- | val += PAS; | + | |
- | esc1.writeMicroseconds(val); | + | |
- | } | + | |
- | else if(c == ' | + | |
- | val -= PAS; | + | |
- | esc1.writeMicroseconds(val); | + | |
- | } | + | |
- | else // Sinon, message d' | + | |
- | Serial.println(" | + | |
- | + | ||
- | Serial.println(val); | + | |
- | } | + | |
- | + | ||
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | + | ||
- | } | + | |
- | </ | + | |
- | + | ||
- | 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 < | + | |
- | + | ||
- | #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' | + | |
- | // 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(" | + | |
- | + | ||
- | // Attendre 1 seconde | + | |
- | delay(1000); | + | |
- | + | ||
- | // Mettre au max | + | |
- | esc1.writeMicroseconds(MAXESC1); | + | |
- | + | ||
- | // Brancher batterie à ce moment | + | |
- | + | ||
- | Serial.println(" | + | |
- | + | ||
- | // Attendre autorisation utilisateur | + | |
- | while (!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | + | ||
- | // Écrire la valeur minimale | + | |
- | esc1.writeMicroseconds(MINESC1); | + | |
- | + | ||
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | + | ||
- | } | + | |
- | </ | + | |
- | 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 < | + | |
- | + | ||
- | #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(" | + | |
- | + | ||
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | + | ||
- | while(min == 0 || max == 0) { // Tant que les deux valeurs n'ont pas été trouvés | + | |
- | Serial.println(val); | + | |
- | + | ||
- | servo.attach(6, | + | |
- | servo.write(0); | + | |
- | + | ||
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | + | ||
- | if(c == ' | + | |
- | if(min == 0) min = val; // modifier la bonne variable | + | |
- | else max = val; | + | |
- | } | + | |
- | + | ||
- | servo.detach(); | + | |
- | val += pas; // Incrémenter la valeur | + | |
- | } | + | |
- | + | ||
- | Serial.println(" | + | |
- | + | ||
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | + | ||
- | // Utiliser la plage trouvée | + | |
- | servo.attach(6, | + | |
- | servo.write(0); | + | |
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | servo.write(180); | + | |
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | + | ||
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | + | ||
- | } | + | |
- | </ | + | |
- | + | ||
- | Le programme suivant ne compile pas, il faut d' | + | |
- | <file c++ varierOrientationServo.ino> | + | |
- | #include < | + | |
- | + | ||
- | #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, | + | |
- | + | ||
- | // Attendre l' | + | |
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | servo.write(0); | + | |
- | + | ||
- | // Attendre l' | + | |
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | servo.write(90); | + | |
- | + | ||
- | // Attendre l' | + | |
- | while(!Serial.available()); | + | |
- | c = Serial.read(); | + | |
- | servo.write(-90); | + | |
- | + | ||
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | + | ||
- | } | + | |
- | </ | + | |
Nous avons rencontré plusieurs difficultés à cette étape. À commencer | Nous avons rencontré plusieurs difficultés à cette étape. À commencer |