Advertisement
RuiViana

Untitled

May 9th, 2015
418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1. // Rotina para controle de motor. (110v ou 220v)
  2. // Partida suave
  3. // Uso didático
  4. // Rui 09/05/2015
  5.  
  6. //*************** Variaveis e constantes *************
  7. const int Motor = 13; // Pino de disparo do Triac
  8. const int Start = 4; // Entrada switch start
  9. const int Stop = 5; // Entrada switch stop
  10. const int EPO = 6; // Entrada switch EPO
  11. const int Sensor = 7; // Entrada switch sensor
  12. const int Reset = 8; // Entrada switch reset
  13.  
  14. unsigned int debounceDelay = 5; // Tempo de debounce
  15.  
  16. unsigned int FlagMotor;
  17. unsigned int FlagStart;
  18. unsigned int FlagEPO;
  19. unsigned int FlagSensor;
  20. unsigned int FlagSoftStart;
  21.  
  22. unsigned int dimming = 115;
  23.  
  24. long Told, Tgasto, Tnew;
  25.  
  26. //*********************** Setup ********************
  27. void setup()
  28. {
  29. Serial.begin(9600); // Inicializa a serial a 9600 bps para Debug
  30.  
  31. pinMode(Motor, OUTPUT); // Port como saída
  32. digitalWrite(Motor, LOW); // Desliga motor
  33.  
  34. pinMode(Start, INPUT); // Port como entrada
  35. pinMode(Stop, INPUT);
  36. pinMode(EPO, INPUT);
  37. pinMode(Sensor, INPUT);
  38. pinMode(Reset, INPUT);
  39.  
  40. digitalWrite(Start, HIGH); // Puul-Up Entrada
  41. digitalWrite(Stop, HIGH);
  42. digitalWrite(EPO, HIGH);
  43. digitalWrite(Sensor, HIGH);
  44. digitalWrite(Reset, HIGH);
  45. }
  46. //******************** Soft Start ****************
  47. void SoftStart() // De 0 1 00% em 5 segundos
  48. {
  49. if (FlagSoftStart == 0)
  50. {
  51. FlagSoftStart = 1;
  52. dimming = 6000; // Inicia com 10% da velocidade
  53. for (unsigned int i = 0; i< 50; i ++) // vai de 10% a 100% da velocidade
  54. {
  55. delay(50); // Fica em um valor por 0,5 seg
  56. dimming = dimming - 100; // Increma 10% da velocidade
  57. }
  58. digitalWrite(Motor, HIGH); // Mantem o motor a 100%
  59. }
  60. detachInterrupt(0);
  61. }
  62. //******************** Zero_Cross_Int ****************
  63. void zero_cross() // Rotina chamada à cada interrupt causada pelo zero cross do AC
  64. {
  65. delayMicroseconds(dimming); // Restardo calculado
  66. digitalWrite(Motor, HIGH); // Dispara o Triac
  67. delayMicroseconds(8.33); // Duração do pulso de disparo
  68. digitalWrite(Motor, LOW); // Desliga pulso de disparo
  69. }
  70. //*********************** Loop ********************
  71. void loop()
  72. {
  73. // ================= Star deboucing ===================
  74. if(!digitalRead(Start))
  75. {
  76. delay(debounceDelay);
  77. if(!digitalRead(Start))
  78. {
  79. FlagStart = 1;
  80. attachInterrupt(0, zero_cross, RISING); // Enable interrupt no pino D2
  81. while(!digitalRead(Start)) // Espera pela liberação do switch
  82. delayMicroseconds(1);
  83. }
  84. }
  85. // ================= Stop deboucing ===================
  86. if(!digitalRead(Stop))
  87. {
  88. delay(debounceDelay);
  89. if(!digitalRead(Stop))
  90. {
  91. FlagStart = 0;
  92. FlagSoftStart = 0;
  93. while(!digitalRead(Stop)) // Espera pela liberação do switch
  94. delayMicroseconds(1);
  95. }
  96. }
  97. // ================= EPO deboucing ===================
  98. if(!digitalRead(EPO))
  99. {
  100. delay(debounceDelay);
  101. if(!digitalRead(EPO))
  102. {
  103. FlagStart = 0;
  104. FlagEPO = 1;
  105. FlagSoftStart = 0;
  106. digitalWrite(Motor, LOW);
  107. while(!digitalRead(EPO)) // Espera pela liberação do switch
  108. delayMicroseconds(1);
  109. }
  110. }
  111. // ================= Sensor deboucing ===================
  112. if(!digitalRead(Sensor))
  113. {
  114. delay(debounceDelay);
  115. if(!digitalRead(Sensor))
  116. {
  117. FlagStart = 0;
  118. FlagSensor = 1;
  119. FlagSoftStart = 0;
  120. digitalWrite(Motor, LOW);
  121. while(!digitalRead(Sensor)) // Espera pela liberação do switch
  122. delayMicroseconds(1);
  123. }
  124. }
  125. // ================= Reset deboucing ===================
  126. if(!digitalRead(Reset))
  127. {
  128. delay(debounceDelay);
  129. if(!digitalRead(Reset))
  130. {
  131. FlagStart = 0;
  132. FlagEPO = 0;
  133. FlagSensor = 0;
  134. FlagSoftStart = 0;
  135. digitalWrite(Motor, LOW);
  136. while(!digitalRead(Reset)) // Espera pela liberação do switch
  137. delayMicroseconds(1);
  138. }
  139. }
  140. // ================= Controle ===========================
  141. /* //------------------ Para Debug -----------------
  142. Serial.print ("FlagStart ");
  143. Serial.println (FlagStart);
  144. Serial.print ("FlagEPO ");
  145. Serial.println (FlagEPO);
  146. Serial.print ("FlagSensor ");
  147. Serial.println (FlagSensor);
  148. */ //------------------ Para Debug -----------------
  149.  
  150. if ((FlagEPO == 0)&&(FlagSensor == 0))
  151. {
  152. if (FlagStart == 1) SoftStart();
  153. else digitalWrite(Motor, LOW);
  154. }
  155. /* FlagMotor = digitalRead(Motor); // Para Debug
  156. Serial.println (FlagMotor); // Para Debug
  157. Serial.println (" "); // Para Debug
  158. delay(500); // Para Debug
  159. */
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement