Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Nome do Projeto: Controle_Dosador_V01
- Nome do Aquivo: Controle_Dosador_V01.ino
- Dependências: LiquidCrystal.h Biblioteca para o LCD
- MCU: Atmega328
- Board: Arduino Uno/Mega/Mini
- Compilador N/A
- IDE: Arduino IDE 1.0.6
- Hardware: Arduino UNO/MEGA/Mini
- Escrito por: Rui Viana
- Data: 13/07/2015
- Uso: Didático
- Desenhos N/A
- Copyright @ N/A
- Este programa é software livre;
- e é distribuído na esperança que possa ser útil, mas SEM QUALQUER GARANTIA;
- mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM.
- Obs: O pino 0 e 1 tem que ser desligado ao carregar o código, se não dará erro.
- avrdude: stk500_getsync(): not in sync: resp=0x00
- REVISIONS: (latest entry first)
- 2015-07-13 - Controle_Dosador_V01.ino - First release. Só um sistema de fluxo
- 2015-07-13 - Controle_Dosador_V02.ino - Inclusão dos 2 outros sistemas
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Descrição:
- Este código para acionar uma bomba e uma válvula para encher uma embalagem com 500ml.
- Ele usa em sensor de fluxo para medir a quantiddade que é colocada na embalagem.
- Parâmetros do sensor:
- Pulse frequency (Hz) in Horizontal Test = 5.5Q, Q is flow rate in L/min.
- Flow Rate Range 1~60L/min
- O Sensor envia pulsos à razão de 330 pulso para cada litro envasado.
- */
- // ---------------------- Parametros e variaveis --------------------------
- #include <LiquidCrystal.h> // Biblioteca do LCD
- LiquidCrystal lcd(13,12,11,10,9,8); // Pinos do LCD
- #define bombaUm 5 // pino que aciona a bomba1 e a válvula1
- #define bombaDois 6 // pino que aciona a bomba2 e a válvula2
- #define bombaTres 7 // pino que aciona a bomba3 e a válvula3
- #define botao_prgm1 A0 // Pino para botão de carga do protudo 1
- #define botao_prgm2 A1 // Pino para botão de carga do protudo 2
- #define botao_prgm3 A2 // Pino para botão de carga do protudo 3
- #define botaoliga A3 // Pino para botão de Ligar o sistema
- #define EPO A4 // Botaão para Emergencia ESP
- #define hallsensor1 0 // The pin location of the sensor
- #define hallsensor2 1 // The pin location of the sensor
- #define hallsensor3 2 // The pin location of the sensor
- float Calc1 = 0; // Variavel para contagem de pulsos do sensor1 de fluxo
- float Calc2 = 0; // Variavel para contagem de pulsos do sensor2 de fluxo
- float Calc3 = 0; // Variavel para contagem de pulsos do sensor3 de fluxo
- unsigned int debounceDelay = 5; // Tempo de debounce
- unsigned int Flagbotaoliga; // Variavel para indicar se o botão de liga foi acionado
- unsigned int Flagbotaoprgm1 = 0; // Variavel para indicar se o botão de prgm1 foi acionado
- unsigned int Flagbotaoprgm2 = 0; // Variavel para indicar se o botão de prgm2 foi acionado
- unsigned int Flagbotaoprgm3 = 0; // Variavel para indicar se o botão de prgm3 foi acionado
- unsigned int FlagEPO; // Variavel para indicar se o botão de emergencia foi acionado
- // -------------------------------------- setup -----------------------------
- void setup()
- {
- lcd.begin(20, 2); // Inicializa LCD de 20 posiçoes e 2 linhas
- lcd.setCursor(0,0); // Posiciona cursor na 1 posição da 1a linha
- lcd.clear();
- lcd.print ("Dosador");
- pinMode(hallsensor1, INPUT_PULLUP); // Initializes digital pin 2 as an input
- pinMode(hallsensor2, INPUT_PULLUP); // Initializes digital pin 2 as an input
- pinMode(hallsensor3, INPUT_PULLUP); // Initializes digital pin 2 as an input
- pinMode (bombaUm, OUTPUT); // pino que aciona a bomba1 e a válvula1 como saida
- pinMode (bombaDois, OUTPUT); // pino que aciona a bomba2 e a válvula1 como saida
- pinMode (bombaTres, OUTPUT); // pino que aciona a bomba3 e a válvula1 como saida
- pinMode (botaoliga, INPUT_PULLUP); // pino do botão de liga como entrada e PULL_UP
- pinMode (EPO, INPUT_PULLUP); // pino do botão de Emergencia como entrada e PULL_UP
- pinMode (botao_prgm1, INPUT_PULLUP); // pino do botão de carga de 500ml1 como entrada e PULL_UP
- pinMode (botao_prgm2, INPUT_PULLUP); // pino do botão de carga de 500ml2 como entrada e PULL_UP de liga como entrada e PULL_UP
- pinMode (botao_prgm3, INPUT_PULLUP); // pino do botão de carga de 1000m como entrada e PULL_UP de liga como entrada e PULL_UP
- lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
- lcd.print ("Deslig."); // Informa sistema desligado
- Flagbotaoliga = 0; // Indicador de botaão de liga, como desligado
- }
- //------------------------------------ loop -----------------------
- void loop()
- {
- // ================= botaoliga deboucing ===================
- if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado
- { // Faça
- delay(debounceDelay); // delay para evitar bounce(ruído eletrico)
- if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado
- { // Faça
- Flagbotaoliga = 1; // Indicador de botão de liga, como ligado
- FlagEPO = 0; // Indicativo de emergencia desligado
- lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
- lcd.print ("Ligado "); // Informa sistema ligado
- lcd.setCursor(0,1); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print (" "); // Limpa a área
- while(!digitalRead(botaoliga)) // Espera pela liberação do switch
- delayMicroseconds(1); // delay de 1u segundos
- }
- }
- // ================= EPO deboucing ===================
- if(!digitalRead(EPO)) // Se botão de ligar está pressionado
- { // Faça
- delay(debounceDelay); // delay para evitar bounce(ruído eletrico)
- if(!digitalRead(EPO)) // Se botão de emergencia está pressionado
- {
- FlagEPO = 1; // Indicativo de emergencia ligado
- digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1
- digitalWrite (bombaDois,HIGH); // Desliga bomba 2 e Valvula 2
- digitalWrite (bombaTres,HIGH); // Desliga bomba 3 e Valvula 3
- Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
- lcd.setCursor(9,0); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print ("Deslig. "); // Informa sistema desligado
- lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
- lcd.print (" "); // Limpa a área
- while(!digitalRead(EPO)) // Espera pela liberação do switch
- delayMicroseconds(1); // delay de 1u segundos
- }
- }
- // ----------------------------- controle do fluxo -----------------
- if (Flagbotaoliga == 1) // Se o botão de liga foi acionado
- { // Faça
- // ================= botao_prgm1 deboucing ===================
- if ((Flagbotaoprgm2 == 0) & (Flagbotaoprgm3 == 0)) // Se não está usando prgm2 ou prgm3
- { // Faça
- if(!digitalRead(botao_prgm1)) // Se o botão de carga de 500ml1 está pressionado
- {
- if (Calc1 < 165) // Se a quantidade envasada for menor que 500ml
- { // Faça
- Flagbotaoprgm1 = 1; // Indicador de botão de progm1, como ligado
- digitalWrite (bombaUm,LOW); // Liga bomba 1 e Valvula 1
- if(pulseIn(hallsensor1, LOW)) // Se pulso do sensor1 de fluxo for low
- Calc1++; // Incremente contador de quantidade
- }
- else // Se a quantidade envasada for maior que 500ml
- { // Faça
- Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
- lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print (Calc1*3.0303); // Mostra contador
- lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
- lcd.print ("Deslig."); // Informa sistema desligado
- Calc1 = 0; // Zera variavel contadora
- Flagbotaoprgm1 = 0; // Indicador de botão de progm1, como desligado
- }
- }
- else // Se o botão de carga de 500ml1 não está pressionado
- {
- if (Flagbotaoprgm1 == 1) // Se indicador de botão de progm1 estiver ligado
- { // Faça
- digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1
- lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
- lcd.print (" 500ml_1"); // Mostra qual sistema está sendo usado
- lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print (Calc1*3.0303); // Mostra contador
- }
- }
- }
- // ================= botao_prgm2 deboucing ===================
- if ((Flagbotaoprgm1 == 0) & (Flagbotaoprgm3 == 0)) // Se não está usando prgm1 ou prgm3
- { // Faça
- if(!digitalRead(botao_prgm2)) // Se o botão de carga de 500ml2 está pressionado
- {
- if (Calc2 < 165) // Se a quantidade envasada for menor que 500ml
- { // Faça
- Flagbotaoprgm2 = 1; // Indicador de botão de progm2, como ligado
- digitalWrite (bombaDois,LOW); // Liga bomba 2 e Valvula 2
- if(pulseIn(hallsensor2, LOW)) // Se pulso do sensor2 de fluxo for low
- Calc2++; // Incremente contador de quantidade
- }
- else // Se a quantidade envasada for maior que 500ml
- { // Faça
- Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
- lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print (Calc2*3.0303); // Mostra contador
- lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
- lcd.print ("Deslig."); // Informa sistema desligado
- Calc2 = 0; // Zera variavel contadora
- Flagbotaoprgm2 = 0; // Indicador de botão de progm2, como desligado
- }
- }
- else // Se o botão de carga de 500ml2 não está pressionado
- {
- if (Flagbotaoprgm2 == 1) // Se indicador de botão de progm2 está ligado
- { // Faça
- digitalWrite (bombaDois,HIGH); // Desliga bomba 2 e Valvula 2
- lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
- lcd.print (" 500ml_2"); // Mostra qual sistema está sendo usado
- lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print (Calc2*3.0303); // Mostra contador
- }
- }
- }
- // ================= botao_prgm3 deboucing ===================
- if ((Flagbotaoprgm1 == 0) & (Flagbotaoprgm2 == 0)) // Se não está usando prgm1 ou prgm2
- {
- if(!digitalRead(botao_prgm3)) // Se o botão de carga de 1000ml está pressionado
- { // Faça
- if (Calc3 < 330) // Se a quantidade envasada for menor que 500ml
- { // Faça
- Flagbotaoprgm3 = 1; // Indicador de botão de progm3, como ligado
- digitalWrite (bombaTres,LOW); // Liga bomba 3 e Valvula 3
- if(pulseIn(hallsensor3, LOW)) // Se pulso do sensor3 de fluxo for low
- Calc3++; // Incremente contador de quantidade
- }
- else // Se a quantidade envasada for maior que 1000ml
- { // Faça
- Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
- lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print (Calc3*3.0303); // Mostra contador
- lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
- lcd.print ("Deslig."); // Informa sistema desligado
- Calc3 = 0; // Zera variavel contadora
- Flagbotaoprgm3 = 0; // Indicador de botão de progm3, como desligado
- }
- }
- else // Se o botão de carga de1000ml não está pressionado
- {
- if (Flagbotaoprgm3 == 1) // Se indicador de botão de progm3 está ligado
- { // Faça
- digitalWrite (bombaTres,HIGH); // Desliga bomba 3 e Valvula 3
- lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
- lcd.print (" 1000ml "); // Mostra qual sistema está sendo usado
- lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
- lcd.print (Calc3*3.0303); // Mostra contador
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement