ACTIVITE ARDUINO : Mesure d’accélération avec une carte Nano iOt et l’application Phyphox

Objectif : Réaliser des acquisitions de mesures d’accélérations sans liaison avec un ordinateur, en utilisant un modèle nano d’Arduino alimenté par une batterie, et en récupérant les données sur un smartphone.

Matériel nécessaire :

1. Une carte Arduino Nano iOt 33

Cette carte présente l’avantage d’avoir un accéléromètre intégré LSM6DS3.

Il sera nécessaire d’installer la bibliothèque nécessaire pour utiliser cet accéléromètre dans Arduino.

Carte Arduino Nano iOt 33

2. Une batterie LiPo

Une des meilleures options pour avoir un système complètement autonome est d’utiliser une batterie LiPo .

Batterie LiPo disponible sur Conrad

Pour recharger cette batterie, voici un modèle de chargeur disponible aussi sur Conrad :

Chargeur Batterie LiPo

Il faut relier respectivement les fils rouge et noir à l’Arduino sur les broches VIN et GND :

Attention : Bien vérifier le branchement à plusieurs reprises avant de mettre sous tension. Il faut relier le fil + à la borne VIN et le fil – à une des broches GND.
Une erreur de branchement est fatale (j’en suis à une bonne demi douzaine de cartes Arduino HS à cause de trop de précipitation !).
La solution idéale serait d’associer une diode au fil rouge et de condamner le système avec une mise sous tension au moyen d’un interrupteur (voir schéma ci-dessous)

Acquisition et récupération des données :

1. Installation des bibliothèques

Il est nécessaire d’installer préalablement les bibliothèques LSM6DS3 (pour l’accéléromètre) et Phyphox BLE (pour communication Bluetooth) :

Pour installer ces biblothèques :

  • Ouvrir le logiciel Arduino
  • À partir du menu [Croquis][Inclure une bibliothèque][Gérer les bibliothèques], rechercher puis installer la librairie « LSM6DS3» (disponible aussi sur ce lien, à télécharger en .zip : LSM6DS3 Github)
  • À partir du menu [Croquis][Inclure une bibliothèque][Gérer les bibliothèques], rechercher puis installer la librairie « Phyphox BLE» (disponible aussi sur ce lien, à télécharger en .zip : Phyphox-arduino Github)

2. Installation de la carte Arduino Nano iOt33

À partir du menu [Outils][Type de carte][Gestionnaire de carte], rechercher « Nano iOt », puis installer le pack proposé : Arduino SAMD Boards

Ensuite dans [Outils][Type de carte][Arduino SAMD ….], sélectionner la carte Nano iOt 3

3. Exécution du code Arduino

Le code Arduino à téléverser sur la carte Nano est le suivant (il s’agit juste d’une mesure d’accélération selon x sur cet exemple) :

/*
  Arduino LSM6DS3 - Simple Accelerometer

  This example reads the acceleration values from the LSM6DS3
  sensor and continuously prints them to the Serial Monitor
  or Serial Plotter.

  The circuit:
  - Arduino Uno WiFi Rev 2 or Arduino Nano 33 IoT

  created 10 Jul 2019
  by Riccardo Rizzo

  This example code is in the public domain.
*/

#include <Arduino_LSM6DS3.h>
#include <phyphoxBle.h> 
#include <Wire.h> // Inclure la bibliothèque Wire pour la communication I2C



void setup() {
  PhyphoxBLE::start();                //Start the BLE server
  Wire.begin(); // Initialiser la communication I2C
  delay(100); // Laisser le temps au capteur de s'initialiser
     
  Serial.begin(9600);


  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");

    while (1);
  }

  Serial.print("Accelerometer sample rate = ");
  Serial.print(IMU.accelerationSampleRate());
  Serial.println(" Hz");
  Serial.println();
  Serial.println("Acceleration in g's");
  Serial.println("X\tY\tZ");
}

void loop() {
  float x, y, z;

  if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(x, y, z);

    Serial.println(x);
   PhyphoxBLE::write(x);

   PhyphoxBLE::poll();                  //IMPORTANT: In contrast to other devices, poll() needs to be called periodically on the 33 IoT

    
  }
}

Ce code est disponible ici

4. Acquisition de données avec Phyphox

Exemple avec un appareil Apple (les différences sont indiquées ci-dessous mais sans les impressions écran)

  • Ouvrez l’application PhyPhox (Disponible sur l’AppStore ou sur Google Play)
  • Cliquez sur le bouton + en haut à droite (en bas à droite sur Android)
  • Cliquez sur Ajouter une expérience avec un appareil Bluetooth (la Bluetooth doit être activée bien sûr !)
  • Sélectionnez l’appareil Bluetooth « phyphox-Arduino »

  • Appuyer sur le bouton Lecture pour lancer l’acquisition
  • Puis dans les options en haut à droite, choisir Exporter les mesures

  • Choisir le format de données en CSV (tabulation, point décimal), le fichier pourra être enregistré sur l’appareil (puis envoyé par mail par exemple pour le traitement sur ordinateur)
  • Pour réaliser d’autres acquisitions, il est alors possible d’accéder directement à l’expérience créée. Pour cela, dans le menu d’accueil sélectionner : Arduino-Experiment

5. Récupération des données avec Python

Voici ci-dessous un script Python permettant de récupérer les données du fichier csv. Il serait ensuite possible de faire évoluer ce script avec du traitement de données (modélisation, incertitudes …).

Astuce dans Pyzo

Pour éviter d’indiquer le chemin d’accès du fichier CSV, créer un dossier contenant ce script et le fichier csv, puis lancer le script avec le raccourci CTRL+SHIFT+E


import matplotlib.pyplot as plt # pour les graphiques import numpy as np # numpy pour l'importation des donnees en format txt # Nom du fichier d'entrée et de sortie fichier_entree = "mySet.csv" fichier_sortie = "mySet_sans_3_dernieres_colonnes.csv" # Ouvrir le fichier d'entrée en mode lecture with open(fichier_entree, mode='r') as f_entree: lignes = f_entree.readlines() # Ouvrir le fichier de sortie en mode écriture with open(fichier_sortie, mode='w') as f_sortie: for ligne in lignes: # Divisez la ligne en colonnes en utilisant la tabulation comme délimiteur colonnes = ligne.strip().split('\t') # Supprimez les trois dernières colonnes nouvelles_colonnes = colonnes[:-3] # Recréez la ligne en joignant les colonnes avec des tabulations nouvelle_ligne = '\t'.join(nouvelles_colonnes) + '\n' # Écrire la ligne modifiée dans le fichier de sortie f_sortie.write(nouvelle_ligne) data = np.genfromtxt(fichier_sortie, delimiter='\t', skip_header=1) t = data[:,0] # selection de la premiere colonne acc1 = data[:,1] # selection de la deuxieme colonne # afficher points avec croix rouges. Inserer texte (titre, nom des axes,…) plt.figure(1) plt.title("Accélération selon x en fonction du temps") plt.plot(t, acc1, c = 'red', marker = '+',label='Acc1') plt.xlabel("t en s") plt.ylabel("a en g") plt.legend() plt.show()

Ce script est disponible ici

Boitier imprimé en 3D pour ce dispositif

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *