Arduino + haut-parleurs ?

Parlez nous de vos projets et de vos idées, imaginez des applications

Arduino + haut-parleurs ?

Message non lude Arnaud » Ven 18 Nov 2011 17:56

Salut à tous 8-) !

Je débute avec Arduino (j'ai une UNO) et j'ai démonté des vieux haut-parleurs de PC et j'ai récupérer une baffle. Il y a écrit dessus : "ETC 4Ω 1W". Il y a deux fils qui parte d'elle, je l'ai ais branchés à la broche 11~ et au Ground. Quand je lui envoie un valeur entre 0 et 255 (avec un potentiomètre) ça fait un Si comme note et ça change juste le timbre de la note. N'y a-t-il pas un moyen pour changer cette note ??

Merci de vos réponses


Arnaud
Arnaud
 
Messages: 6
Inscription: Sam 5 Nov 2011 10:26

Re: Arduino + haut-parleurs ?

Message non lude Lionel » Ven 18 Nov 2011 19:19

Bonjour,

alors tout d'abord, il vaut mieux eviter de brancher directement un haut parleur a une broche de l'arduino, ça marche, mais ça peut cramer votre sortie a terme (plus ou moins long d'ailleurs).
Le strict minimum serait de mettre une résistance en série (100 Ohms, marron/noir/marron/doré) avec votre haut parleur.
Vous reliez un coté a D8 et un coté au GND comme ça :

speaker.png
speaker.png (34.16 Kio) Vu 3506 fois


puis vous câblez votre potentiomètre en analog0 comme vous l'aviez sûrement fait

et vous chargez l'exemple Files/Examples/2.Digital/TonePitchFollower

et vous n'avez plus qu'a jouer avec :)

Les autres exemples de Digital/toneZZZZ sont amusants à bidouiller aussi !!
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Arduino + haut-parleurs ?

Message non lude Arnaud » Jeu 1 Déc 2011 22:26

Bonsoir,

Voilà, je me suis bien amusé avec tout ça et j'ai programmé un petit truc pour qu'avec deux boutons, je puisse jouer une note et la monter ou la descendre d'un demi-ton. Le problème c'est que j'avais pas envie de faire un fichier en .h avec que des #defines ! Du coup j'ai chercher la formule pour calculer la fréquence d'une note et j'ai trouver :
f(n) = 440*(pow(pow(2,(1/12)),(n-49)))
J'ai voulu faire un tableau qui s'initialise avec un boucle for pour pouvoir plus tard ne pas faire que des gammes chromatiques !

Voici mon code :
Code: Tout sélectionner
int tonePin = 8;
int switchPin1 = 12;
int switchPin2 = 13;

//Variables pour le debounce des switches
boolean lastButton1 = LOW;
boolean currentButton1 = LOW;
boolean lastButton2 = LOW;
boolean currentButton2 = LOW;

//Variables pour le tableau
int i(0);
int note(0);
double tabN[128] = {0};


void setup()
{
  pinMode(tonePin, OUTPUT);
  pinMode(switchPin1, INPUT);
  pinMode(switchPin2, INPUT);
 
  //initialisation du tableau
  for (int i=0; i<127; i++)
 {
   double n = 440*(pow(pow(2,(1/12)),((188-i)-49)));
   tabN[i] = n;
 }
 
  i = 69;
 
}


//debounce switch 1
boolean debounce1(boolean last1)
{
  boolean current1 = digitalRead(switchPin1);
  if (last1 != current1)
  {
    delay(5);
    current1 = digitalRead(switchPin1);
  }
  return current1;
}

//debouce switch 2
boolean debounce2(boolean last2)
{
  boolean current2 = digitalRead(switchPin2);
  if (last2 != current2)
  {
    delay(5);
    current2 = digitalRead(switchPin2);
  }
  return current2;
}


void loop()
{
  //debouce switch 1
    currentButton1 = debounce1(lastButton1);
  if (lastButton1 == LOW && currentButton1 == HIGH)
  {
   i++;
  }
    lastButton1 = currentButton1; 
 
 //debouce switch 2   
    currentButton2 = debounce2(lastButton2);
  if (lastButton2 == LOW && currentButton2 == HIGH)
  {
   i--;
  }
    lastButton2 = currentButton2; 
   
 
 
 
  if (digitalRead(switchPin1) == LOW && digitalRead(switchPin2) == LOW)
  {
    noTone(tonePin);
  }
  else
  {
    tone(tonePin, tabN[i]);
  }

}



Sauf que mon programme ne change pas du tout la note ! ça reste tout le temps sur un la 440, et en faisant des tests avec Serial.print, j'ai l'impression que mon tableau ne contient que ça ! Comment faire ?
Arnaud
 
Messages: 6
Inscription: Sam 5 Nov 2011 10:26

Re: Arduino + haut-parleurs ?

Message non lude Arnaud » Dim 4 Déc 2011 22:43

Quelqu'un a une réponse ?
Arnaud
 
Messages: 6
Inscription: Sam 5 Nov 2011 10:26

Re: Arduino + haut-parleurs ?

Message non lude Lionel » Lun 5 Déc 2011 00:10

Bonjour,

j'avais essayé de jouer avec votre formule, mais je n'ai pas réussi à la faire calculer avec l'arduino

Concernant cette formule, je m'étonne d'ailleurs, parce il est dit ici http://fr.wikipedia.org/wiki/Note_de_musique
que "la formule est : Image Avec n le nombre de demi-tons au-dessus de la note de départ f0"

Si on cale f0 à DO (32,7 Hz) on obtient facilement une suite de valeurs avec un tableur
Code: Tout sélectionner
0   32,70
1   34,64
2   36,70
3   38,89
4   41,20
5   43,65
6   46,24
7   48,99
8   51,91
9   54,99
10   58,26
11   61,73
12   65,40
13   69,29
14   73,41
15   77,77
16   82,40
17   87,30
18   92,49
19   97,99
20   103,82
21   109,99
22   116,53
23   123,46
24   130,80
25   138,58
26   146,82
27   155,55
28   164,80
29   174,60
30   184,98
31   195,98
32   207,63
33   219,98
34   233,06
35   246,92
36   261,60
37   277,16
38   293,64
39   311,10
40   329,60
41   349,19
42   369,96
43   391,96
44   415,26
45   439,96
46   466,12
47   493,84
48   523,20
49   554,31
50   587,27
51   622,19
52   659,19
53   698,39
54   739,92
55   783,91
56   830,53
57   879,91
58   932,24
59   987,67
60   1046,40
61   1108,62
62   1174,54
63   1244,39
64   1318,38
65   1396,78
66   1479,83
67   1567,83
68   1661,06
69   1759,83
70   1864,47
71   1975,34
72   2092,80
73   2217,24
74   2349,09
75   2488,77
76   2636,76
77   2793,55
78   2959,67
79   3135,66
80   3322,11
81   3519,66
82   3728,95
83   3950,68
84   4185,60
85   4434,49
86   4698,18
87   4977,55
88   5273,53
89   5587,11
90   5919,33
91   6271,31
92   6644,23
93   7039,31
94   7457,89
95   7901,36
96   8371,20
97   8868,98
98   9396,35
99   9955,09
100   10547,05
101   11174,21
102   11838,66
103   12542,63
104   13288,45
105   14078,62
106   14915,78
107   15802,72
108   16742,40
109   17737,95
110   18792,71
111   19910,18
112   21094,10
113   22348,42
114   23677,33
115   25085,26
116   26576,90
117   28157,25
118   29831,57
119   31605,44
120   33484,80
121   35475,91
122   37585,42
123   39820,36
124   42188,20
125   44696,85
126   47354,66
127   50170,51

Donc soit on utilise le tableur pour générer le fichier .h qui vous embête ou bien même seulement la déclaration de tabN[128]

Ou bien peut être que cette formule passerait mieux dans un arduino, je vous laisse tenter ?
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Arduino + haut-parleurs ?

Message non lude Arnaud » Lun 5 Déc 2011 18:21

Bonsoir !

Merci de votre réponse.
J'avais trouvé la formule pour les fréquences de notes ici http://en.wikipedia.org/wiki/Piano_key_frequencies :

Image

Avec n, le numéro de la note. 49 étant un La 440, 50 un La#, 51 un Si, etc ...
Je vais essayer avec votre formule, je vous tient au courant !
Arnaud
 
Messages: 6
Inscription: Sam 5 Nov 2011 10:26

Re: Arduino + haut-parleurs ?

Message non lude Arnaud » Lun 5 Déc 2011 21:32

Re-bonsoir !

Là, j'avoue que je ne comprend pas. J'ai beau essayer avec la seconde formule, ça ne fonctionne pas. Alors j'ai fait un programme tout bête, qui remplie juste le tableau et qui imprime toutes ses valeurs, comme ceci :

Code: Tout sélectionner
double C = 16.35;
double tabN[128] = {0};

void setup()
{
  Serial.begin(9600);

  for (int i=0; i<128; i++)
 {
   int n = i-69;
   tabN[i] = 440*pow(2,n/12);
    Serial.print(i);
    Serial.print(" - ");
    Serial.println(tabN[i]);
 }

}

void loop() {}


Et j'obtiens cela :

Code: Tout sélectionner
0 - 13.75
1 - 13.75
2 - 13.75
3 - 13.75
4 - 13.75
5 - 13.75
6 - 13.75
7 - 13.75
8 - 13.75
9 - 13.75
10 - 27.50
11 - 27.50
12 - 27.50
13 - 27.50
14 - 27.50
15 - 27.50
16 - 27.50
17 - 27.50
18 - 27.50
19 - 27.50
20 - 27.50
21 - 27.50
22 - 55.00
23 - 55.00
24 - 55.00
25 - 55.00
26 - 55.00
27 - 55.00
28 - 55.00
29 - 55.00
30 - 55.00
31 - 55.00
32 - 55.00
33 - 55.00
34 - 110.00
35 - 110.00
36 - 110.00
37 - 110.00
38 - 110.00
39 - 110.00
40 - 110.00
41 - 110.00
42 - 110.00
43 - 110.00
44 - 110.00
45 - 110.00
46 - 220.00
47 - 220.00
48 - 220.00
49 - 220.00
50 - 220.00
51 - 220.00
52 - 220.00
53 - 220.00
54 - 220.00
55 - 220.00
56 - 220.00
57 - 220.00
58 - 440.00
59 - 440.00
60 - 440.00
61 - 440.00
62 - 440.00
63 - 440.00
64 - 440.00
65 - 440.00
66 - 440.00
67 - 440.00
68 - 440.00
69 - 440.00
70 - 440.00
71 - 440.00
72 - 440.00
73 - 440.00
74 - 440.00
75 - 440.00
76 - 440.00
77 - 440.00
78 - 440.00
79 - 440.00
80 - 440.00
81 - 880.00
82 - 880.00
83 - 880.00
84 - 880.00
85 - 880.00
86 - 880.00
87 - 880.00
88 - 880.00
89 - 880.00
90 - 880.00
91 - 880.00
92 - 880.00
93 - 1760.00
94 - 1760.00
95 - 1760.00
96 - 1760.00
97 - 1760.00
98 - 1760.00
99 - 1760.00
100 - 1760.00
101 - 1760.00
102 - 1760.00
103 - 1760.00
104 - 1760.00
105 - 3520.00
106 - 3520.00
107 - 3520.00
108 - 3520.00
109 - 3520.00
110 - 3520.00
111 - 3520.00
112 - 3520.00
113 - 3520.00
114 - 3520.00
115 - 3520.00
116 - 3520.00
117 - 7040.00
118 - 7040.00
119 - 7040.00
120 - 7040.00
121 - 7040.00
122 - 7040.00
123 - 7040.00
124 - 7040.00
125 - 7040.00
126 - 7040.00
127 - 7040.00
Arnaud
 
Messages: 6
Inscription: Sam 5 Nov 2011 10:26

Re: Arduino + haut-parleurs ?

Message non lude Arnaud » Mar 6 Déc 2011 21:51

Salut !

Je parle un peut tout seul, mais c'est pour dire que j'ai enfin trouver la solution. Je ne sais pas pourquoi mais il fallait déclarer n comme double ! Et j'ai donc réussi a faire une gamme altérée avec le code ci-dessous :

Code: Tout sélectionner
int tonePin = 8;
int switchPin1 = 12;
int switchPin2 = 13;

//Variables pour le debounce des switches
boolean lastButton1 = LOW;
boolean currentButton1 = LOW;
boolean lastButton2 = LOW;
boolean currentButton2 = LOW;

//tableau
int i(0);
double n = i-69;
double tabN[128] = {0};



void setup()
{
  pinMode(tonePin, OUTPUT);
  pinMode(switchPin1, INPUT);
  pinMode(switchPin2, INPUT);
 
  for (int i=0; i<128;)
 {
      tabN[i] = 440*pow(2,n/12);
   n = n+1;
   i++;
      tabN[i] = 440*pow(2,n/12);
   n = n+2;
   i++;
      tabN[i] = 440*pow(2,n/12);
   n = n+1;
   i++;
      tabN[i] = 440*pow(2,n/12);
   n = n+2;
   i++;
      tabN[i] = 440*pow(2,n/12);
   n = n+2;
   i++;
      tabN[i] = 440*pow(2,n/12);
   n = n+2;
   i++;
   
   
 }
 
  i = 24;
 
}


//debounce switch 1
boolean debounce1(boolean last1)
{
  boolean current1 = digitalRead(switchPin1);
  if (last1 != current1)
  {
    delay(5);
    current1 = digitalRead(switchPin1);
  }
  return current1;
}

//debouce switch 2
boolean debounce2(boolean last2)
{
  boolean current2 = digitalRead(switchPin2);
  if (last2 != current2)
  {
    delay(5);
    current2 = digitalRead(switchPin2);
  }
  return current2;
}


void loop()
{
  //debouce switch 1
    currentButton1 = debounce1(lastButton1);
  if (lastButton1 == LOW && currentButton1 == HIGH)
  {
   i++;
  }
    lastButton1 = currentButton1; 
 
 //debouce switch 2   
    currentButton2 = debounce2(lastButton2);
  if (lastButton2 == LOW && currentButton2 == HIGH)
  {
   i--;
  }
    lastButton2 = currentButton2; 
   
 
 
 
  if (digitalRead(switchPin1) == LOW && digitalRead(switchPin2) == LOW)
  {
    noTone(tonePin);
  }
  else
  {
    tone(tonePin, tabN[i]);
  }

}








Voilà voilà, à bientôt !!
Arnaud
 
Messages: 6
Inscription: Sam 5 Nov 2011 10:26

Re: Arduino + haut-parleurs ?

Message non lude Doudouma » Mar 20 Jan 2015 15:16

Pourriez vous me donnez un code Arduino pour que mon automate puisse parlé s'il vous plait ?

ma tache pour le projet est : Gestion du module vocal, programmation sur Flowcode ou Arduino.

Je vous remercie d'avance de me donenr un code Arduino pour faire parlé un automate !
Doudouma
 
Messages: 3
Inscription: Ven 16 Jan 2015 14:45


Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité