View difference between Paste ID: ERc8SRU5 and ESMwTV4X
SHOW: | | - or go back to the newest paste.
1
/* 
2-
   Nome do Projeto:  Dimmer
2+
   Project Name:     Dimmer
3-
   Nome do Aquivo:   Dimmer_Pot2.ino
3+
   FileName:        Dimmer_Pot2.ino
4-
   Dependencias:     N/A
4+
   Dependencies:    N/A
5-
   MCU:              ATmega
5+
   Processor:       Arduino
6-
   Board:            Arduino Uno/Mega/Mini
6+
   Compiler:        N/A
7-
   Compilador        N/A
7+
   IDE:             Arduino IDE 1.0.6
8-
   IDE:              Arduino IDE 1.0.6
8+
   Hardware:        Arduino UNO
9-
   Hardware:         Arduino UNO/MEGA/Mini
9+
   Autor:           Rui Viana
10-
   Escrito por:      Rui Viana
10+
   Data:            25/06/2015
11-
   Data:             25/06/2015
11+
12-
   Uso:              Didático
12+
   Description:     
13-
   Desenhos          ZeroCross_Triac.jpg
13+
14-
   Copyright @       N/A
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-
   Este programa é software livre; 
16+
   Uso didático
17-
   e é distribuído na esperança que possa ser útil, mas SEM QUALQUER GARANTIA; 
17+
   Rui  24/06/2015
18-
   mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. 
18+
19
   Este code funciona assim:
20-
   REVISIONS: (latest entry first)  
20+
21-
   2015-06-25   -   Dimmer_Pot2.ino - First release
21+
22
   Na função map() é feita a relação entre o valor lido e a escala de 0 à 7900.
23-
   Descricão:     
23+
24
   descontando a duração do pulso de zero cross de +- 250 us e o pulso de disparo do triac
25-
   Rotina para dimmer. (110V ou 220V)  ajustada por um potenciômetro
25+
26-
   Os valores de brilho da lampada são ajustados por potenciômetro no pino A0.
26+
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-
   Testei com 110V e 220V.
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
  }