Pages: [1]   Go Down
Author Topic: [Projet en cours] Réalisation d'un détecteur d'intrusion (prototype)  (Read 597 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Paris
Offline Offline
Full Member
***
Karma: 1
Posts: 180
Beyond the possible...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

The Mind is like a parachute it works best when opened.

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3592
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tous tes delay(1) sont inutiles.

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

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

Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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();
  }
}
  }
}



« Last Edit: April 15, 2013, 02:49:42 am by Archelia » Logged

Pages: [1]   Go Up
Jump to: