[Tuto] Accéléromètre ADXL 345

Posté sur: mars 15, 2016

Catégories: Arduino

Tags: accelerometre , adxl , adxl345 , arduino , i2c , serie , serial , terminal , uno

Ici sera présenté l'utilisation de l'accéléromètre ADXL 345

Pour cela, il vous faudra:

  • Un Arduino
  • Un Accéléromètre ADXL345
  • Jumper male-femelle

Cette accéléromètre présent en boutique est le suivant:

accelerometre-adxl345

Étape câblage:

La communication entre l'accéléromètre et l'arduino se fait via le bus I2C situé sur les broches A4 et A5 de l'arduino avec une vitesse par défaut de 100kHz.

  • GND (ADXL 345) ? Arduino GND
  • 3V3 (ADXL 345) ? Arduino 3V3

  • SDA (ADXL 345) ? Arduino A4
  • SCL (ADXL 345) ? Arduino A5

Étape logiciel:

Le programme qui suit n'a besoin d'aucune librairie, nous allons lire dans les registres les valeurs d'accélération selon X, Y et Z pour ensuite les afficher sur le terminal.

#include // Broche d'Arduino pour communication I2C avec accéléromètre LG-ADXL345.nconst int ACCELEROMETRE_1_SCL = A5;nconst int ACCELEROMETRE_1_SDA = A4;nn//*****************************************************************************n// Déclaration des variables globales.n//*****************************************************************************nn// Adresses de communication I2C avec accéléromètre ADXL345.nconst char Accellerometre3AxesAdresse = 0x53;nbyte Accellerometre3AxesMemoire [6];nconst char POWER_CTL = 0x2D;// Registre "Power Control".nconst char DATA_FORMAT = 0x31;// Registre "Data Format".nconst char DATAX0 = 0x32;//X-Axis Data 0nconst char DATAX1 = 0x33;//X-Axis Data 1nconst char DATAY0 = 0x34;//Y-Axis Data 0nconst char DATAY1 = 0x35;//Y-Axis Data 1nconst char DATAZ0 = 0x36;//Z-Axis Data 0nconst char DATAZ1 = 0x37;//Z-Axis Data 1nnconst char Accellerometre_1_Precision2G = 0x00;nconst char Accellerometre_1_Precision4G = 0x01;nconst char Accellerometre_1_Precision8G = 0x02;nconst char Accellerometre_1_Precision16G = 0x03;nconst char Accellerometre_1_ModeMesure = 0x08;nn// Pour recevoir les valeurs des 3 axes de l'accéléromètre.nint Accelerometre1_AxeX = 0;nint Accelerometre1_AxeY = 0;nint Accelerometre1_AxeZ = 0;nn//*****************************************************************************nnn//*****************************************************************************n// FONCTION SETUP = Code d'initialisation.n//*****************************************************************************nnvoid setup ()n{n // Ici les instructions à exécuter au démarrage.nn // IMPORTANT : régler le terminal côté PC avec la même valeur den // transmission. Ici c'est 115200.n Serial.begin (115200);nn // Initialisation de la communication I2C bus pour le capteur d'accélération.n Wire.begin ();n // Mettre le ADXL345 à plage +/-4G en écrivant la valeur 0x01 dans len // registre DATA_FORMAT.n AccellerometreConfigure (DATA_FORMAT, Accellerometre_1_Precision4G);n // Mettre le ADXL345 en mode de mesure en écrivant 0x08 dans le registren // POWER_CTL.n AccellerometreConfigure (POWER_CTL, Accellerometre_1_ModeMesure);n}nnvoid loop()n{n n // Pour affichage dans le moniteur série de l'éditeur Arduino.n AccellerometreLecture ();n Serial.print (" AxeX:");n Serial.print (Accelerometre1_AxeX);n Serial.println ();n Serial.print (" AxeY:");n Serial.print (Accelerometre1_AxeY);n Serial.println ();n Serial.print (" AxeZ:");n Serial.print (Accelerometre1_AxeZ);n Serial.println ();n n}nn//*****************************************************************************n// FONCTION AccellerometreConfiguren//*****************************************************************************nvoid AccellerometreConfigure (byte address, byte val)n{n // Commencer la transmission à trois axes accéléromètren Wire.beginTransmission (Accellerometre3AxesAdresse);n // Envoyer l'adresse de registren Wire.write (address);n // Envoyer la valeur à écrire.n Wire.write (val);n // Fin de la transmission.n Wire.endTransmission ();n}nn//*****************************************************************************n// FONCTION AccellerometreLecture ()n//*****************************************************************************nvoid AccellerometreLecture ()n{n uint8_t NombreOctets_a_Lire = 6;n // Lire les données d'accélération à partir du module ADXL345.n AccellerometreLectureMemoire (DATAX0, NombreOctets_a_Lire,n Accellerometre3AxesMemoire);nn // Chaque lecture de l'axe vient dans une résolution de 10 bits, soit 2 octets.n // Première Octet significatif !n // Donc nous convertissons les deux octets pour un « int ».n Accelerometre1_AxeX = (((int)Accellerometre3AxesMemoire[1]) << 8) |n Accellerometre3AxesMemoire[0];n Accelerometre1_AxeY = (((int)Accellerometre3AxesMemoire[3]) << 8) |n Accellerometre3AxesMemoire[2];n Accelerometre1_AxeZ = (((int)Accellerometre3AxesMemoire[5]) << 8) |n Accellerometre3AxesMemoire[4];n}nn//*****************************************************************************n// FONCTION AccellerometreLectureMemoiren//*****************************************************************************nvoid AccellerometreLectureMemoire (byte address, int num, byten  Accellerometre3AxesMemoire[])n{n // Démarrer la transmission à accéléromètre.n Wire.beginTransmission (Accellerometre3AxesAdresse);n // Envoie l'adresse de lire.n Wire.write (address);n // Fin de la transmission.n Wire.endTransmission ();n // Démarrer la transmission à accéléromètre.n Wire.beginTransmission (Accellerometre3AxesAdresse);n // Demande 6 octets à l'accéléromètre.n Wire.requestFrom (Accellerometre3AxesAdresse, num);nn int i = 0;n // L'accéléromètre peut envoyer moins que demandé, c'est anormal, mais...n while (Wire.available())n {n // Recevoir un octet.n Accellerometre3AxesMemoire[i] = Wire.read ();n i++;n }n // Fin de la transmission.n Wire.endTransmission ();n}n

Les résultats sur le terminal arduino ide:

adxl345_results

Ressources:
http://playground.arduino.cc/French/TutorielsCodeSourceAutonome-Capteur-Accelerometre-LG-ADXL345-I2C-LCD1602Shield

Commentaires

  • XxDarkSasukeDu26xX
    avril 26, 2018
  • aloups
    juil. 4, 2016
  • Jey
    juin 5, 2016
  • Villedieu
    mai 1, 2016

laissez un commentaire

Se connecter