Analyseur de spectre audio Arduino 32 bandes – Affichage linéaire et pseudo-logarithmique
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano R3 | 1 |
| Résistance 10 kΩ | 1 |
| Résistance 100 kΩ | 2 |
| Résistance 4,75 kΩ | 3 |
| Fils de connexion (génériques) | 1 |
| Plaque d'essai (breadboard) | 1 |
| Câble USB-A vers Mini-USB | 1 |
| Interrupteur tactile (actionnement par le haut) | 1 |
| Connecteur mâle 36 positions 1 rangée (0,1") | 1 |
Outils et machines nécessaires
- Fer à souder (générique)
Logiciels et services en ligne
- Arduino IDE
À propos de ce projet
Ce projet marque ma première incursion dans l'électronique audio basée sur Arduino. Inspiré par le visualiseur audio de Shajeeb, j'ai étendu l'affichage pour inclure un mode linéaire 32 bandes et un mode pseudo-logarithmique 11 bandes. J'ai construit des tables de correspondance logarithmique personnalisées dans Excel et les ai intégrées dans le firmware pour une réponse en fréquence plus précise.
Un bouton tactile permet de basculer entre les deux modes d'affichage, permettant un changement rapide pendant une performance ou une expérimentation.
N'hésitez pas à modifier le firmware ou le matériel pour l'adapter à vos propres projets créatifs.
Code source
- 32_Band_LED_Spectrum_Analyzer-009.ino
32_Band_LED_Spectrum_Analyzer-009.ino (Arduino)
// Code modifié par Christian Suryanto, basé sur (c) 2019 Shajeeb TM
// HAZI TECH
// Mis à jour par Christian Suryanto
#include <arduinoFFT.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <EEPROM.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define SAMPLES 64
#define MAX_DEVICES 4
#define xres 32
#define yres 8
#define PREV 0xFF02FD
#define NEXT 0xFFC23D
#define PWR 0xFFA25D
int audio_response = 35;
double vReal[SAMPLES];
double vImag[SAMPLES];
char data_avgs[xres];
int yvalue;
int displaycolumn , displayvalue;
int peaks[xres];
const int buttonPin = 6;
int state = HIGH;
int previousState = LOW;
int displaymode;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
int MY_ARRAY[]={0, 128, 192, 224, 240, 248, 252, 254, 255};
bool EQ_ON = true;
byte eq1[32] = {40, 45, 50, 60, 65, 70, 75, 95, 110, 110, 110, 110, 110, 110, 110, 110, 130, 130, 130, 130, 130, 130, 130, 130, 145, 155, 170, 180, 215, 220, 245, 255};
byte eq2[11] = {40, 70, 75, 110, 110, 140, 145, 220, 220, 230, 250};
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
arduinoFFT FFT = arduinoFFT();
void setup() {
EEPROM.update(1,1);
displaymode = EEPROM.read(1);
ADCSRA = 0b11100101;
ADMUX = 0b00000000;
pinMode(buttonPin, INPUT);
mx.begin();
mx.control(MD_MAX72XX::INTENSITY, 0);
delay(50);
}
void loop() {
int numData;
double rSum;
for(int i=0; i peaks[i]) peaks[i] = yvalue;
yvalue = peaks[i];
displayvalue = MY_ARRAY[yvalue];
if (displaymode==1) {
displaycolumn = 31-i;
mx.setColumn(displaycolumn, displayvalue);
} else {
displaycolumn = 31-(3*i);
mx.setColumn(displaycolumn-1, displayvalue);
mx.setColumn(displaycolumn, displayvalue);
}
}
displayModeChange();
}
void displayModeChange() {
int reading = digitalRead(buttonPin);
if (reading == HIGH && previousState == LOW && millis() - lastDebounceTime > debounceDelay) {
if (displaymode==1) {
displaymode = 2;
mx.clear();
delay(200);
EEPROM.update(1,2);
} else {
displaymode = 1;
mx.clear();
delay(200);
EEPROM.update(1,1);
}
lastDebounceTime = millis();
}
previousState = reading;
}
Schémas
Processus de fabrication
- Alerte Soif Plante Intelligente – Capteur DIY pour une Hydratation Optimale
- Horloge à Mots Italienne avec Arduino Nano, NeoPixel, LCD et RTC
- Économisez les broches Arduino : clavier 4×3 sur 3 entrées analogiques
- Compteur kWh Sigfox fiable avec Arduino MKR Fox 1200
- Moniteur de température Bluetooth avec Arduino Nano
- Multimètre capacimètre auto-étendant DIY (10 pF – 10 µF) – Construction Arduino facile
- Serrure à gestes sans contact : Accès sécurisé avec APDS-9960 et Arduino
- Circuit d'entrée analogique isolée pour Arduino : Protection contre les parasites industriels
- Test Précis de Temps de Réaction avec Arduino UNO