salut ! j'utilise dans mon code arduino l'accélérométre ADXL335 pour la detection d'un accident
j'ai définit la valeur minimale acceptable pour les lectures d'accélération sur chaque axe (#define minVal -120
) càd Si les valeurs lues sont inférieures à cette limite, elles seront considérées comme anormales et indiqueront la détection d'un accident. et la valeur maximale acceptable (#define MaxVal 120)
le probléme c'est quand je marche a une vitesse constante et sans changer de direction, l'accélération change
alors que le capteur n'indiquera pas la vitesse de marche, quels que soient les calculs mais dans ma situation il indique .c'est quoi le probléme ??
voici le code complet
#include<SoftwareSerial.h>
#include<LiquidCrystal_I2C.h>
#include<TinyGPS.h>
SoftwareSerial gsm(11,12); //make RX arduino line is pin 2, make TX arduino line is pin 3.
SoftwareSerial gps(2,3);
LiquidCrystal_I2C lcd(0x27,16,2);
TinyGPS inf;
#define x A0
#define y A1
#define z A2
const int ENA = 10; // Broche de vitesse moteur 1
const int IN1 = 8; // Broche de direction moteur 1
const int IN2 = 7; // Broche de direction moteur 1
const int IN3 = 6; // Broche de direction moteur 2
const int IN4 = 5; // Broche de direction moteur 2
const int ENB = 9; // Broche de vitesse moteur 2
int xsample=0;
int ysample=0;
int zsample=0;
#define samples 10
#define minVal -120
#define MaxVal 120
float latitude;
float longitude;
void initModule(String cmd, char *res, int t)
{
while(1)
{
Serial.println(cmd);
gsm.println(cmd);
delay(100);
while(gsm.available()>0)
{
if(gsm.find(res))
{
Serial.println(res);
delay(t);
return;
}
else
{
Serial.println("Error");
}
}
delay(t);
}
}
void setup()
{
Serial.begin(9600);
gsm.begin(9600);
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setContrast(100);
lcd.print("Accident Alert ");
lcd.setCursor(0,1);
lcd.print(" System ");
delay(2000);
lcd.clear();
lcd.print("Initializing");
lcd.setCursor(0,1);
lcd.print("Please Wait...");
delay(1000);
Serial.println("Initializing....");
initModule("AT","OK",1000); //AT commande ,réponse,delay
initModule("AT+CPIN?","READY",1000); //indication que le SIM est prêt
initModule("AT+CMGF=1","OK",1000); //Configuration du message en mode texte
initModule("AT+CNMI=2,2,0,0,0","OK",1000);
Serial.println("Initialized Successfully");
lcd.clear();
lcd.print("Initialized");
lcd.setCursor(0,1);
lcd.print("Successfully");
delay(2000);
lcd.clear();
lcd.print("Acceleromiter");
for(int i=0;i<samples;i++)
{
xsample+=analogRead(x);
ysample+=analogRead(y);
zsample+=analogRead(z);
}
xsample/=samples;
ysample/=samples;
zsample/=samples;
Serial.println(xsample);
Serial.println(ysample);
Serial.println(zsample);
delay(1000);
lcd.clear();
lcd.print("GPS DATA ");
lcd.setCursor(0,1);
lcd.print(" Loading.. ");
delay(2000);
gps.begin(9600);
encode_gps();
coordinate();
delay(2000);
lcd.clear();
lcd.print("GPS is Ready");
delay(1000);
lcd.clear();
lcd.print("System Ready");
Serial.println("System Ready..");
Serial.println("Mouvement vers l'avant");
}
void loop()
{
moveForward();
int value1=analogRead(x);
int value2=analogRead(y);
int value3=analogRead(z);
int xValue=xsample-value1;
int yValue=ysample-value2;
int zValue=zsample-value3;
Serial.print("x=");
Serial.println(xValue);
Serial.print("y=");
Serial.println(yValue);
Serial.print("z=");
Serial.println(zValue);
if(xValue < minVal || xValue > MaxVal || yValue < minVal || yValue > MaxVal || zValue < minVal || zValue > MaxVal)
{
stopRobot();
coordinate();
encode_gps();
Serial.println("Accident detected");
lcd.clear();
lcd.print("Accident detected");
delay (2000);
lcd.clear();
lcd.print(" Sending SMS ");
Serial.println("Sending SMS");
Send1();
Serial.println("SMS Sent");
delay(2000);
lcd.clear();
lcd.print(" SMS sent");
}
}