Advertisement
tiodocomputador

Dimmer no Arduino - Rui Viana

Jun 25th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.    Project Name:     Dimmer
  3.    FileName:        Dimmer_Pot2.ino
  4.    Dependencies:    N/A
  5.    Processor:       Arduino
  6.    Compiler:        N/A
  7.    IDE:             Arduino IDE 1.0.6
  8.    Hardware:        Arduino UNO
  9.    Autor:           Rui Viana
  10.    Data:            25/06/2015
  11.   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  12.    Description:    
  13.  
  14.    Rotina para dimmer. (110v ou 220v)  ajustada por um pot
  15.    Os valores de brilho da lampada são ajustados por pot no pino A0.
  16.    Uso didático
  17.    Rui  24/06/2015
  18.    
  19.    Este code funciona assim:
  20.    O potenciômetro plugado no pino A0, fornece o valor para o ADC.
  21.    O ADC calcula o valor entre 0 e 1023 e guarda na variável dimming.
  22.    Na função map() é feita a relação entre o valor lido e a escala de 0 à 7900.
  23.    A duração do ciclo de 60Hz é de 16666 us, com um semiciclo de 8333 us,
  24.    descontando a duração do pulso de zero cross de +- 250 us e o pulso de disparo do triac
  25.    de +- 100 us, sobram +- 7983 us.
  26.    Portanto o valor 7900 é o maior valor de deslocamento recomendado após o zerocross.
  27.    O valor do pulso do zerocross vai variar em função dos resistores em serie com a ponte retificadora,
  28.    portanto o valor de 7900, pode ser necessário modificar em função deste valor.
  29.    
  30.    O pulso do zerocross é detectado no pino 2.
  31.    Após pulsar e ficar em LOW, começa-se a contar o tempo para o disparo do triac.
  32.    Este tempo foi calculado em função do valor gerado pelo calculo do ADC.
  33.    Se este valor for zero, o triac disparará no incio do ciclo e a lampada acende com brilho total.
  34.    Se o valor for 7900, o triac dispara no final do ciclo, não sobrando tensão para a lampada,
  35.    e a mesma fica apagada.
  36.    Testei com 110v e 220v.
  37. */
  38. //************  Variaveis e constantes  ************
  39.   int Triac  = 3;                                  // Pino de disparo do Triac
  40.   int ZCross = 2;                                  // Pino de entrada do zerocross
  41.   unsigned int pinAnalog = 0;                      // Pino de entrada do potenciômetro (A0)
  42.   unsigned int dimming   = 0;                      // Variável para tempo de retardo. Valor Inicial Minimo
  43. //***********************  Setup *******************  
  44.   void setup()                                     // Rotina de setup
  45.   {
  46.     pinMode(pinAnalog, INPUT);                     // Define o pino(A0) como entrada analógica                      
  47.     pinMode(Triac, OUTPUT);                        // Define o pino(D3) Triac como saída
  48.   }
  49. //***********************  Loop ********************
  50.   void loop()                                      // Rotina de loop
  51.   {
  52.     dimming=analogRead(pinAnalog);                 // Lê valor do potenciômetro
  53.     dimming=map(dimming,0,1023,0,7900);            // Calcula 0 = 0 até 1023 = 7900
  54.     if (digitalRead(ZCross))                       // Faça se detectou pulso de zerocross
  55.     {
  56.       delayMicroseconds(dimming);                  // Retardo calculado em relação a zerocross
  57.       digitalWrite(Triac, HIGH);                   // Dispara o Triac  
  58.       delayMicroseconds(100);                      // Duração do pulso de disparo                  
  59.       digitalWrite(Triac, LOW);                    // Desliga pulso de disparo  
  60.     }
  61.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement