logging_csv_usb.ino

Arduino Nicla Sense ME · Fichier : logging_csv_usb.ino · Langage : Arduino · Usage : Journaliser tous les capteurs en CSV série

Le pont USB série (SAMD11) du Sense ME sert de câble d’enregistreur : accélération, gyro, pression et température s’écoulent en CSV horodaté à 1 Hz. Une copie dans un tableur et la courbe est tracée — l’acquisition de données la plus simple de la carte.

Matériel requis

Une Arduino Nicla Sense ME (nRF52832 dans un module ANNA-B112, BLE seul, pas de Wi-Fi) avec hub capteurs Bosch BHI260AP, magnétomètre BMM150, baromètre BMP390, capteur de gaz BME688, LED RVB sur pilote I2C et chargeur LiPo BQ25120. La carte reliée à un PC par USB (le connecteur passe par le pont SAMD11, pas de USB natif du nRF52832). Un terminal série ou un tableur ouvert.

Câblage

Aucun câblage. Pour une version autonome sans PC, la flash de 2 Mo embarque le journal (exemple StandaloneFlashStorage de la lib BHY2).

Fonctionnement

BHY2.update pompe le hub, accel/gyro.update mettent à jour les dernières valeurs, les accesseurs statiques donnent pression et température. L’en-tête CSV en tête de fichier facilite l’import tableur.

Exécution

Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_SENSE_ME) ; bibliothèques Arduino_BHY2 (capteurs) et Nicla_System (LED, chargeur) ; USB via pont série SAMD11.

Variantes

Passer sur la flash interne pour l’autonomie, envoyer le CSV en BLE vers une app qui trace, ou ajouter l’IAQ du BME688 dans les colonnes pour un bilan qualité d’air + activité.

logging_csv_usb.ino

// Enregistreur multi-capteurs : une ligne CSV par seconde sur
// l'USB (pont série SAMD11). Copier-coller la sortie dans un
// tableur, ou la logger avec un enregistreur de terminal (PuTTY).

#include "Arduino_BHY2.h"

SensorAccel accel(0);
SensorGyro gyro(0);

void setup() {
  Serial.begin(115200);
  BHY2.begin();
  accel.begin();
  gyro.begin();
  BHY2.update();
  Serial.println("t_ms,ax,ay,az,gx,gy,gz,p_hPa,t_C");
}

void loop() {
  BHY2.update();

  static unsigned long t = 0;
  if (millis() - t >= 1000) {
    t = millis();
    accel.update();
    gyro.update();
    Serial.print(t);
    Serial.print(","); Serial.print(accel.x(), 3);
    Serial.print(","); Serial.print(accel.y(), 3);
    Serial.print(","); Serial.print(accel.z(), 3);
    Serial.print(","); Serial.print(gyro.x(), 2);
    Serial.print(","); Serial.print(gyro.y(), 2);
    Serial.print(","); Serial.print(gyro.z(), 2);
    Serial.print(","); Serial.print(BHY2.readPressure(), 2);
    Serial.print(","); Serial.println(BHY2.readTemperature(), 2);
  }
  delay(2);
}

← Retour à la fiche