ESP32 et ADXL335

Je vois passer des messages sur l'utilisation de ce capteur accéléromètre. Comme je jouais avec récemment, en le connectant à un module ESP32 + OLED + batterie 18650, je poste le code. Si ça intéresse quelqu'un...

#include <Wire.h>
#include "SSD1306.h"
SSD1306 display(0x3c, 5, 4);
const int xpin = 34; // x-axis of the accelerometer
const int ypin = 32; // y-axis
const int zpin = 33; // z-axis
unsigned long period = 200ul; // ms
unsigned long chrono = 0;
#define NMES 20

void setup()
{
  Serial.begin(115200);
  display.init();
  display.setFont(ArialMT_Plain_16);
  display.setTextAlignment(TEXT_ALIGN_CENTER);
  display.drawString(64, 10, "Accelero");
  display.drawString(64, 30, "ADXL 335");
  display.display();
  delay(1000);
  chrono = millis();
}

int moyMesure (int pinNumber) {
  int mes = 0;
  for (int i = 0; i < NMES; i++) {
    mes += analogRead(pinNumber);
    delay(1);
  }
  return mes / NMES;
}

void loop()
{
  if (millis() - chrono > period) {
    chrono = millis();
    int x = moyMesure(xpin); //read from xpin
    int y = moyMesure(ypin); //read from ypin
    int z = moyMesure(zpin); //read from zpin
    // calcul des g
    // amplitude -1g = 1400, +1g = 2280
    float gX = (x - 1840.0) / 440.0;
    float gY = (y - 1840.0) / 440.0;
    float gZ = (z - 1840.) / 440.0;
    char texte[6];
    display.clear();
    display.setTextAlignment(TEXT_ALIGN_RIGHT);
    sprintf(texte, "%+5.2f", gX);
    display.drawString(128,  0, texte);
    sprintf(texte, "%+5.2f", gY);
    display.drawString(128, 20, texte);
    sprintf(texte, "%+5.2f", gZ);
    display.drawString(128, 40, texte);
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.drawString(0,  0, "X");
    display.drawString(0, 20, "Y");
    display.drawString(0, 40, "Z");
    // progress bar axe X
    int pX = (gX + 1) * 50;
    pX = constrain(pX, 0, 100);
    display.drawProgressBar(15, 3, 70, 10, (byte)pX);
    // progress bar axe Y
    int pY = (gY + 1) * 50;
    pY = constrain(pY, 0, 100);
    display.drawProgressBar(15, 23, 70, 10, (byte)pY);
    // progress bar axe Z
    int pZ = (gZ + 1) * 50;
    pZ = constrain(pZ, 0, 100);
    display.drawProgressBar(15, 43, 70, 10, (byte)pZ);
    display.display();
  }
}

Le programme affiche un splash-screen puis 3 bar-graphs indiquant l'intensité de l'accélération sur les 3 axes (X, Y et Z). Les axes sont dessinés sur le module capteur ce qui permet de vérifier. C'est bien sûr l'accélération de la pesanteur qui est affichée, et ces mesures permettent donc de connaitre l'orientation du module en 3D.

Le module est branché comme suit :

  • GND - GND
  • Z-OUT pin 33
  • Y-OUT pin 32
  • X-OUT pin 34
  • VCC - VCC

Quelques photos :

Super !!

A quand les fractales 'modulées' par l'orientation du montage ? :)

Je vais y réfléchir, après tout un accéléromètre peut aussi être une interface homme - machine !

bonjour sympa ce petit programme facile à adapter pour faire du petit affichage "3 voies analogiques" 8)

|500x379

Oui, tu peux changer les intitulés X, Y et Z en V1, V2 et V3 par exemple

Bonjour
Comme j'avais besoin d'un accéléromètre pour un autre projet, je me suis dit "autant reprendre ce qui a déjà été fait et l'adapter". Donc, j'ai adapté cet ancien code à mon ESP32 favori, le TTGO T-Display


(certains s'amusent bien avec)

Il n'y a que l'écran qui change, ainsi que la bibliothèque d'affichage (TFT_eSPI).
Autant mettre de la couleur, et ajouter une fonction de "niveau à bulle". Et hop, voici le code et quelques images...

#include <Arduino.h>
#include <Wire.h>
#include <TFT_eSPI.h>
#include <SPI.h>
#define TFT_WIDTH 135
#define TFT_HEIGHT 240

...
Trop long pour mettre ici...

Comme le TTGO a 2 boutons, on passe d'un affichage à l'autre avec un appui sur l'un des boutons.

Le tout est compacté autant que possible (sur mini breadboard) et fonctionne sur batterie pour une portabilité augmentée. Je ferai peut-être un boitier un jour...

Encore quelques images. Les couleurs passent mal, dommage...