dimmer 220V

Bonsoir,

Cela fait quelques temps que je cherche à faire un programme qui gère la luminosité de plusieurs lampes 220V
J’ai trouvé plusieurs codes qui permettent de faire cela mais à chaque fois il ne gère qu’un seul canal …

Le but est assez simple il faudrait qu’il y est 8 variables (8 cannaux) par exemple, Et par exemple si je mets T1 à 127 le canal 1 sera éclairé à 50%, T2 à 0 celui ci sera éteint, T3 à 255 celui ci sera allumé au maximum …

J’ai également essayé le code de gromain, mais celui nci e fonctionne pas :confused:

Voilà un exemple de code qui fonctionne pour un canal …

int AC_pin = 10;          
byte dim = 0;              

void setup() {
  Serial.begin(9600);
  pinMode(AC_pin, OUTPUT);
  attachInterrupt(0, light, FALLING);
}

void light() {
  
  if (Serial.available()) {
    dim=0;
    while(Serial.available()){
    int chiffre = Serial.read();
    dim = dim*10 + (chiffre-'0');
    }
    Serial.println(dim);
    if (dim < 1) {                  
      digitalWrite(AC_pin, LOW);
    }
    if (dim > 254) {                
      digitalWrite(AC_pin, HIGH);
    }
  }
  if (dim > 0 && dim < 255) {      
    delayMicroseconds(34*(255-dim));
    digitalWrite(AC_pin, HIGH);
    delayMicroseconds(500);
    digitalWrite(AC_pin, LOW);
  }
}

void loop() {

}

Si vous avez des idées je suis preneur

Merci beaucoup et bonne soirée :slight_smile:

Bonjour, ah les moteurs de recherches, c' est plus ce que c' était: Gromain: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1251810521 Super_Cinci: http://forum.arduino.cc/index.php?topic=91324.0 http://pop.studio.free.fr/imgtmp/dimer_12_voies_dmx_version_0_0.pdf

Bonne lecture!

Il te faut séparer ta gestion, la tu n'executes qu'un ordre quand il est reçu. Il faut donc d'une part une routine pour gérer la réception série, et de l'autre une pour gérer le pilotage [u]en permanence[/u]. Et oui le dimming en 230V c'est à chaque demi-période que ça se gère ...

Un excellent article pour bien comprendre :

http://www.sonelec-musique.com/electronique_bases_gradateur_lumiere.html

et occupe toi qu'un canal pour le moment, tu verras pour les 7 autres ensuite ;)

Merci pour votre aide :)

Je vais regarder à ça, j'ai vu qu'il fallait utiliser un timer, je vais essayer de faire un canal, et je reviendrais certainement vous demander conseille !

Merci encore !

Salut à tous !

Après quelques recherches sur le net et un peu de réflexion j’ai trouvé le moyen de commander plusieurs lampes 220V, Cependant un petit problème persiste, la plage de commande est de 0 à 255 mais lors des tests entre 0 et 10 je n’ai rien et entre 205 et 255 je n’ai rien non plus … du coup je me retrouve avec une plage de 10 à 205, et lorsque je tend vers 0 la luminosité devrait être maximal mais là non

Si je met un digitalWrite(pin triac, HIGH) la luminosité est plus forte que si je met “10” sur la pin du triac dans le loop()

Du coup j’ai fait
if(donnee triac <10){
digitalWrite(pin triac, HIGH);
}

Et du coup je me retrouve avec un petit escalier lorsque je fais un gradateur …

Voilà le code si vous avez des idées pour obtenir un plus belle courbe !

#include <TimerOne.h>                       

volatile int i[4], j;                        
volatile boolean zero_cross[4] = {0,0,0,0};  
int AC[4] = {4,5,6,7};                       
int ACenable[4] = {1,1,1,1};                 
int output[4] = {0,0,0,0};                 //  Dimming level (0-128)  0 = on, 128 = 0ff
int dim = 0;                                 // Dimming level (0-128)  0 = on, 128 = 0ff
int freqStep = 40;                           //Pour 255 étapes et une frequence de 50HZ : 40
                                            

void setup() {                                      
 pinMode(AC[0], OUTPUT);                           
 pinMode(AC[1], OUTPUT);                           
 pinMode(AC[2], OUTPUT);                          
 pinMode(AC[3], OUTPUT);                           

 
 attachInterrupt(0, zero_cross_detect, FALLING);   // Attach an Interupt to Pin 2 (interupt 0) for Zero Cross Detection
 Timer1.initialize(freqStep);                      // Initialize TimerOne library for the freq we need
 Timer1.attachInterrupt(output_check, freqStep);   // Use the TimerOne Library to attach an interrupt
                                                  
 Serial.begin(9600);                                         
}                                                   
 
void zero_cross_detect() {                 // zero crossing                           
   zero_cross[0] = 1;                     // set the boolean to true to tell our dimming function that a zero cross has occured
   zero_cross[1] = 1;
   zero_cross[2] = 1;
   zero_cross[3] = 1;
}                                         

void output_check() {                       

 for( j=0; j<4; j++ ) {                     
   if(zero_cross[j]) {   
     
    if(output[j]==0){
    digitalWrite(AC[j], HIGH);
    }
    
    else if(output[j]==255){
    digitalWrite(AC[j], LOW);
    }
    
     else if(i[j] >= output[j] && ACenable[j]) { // Check and see if i has accumilated to the dimming value we want
       digitalWrite(AC[j], HIGH);           // Fire the Triac mid-phase
       delayMicroseconds(5);                // Pause briefly to ensure the triac turned on
       digitalWrite(AC[j], LOW);            // Turn off the Triac gate (Triac will not turn off until next zero cross)  
       i[j]=0;                              // If we fired the triac, reset the counters
       zero_cross[j] = 0;                   // Reset the zero cross detection
     } else { 
       i[j]++;                              // if nothing is done incriment th counter
     }
   }                                        
 }                                          
}                                            

void loop() {                        

   output[0] = 0;
   output[1] = 50;
   output[2] = 150;
   output[3] = 255;
      
   delay(100);                      // Delay after each step to slow down the fade
}

Merci pour votre aide ! :slight_smile:

Personne n'aurait une petite idée ... :confused:

Merci ...