Go Down

Topic: [Résolu] Arduino + Speaker ! (Read 3128 times) previous topic - next topic

cyber-tom

May 22, 2011, 12:39 pm Last Edit: May 24, 2011, 08:02 pm by cyber-tom Reason: 1
Bonjour à tous ! j'essaye de relié un haut parleur de 4 ohm avec mon arduino uno et une résistance de 1kohm
J'aimerais savoir si le choix de la résistance et le montage est correct svp ?


Merci d'avance !

fdufnews

Quote
j'essaye de relié un haut parleur de 4 ohm avec mon arduino uno et une résistance de 1kohm
J'aimerais savoir si le choix de la résistance et le montage est correct svp ?

Définitivement NON
Avec ce montage, tu récupères 4/1000 du signal sortie par l'arduino. Autant dire rien.

Un haut-parleur présente une résistance interne très faible. L'arduino ne peut pas accepter une charge si basse. Il faut donc utiliser un transistor en interface entre l'arduino et le haut-parleur.

skywodd

#2
May 22, 2011, 06:56 pm Last Edit: May 22, 2011, 06:58 pm by skywodd Reason: 1
Bonjour,
Pour piloter un petit haut parleur pas besoin d'un transistor faut juste mettre une résistance en série de l'ordre de 1k aprés si c'est un haut parleur de plus de 1/4W la ok il faudra utiliser un ampli.

edit: http://www.arduino.cc/en/Tutorial/Tone
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

fdufnews

Sur le lien que tu donnes il est indiqué 100 Ohms pas un 1KOhms. Cela fait quand même une grosse différence de niveau.

Grag38

De plus sur le lien, le hp est de 8 ohm, donc il aut accorder la resistance. Non ?

Super_Cinci

Une broche de sortie d'arduino ne peut gérer une charge inférieure à 125 ohms (5V, 40mA). d'où la résistance de 100 ohms en série, ça donne une charge de 108 ohms, charge déjà pas dans les normes.

La puissance admissible du HP n'a rien à voir avec l'utilisation ou pas d'un transistor. ce qui compte c'est de savoir si on veut "bananer" du son. le montage aec une résistance de 100 ohms ne délivrera au HP qu'une puissance sonore max de 6.4mW, c-a-d rien de vraiment audible.

Avec l'utilisation d'un transistor, on peut augmenter la puissance jusqu'à 1.5W sur un HP de 8 ohms ou 3W sur 4 ohms. Il faut un transistor qui tienne au moins 3A (en puissance, ça n'a pas d'importance, il fonctionne en commutation). Il lui faut également un HFEmin de 100 pour ne pas trop surcharger la sortie du arduino.

Malheureusement, ce type de transistor n'est pas courant, à moins d'aller chercher du darlington ou d'en utiliser 2 (monté en darlington)...

Il n'y a aucun accord à faire, il faut déjà se demander ce qu'on veut obtenir...

cyber-tom

#6
May 23, 2011, 05:14 pm Last Edit: May 23, 2011, 05:16 pm by cyber-tom Reason: 1
Non le montage c'était juste pour vous montrer les branchements !
J'ai bien une résistance de 1kohm et un haut parleur de ( 4ohm, 8W) !

Voila le code que j'ai mis :
Code: [Select]
/*
  Melody

Plays a melody

circuit:
* 8-ohm speaker on digital pin 8

created 21 Jan 2010
modified 14 Oct 2010
by Tom Igoe

This example code is in the public domain.

http://arduino.cc/en/Tutorial/Tone

*/
#include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 8, 8, 4,4,4,4,4 };

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // to calculate the note duration, take one second
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(8);
  }
}

void loop() {
  // no need to repeat the melody.
}

codé tiré de http://arduino.cc/en/Tutorial/Tone

J'ai bien mis le fichier pitches.h dans le même dossier mais il me met une erreur :

ToneTest.cpp.o: In function `setup':
C:\Users\Thomas\AppData\Local\Temp\build253965774427076826.tmp/ToneTest.cpp:39: undefined reference to `tone(unsigned char, unsigned int, unsigned long)'
C:\Users\Thomas\AppData\Local\Temp\build253965774427076826.tmp/ToneTest.cpp:46: undefined reference to `noTone(unsigned char)'

Voyez vous pourquoi ?

Super_Cinci

ton
Code: [Select]
#include "pitches.h"
t'as essayé de mettre des < > au lieu des guillemets?

cyber-tom

Non car c'est un fichier dans le même dossier que mon fichier .pde !

fdufnews

Il doit y avoir quelque chose dans ton pitches.h qui cause l'erreur. Sans l'include le prog se compile sans erreur.

semageek

Bonjour cyber-tom,

Tout d'abord, j'ai déjà travaillé avec la librairie Tone, et j'ai utilisé une résistance de 100 ohms pour que le son soit audible bien que faible, il faut parfois tendre l'oreille.

Pour ton erreur à la compilation, elle signifie que la fonction tone() et noTone() ne sont pas trouvable.
Il faut savoir que la librairie Tone a été intégré à partir de la version 018 de l'IDE Arduino.
Vérifie donc déjà la version de l'IDE Arduino que tu utilise.
Pour info, tu peux trouver la librairie Tone dans le dossier :
hardware\arduino\cores\arduino -> fichier tone.h doit être présent.

Essaye de forcer l'inclusion de la librairie à l'aide de : #include <Tone.h>

Voilà quelques pistes...
Retrouvez les kits Arduino dans notre boutique http://boutique.semageek.com/

cyber-tom

J'ai refait un autre code :
Code: [Select]
#include <Tone.h>

// notes in the melody:
int note_c3= 131;
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 8, 4, 16, 4, 4, 4 ,4 };

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // to calculate the note duration, take one second
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, note_c3, noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(8);
  }
}

void loop() {
  // no need to repeat the melody.
}


Cette fois j'utilise une seule fréquence, pour tester les fonctions tone() et notone() !

Seulement il m'affiche une erreur :
ToneTest_pde.cpp.o: In function `setup':
C:\Users\Thomas\AppData\Local\Temp\build2336804329965765209.tmp/ToneTest_pde.cpp:20: undefined reference to `tone(unsigned char, unsigned int, unsigned long)'
C:\Users\Thomas\AppData\Local\Temp\build2336804329965765209.tmp/ToneTest_pde.cpp:27: undefined reference to `noTone(unsigned char)'

Je ne vois pas ou est le problème ..
Voyez-vous comment faire svp ?
Merci d'avance !

cyber-tom

J'ai résolu mon problème !
En regardant tout simplement les fichiers d'exemples !
Merci pour votre patience !!

taddot

heureux pour toi, mais si tu nous disais comment tu l'as résolu, ça pourrait servir à quelqu'un d'autre ;)
pas taper... sauf application de l'article 35 ...

cyber-tom

Eh bien j'ai regarder ce fameux fichier tone.h et j'ai réaliser que les fonctions pour jouer du "son" n'était pas comme le code que j'avais écris mais agencé de cette façon :
Code: [Select]

#include <Tone.h>

Tone nom_haut_parleur; // on défini le nom du haut parleur
nom_haut_parleur.begin(pin_hp); // pin_hp est la broche de l'arduino relié au haut_parleur
nom_haut_parleur.play(frequence,duration); // ajouter la fréquence de la note voulu et sa durée
nom_haut_parleur.stop(pin_hp); // le son a été jouer, donc on conclus par un stop

Un exemple :
Code: [Select]

int tone_1[] = {NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4};
// note durations: 4 = quarter note, 8 = eighth note, etc.: J'ai repris le code initial pour la durée d'une note !
// 1=ronde 2=blanche 4=noir 8=croche .... (pour ceux qui ont quelques bases en musique)
int dureeNotes_tone_1 = {4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 1};
Tone haut_parleur1;
void setup(void)
{
 haut_parleur1.begin(7); // 7 correspond à la broche 7 de l'arduino relié au haut_parleur
}
void loop(void)
{
  for (int thisNote = 0; thisNote < 11; thisNote++) { // Boucle pour jouer toutes les notes définies dans le tableau tone_1[]
    int dureeNotes_tone_1 = 1000/dureeNotes_tone_1[thisNote]; // Calcule la vraie durée de la note
     haut_parleur1.play(tone_1[thisNote], dureeNotes_tone_1 ); // joue la note à la fréquence et la durée voulue
    int pauseBetweenNotes =dureeNotes_tone_1 * 1.30; // Calcule la durée de la pause entre chaque note
    delay(pauseBetweenNotes); // pause

    haut_parleur1.stop();
   
  }
}

Go Up