Advertisement
RuiViana

Untitled

Jun 24th, 2015
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. /*
  2. Nome do Projeto: Dimmer
  3. Nome do Aquivo: Dimmer_Pot2.ino
  4. Dependencias: N/A
  5. MCU: ATmega
  6. Board: Arduino Uno/Mega/Mini
  7. Compilador N/A
  8. IDE: Arduino IDE 1.0.6
  9. Hardware: Arduino UNO/MEGA/Mini
  10. Escrito por: Rui Viana
  11. Data: 25/06/2015
  12. Uso: Didático
  13. Desenhos ZeroCross_Triac.jpg
  14. Copyright @ N/A
  15.  
  16. Este programa é software livre;
  17. e é distribuído na esperança que possa ser útil, mas SEM QUALQUER GARANTIA;
  18. mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM.
  19.  
  20. REVISIONS: (latest entry first)
  21. 2015-06-25 - Dimmer_Pot2.ino - First release
  22. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  23. Descricão:
  24.  
  25. Rotina para dimmer. (110V ou 220V) ajustada por um potenciômetro
  26. Os valores de brilho da lampada são ajustados por potenciômetro no pino A0.
  27.  
  28. Este code funciona assim:
  29. O potenciômetro plugado no pino A0, fornece o valor para o ADC.
  30. O ADC calcula o valor entre 0 e 1023 e guarda na variável dimming.
  31. Na função map() é feita a relação entre o valor lido e a escala de 0 à 7900.
  32. A duração do ciclo de 60Hz é de 16666 us, com um semiciclo de 8333 us,
  33. descontando a duração do pulso de zero cross de +- 250 us e o pulso de disparo do triac
  34. de +- 100 us, sobram +- 7983 us.
  35. Portanto o valor 7900 é o maior valor de deslocamento recomendado após o zerocross.
  36. O valor do pulso do zerocross vai variar em função dos resistores em serie com a ponte retificadora,
  37. portanto o valor de 7900, pode ser necessário modificar em função deste valor.
  38.  
  39. O pulso do zerocross é detectado no pino 2.
  40. Após pulsar e ficar em LOW, começa-se a contar o tempo para o disparo do triac.
  41. Este tempo foi calculado em função do valor gerado pelo calculo do ADC.
  42. Se este valor for zero, o triac disparará no incio do ciclo e a lampada acende com brilho total.
  43. Se o valor for 7900, o triac dispara no final do ciclo, não sobrando tensão para a lampada,
  44. e a mesma fica apagada.
  45. Testei com 110V e 220V.
  46. */
  47. //************ Variaveis e constantes ************
  48. int Triac = 3; // Pino de disparo do Triac
  49. int ZCross = 2; // Pino de entrada do zerocross
  50. unsigned int pinAnalog = 0; // Pino de entrada do potenciômetro (A0)
  51. unsigned int dimming = 0; // Variável para tempo de retardo. Valor Inicial Minimo
  52. //*********************** Setup *******************
  53. void setup() // Rotina de setup
  54. {
  55. pinMode(pinAnalog, INPUT); // Define o pino(A0) como entrada analógica
  56. pinMode(Triac, OUTPUT); // Define o pino(D3) Triac como saída
  57. }
  58. //*********************** Loop ********************
  59. void loop() // Rotina de loop
  60. {
  61. dimming=analogRead(pinAnalog); // Lê valor do potenciômetro
  62. dimming=map(dimming,0,1023,0,7900); // Calcula 0 = 0 até 1023 = 7900
  63. if (digitalRead(ZCross)) // Faça se detectou pulso de zerocross
  64. {
  65. delayMicroseconds(dimming); // Retardo calculado em relação a zerocross
  66. digitalWrite(Triac, HIGH); // Dispara o Triac
  67. delayMicroseconds(100); // Duração do pulso de disparo
  68. digitalWrite(Triac, LOW); // Desliga pulso de disparo
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement