Go Down

Topic: [Projet en cours] Réalisation d'un détecteur d'intrusion (prototype) (Read 843 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 : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy