Advertisement
tiodocomputador

Temporizador com LCD para motores trifásicos

Mar 23rd, 2016
612
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.03 KB | None | 0 0
  1. // Video: https://www.youtube.com/watch?v=B1X9XqKXuEE
  2. // Referência no labdegaragem: http://labdegaragem.com/forum/topics/ajuda-contactor-com-rele-de-sobrecarga?id=6223006%3ATopic%3A283634&page=2
  3.  
  4.  
  5. #include <LiquidCrystal.h> //Inclui a biblioteca do LCD
  6.  
  7. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD
  8.  
  9. // Declara os pinos analogicos que controlam o tempo de acionamento
  10. int sensor1 = A1;
  11. int sensor2 = A0;
  12.  
  13. // Declara os pinos digitais que controlam quais relays serao ligados
  14. int button1 = 6;
  15. int button2 = 7;
  16. int button3 = 8;
  17.  
  18. // Declara os pinos digitais onde serao ligados os relays. Vou chamar de LED porque usei leds sinalizadores
  19. int led1 = 9;
  20. int led2 = 10;
  21. int led3 = 13;
  22.  
  23. // Declara a variavel tempo
  24. int timmer;
  25.  
  26. // Declara a variavel que controla o estado
  27. int State;
  28.  
  29. void setup()
  30. {
  31.   pinMode(sensor1, INPUT);
  32.   pinMode(sensor2, INPUT);
  33.  
  34.   pinMode(button1, INPUT_PULLUP);
  35.   pinMode(button2, INPUT_PULLUP);
  36.   pinMode(button3, INPUT_PULLUP);
  37.  
  38.   pinMode(led1, OUTPUT);
  39.   pinMode(led2, OUTPUT);
  40.   pinMode(led3, OUTPUT);
  41.  
  42.   digitalWrite(led1, LOW);
  43.   digitalWrite(led2, LOW);
  44.   digitalWrite(led3, LOW);
  45.  
  46.   State = 1; // Coloca estado=ligado, para inicializar sempre com os relays acionados e o usuario saber que esta funcionando
  47.  
  48.   lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
  49.  
  50.   lcd.setCursor(0, 0); // Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
  51.   lcd.print("C Y B E R  O H M"); // Escreve o nome da empresa no LCD
  52.   lcd.setCursor(4, 1); // Posiciona o cursor na quinta coluna(4) e na segunda linha(1) do LCD
  53.   lcd.print("Robotics"); // Escreve o segundo nome da empresa no LCD
  54.   delay(5000); // Deixe o usuario memorizar o nome da empresa, mas não passe de 5 segundos ou ele vai achar que teu circuito eh lento.
  55. }
  56.  
  57. void loop()
  58. {
  59.   int timmerON = map(analogRead(sensor1), 0, 1024, 5, 121); // Variável que controla o tempo que os relays ficam ligados (maximo de 2 minutos).
  60.   int timmerOFF = map(analogRead(sensor2), 0, 1024, 5, 601); // Variável que controla o tempo que os relays ficam ligados (maximo de 10 minutos).
  61.  
  62.   int Buttons[3] = {button1, button2, button3}; // Matriz para armazenar o estado dos botoes
  63.   int LED[3] = {led1, led2, led3}; // Matriz para armazenar o estado dos relays
  64.  
  65.   lcd.begin(16, 2); //Reinicia o LCD com dimensões 16x2(Colunas x Linhas). Seria necessario, se ja iniciou no void setup()?
  66.  
  67.   lcd.setCursor(2, 0); //Posiciona o cursor na terceira coluna(2) e na primeira linha(0) do LCD
  68.  
  69.   lcd.print((timmerON) / 60); // Converte para minutos inteiros e escreve no LCD
  70.   lcd.print(":");
  71.   if (((timmerON) % 60) < 10) // Se o resto da divisao por 60 for menor que 10...
  72.   {
  73.     lcd.print("0"); // Escreve um zero
  74.   }
  75.   lcd.print((timmerON) % 60); // Escreve o resto da divisao por 60 no LCD (segundos)
  76.   lcd.print(" -"); // Separador
  77.  
  78.   lcd.setCursor(9, 0); //Posiciona o cursor na decima coluna(9) e na primeira linha(0) do LCD
  79.  
  80.   lcd.print((timmerOFF) / 60); // Converte para minutos inteiros e escreve no LCD
  81.   lcd.print(":");
  82.   if (((timmerOFF) % 60) < 10) // Se o resto da divisao por 60 for menor que 10...
  83.   {
  84.     lcd.print("0"); // Escreve um zero
  85.   }
  86.   lcd.print((timmerOFF) % 60); // Escreve o resto da divisao por 60 no LCD (segundos)
  87.  
  88.   if (((((timmerON - timmer) / 60) < 10) && (State == 1)) || ((((timmerOFF - timmer) / 60) < 10) && (State == 0)))
  89.   // Se o contador regressivo for menor que 10 E os relays estiverem ligados
  90.   // OU
  91.   // e o contador regressivo for menor que 10 E os relays estiverem desligados
  92.   // Este "if" serve para alinhar sempre o contador na coluna correta, quando minutos tem 1 ou 2 digitos
  93.   {
  94.     lcd.setCursor(2, 1); //Posiciona o cursor na terceira coluna(2) e na segunda linha(1) do LCD
  95.   }
  96.   else // Senao
  97.   {
  98.     lcd.setCursor(1, 1); //Posiciona o cursor na segunda coluna(1) e na segunda linha(1) do LCD
  99.   }
  100.  
  101.   if (State == 1) // Se os relays estao ligados...
  102.   {
  103.     lcd.print((timmerON - timmer) / 60);
  104.     lcd.print(":");
  105.     if (((timmerON - timmer) % 60) < 10)
  106.     {
  107.       lcd.print("0");
  108.     }
  109.     lcd.print((timmerON - timmer) % 60);
  110.     lcd.setCursor(13, 1);
  111.     for (int x = 0; x < 3; x++)
  112.     {
  113.       if (!digitalRead(Buttons[x]) == 1)
  114.       {
  115.         lcd.print("*");
  116.       }
  117.       else
  118.       {
  119.         lcd.print("o");
  120.       }
  121.     }
  122.   }
  123.   else
  124.   {
  125.     lcd.print((timmerOFF - timmer) / 60);
  126.     lcd.print(":");
  127.     if (((timmerOFF - timmer) % 60) < 10)
  128.     {
  129.       lcd.print("0");
  130.     }
  131.     lcd.print(((timmerOFF - timmer) % 60));
  132.     lcd.setCursor(13, 1);
  133.     lcd.print("OFF");
  134.   }
  135.  
  136.   for (int x = 0; x < 3; x++)
  137.   {
  138.     if (State == 1)
  139.     {
  140.       digitalWrite(LED[x], !(digitalRead(Buttons[x])));
  141.     }
  142.     else
  143.     {
  144.       digitalWrite(LED[x], 0);
  145.     }
  146.   }
  147.  
  148.  
  149.   if (((timmer >= timmerON) && (State == 1)) || ((timmer >= timmerOFF) && (State == 0)))
  150.   {
  151.     timmer = 0;
  152.     State = ! State;
  153.   }
  154.  
  155.   delay(1000); //Aguarda 1 segundo
  156.   timmer++; //Incrementa variável de contagem
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement