Merci de vos réponses.
Il s'agit d'un stabilisateur pour bateau, dont seul le moteur avec volant d'inertie tourne (cf système : seakeeper.com). Le gyroscope (MPU) est fixé à l'horizontale par rapport au bateau et c'est en récupérant les données du gyroscope, que j'ai pu définir la condition angulaire que je veux (à savoir +15° et -15°). J'aimerais que mon moteur ne soit jamais à l'arrêt (donc soit à Vmin soit à Vmax).
Pour la question du temps, mon bateau se stabilise assez vite naturellement (<7 secondes), c'est pour cela que j'ai besoin d'une réponse quasi instantanée du moteur d'où les 5 secondes. Mon problème vient notamment du fait que ma condition reste vraie par moment, d'où le fait que j'ai utilisé delay()
Voici le code complet du système (la partie données gyroscope étant optionnelle, mais permet de voir la réaction du bateau) :
#include <MPU6050_tockn.h>
#include <Wire.h>
#include <Servo.h>
//VARIABLE MOTEUR//
Servo esc;
MPU6050 mpu6050(Wire);
long timer = 0;
void setup(){
esc.attach(9); // Pin sur lequel est connecté le hacheur (fil jaune)
esc.writeMicroseconds(1000); // Initialise la vitesse de rotation à 0
Serial.begin(9600); // Initialise la communication série à 9600 bits/s
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
esc.writeMicroseconds(1050); //Initialise la vitesse de rotation de base à Vmin
}
void loop(){
if(mpu6050.getAngleY()< -15 or mpu6050.getAngleY()> 15) {
esc.writeMicroseconds(1500);
delay(5000);
}
else {
esc.writeMicroseconds(1050);
}
mpu6050.update();
if(millis() - timer > 1000){ //Boucle permettant de récupérer les données du gyroscope toute les 1 secondes
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}