Go Down

Topic: [Projet en cours] Réalisation d'un détecteur d'intrusion (prototype) (Read 721 times) previous topic - next topic

Archelia

Bonjour,
je souhaiterais (dans le cadre d'un projet d'étude de BTS Système électronique) réaliser une carte qui comprend les fonctionnement suivant :

•   Détection d'un dépassement de seuil des axes d'un accéléromètre.
•   Si dépassement des seuils envoie d'une trame définie selon un protocole commun

J'ai déjà réalisé c'est deux fonctions en voici le code :

Quote

/* Les broches:

analog 1: axe-x
analog 2: axe-y
analog 3: axe-z

*/


// Ces constantes déclarent les broches.
const int groundpin = 18; // entrée analogique broche 4 -- GND
const int powerpin = 19; // entrée analogique broche 5 -- Vcc
const int xpin = A1; // axe-x
const int ypin = A2; // axe-y
const int zpin = A3; // axe-z

int Seuil=730; // declare Seuil positif +2g
int Seuil0=300; // declare seuil negatif -2g
int incomingByte;

// les valeurs minimales et maximales que prend le CAN
int minVal = 0;
int maxVal = 1024;



void setup()
{
  analogReference(EXTERNAL); // tension de réference du convetisseur
  Serial.begin (9600); //vitesse de la liaison
 
}

void loop()
{
 
  //lire les valeur analogique de l'accéléromètre et les mémorisers
  int xRead = analogRead(xpin);
  delay(1);
  int yRead = analogRead(ypin);
  delay(1);
  int zRead = analogRead(zpin);
  delay(1);
 
    int checkSensor();
    {       // fonction de type int
    if (xRead> Seuil || yRead> Seuil || zRead> Seuil) { // si la valeur analogique du capteur > 600
    Serial.write("$ET3S");
    delay(1);
    }
   
    else if (xRead < Seuil0 || yRead < Seuil0 || zRead < Seuil0){
     
    Serial.write("$ET3S");
    delay(1);
    }
   
   
   
    }
    delay(30);
   


}



Si vous avez des proposition pour améliore / optimiser ce petit programme je suis preneur.

Les fonctions suivante me pose problème :

•   Envoi des deux seuils si une demande est faite par une commande précise
•   Changement des seuils si une commande précise est envoyée

Le matériel utilisé (imposer) :

•   Arduino Uno Rev3
•   Adlx 335


Le protocole des différentes commandes :

$ET3S : détection d'un dépassement de seuil
$ET3S ? : Demande d'envoi des différent seuils
$ET3S1AZER: Changement du seuil1 par la valeur « AZER »
$ET3S2AZER :Changement du seuil2 par la valeur « AZER »


Alors voilà les différents problèmes que me pose c'est deux fonctions :

•   Comment détecter la valeur $ sur Rx ?
•   Comment enregistrer les caractère qui suivent le $ ?

Merci d'avance a tout commentaire et/ou réponse.

-Standby

Tu peut toujours essayer d'amélioré l'accélerometre avec un filtre Kalman sa fait un petit plus, pour détecté la valeur "$" il faut la stocker dans une variable char puis la comparer.

http://arduino.cc/en/Reference/serial
The Mind is like a parachute it works best when opened.

B@tto

Tous tes delay(1) sont inutiles.

Sinon pour réceptionner une chaîne de caractères il faut faire un truc du genre :

Code: [Select]
if(Serial.available()){
char Buffer[10]; // à dimensionner à la bonne taille
int i;
delay(5);
while(Serial.available()) Buffer[i++]=Serial.read();
}


Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Archelia

Merci de vos réponse.


je me suis pencher sur tout les problèmes énoncer, voici le code :

Quote

char detection ;
int table[10];
int i;

void setup () {

Serial.begin(9600);

}

void loop() {
 
  if (Serial.available() > 0)   {
    detection = Serial.read ();
  }
  else if (detection == '$') {
     for(i=0;i<=9;i++)  {
    if( Serial.available () >0)   {
      table = Serial.read();
      delay(200);
    Serial.write (table);
      delay(25);
    Serial.flush();
  }
}
  }
}





Go Up