Modifications

Sauter à la navigation Sauter à la recherche
8 475 octets ajoutés ,  20 mai 2014 à 10:52
Ligne 1 : Ligne 1 :  
{{Trinket-Alarme-NAV}}
 
{{Trinket-Alarme-NAV}}
 +
 +
== Le code ==
 +
{{bloc-etroit|text=Le code pour le simple système d'alarme est présenté ci-dessous.
 +
 +
Cette configuration utilise des senseurs liées à la broche 3 (analogique) par l'intermédiaire de résistances. Le Trinket doit être programmé débranché du montage puisque les broches 3 et 4 sont utilisée par le connecteur USB.
 +
 +
Le programme utilise la bibliothèque standard Softwareserial pour communiquer avec le Bluefruit EZ-Link. La broche 0 est utilisé pour la transmission et la broche 2 pour la réception. Vous pouvez très bien vous passer de spécifier la broche de réception (et réduire un peu la taille du code) en utilisant la bibliothèque tiers SendOnlySoftwareSerial disponible sur arduino.cc via le fil de discussion: [http://forum.arduino.cc/index.php?topic=112013.0 http://forum.arduino.cc/index.php?topic=112013.0.].  Cela vous permettrait alors d'utiliser la broche 2 (Analogique 1) pour les alarmes, libérant la broche 3 partagée avec USB.
 +
 +
La broche 1, sur laquelle est intégrée la LED rouge de la carte, est utilisée comme indicateur d'activation de senseur. Lorsque l'alarme est activée (sans alarme déclenchée), la LED ne clignote pas. Elle clignote de 1 à 7 fois en fonction du senseur déclencheur (1 pour #1/PIR, 2 pour #2, 3 pour #3, 4 fois pour 1 & 2, 5 pour 1 et 3, 6 pour 2 et 3, et 7 fois si tous les senseurs sont activés).
 +
 +
Vous pouvez réserver la broche 1 à une autre utilisation si vous le désirez... sachez simplement que la LED branchée sur cette broche (qui n'est autre chose qu'une diode) risque de perturber votre montage. Par exemple, si vous activez la résistance pull-up interne, cette dernière est trop faible. Si vous voulez utiliser des senseurs sur cette broche, vous aurez besoin d'utiliser une résistance pull-up externe avec une valeur relativement faible de l'ordre de quelques centaines d'Ohms.
 +
 +
Dans le code d'exemple, il est possible d'activer les messages de débogage (DEBUG) en décommentant la ligne '''//#define DEBUG''' (en retirant les caractères qui commencent la ligne). Lorsque le DEBUG est actif, le programme envoi sur la connexion série les différentes valeurs d'alarmes lue sur la broche analogique. Vous devriez faire cela une fois votre circuit assemblé pour vous obtenir les différentes valeurs analogiques produites par le circuit, ce qui permet de les encoder dans le programme.
 +
 +
Activez chaque combinaison de senseurs et notez la valeur obtenue sur la broche analogique (et affichée par l'intermédiaire de la ligne série). Modifiez ensuita la ligne qui déclare les valeurs dans le tableau ''uint16_t values[8]'' pour y introduire vos propres valeurs. Ce processus prend environ 5 minutes à réaliser (sur notre banc d'essai). Si vous avez des problèmes avec le montage final (produisant des erreurs) alors il sera nécessaire de refaire un relevé des valeurs sur la broche analogique (la résistance peut varier sensiblement en fonction de la longueur des fils utilisés, c'est suffisant pour modifier la valeur lue sur la broche analogique. }}
 +
 +
 +
{{ambox-stop|text=Assurez-vous d'avoir suivit [[Trinket|les instructions d'installation de la version Arduino IDE spéciale pour le Trinket]]. Si vous n'avez jamais programmé un Trinket, nous vous proposons de suivre notre [[Trinket|tutoriel Trinket]] car celui-ci se programme de façon un peu différente des autres cartes Arduino. }}
 +
 +
<nowiki>/* Trinket Alarm Analog An alarm system based on the Adafruit Trinket mini microcontroller
 +
  Alarme Analogique Trinket - un système d'alarme basé sur le mini microcontroleur Trinket d'AdaFruit
 +
   
 +
Cette version utilise 3 senseur (ou lignes de senseurs) connectés sur une entrée analogique
 +
L'annonce est réalisée à l'aide de la LED incluse sur la carte ET d'un Bluefruit EZ-Link Adafruit
 +
Le montage utilise un Trinket 3V avec un accu LiPo de 3.7 et un chargeur d'accu branché sur 5 volts
 +
 +
Tutoriel Traduit par Meurisse D. pour www.MCHobby.be - tutoriel accessible sur http://wiki.mchobby.be/index.php?title=Trinket-Alarme
 +
Tutorial translated by Meurisse D. for www.MCHobby.be - tutorial available at http://wiki.mchobby.be/index.php?title=Trinket-Alarme
 +
Source: Trinket Bluetooth Alarm System - www.adafruit.com - available on https://learn.adafruit.com/trinket-bluetooth-alarm-system
 +
*/
 +
   
 +
#define SerialPin 0 // Débogage sériel via le Bluefruit EZ-Link branché sur cette broche
 +
#define LEDpin 1    // Utiliser la LED du Trinket pour indiquer la détection d'alarme
 +
#define SensorPin 3 // A3 qui est GPIO #3 utilisant un réseau de résistance pour lire 3 senseurs normalement fermés
 +
   
 +
//#define DEBUG
 +
   
 +
// code connexion Série, utilise un Bluefruit EZ-Link avec sa broche RX connectée sur la broche 0 du Trinket (TX)
 +
// Vous aurez besoin d'un programme type Terminal (tel que le freeware PuTTY sous Windows) pour voir les alertes
 +
// Mais l'idéal est encore d'utiliser Processing ou un script Python pour surveiller les alarmes.
 +
 +
#include <SoftwareSerial.h> // Bibliothèqye Software serial (standard pour Arduino 1.x +)
 +
SoftwareSerial Serial(2,0); // Communication série - TX/Transmission sur la broche 0, RX/Réception sur la broche 2 (non utilisée)
 +
   
 +
// Multiplexer 3 senseurs normalement ouvert sur un broche analogique. Si vous avez deux senseurs,
 +
// vous pouvez laisser une résistance ouverte et ajuster le texte en fonction
 +
const uint8_t numSensors = 3; // nombre se senseur sur la broche analogique
 +
const uint8_t states = 8; // Nombre d'états possible = 2^numsensors
 +
uint16_t values[8] = {541, 685, 661, 614, 840, 780, 776, 997};
 +
char *textval[8] = {"Set","PIR", "2", "3", "PIR+2","PIR+3","2+3","All"};
 +
 +
void setup() {
 +
  pinMode(LEDpin, OUTPUT);  // configurer le GPIO 1 en sortie (output) pour faire clignoter la LED
 +
  pinMode(SensorPin, INPUT); // configurer la broche analogique en lecture (input)
 +
  Serial.begin(9600);        // Envoyer l'information de statut via connexion série
 +
  Serial.println("Alarm System"); // Message d'initialisation (peut être utilisé pour détecter un reset)
 +
}
 +
 +
void loop()
 +
{
 +
  int8_t contact; // boucle de lecture d'alame
 +
  contact = readContact(SensorPin); // lecture des senseurs, retourne -1 en cas d'erreur de lecture
 +
  if(contact >= 1) {        // S'il y a une valeur plus grande que 0 ...
 +
    Blink(LEDpin, contact);  // alors nous avons une alarme! Faire clignoter la LED en fonction du senseur activé
 +
    Serial.print("Alarm! "); // Envoyer l'info sur Bluetooth
 +
    Serial.println(textval[contact]);
 +
  }
 +
  else if(contact < 0) {    // Il y a une erreur de lecture sur la broche analogique. Si vous obtenez des erreurs
 +
    Serial.print("Error");  // alors activez le DEBUG, faites vos test, relevez les valeurs, et
 +
  }                        // faite une mise-à-jour du code avec les valeurs lues sur la broche analogique
 +
  else {
 +
    Serial.println("Set");  // l'Alarme est active "Set" et il n'y a aucun senseur activé. Tout va bien :-)
 +
  }
 +
   
 +
  delay(500); // Il n'est pas nécessaire de vérifier les senseurs très souvent. Vous pouvez néanmoins modifier le délais
 +
}
 +
   
 +
int8_t readContact(uint8_t TrinketPin)
 +
// Retourne une valeur numérique correspondant aux valeurs du senseur.
 +
// Les broches du Trinket sont en analogique (A1=#2, A2=#4, A3=#3)
 +
{
 +
  const int variance = 8; // Les lectures analogiques peuvent varier un petit peu.
 +
                          // utilisons la valeur +-variance pour tenir compte de la divergence
 +
  int contact = 0;
 +
  uint16_t readval = 0;
 +
  readval = analogRead(TrinketPin); // Lecture de la broche
 +
  #ifdef DEBUG
 +
  Serial.print(": valeur lue sur le senseur: ");
 +
  Serial.println(readval);
 +
  #endif
 +
  for(uint8_t i=0; i<states; i++) {
 +
      // Si la valeur lue est proche d'une valeur d'un état (state), alors retourner l'identification
 +
      // de l'état
 +
      if(readval >= (values[i]-variance) && readval <= (values[i]+variance) ) {
 +
        return(i);
 +
      }
 +
  }
 +
  return -1; // La valeur ne correspond pas à une alarme système
 +
}
 +
   
 +
// Cette fonction fait clignoter une broche du nombre de fois indiqué.
 +
// Utile pour brancher une LED sur une broche afin de d'indiquer et
 +
//  identifier quel senseur à été déclenché
 +
void Blink(uint8_t pin, uint8_t times) {
 +
  for(uint8_t i=1; i<=times; i++) {
 +
    digitalWrite(pin, HIGH);
 +
    delay(85);
 +
    digitalWrite(pin, LOW);
 +
    delay(85);
 +
  }
 +
}</nowiki>
 +
 +
N'oubliez pas de remettre la ligne DEBUG débug en commentaire pour lors de l'installation finale.
    
{{Trinket-Alarme-TRAILER}}
 
{{Trinket-Alarme-TRAILER}}
29 917

modifications

Menu de navigation