Pages: [1]   Go Down
Author Topic: [Résolu] Arduino + Speaker !  (Read 2706 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 37
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
« Last Edit: May 24, 2011, 01:02:06 pm by cyber-tom » Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3560
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: May 22, 2011, 11:58:15 am by skywodd » Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3560
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Sr. Member
****
Karma: 2
Posts: 380
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 37
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
  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 ?
« Last Edit: May 23, 2011, 10:16:12 am by cyber-tom » Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 37
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3560
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Istres(13)
Offline Offline
Newbie
*
Karma: 0
Posts: 28
Hack the life !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Retrouvez les kits Arduino dans notre boutique http://boutique.semageek.com/

0
Offline Offline
Newbie
*
Karma: 0
Posts: 37
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai refait un autre code :
Code:
#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 !
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 37
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

heureux pour toi, mais si tu nous disais comment tu l'as résolu, ça pourrait servir à quelqu'un d'autre smiley-wink
Logged

pas taper... sauf application de l'article 35 ...

0
Offline Offline
Newbie
*
Karma: 0
Posts: 37
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
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();
    
   }
}
Logged

Pages: [1]   Go Up
Jump to: