Maïdenn, Gregoire & Soulaimane Détecteur d'accélération Soulaimane, Gregoire, Maïdenn. Projet effectuer dans le cadre du cours de prototypage, dans le but d’apprendre les fonctions de base de l’Arduino. Description du projet : À l’aide d’un Arduino nous avons codé et brancher un accéléromètre capable de détecter l' accélération supérieur à 5g dans un des 3 axes (x,y,z). Lorsque l’accéléromètre subit une accélération suffisante, le montage permet à une led de s’allumer et donc d’indiquer que l’accélération à atteint au moins 5g. Matériel : 1 Arduino 1 Shield Arduino 1 Led 1 Résistance 2 Fils conducteurs 1 planche conductrice 1 Accéléromètre et son câble de connexion Problème rencontré : Nous somme parti du code démo disponible dans la bibliothèque de l'Arduino. Le code utilise par défaut le capteur 0x18 (LIS.begin(WIRE); //IIC init dafault :0x18), il faut donc prendre soin de séléctionner la ligne, LIS.setFullScaleRange(LIS3DHTR_RANGE_16G) Code : // This example shows the 3 axis acceleration. #include "LIS3DHTR.h" #include LIS3DHTR LIS; //IIC #define WIRE Wire #define LED 9 void setup() { Serial.begin(115200); while (!Serial) {}; //LIS.begin(WIRE); //IIC init dafault :0x18 LIS.begin(WIRE, 0x19); //IIC init delay(100); // LIS.setFullScaleRange(LIS3DHTR_RANGE_2G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_4G); // LIS.setFullScaleRange(LIS3DHTR_RANGE_8G); LIS.setFullScaleRange(LIS3DHTR_RANGE_16G); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_10HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_100HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_200HZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_1_6KHZ); // LIS.setOutputDataRate(LIS3DHTR_DATARATE_5KHZ); LIS.setHighSolution(true); //High solution enable } void loop() { if (!LIS) { Serial.println("LIS3DHTR didn't connect."); while (1); return; } //3 axis Serial.print("x:"); Serial.print(LIS.getAccelerationX()); Serial.print(" "); Serial.print("y:"); Serial.print(LIS.getAccelerationY()); Serial.print(" "); Serial.print("z:"); Serial.println(LIS.getAccelerationZ()); if (float(LIS.getAccelerationX()) >= 1.00) { digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second } else if (float(LIS.getAccelerationY()) >= 1.00) { digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second } else if (float(LIS.getAccelerationZ()) >= 1.00) { digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second } delay(500); } Montage : Explication du montage : L’Arduino est équipé de son shield et est branché à un ordinateur. L'accéléromètre est connecté à une prise analogique de l’Arduino en I2C. La Led est connectée au port 9 et à la masse. Lorsque que le capteur reçoit un signal supérieur à 5g dans un axe, alors la Led s’allume via le signal envoyé par l’Arduino.