Bonjours,
depuis plusieurs jours j'essaie de créer un stabilisateur grâce à un Arduino nano
seulement voila quand je rencontre le montage sous tension, il fonctionne quelque seconde puis plus rien, comme si l'accéléromètre arrêter de transmettre ces données. Aussi quand je rencontre sous tension l'Arduino il s'allume mais n'exécute pas le code il faut que je le réinitialise pour que cela marche. Les délais de fonctionnement varient suivant la source d'alimentation via le vin le montage marche quelque seconde, via l'USB il marche mieux mais s'arrête au bout de 30sec. Sa ne s'arrête jamais au même moment d'un test à l'autre des fois sa marche pendant 2 ~ 3 minutes mais souvent sa ne marche plus dans les 30 secondes.
Je n'ai aucune idée de la source du problème.
Le code est en pièce jointe
J'utilise un Arduino nano, un connecteur GY-521 au broche A4
Hello,
for several days I have been trying to create a stabilizer with an Arduino nano
only here is when I turn on the assembly, it works a few seconds then nothing, as if the accelerometer stop transmitting this data. Also when I power up the Arduino it turns on but does not execute the code I have to reset it for it to work. The operating time varies according to the power source via the wine the assembly works for a few seconds, via the USB it works better but stops after 30sec. Its never stops at the same time from one test to another sometimes its walking for 2 ~ 3 minutes but often it does not work within 30 seconds.
I have no idea where the problem is.
The code is attached
I am using an Arduino nano, a GY-521 connect to pin A4
//code original de Transductor, modifié por El_Xed
#include <Wire.h>
#include <Servo.h>
Servo servo1;
Servo servo2;
// Adresse I2C du MPU 6050:
#define MPU 0x68
// Constante:
#define A_R 16384.0
#define G_R 131.0
//Conversion de radianes a grados 180/PI
#define RAD_A_DEG = 57.295779
//MPU-6050 valeurs de 16 bits
// Acceleration + gyro
int16_t AcX, AcY, AcZ, GyX, GyY, GyZ;
int val1;
int val2;
float Acc[2];
float Gy[2];
float Angle[2];
int tens;
int R2 = 0;
void setup()
{
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
servo1.attach(5);
servo2.attach(6);
//Serial.begin(38400);
pinMode(12, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}
void loop()
{
tens = analogRead(A7);
// Serial.println(tens);
if(tens > 820){
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
}else if(tens > 760){
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
}else if(tens > 720){
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}else if(tens > 700){
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}else if(tens < 700){
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
}
//valeurs de l'accelerométre:
Wire.beginTransmission(MPU);
Wire.write(0x3B); // Registre 0x3B - accelerometre
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true); //6 lectures
AcX=Wire.read()<<8|Wire.read();
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
//angles Y, X
Acc[1] = atan(-1*(AcX/A_R)/sqrt(pow((AcY/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
Acc[0] = atan((AcY/A_R)/sqrt(pow((AcX/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
// proximamente mas proyectos en http://elxedelectronics.blogspot.mx
// Valeurs du gyroscope:
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
Wire.requestFrom(MPU,4,true);
GyX=Wire.read()<<8|Wire.read();
GyY=Wire.read()<<8|Wire.read();
//Calcul angles gyroscope:
Gy[0] = GyX/G_R;
Gy[1] = GyY/G_R;
//Filtre complémentaire:
Angle[0] = 0.98 *(Angle[0]+Gy[0]*0.010) + 0.02*Acc[0];
Angle[1] = 0.98 *(Angle[1]+Gy[1]*0.010) + 0.02*Acc[1];
int Uangle0 = Angle[0] * 100; // Angle X
int Uangle1 = Angle[1] * 100; // Angle Y
//Serial.print("Angle X: "); Serial.println(Uangle0);
//Serial.print("Angle Y: "); Serial.println(Uangle1); Serial.println("------------");
float val1 = Uangle0;
val1 = map(val1, -7500, 3000, 31, 135); // -3500, 4500, 48, 132
//Serial.println(val1);
servo1.write(val1);
float val2 = Uangle1;
val2= map(val2, -7000, 4000, 31, 135); //-25, 32, 12, 220
//Serial.println(val2);
//Serial.println(R2);
servo2.write(val2+R2);
delay(5);
if (digitalRead(12) == LOW && R2 < 90 ){
R2 = R2 + 10;
delay(250);
}
if (digitalRead(11) == LOW && R2 > -90 ){
R2 = R2 - 10;
delay(250);
}
}
sketch_jan10a.ino (3.37 KB)