Un amplificateur a base de LM386 avec l’Arduino

J’ai fais récemment un article pour jouer des fichier .WAV avec l’Arduino le son n’étant pas terrible j’ai décidé de l’amplifier.

j’avais déjà réalisé un petit amplificateur a base de LM386 sans Arduino j’ai donc essayer de refaire le montage et le connecter a l’Arduino.

Matériel

  • Un Arduino
  • Un speaker
  • Un LM386
  • Un condensateur 220µf/10V

J’ai repris le montage le plus simple que j’ai trouvé. Il n’est pas optimal mais amplifie le son suffisamment. Il y a aussi des grésillements mais qui je pense sont dû à la simplicité du montage.
On peut amplifier le son un peu plus en plaçant un condensateur entre la pin 1 et 8 du LM386 (Le + du condensateur vers la pin 1 et le – vers la pin 8).

lm386_2

Le code

Pour le code, j’ai juste utilisé le code “TONE” d’Arduino.cc


/* Play Melody
 * -----------
 *
 * Program to play melodies stored in an array, it requires to know
 * about timing issues and about how to play tones.
 *
 * The calculation of the tones is made following the mathematical
 * operation:
 *
 *       timeHigh = 1/(2 * toneFrequency) = period / 2
 *
 * where the different tones are described as in the table:
 *
 * note         frequency       period  PW (timeHigh)   
 * c            261 Hz          3830    1915    
 * d            294 Hz          3400    1700    
 * e            329 Hz          3038    1519    
 * f            349 Hz          2864    1432    
 * g            392 Hz          2550    1275    
 * a            440 Hz          2272    1136    
 * b            493 Hz          2028    1014    
 * C            523 Hz          1912    956
 *
 * (cleft) 2005 D. Cuartielles for K3
 */

int ledPin = 13;
int speakerOut = 9;               
byte names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'};  
int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
byte melody[] = "2d2a1f2c2d2a2d2c2f2d2a2c2d2a1f2c2d2a2a2g2p8p8p8p";
// count length: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//                                10                  20                  30
int count = 0;
int count2 = 0;
int count3 = 0;
int MAX_COUNT = 24;
int statePin = LOW;

void setup() {
 pinMode(ledPin, OUTPUT); 
}

void loop() {
  analogWrite(speakerOut, 0);     
  for (count = 0; count < MAX_COUNT; count++) {
    statePin = !statePin;
    digitalWrite(ledPin, statePin);
    for (count3 = 0; count3 <= (melody[count*2] - 48) * 30; count3++) {
      for (count2=0;count2<8;count2++) {
        if (names[count2] == melody[count*2 + 1]) {       
          analogWrite(speakerOut,500);
          delayMicroseconds(tones[count2]);
          analogWrite(speakerOut, 0);
          delayMicroseconds(tones[count2]);
        } 
        if (melody[count*2 + 1] == 'p') {
          // make a pause of a certain size
          analogWrite(speakerOut, 0);
          delayMicroseconds(500);
        }
      }
    }
  }
}

            

 

1 Commentaire

  1. rsuinux

    bonjour;
    c’est simple, je cherche quelque chose comme ça.
    Savez vous s’il est possible de varier le volume avec l’arduino et le lm386?

    Merci de votre avis.
    Cordialement.

    Réponse

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Inscrivez-vous a la newsletter

Inscrivez-vous a la newsletter

Soyez les premiers avertis de nouveaux tutos, mises à jours, bon plans,...

Merci et à bientôt!

Pin It on Pinterest

Share This