Advertisement
Guest User

Untitled

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