Commit 2e65aa80 authored by Damien OLIVIER's avatar Damien OLIVIER

Lien vers les fichiers ino

parent cfdb3c53
#include <Adafruit_NeoPixel.h>
#define N_LEDS 16 // Nombre de leds RGB dans l'anneau
#define BROCHE_ANNEAU 6 // Broche sur laquelle est connecté l'anneau (Data input)
// Paramètre 3 =
// NEO_KHZ800 800 KHz fréquence du flux (le plus souvent)
// NEO_KHZ400 400 KHz
// NEO_GRB cablage GRB (le plus souvent)
// NEO_RGB cablage RGB
Adafruit_NeoPixel anneau = Adafruit_NeoPixel(N_LEDS, BROCHE_ANNEAU, NEO_GRB + NEO_KHZ800);
void setup() {
anneau.begin();
anneau.show(); // Toutes les leds sont éteintes.
}
void loop() {
for (int j = 0; j < 3; j++ ) {
// Éclat croissant
for (int k = 0; k < 256; k++) {
switch (j) {
case 0: setAll(k, 0, 0); break;
case 1: setAll(0, k, 0); break;
case 2: setAll(0, 0, k); break;
}
anneau.show();
delay(3);
}
// Éclat décroissant
for (int k = 255; k >= 0; k--) {
switch (j) {
case 0: setAll(k, 0, 0); break;
case 1: setAll(0, k, 0); break;
case 2: setAll(0, 0, k); break;
}
anneau.show();
delay(3);
}
}
}
void setAll(int rouge, int vert, int bleu) {
for (int i = 0; i < N_LEDS; i++ ) {
anneau.setPixelColor(i, anneau.Color(rouge, vert, bleu));
}
anneau.show();
}
/*
* Mesure d'un niveau sonore ambiant
*/
#define TRACEUR
#define BROCHE_MICRO A0 // Le micro est connecté à une broche analogique
const int fenetreEchantillonnage = 50; // Fenêtre d'échantillonnage (50 ms = 20Hz) fréquence audible
unsigned int echantillon;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long debutCrono= millis(); // Debut d'échantillonnage
unsigned int creteACrete = 0; // Niveau crête à crête
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// Acquisition des valeurs durant la fenêtre d'échantillonnage
while (millis() - debutCrono < fenetreEchantillonnage)
{
echantillon = analogRead(BROCHE_MICRO);
if (echantillon < 1024) // Valeur cohèrente ?
{
if (echantillon > signalMax)
{
signalMax = echantillon;
}
else if (echantillon < signalMin)
{
signalMin = echantillon;
}
}
}
creteACrete = abs(signalMax - signalMin - 25); // Amplitude crête à crête
#ifdef TRACEUR
Serial.print(creteACrete);
Serial.println();
//double db = 20 * log10 (fabs(signalMax * 3.3)/1023);
//Serial.println(db);
#else
Serial.print("Min = ");
Serial.println(signalMin);
Serial.print("Max = ");
Serial.println(signalMax);
Serial.print("Delta = ");
Serial.println(creteACrete);
double volts = (creteACrete * 3.3) / 1023; // Convertion en volts
Serial.print("Volts = ");
Serial.println(volts);
#endif
}
...@@ -166,6 +166,7 @@ void loop() ...@@ -166,6 +166,7 @@ void loop()
} }
~~~ ~~~
Le [code][niveauSonore] complet.
![Amplitude du son](/images/doc/ateliers/Amplitude1.png) ![Amplitude du son](/images/doc/ateliers/Amplitude1.png)
...@@ -254,6 +255,9 @@ void setAll(int rouge, int vert, int bleu) { ...@@ -254,6 +255,9 @@ void setAll(int rouge, int vert, int bleu) {
} }
~~~ ~~~
Le [code][eclatAnneau] complet.
On va compléter notre programme. Nous avons joué sur le "fade" (éclat), on va maintenant utiliser la roue chromatique. Ainsi lorsque l'amplitude n'est pas trop forte les leds s'allumeront en vert, puis en jaune orange, puis en rouge. On code en RGB : `anneau.Color(rouge, vert, bleu)` et nous allons utiliser le modèle HSL, ( Hue, Saturation, Lightness ; teinte, saturation, lumière). On va compléter notre programme. Nous avons joué sur le "fade" (éclat), on va maintenant utiliser la roue chromatique. Ainsi lorsque l'amplitude n'est pas trop forte les leds s'allumeront en vert, puis en jaune orange, puis en rouge. On code en RGB : `anneau.Color(rouge, vert, bleu)` et nous allons utiliser le modèle HSL, ( Hue, Saturation, Lightness ; teinte, saturation, lumière).
- La teinte est mesurée par un angle autour de la roue chromatique ; - La teinte est mesurée par un angle autour de la roue chromatique ;
- La saturation correspond à la pureté de la couleur. C'est une quantité en % de gris contenue dans une teinte. La saturation est mesurée du centre de la roue vers les bords en partant des couleurs neutres vers les couleurs les plus vives. - La saturation correspond à la pureté de la couleur. C'est une quantité en % de gris contenue dans une teinte. La saturation est mesurée du centre de la roue vers les bords en partant des couleurs neutres vers les couleurs les plus vives.
...@@ -408,3 +412,5 @@ Pour la première source : $$L_{I1} = 10 \ln (I_1/I_0)$$ et pour la deuxième $$ ...@@ -408,3 +412,5 @@ Pour la première source : $$L_{I1} = 10 \ln (I_1/I_0)$$ et pour la deuxième $$
[4681b06b]: https://www.arduino.cc/en/Main/ArduinoBoardNano "Arduino Nano" [4681b06b]: https://www.arduino.cc/en/Main/ArduinoBoardNano "Arduino Nano"
[adafruit]: <https://learn.adafruit.com> [adafruit]: <https://learn.adafruit.com>
[code]: /attach/code/LedSDance/Sonometre/Sonometre.ino [code]: /attach/code/LedSDance/Sonometre/Sonometre.ino
[niveauSonore]: /attach/code/LedSDance/NiveauSonore/NiveauSonore.ino "code"
[eclatAnneau]: /attach/code/LedSDance/EclatAnneau/EclatAnneau.ino
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment