Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


projets:fiat_lux:accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
projets:fiat_lux:accueil [2018/06/09 14:51]
resonance [Fiat lux]
projets:fiat_lux:accueil [2022/11/17 11:51] (Version actuelle)
resonance
Ligne 1: Ligne 1:
 ====== Fiat lux ====== ====== Fiat lux ======
-  * Porteur du projet : fenshu [[:user:resonance|resonance]] +  * Porteur du projet :  [[:user:resonance|resonance]]  Fenshu et Eric 
-  * Date : 09/06/2018/ - ...+  * Date : 01/09/2017/ - 01/07/2018/ 
   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]
   * Description : Synthé fonctionnant avec lumiere et arduino ...   * Description : Synthé fonctionnant avec lumiere et arduino ...
Ligne 10: Ligne 10:
  
 ===== Description ===== ===== Description =====
-Synthé fonctionnant avec lumiere et arduino ...+Fiat lux est un triple synthétiseur fonctionnant avec des led et des panneaux solaires. 
 +3 Arduino programmés en synthétiseur (avec la library Mozzi pour certains), envoient du signal audio (électrique) dans des leds. 
 +Celles-ci sont manipulables et orientables, font face à des panneaux solaires qui capte la lumiere. 
 +Ces panneaux solaires ont des sorties jack, permettant de se brancher à un ampli audio.
  
-{{projets:fiat_lux:accueil:img_20180609_140822.jpg?800|Fiat lux}}+**Cet instruments a été exposé :** 
 + 
 +  * Mixart Myris Toulouse - Sonoptic 2020 
 +  * Printemps de Bourges - 2018 
 +  * CityLab Barcelona - 2017 (beta) 
 +  * ... et utilisé dans des concerts de Fenshu 
 + 
 +{{projets:fiat_lux:accueil:img_20180609_140822.jpg?1100|Fiat lux}}
  
-===== Codes ===== 
-Voici quelques codes pas mal... Certains utilisent les libraries Tone et Mozzi pour transformer l'arduino en petit synthé ! 
  
 On capte le son emis en lumiere par des leds, via un panneau solaire. On capte le son emis en lumiere par des leds, via un panneau solaire.
Ligne 22: Ligne 30:
 {{youtube>nbi2d_UTToQ?large}} {{youtube>nbi2d_UTToQ?large}}
 //Le troisieme synth de la video est l'exemple de la librarie mozzi  : Sensor/lighttemperature...// //Le troisieme synth de la video est l'exemple de la librarie mozzi  : Sensor/lighttemperature...//
 +
 +{{youtube>AMaS_aPNssI?large}}
 +
 +
 +
 +
 +===== Circuit basique ===== 
 +Un montage digne des plus grands moments de l'électronique française
 +{{ :projets:fiat_lux:img_20180609_113815.jpg?nolink |}}
 +
 +
 +===== Codes =====
 +Voici quelques codes pas mal... Certains utilisent les libraries Tone et Mozzi pour transformer l'arduino en petit synthé !
 +
  
 ==== Synth 1 :  FM synth - mozzi ==== ==== Synth 1 :  FM synth - mozzi ====
-On controle un synthe fm avec 5 potards+Audio pin : 9 \\ 
- le son passe par la led en pin 9...+On controle un synthe fm avec 5 potards ...
  
  
Ligne 37: Ligne 59:
 Output Pin 9 - led ... Output Pin 9 - led ...
 */ */
 + 
 #include <MozziGuts.h> #include <MozziGuts.h>
 #include <Oscil.h> // oscillator  #include <Oscil.h> // oscillator 
Ligne 49: Ligne 71:
 const int MIN_CARRIER_FREQ = 22; const int MIN_CARRIER_FREQ = 22;
 const int MAX_CARRIER_FREQ = 440; const int MAX_CARRIER_FREQ = 440;
 + 
 const int MIN = 1; const int MIN = 1;
 const int MAX = 10; const int MAX = 10;
 + 
 const int MIN_2 = 1; const int MIN_2 = 1;
 const int MAX_2 = 15; const int MAX_2 = 15;
 + 
 // desired intensity max and min, for AutoMap, note they're inverted for reverse dynamics // desired intensity max and min, for AutoMap, note they're inverted for reverse dynamics
 const int MIN_INTENSITY = 700; const int MIN_INTENSITY = 700;
 const int MAX_INTENSITY = 10; const int MAX_INTENSITY = 10;
 + 
 // desired mod speed max and min, for AutoMap, note they're inverted for reverse dynamics // desired mod speed max and min, for AutoMap, note they're inverted for reverse dynamics
 const int MIN_MOD_SPEED = 10000; const int MIN_MOD_SPEED = 10000;
 const int MAX_MOD_SPEED = 1; const int MAX_MOD_SPEED = 1;
 + 
 AutoMap kMapCarrierFreq(0,1023,MIN_CARRIER_FREQ,MAX_CARRIER_FREQ); AutoMap kMapCarrierFreq(0,1023,MIN_CARRIER_FREQ,MAX_CARRIER_FREQ);
 AutoMap kMapIntensity(0,1023,MIN_INTENSITY,MAX_INTENSITY); AutoMap kMapIntensity(0,1023,MIN_INTENSITY,MAX_INTENSITY);
Ligne 69: Ligne 91:
 AutoMap mapThis(0,1023,MIN,MAX); AutoMap mapThis(0,1023,MIN,MAX);
 AutoMap mapThisToo(0,1023,MIN_2,MAX_2); AutoMap mapThisToo(0,1023,MIN_2,MAX_2);
- +  
-const int KNOB_PIN = 0; // set the input for the knob to analog pin 0 +const int KNOB_PIN = 0; // Pitch 
-const int LDR1_PIN=1; // set the analog input for fm_intensity to pin 1 +const int LDR1_PIN=5; // RingMOD 
-const int LDR2_PIN=2; // set the analog input for mod rate to pin 2 +const int LDR2_PIN=2; // LFO speed 
-const int LDR3_PIN=3; +const int LDR3_PIN=3; // Harmonic 
-const int LDR4_PIN=4; +const int LDR4_PIN=4; // reso-nance 
 + 
 Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aCarrier(COS2048_DATA); Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aCarrier(COS2048_DATA);
 Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aModulator(COS2048_DATA); Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aModulator(COS2048_DATA);
 Oscil<COS2048_NUM_CELLS, CONTROL_RATE> kIntensityMod(COS2048_DATA); Oscil<COS2048_NUM_CELLS, CONTROL_RATE> kIntensityMod(COS2048_DATA);
 + 
 int mod_ratio = 5; // brightness (harmonics) int mod_ratio = 5; // brightness (harmonics)
 long fm_intensity; // carries control info from updateControl to updateAudio long fm_intensity; // carries control info from updateControl to updateAudio
 + 
 // smoothing for intensity to remove clicks on transitions // smoothing for intensity to remove clicks on transitions
 float smoothness = 0.95f; float smoothness = 0.95f;
 Smooth <long> aSmoothIntensity(smoothness); Smooth <long> aSmoothIntensity(smoothness);
- +  
 + 
 void setup(){ void setup(){
   Serial.begin(115200); // set up the Serial output so we can look at the light level   Serial.begin(115200); // set up the Serial output so we can look at the light level
   startMozzi(); // :))   startMozzi(); // :))
 } }
 + 
 void updateControl(){ void updateControl(){
-  + 
 //  freqVal = map(LDR3_PIN, 0, 1023, 1, 100);  //  freqVal = map(LDR3_PIN, 0, 1023, 1, 100); 
    int freqVal = mozziAnalogRead(LDR3_PIN); // value is 0-1023    int freqVal = mozziAnalogRead(LDR3_PIN); // value is 0-1023
Ligne 100: Ligne 122:
    int knob2 = mozziAnalogRead(LDR4_PIN); // value is 0-1023    int knob2 = mozziAnalogRead(LDR4_PIN); // value is 0-1023
    int knob2Val = mapThis(knob2);    int knob2Val = mapThis(knob2);
-  + 
   // read the knob   // read the knob
   int knob_value = mozziAnalogRead(KNOB_PIN); // value is 0-1023   int knob_value = mozziAnalogRead(KNOB_PIN); // value is 0-1023
 + 
   // map the knob to carrier frequency   // map the knob to carrier frequency
   int carrier_freq = kMapCarrierFreq(knob_value);   int carrier_freq = kMapCarrierFreq(knob_value);
-  + 
   //calculate the modulation frequency to stay in ratio   //calculate the modulation frequency to stay in ratio
   int mod_freq = carrier_freq * mod_ratio * FRQ;   int mod_freq = carrier_freq * mod_ratio * FRQ;
-  + 
   // set the FM oscillator frequencies   // set the FM oscillator frequencies
   aCarrier.setFreq(carrier_freq);    aCarrier.setFreq(carrier_freq); 
   aModulator.setFreq(mod_freq);   aModulator.setFreq(mod_freq);
-  + 
   // read the light dependent resistor on the width Analog input pin   // read the light dependent resistor on the width Analog input pin
   int LDR1_value= mozziAnalogRead(LDR1_PIN); // value is 0-1023   int LDR1_value= mozziAnalogRead(LDR1_PIN); // value is 0-1023
   // print the value to the Serial monitor for debugging   // print the value to the Serial monitor for debugging
 + 
   int LDR1_calibrated = kMapIntensity(LDR1_value);   int LDR1_calibrated = kMapIntensity(LDR1_value);
 + 
  // calculate the fm_intensity  // calculate the fm_intensity
   fm_intensity = ((long)LDR1_calibrated * knob2Val * (kIntensityMod.next()+128))>>8; // shift back to range after 8 bit multiply   fm_intensity = ((long)LDR1_calibrated * knob2Val * (kIntensityMod.next()+128))>>8; // shift back to range after 8 bit multiply
- +  
-  + 
   // read the light dependent resistor on the speed Analog input pin   // read the light dependent resistor on the speed Analog input pin
   int LDR2_value= mozziAnalogRead(LDR2_PIN); // value is 0-1023   int LDR2_value= mozziAnalogRead(LDR2_PIN); // value is 0-1023
- +  
-  + 
                                      Serial.print("LDR0 = ");                                       Serial.print("LDR0 = "); 
                                       Serial.print(knob_value);                                       Serial.print(knob_value);
                                       Serial.print("\t"); // prints a tab                                       Serial.print("\t"); // prints a tab
-                                      + 
                                          Serial.print("LDR1 = ");                                           Serial.print("LDR1 = "); 
                                       Serial.print(LDR1_value);                                       Serial.print(LDR1_value);
                                       Serial.print("\t"); // prints a tab                                       Serial.print("\t"); // prints a tab
-                                      + 
                                          Serial.print("LDR2 = ");                                           Serial.print("LDR2 = "); 
                                       Serial.print(LDR2_value);                                       Serial.print(LDR2_value);
                                       Serial.print("\t"); // prints a tab                                       Serial.print("\t"); // prints a tab
- +  
 + 
                                       Serial.print("LDR3 = ");                                        Serial.print("LDR3 = "); 
                                       Serial.print(freqVal);                                       Serial.print(freqVal);
                                       Serial.print("\t"); // prints a tab                                       Serial.print("\t"); // prints a tab
 + 
                                       Serial.print("LDR4 = ");                                        Serial.print("LDR4 = "); 
                                       Serial.print(knob2);                                       Serial.print(knob2);
                                       Serial.print("\t"); // prints a tab                                       Serial.print("\t"); // prints a tab
-   +  
 + 
   // use a float here for low frequencies   // use a float here for low frequencies
   float mod_speed = (float)kMapModSpeed(LDR2_value)/1000;   float mod_speed = (float)kMapModSpeed(LDR2_value)/1000;
 + 
   kIntensityMod.setFreq(mod_speed);   kIntensityMod.setFreq(mod_speed);
-  + 
   Serial.println(); // finally, print a carraige return for the next line of debugging info   Serial.println(); // finally, print a carraige return for the next line of debugging info
 } }
 + 
 int updateAudio(){ int updateAudio(){
   long modulation = aSmoothIntensity.next(fm_intensity) * aModulator.next();   long modulation = aSmoothIntensity.next(fm_intensity) * aModulator.next();
   return aCarrier.phMod(modulation);   return aCarrier.phMod(modulation);
 } }
 + 
 void loop(){ void loop(){
   audioHook();   audioHook();
Ligne 170: Ligne 192:
  
 ==== Synth 2 : Rythm box 3led ==== ==== Synth 2 : Rythm box 3led ====
-Audio out : Pin 5 , 9 ,10+Audio out : Pin 5 , 9 ,10 \\
 On fait simplement clignoter 3 led a la noire, croche triolet, et on controle le temp avec un potentiometre et une photoresistance... On fait simplement clignoter 3 led a la noire, croche triolet, et on controle le temp avec un potentiometre et une photoresistance...
  
Ligne 177: Ligne 199:
  
  
-<code c+> +<code c+>// 3 led a jouant a la noire, croche et triolet
-// 3 led a jouant a la noire, croche et triolet+
 // un potentiometre 10k en A0 : controle le tempo général... // un potentiometre 10k en A0 : controle le tempo général...
 // une photo resistance en A1 : controle un effet de delay // une photo resistance en A1 : controle un effet de delay
 + 
 #define led1 5 #define led1 5
 #define led2 9   #define led2 9  
 #define led3 10   #define led3 10  
-#define factor  //factor for pwm tone ! +//#define factor 10  //factor for pwm tone ! 
 +int factor = 10; 
 unsigned long previousMillis[3]; //[x] = number of leds unsigned long previousMillis[3]; //[x] = number of leds
 + 
 void setup() {  void setup() { 
   pinMode(led1, OUTPUT);      pinMode(led1, OUTPUT);   
   pinMode(led2, OUTPUT);     pinMode(led2, OUTPUT);  
   pinMode(led3, OUTPUT);     pinMode(led3, OUTPUT);  
 + 
   Serial.begin(9600);   Serial.begin(9600);
 } }
 void loop() { void loop() {
- +  
-int sensorValue = analogRead(A0); +int sensorValue = analogRead(A1); 
-sensorValue = map(sensorValue, 0, 1023, 0, 2000); +sensorValue = map(sensorValue, 0, 1023, 2000, 0); 
 + 
   if(sensorValue > 1990) {    if(sensorValue > 1990) { 
 sensorValue == 10000; sensorValue == 10000;
 } }
-int sensorValueB = analogRead(A1);+int sensorValueB = analogRead(A0);
 sensorValueB = map(sensorValueB, 0, 1023, 1023, 0); sensorValueB = map(sensorValueB, 0, 1023, 1023, 0);
  
 +int sensorValueC = analogRead(A2);
 +factor = map(sensorValueC, 0, 1023, 2, 200);
 + 
   if(sensorValueB > 800) {    if(sensorValueB > 800) { 
  BlinkLedSimple(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis  BlinkLedSimple(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis
Ligne 212: Ligne 236:
  BlinkLedSimple(led3, sensorValue/2, 2,sensorValueB);   BlinkLedSimple(led3, sensorValue/2, 2,sensorValueB); 
 } }
 + 
   if(sensorValueB > 400 && sensorValueB < 800 ) {    if(sensorValueB > 400 && sensorValueB < 800 ) { 
  BlinkLed(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis  BlinkLed(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis
Ligne 218: Ligne 242:
  BlinkLed(led3, sensorValue/2, 2,sensorValueB);   BlinkLed(led3, sensorValue/2, 2,sensorValueB); 
 } }
 + 
   if(sensorValueB < 400) {    if(sensorValueB < 400) { 
  BlinkLedSuper(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis  BlinkLedSuper(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis
Ligne 224: Ligne 248:
  BlinkLedSuper(led3, sensorValue/2, 2,sensorValueB);   BlinkLedSuper(led3, sensorValue/2, 2,sensorValueB); 
 } }
 + 
 Serial.print("potentiometre"); Serial.print("potentiometre");
   Serial.println(sensorValue);   Serial.println(sensorValue);
 + 
 Serial.print("ldr"); Serial.print("ldr");
   Serial.println(sensorValueB);   Serial.println(sensorValueB);
-  delay(1);  + // delay(1);  
 + 
    
 } }
 + 
 ///Simple blink ///Simple blink
   void BlinkLedSimple (int led, int interval, int array, int pwm){       void BlinkLedSimple (int led, int interval, int array, int pwm){    
Ligne 241: Ligne 265:
        digitalWrite(led, !digitalRead(led)); //changes led state        digitalWrite(led, !digitalRead(led)); //changes led state
   }}   }}
 + 
 ///delayyyy blink ///delayyyy blink
 void BlinkLed (int led, int interval, int array, int pwm){    void BlinkLed (int led, int interval, int array, int pwm){   
    if (((long)millis() - previousMillis[array]) >= interval){     if (((long)millis() - previousMillis[array]) >= interval){ 
-   + 
     previousMillis[array]= millis(); //stores the millis value in the selected array     previousMillis[array]= millis(); //stores the millis value in the selected array
-   + 
     digitalWrite(led, !digitalRead(led)); //changes led state     digitalWrite(led, !digitalRead(led)); //changes led state
     delay (pwm/factor);     delay (pwm/factor);
Ligne 255: Ligne 279:
   }   }
 } }
 + 
 ///super delayyyy blink ///super delayyyy blink
 void BlinkLedSuper (int led, int interval, int array, int pwm){    void BlinkLedSuper (int led, int interval, int array, int pwm){   
    if (((long)millis() - previousMillis[array]) >= interval){     if (((long)millis() - previousMillis[array]) >= interval){ 
-   + 
     previousMillis[array]= millis(); //stores the millis value in the selected array     previousMillis[array]= millis(); //stores the millis value in the selected array
-   + 
     digitalWrite(led, !digitalRead(led)); //changes led state     digitalWrite(led, !digitalRead(led)); //changes led state
     delay (pwm/factor);     delay (pwm/factor);
Ligne 281: Ligne 305:
   }   }
 } }
- 
 </code> </code>
 ++++ ++++
Ligne 287: Ligne 310:
  
 ==== Synth 3 : Theremin  ==== ==== Synth 3 : Theremin  ====
-Audio out : Pin 9+Audio out : Pin 9 \\
 2 pot (selecteur si pot ou ldr pour controler le pitch, pitch ) un ldr (pitch).... 2 pot (selecteur si pot ou ldr pour controler le pitch, pitch ) un ldr (pitch)....
  
 ++++ Le code    ++++ Le code   
 <code c+> <code c+>
-/*   
-*/ 
- 
 #include <MozziGuts.h> #include <MozziGuts.h>
 #include <Oscil.h> // oscillator template #include <Oscil.h> // oscillator template
Ligne 301: Ligne 321:
 #include <ControlDelay.h> #include <ControlDelay.h>
  
-#define INPUT_PIN 0 // analog control input +#define INPUT_PIN 0 // analog control input LDR 
-#define INPUT_PINA // analog control input +#define INPUT_PINA // analog control input 
-#define MIX_PIN // analog control input+#define MIX_PIN // analog control input
  
 unsigned int echo_cells_1 = 32; unsigned int echo_cells_1 = 32;
Ligne 431: Ligne 451:
 ++++  ++++ 
  
-==== Code sympa fluctuant Mozzi ==== +==== Relaxation didgeridoo Mozzi ==== 
-pot volume et pitch+Synth ou 3  \\ 
 +Audio pin 9
  
 ++++ Le code    ++++ Le code   
Ligne 484: Ligne 505:
 </code> </code>
 ++++  ++++ 
 +
 +==== Multitone Bug ====
 +synth 2 ou 3 : bug avec 3 tone...
 +audio out : pin 9
 +
 +++++ Le code   
 +<code c+>
 +#define led1 9
 +#define led2 5  
 +#define led3 10  
 +
 +void setup() {
 +  pinMode(led1, OUTPUT);   
 +  pinMode(led2, OUTPUT);  
 +  pinMode(led3, OUTPUT);  
 +}
 +
 +void loop() {
 +int sensorValue = analogRead(A1);
 +sensorValue = map(sensorValue, 0, 1023, 0, 100000);
 + 
 +int sensorValueB = analogRead(A0);
 +sensorValueB = map(sensorValueB, 0, 1023, 0, 10000);
 +
 +int sensorValueC = analogRead(A2);
 +sensorValueC = map(sensorValueC,0, 1023, 0,random (5) + 100);
 +
 +tone(led1,sensorValue,sensorValueC);
 +delay (sensorValueC);
 +tone(led1,sensorValueB,sensorValueC);
 +delay (sensorValueC);
 +tone(led1,sensorValueC,sensorValueC);
 +delay (sensorValueC);
 +}
 +</code>
 +++++ 
 +
  
  
 ===== Design ===== ===== Design =====
 +{{ :projets:fiat_lux:dsc_0839.jpg?nolink |}}
 +
 +Fichier source en haut de page ! \\
 +Projet luxueux : Utilisation de la laser et cnc.
  
 {{ :projets:fiat_lux:screen_shot_06-09-18_at_02.49_pm.png?nolink&1000 |}} {{ :projets:fiat_lux:screen_shot_06-09-18_at_02.49_pm.png?nolink&1000 |}}
Ligne 503: Ligne 565:
   * feràsouder...   * feràsouder...
   * patience (compter 2 jours sans manger)   * patience (compter 2 jours sans manger)
 +
 +
  
 ===== Photos ===== ===== Photos =====
-Code pour afficher les images du projet +{{:projets:fiat_lux:fiatlux.png?1100|}} 
-<code>{{gallery>?&crop&lightbox}}</code>+ 
 + 
 +{{gallery>?&crop&lightbox}} 
 + 
 + 
 +===== Notice d'utilisation ===== 
 +  - Brancher les 5 lampions sur les sorties instruments 
 +  - Brancher les sortie audio principale (panneau solaire) sur une table de mixage ou enceintes audio 
 +  - Brancher l'alimentation sur la prise micro usb a gauche. (coté FM) 
 +  - Brancher l'alimentation usb sur une prise avec un bouton interrupteur 
 +  - Si les lampions s'allume tous ou clignote c'est bon, si certains ne s'allume pas.. ou ne sonnent pas ... eteindre et rallumer la prise pour reset. 
  
 +Il ya quelques problemes qui sont encore a resoudre :
 +  * Retirer les lampions peut aussi arreter le synthé du milieu... donc eviter de brancher et debrancher celui ci en live... (commencer tout branché)
 +  * Possible faux contact pres des leds par moments... il faut les bouger un peu et ca repart (a moins que la led soit grillée)
  
  
  
/home/resonancg/www/wiki/data/attic/projets/fiat_lux/accueil.1528548707.txt.gz · Dernière modification: 2018/06/09 14:51 de resonance