Bonjour à tous ! Je suis entrain de réaliser un projet: coder PID avec Arduino pour asservir en hauteur un drone. Seulement je rencontre un problème au niveau de l'alimentation. J'utilise une pile 9 V 500mAh. Lorsque je fais tourner un seul moteur tout va bien, mais lorsque je branche 4 moteurs, j'ai mesuré avec un multimètre une chute brusque de tension. Voici le code que j'utilise:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #define ECHOPIN 2 #define TRIGPIN 3 // Constantes PID float setpoint = 10; float dt = 10; float Kp = 0.01; float Ki = 10; float erreur_prec = 0; float integrale = 0; // on importe les modules adafruit pour le shield #include <Wire.h> #include <Adafruit_MotorShield.h> // Mesure de la distance avec le capteur ultrason // Echopin: émetteur Trigpin : recepteur float mesureDistance() { digitalWrite(TRIGPIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGPIN, LOW); float dist = pulseIn(ECHOPIN, HIGH); dist /= 58; return dist; } Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_DCMotor *moteur1 = AFMS.getMotor(1); Adafruit_DCMotor *moteur2 = AFMS.getMotor(2); Adafruit_DCMotor *moteur3 = AFMS.getMotor(3); Adafruit_DCMotor *moteur4 = AFMS.getMotor(4); void setup() { Serial.begin(9600); pinMode(ECHOPIN, INPUT); // entrée: echopin pinMode(TRIGPIN, OUTPUT); // sortie: trigpin AFMS.begin(1000); moteur1->setSpeed(0); moteur1->run(FORWARD); moteur2->setSpeed(0); moteur2->run(FORWARD); moteur3->setSpeed(0); moteur3->run(FORWARD); moteur4->setSpeed(0); moteur4->run(FORWARD); } // PID void loop() { float dist = mesureDistance(); // mesure la distance au sol float erreur = setpoint - dist; integrale += erreur*dt; float sortie = Kp*erreur+ Ki*integrale; Serial.println(erreur); moteur1->setSpeed(0);//initialisation de la vitesse des moteurs moteur2->setSpeed(0); moteur3->setSpeed(0); moteur4->setSpeed(0); if (sortie < 0) sortie = 0; else if (sortie > 255) sortie = 255; moteur1->setSpeed(sortie); moteur2->setSpeed(sortie); moteur3->setSpeed(sortie); moteur4->setSpeed(sortie); delay(dt); } |
Je ne sais pas trop quoi faire, quelqu'un peut-il m'aider ?
+0
-0