Annulation Active de Bruit

Bonjour, avec un ami, nous nous sommes lancés dans un projet de réduction de bruit active.

Pour se faire, nous nous sommes procurés une carte arduino due arm, un micro MAX4466 et un haut parleur.

Nous avons donc commencé par capter le signal extérieur (amplitude et fréquence) à l’aide du micro et de l’arduino et cela s’est déroulé sans problème.

Cependant, maintenant qu’il faut restituer le son, le haut parleur sature car le micro envoie des informations diverses trop rapidement.

On aimerait bien avoir des conseils, que ce soit sur la façon d’utiliser arduino pour régler ce problème ou alors la mise en place de dispositifs analogiques (comme des filtres ou des amplificateurs) pour faire en sorte que notre installation fonctionne.

Merci d’avance pour vos retours !

JE ne sais pas si ton problème parle à d'autre membre.
mais comment ton micro peut envoyer des informations(lequelles) trop vite ?

Peut être qu'un schéma et ton programme pourrait aider à deviner comment tu t'y prends ?

De même je pensais que la saturation ne pouvait être que dû à un niveau de tension trop fort.
si tu envois un signal trop vite, tu va changer les fréquences du signal, voir le haut parleur ne pourra pas suivre, mais il ne me semblais pas qu'il est un phénome de saturation ?

Ne voyant pas l'intérêt d'un titre en anglais sur ce forum , je l'ai traduit.

L'annulation de bruit (en un point) nécessite , sauf erreur de ma part, une bonne maîtrise de la phase relative du signal sonore émis. je suis curieux de voir comment cela réalisé.

S"agit-il d'un projet scolaire ? si oui il faut mettre cartes sur table

Comment la carte Arduino sort le signal audio et le transmet au haut parleur ?
schéma svp

Bruit = signal analogique → module et phase
Arduino = signal numérique

Comment les deux sont reliés ?

Oui, c’est cela, le haut parleur n’arrive pas à suivre les informations du micro, le terme saturation était mal choisi, désolé
Pour ce qui est du schéma, j’ai simplement branché le micro à l’arduino et j’ai mis un transistor entre l’arduino et le haut parleur pour amplifier le son


Je me doute que ce circuit est trop simple, et que je n’ai pas tenu compte de nombreuses subtilités, mais c’est pour ça que j’ai écris ce message, à vrai dire je ne m’y connais pas beaucoup.
Pour ce qui est du programme, j’étais parti sur un programme de ce type:
#define MIC_PIN A0 // Entrée du micro MAX4466
#define AUDIO_OUT 9 // Sortie haut-parleur (PWM)
#define SAMPLING_FREQUENCY 20000 // 20 kHz pour une bonne qualité audio
#define SAMPLES 64 // Nombre d'échantillons pour l'offset DC

void setup() {
Serial.begin(115200);
analogReadResolution(12); // ADC 12 bits (0-4095)
analogWriteResolution(8); // PWM 8 bits (0-255)
pinMode(AUDIO_OUT, OUTPUT);
}

void loop() {
unsigned long startTime = micros();
double dcOffset = 0;

for (int i = 0; i < SAMPLES; i++) {
    dcOffset += analogRead(MIC_PIN);
}
dcOffset /= SAMPLES;

for (int i = 0; i < SAMPLES; i++) {
    while (micros() - startTime < (1000000 / SAMPLING_FREQUENCY)); // Maintenir fréquence
    startTime += (1000000 / SAMPLING_FREQUENCY);

    int sensorValue = analogRead(MIC_PIN) - dcOffset + 2048;  // Recentre autour de 2048
    sensorValue = constrain(sensorValue, 0, 4095);  // Sécurisation des valeurs

    analogWrite(AUDIO_OUT, sensorValue / 16);  // 12 bits → 8 bits pour la PWM

    Serial.println(sensorValue - 2048);
}

}
Ce n’est qu’un modèle avec des valeurs tests qui sont susceptibles d’être fortement modifiées, mais faudrait il encore que se programme réalisé bien ce que je souhaite…
Merci pour votre aide !

Par ailleurs, oui il s’agit bien d’un projet scolaire !

Merci de prendre quelques minutes pour lire "Les bonnes pratiques du forum francophone" et les appliquer.

En particulier, la mise en forme du code avec des balises en cliquant sur l'icône <code/>

Ce problème n'est pas simple, il y a de la théorie, de l'électronique et de la programmation.
Un peu de bibliographie ne peut pas faire de mal :

https://www.researchgate.net/publication/363201717_Design_and_Implementation_of_Active_Noise_Cancellation_for_Car_Cabin_on_Sulaimania_Roads_Using_Arduino_Embedded_System

Je n'ai rien trouvé sur ESP32 mais il y a des choses sur Teensy :

Mais, je répète : ce n'est pas un problème simple et il ne marchera que dans certains cas particuliers. Par exemple, annulation d'un bruit périodique, ou annulation dans une très petite zone (c'est pourquoi on fait des casques ANC - Active Noide Concellation - car ça permet d'annuler un bruit extérieur dans la zone proche de l'oreille).

Qu'en disent vos profs ?
C'est un PFE ingénieur (bac + 5) ou un projet de prépa (bac + 2) ? Le niveau n'est pas le même, les attentes des profs non plus.

Il faut absolument que tu suives les recommandations indiqués par @fdufnews
Parce que là ce n'est vraiment pas simple à lire et ne donne pas trop envie de t'aider :frowning:

Il faut surtout ce demander pourquoi ton Haut parleur devrait suivre les échantillons pris par ton Arduino :slight_smile:

Tu veux prendre un échantillon toutes les 1/ 20000 s, donc toutes les 50 µs
es-tu sûr que le corps de ta boucle FOR, prends moins de temps que ça ?

  • Tu veux passer par une sortie PWM, pour "simuler" une sortie analogique(tension), pour restituer le son échantillonné.
  • Je n'ai pas la réponse, mais que ce passe t-il ?