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 <Wire.h>
LIS3DHTR<TwoWire> 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.
No Comments