Go Down

Topic: Mesures de vibrations (Read 2455 times) previous topic - next topic

constantauclair

Salut à tous,
Je suis en prépa et dans le cadre de mon projet TIPE je souhaiterais enregistrer et analyser les vibrations émises par une machine tournante quelconque, comme une boite de vitesse par exemple.
J'ai une carte Arduino Uno, un accéléromètre MMA8451, une breadboard et des fils.
Cela fait maintenant plusieurs jours que j'arpente des tutoriels divers pour acquérir les bases du language et des méthodes Arduino. J'ai réussi à programmer quelques trucs simples pour commencer (diode clignotante, rotation périodiques d'un moteur...), mais je m'arrache les cheveux sur mon accéléromètre qui ne veut pas fonctionner.
J'ai suivi les explications de ce tutoriel https://learn.adafruit.com/adafruit-mma8451-accelerometer-breakout/wiring-and-test, téléchargé les bonnes librairies, mais quand je lance le programme test proposé on me renvoie un message d'erreur comme quoi l'accéléromètre n'a pas été trouvé.
Je m'en remet à vous, si vous avez des idées d'un truc idiot que j'ai pu oublier de faire, ou des erreurs classiques... Je détaillerai par captures plus précises si vos premières suggestions ne donnent rien !
Merci et bonne soirée,
Constant Auclair.

68tjs

#1
Feb 27, 2018, 10:38 pm Last Edit: Feb 27, 2018, 10:39 pm by 68tjs
Quote
mais quand je lance le programme test proposé on me renvoie un message d'erreur comme quoi l'accéléromètre n'a pas été trouvé.
Le composant utilise l'I2C pour dialoguer avec le micro.
Une erreur possible pourrait être que l'adresse de l'accéléromètre dans le programme ne correspond pas à celle réelle du composant que tu teste.

Pour lever le doute, recherche un programme pour scanner le bus I2C, il en existe de nombreux.
Le scanner indiquera les adresses sur lesquelles il détecte la présence d'un composant I2C

constantauclair

Salut et désolé pour l'absence !
Merci pour ta réponse ! Alors j'ai fait ce que tu as dit et j'ai trouvé l'adresse I2C de l'accéléromètre, mais je ne sais pas quoi en faire ^^
Je l'ai ajouté dans la mma.begin() mais cela n'a rien donné...


lesept

Poste ton code, on pourra t'indiquer où mettre cette adresse
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

al1fch

#4
May 13, 2018, 11:24 pm Last Edit: May 13, 2018, 11:35 pm by al1fch
Bonsoir

L'adresse par défaut (si la pin A n'est pas à la masse ) est 0x1d (codée 'en dur dans le fichier ADADRUIT_MMA8451.h). Si A n'est pas mis à la masse il n'y a donc rien à faire concernant cette adresse.

Une bonne photo du montage permettrait de s'assurer que le câblage est OK
Alimentation en VIN ? (3V est une sortie !!)



constantauclair

Merci pour vos réponses, voilà pour le code :
Code: [Select]

/**************************************************************************/
/*!
    @file     Adafruit_MMA8451.h
    @author   K. Townsend (Adafruit Industries)
    @license  BSD (see license.txt)

    This is an example for the Adafruit MMA8451 Accel breakout board
    ----> https://www.adafruit.com/products/2019

    Adafruit invests time and resources providing this open source code,
    please support Adafruit and open-source hardware by purchasing
    products from Adafruit!

    @section  HISTORY

    v1.0  - First release
*/
/**************************************************************************/

#include <Wire.h>
#include <Adafruit_MMA8451.h>
#include <Adafruit_Sensor.h>

Adafruit_MMA8451 mma = Adafruit_MMA8451();

void setup(void) {
  Serial.begin(9600);
 
  Serial.println("Adafruit MMA8451 test!");
 

  if (! mma.begin(0x1C)) {
    Serial.println("Couldnt start");
    while (1);
  }
  Serial.println("MMA8451 found!");
 
  mma.setRange(MMA8451_RANGE_2_G);
 
  Serial.print("Range = "); Serial.print(2 << mma.getRange()); 
  Serial.println("G");
 
}

void loop() {
  // Read the 'raw' data in 14-bit counts
  mma.read();
  Serial.print("X:\t"); Serial.print(mma.x);
  Serial.print("\tY:\t"); Serial.print(mma.y);
  Serial.print("\tZ:\t"); Serial.print(mma.z);
  Serial.println();

  /* Get a new sensor event */
  sensors_event_t event;
  mma.getEvent(&event);

  /* Display the results (acceleration is measured in m/s^2) */
  Serial.print("X: \t"); Serial.print(event.acceleration.x); Serial.print("\t");
  Serial.print("Y: \t"); Serial.print(event.acceleration.y); Serial.print("\t");
  Serial.print("Z: \t"); Serial.print(event.acceleration.z); Serial.print("\t");
  Serial.println("m/s^2 ");
 
  /* Get the orientation of the sensor */
  uint8_t o = mma.getOrientation();
 
  switch (o) {
    case MMA8451_PL_PUF:
      Serial.println("Portrait Up Front");
      break;
    case MMA8451_PL_PUB:
      Serial.println("Portrait Up Back");
      break;   
    case MMA8451_PL_PDF:
      Serial.println("Portrait Down Front");
      break;
    case MMA8451_PL_PDB:
      Serial.println("Portrait Down Back");
      break;
    case MMA8451_PL_LRF:
      Serial.println("Landscape Right Front");
      break;
    case MMA8451_PL_LRB:
      Serial.println("Landscape Right Back");
      break;
    case MMA8451_PL_LLF:
      Serial.println("Landscape Left Front");
      break;
    case MMA8451_PL_LLB:
      Serial.println("Landscape Left Back");
      break;
    }
  Serial.println();
  delay(500);
 
}


Et pour le montage :
https://ibb.co/gUw9ad

Voilà !

lesept

#6
May 14, 2018, 12:11 pm Last Edit: May 14, 2018, 02:22 pm by lesept
La photo est jolie, mais l'orientation du capteur ne permet pas de voir les branchements.
A priori, c'est comme ça :



Ça donne

Capteur  <---> Arduino
Vcc                    3.3V
GND                   GND
SCL                    A5
SDA                    A4

A priori, c'est bon pour les connexions

Concernant l'adresse I2C, voici le contenu du fichier .h :
Code: [Select]
/*=========================================================================
    I2C ADDRESS/BITS
    -----------------------------------------------------------------------*/
    #define MMA8451_DEFAULT_ADDRESS                 (0x1D)    // if A is GND, its 0x1C
/*=========================================================================*/

Que te dit le scanner ? Peux-tu poster sa réponse ?

Voici le code de la fonction begin :
Code: [Select]
bool Adafruit_MMA8451::begin(uint8_t i2caddr) {
  Wire.begin();
  _i2caddr = i2caddr;

  /* Check connection */
  uint8_t deviceid = readRegister8(MMA8451_REG_WHOAMI);
  if (deviceid != 0x1A)
  {
    /* No MMA8451 detected ... return false */
    //Serial.println(deviceid, HEX);
    return false;
  }
On peut lui passer une adresse en argument (ça se voit dan ton code : tu lui passes l'adresse 0x1C)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

constantauclair

Désolé pour la photo mais oui les branchements sont bien comme tu l'as supposé. La réponse du scanner I2C est
Code: [Select]
Debut du scan
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... 0x1C .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....
.... .... .... .... .... .... .... ....

al1fch

#8
May 14, 2018, 09:57 pm Last Edit: May 14, 2018, 10:25 pm by al1fch
Adresse 0x1C c'est cohérent avec le schéma du module GY-45 qui place une résistance de pull down sur SA0, contrairement au module Adafruit

Le module ayant son régulateur  3,3V il serait intéressant de tester l'envoi de 5V sur VCC-IN au lieu de 3,3V
le circuit d'adaptaion d eniveaux logiques I2C est là pour gérer l'adaptation 5V : 3,3V pour les signaux.

je testerai également un mma.begin()  + un 0x1C en lieu et place du 0x1D dans le fichier .h, peu d'effet en principe..;

constantauclair

Après être passé a 5V sur VCC_IN, j'ai le message d'erreur suivant :
Code: [Select]
Arduino : 1.8.5 (Windows 8.1), Carte : "Arduino/Genuino Uno"

Le croquis utilise 7486 octets (23%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 724 octets (35%) de mémoire dynamique, ce qui laisse 1324 octets pour les variables locales. Le maximum est de 2048 octets.
avrdude: ser_open(): can't open device "\\.\COM3": Le fichier spécifié est introuvable.


Problème de téléversement vers la carte. Voir http://www.arduino.cc/en/Guide/Troubleshooting#upload pour suggestions.
La carte sur COM3 n'est pas disponible

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

al1fch

#10
May 14, 2018, 10:12 pm Last Edit: May 14, 2018, 10:15 pm by al1fch
ça en envoyant 5V sur l'entrée VCC_IN du GY-45  ? ? ?

lesept

Ça semble être un problème de port COM, l'IDE cherche l'arduino sur le port COM3 mais ne le trouve pas.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

constantauclair

#12
May 15, 2018, 09:38 pm Last Edit: May 15, 2018, 09:45 pm by constantauclair
al1fch oui ça me renvoie ça je vois pas d'où vient le problème !
edit: j'ai réessayé et ça n'affiche plus que "Ada" les trois premières lettres du messages automatique du programme...
lesept, tu aurais une idée de comment régler ça ?

lesept

Faire ce que dit al1fch : 3V3 et mma.begin(0x1C);
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

constantauclair

Je l'ai fait 10 fois y'a rien à faire... J'essaierai sur un autre ordi demain voir si c'est pas juste l'ordi qui déconne !

Go Up