Bonjour à tous,
Je fais un projet sur un asservissement de position, et pour cela j'utilise un accéléromètre et un moteur à courant continu. J'utilise également un inverseur 3 positions (ON OFF ON) qui me permet de donner ma consigne.
J'ai réussit à faire un programme qui marche bien, je vous le mets ici :
int E1 = 5;
int M1 = 4;
const int I1 = 2;
const int I2 = 3;
const int Voie_0=0;
int mesure_brute=0;
void setup()
{
pinMode(M1, OUTPUT);
pinMode(I1, INPUT);
pinMode(I2, INPUT);
Serial.begin(115200);
} // fin du setup
void loop()
{
//int value1 = digitalRead(I1);
//int value2 = digitalRead(I2);
mesure_brute=analogRead(Voie_0);
//Serial.println(mesure_brute);
int angle = -0.651*mesure_brute+329;
Serial.println(angle); // afficher à la ligne l'angle
//delay(1000);
if (angle<0)
{
digitalWrite(M1, HIGH);
Serial.println("HIGH");
}
if (angle>0)
{
digitalWrite(M1, LOW);
Serial.println("LOW");
}
analogWrite(E1,50);
}
Cependant, ce programme ne prend pas en compte ma consigne. Mon but dans ce projet et d'arriver à maintenir une position angulaire (l'équation "angle = -0.651*mesure_brute+329" me donne l'angle, et le fait très bien, le problème n'est pas là). En fait je voudrais à l'aide de mon inverseur donner une consigne, c'est-à-dire faire tourner mon moteur jusqu'à une position voulue (mon moteur étant relié à une "planche" où est fixé dessus l'accéléromètre, donc je veux conserver la mesure de l'angle donnée par l'accéléromètre). J'ai donc essayé de modifier mon programme pour arriver à cela, mais le moteur "bourre" quand je téléverse le programme dans mon arduino (uno).
Quelqu'un saurait-il comment faire le bon programme ? Je vous laisse un schéma pour illustrer la situation, ainsi que le programme "modifié".
int E1 = 5;
int M1 = 4;
const int I1 = 2;
const int I2 = 3;
const int Voie_0=0;
int mesure_brute=0;
void setup()
{
pinMode(M1, OUTPUT);
pinMode(I1, INPUT);
pinMode(I2, INPUT);
Serial.begin(115200);
} // fin du setup
void loop()
{
while (I1==1 or I2==1)
mesure_brute=analogRead(Voie_0);
int consigne = -0.651*mesure_brute+329;
//int value1 = digitalRead(I1);
//int value2 = digitalRead(I2);
mesure_brute=analogRead(Voie_0);
//Serial.println(mesure_brute);
int angle = -0.651*mesure_brute+329;
Serial.println(angle); // afficher à la ligne l'angle
//delay(1000);
if (angle<consigne)
{
digitalWrite(M1, HIGH);
Serial.println("HIGH");
}
if (angle>consigne)
{
digitalWrite(M1, LOW);
Serial.println("LOW");
}
analogWrite(E1,50);
}
Merci de votre réponse, et bonne soirée à tous !