🛠 Micro PDM et buzzer : sonomètre interactif
Objectifs
Utiliser le microphone MEMS PDM SPM1423 (CLK=G0, DATA=G34) pour mesurer un niveau sonore (crête à crête sur une fenêtre d'échantillons) et piloter le buzzer passif (G2, tonalité PWM uniquement — pas de lecture audio) : un sonomètre qui bip quand on crie. G0 sert aussi d'éstrap pin au boot : ne rien brancher dessus.
Matériel
- 1× M5StickC Plus2 (v2)
- Câble USB-C pour le téléversement
- Arduino IDE / PlatformIO, M5Unified (gestion PDM intégrée)
Code complet
// Sonometre PDM — micro SPM1423 (CLK=G0, DATA=G34) + buzzer passif G2
#include <M5Unified.h>
const int N_ECH = 1024;
int16_t echantillons[N_ECH];
float niveau = 0;
void setup {
auto cfg = M5.config;
M5.begin(cfg);
// Configuration explicite du micro PDM interne
auto mic = M5.Mic.config;
mic.pin_clock = 0; // CLK du SPM1423 = G0
mic.pin_data = 34; // DATA = G34
mic.is_stereo = false;
mic.sample_rate = 16000; // 16 kHz
M5.Mic.begin;
M5.Display.setRotation(1);
M5.Display.setTextColor(TFT_YELLOW, TFT_BLACK);
}
void loop {
M5.update;
M5.Mic.readRaw(echantillons, N_ECH); // 1024 echantillons 16 bits
int32_t mini = 32767, maxi = -32768;
for (int i = 0; i < N_ECH; i++) {
if (echantillons[i] < mini) mini = echantillons[i];
if (echantillons[i] > maxi) maxi = echantillons[i];
}
niveau = (float)(maxi - mini) / 655.36f; // 0..100 %
// Jauge horizontale 240 px
M5.Display.fillRect(0, 60, 240, 20, TFT_BLACK);
int w = (int)(niveau * 2.4f);
M5.Display.fillRect(0, 60, w, 20, niveau > 70 ? TFT_RED : TFT_GREEN);
M5.Display.setCursor(0, 20);
M5.Display.printf("Niveau: %3.0f %%", niveau);
if (niveau > 70.0f) M5.Speaker.tone(1760, 120); // buzzer G2 (PWM)
vTaskDelay(60 / portTICK_PERIOD_MS);
}
Vérification attendue
Dans le silence, la jauge reste près de 0 ; taper dans les mains ou siffler la fait monter, et au-delà de 70 % elle passe au rouge avec un bip du buzzer. >
Erreurs fréquentes
- Croire pouvoir lire de la musique sur le haut-parleur : la Plus2 n'a qu'un buzzer passif (tonalité PWM sur G2) — pas de DAC audio, pas de wave playback.
- Charger G2 au démarrage : c'est une broche de strap ESP32, une charge externe peut bloquer le boot.
- Mauvaises broches PDM : CLK=G0 / DATA=G34 (broches officielles du SPM1423) ; les inverser donne un signal plat ou bruité.
- Échantillonner trop lentement avec
Mic.readéchantillon par échantillon : utiliserreadRawpar blocs. - Attendre un niveau en décibels : ici c'est un ratio crête à crête normalisé, à calibrer soi-même contre une source de référence.
- G0 est aussi la broche de strap du mode flash : un circuit branché dessus peut empêcher le téléversement.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
hello-stick.inoArduinoboutons.inoArduinobuzzer.inoArduinoinclinometre.inoArduinohorloge.inoArduinoir-tv.inoArduino