Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal,

 

Fiz o teste desse sistema no proteus e parece ter funcionado, mas ao montar, o relé permanece ligando a bomba, será problema no código ou nessa montagem de circuito?

 

5b12ba172e0dd_WhatsAppImage2018-05-27at23_52_07.thumb.jpeg.7f40d4bbcf41456f59a4fcfa356e196a.jpeg

 

#include <LiquidCrystal.h>
#include <SPI.h>

int BOMBA = 3; 
int BUZZER = 4; 
int LedVerde = 5;
int LedAmarelo = 6; 
int LedVermelho = 7; 
int SENSOR_CAIXA1 = A0; int SENSOR_CAIXA2 = A1; 
int SENSOR_RESERVATORIO1 = A2; int SENSOR_RESERVATORIO2 = A3;  
double cont = 0;
LiquidCrystal lcd(8,9,10,11,12,13); 

void setup() {

  pinMode(LedVermelho,OUTPUT);
  pinMode(LedAmarelo,OUTPUT);
  pinMode(SENSOR_CAIXA1,INPUT);
  pinMode(SENSOR_CAIXA2,INPUT);
  pinMode(SENSOR_RESERVATORIO1,INPUT);
  pinMode(SENSOR_RESERVATORIO2,INPUT);
  pinMode(BOMBA,OUTPUT);
  pinMode(LedVerde,OUTPUT);
  pinMode(BUZZER,OUTPUT);
  lcd.begin(16, 2);
  delay(100);
  
}

void EscreverLCD() { // Escrever na primeira linha do LCD.

    lcd.clear();
    lcd.setCursor(0,0);
}

void ModuloALOFF() { // Módulo de alerta desligado.

  digitalWrite(LedVerde,LOW);
  digitalWrite(LedAmarelo,LOW);
  digitalWrite(LedVermelho,LOW);
  digitalWrite(BUZZER,LOW);
  
}

void ModuloALVERDE(){ // Módulo de alerta com bomba com apenas o LED verde on.

  digitalWrite(LedVerde,HIGH);
  digitalWrite(LedAmarelo,LOW);
  digitalWrite(LedVermelho,LOW);
  digitalWrite(BUZZER,LOW);
  digitalWrite(BOMBA,LOW);
}
void ModuloALVER(){ // Módulo de alerta com bomba com apenas o LED vermelho on.

  digitalWrite(LedVerde,LOW);
  digitalWrite(LedAmarelo,LOW);
  digitalWrite(LedVermelho,HIGH);
  digitalWrite(BUZZER,LOW);
  digitalWrite(BOMBA,LOW);
}

void CaixaCheia() { // Caixa cheia.

  if (digitalRead(SENSOR_CAIXA2)==HIGH) { // Condição para ativamento do LED VERDE e caixa de texto no display LCD: "Caixa cheia".
    ModuloALVERDE();
    EscreverLCD();
    lcd.print("Caixa cheia");
    delay(2000);
  }
}

void CaixaVazia(){ // Caixa vazia

  if( digitalRead(SENSOR_CAIXA2)==LOW && digitalRead(SENSOR_CAIXA1)==LOW ){ 
    EscreverLCD();
    lcd.print("Caixa vazia");
  }
}

void TempoReabastecido(){ // Indica o tempo final de reabastecimento da caixa completa.

  for(;;) {
    delay(1000);
    cont = cont +1;
    if( digitalRead(SENSOR_CAIXA2)==HIGH && digitalRead(SENSOR_CAIXA1)==HIGH ){ // Condição que indica o tempo da caixa reabastecida completamente.
      ModuloALVERDE();
      cont = cont/60;
      EscreverLCD();
      lcd.print("C. Reabastecida");
      lcd.setCursor(0,1);
      lcd.print("tempo: ");
      lcd.print(cont);
      lcd.print(" min");
      delay(1000);
      break;
    }
    if( digitalRead(SENSOR_RESERVATORIO1)==LOW) { // Condição que para o reabastecimento.
      ModuloALVER();
      EscreverLCD();
      lcd.print("Reserva Vazia");
      delay(1000);
      break;
    }
  }
}

void Reabastecer() { // Ativa a bomba para reabastecer

  EscreverLCD();
  lcd.print("Reabastecendo...");
  digitalWrite(LedAmarelo,HIGH);
  digitalWrite(BOMBA,HIGH);
  digitalWrite(BUZZER,HIGH);
  digitalWrite(LedVerde,LOW);
  digitalWrite(LedVermelho,LOW);
}

void AbastecerCaixa(){ // Liga a bomba para abastecer a caixa.

  cont = 0;
    if( digitalRead(SENSOR_RESERVATORIO2)==HIGH){
      Reabastecer();
      TempoReabastecido();
  }
}

void VerificarNivel() { // Verifica o nivel do reservatorio e da caixa informando no display LCD. 

  CaixaCheia();
  CaixaVazia();
  if (digitalRead(SENSOR_RESERVATORIO2)==HIGH) { // Condição para caixa de texto no display LCD: "Reservatorio Max". 
    EscreverLCD();
    lcd.print("Reservatorio Max");
  }
  else if ((digitalRead(SENSOR_RESERVATORIO2)==LOW) && digitalRead(SENSOR_RESERVATORIO1)==HIGH) { // Condição para caixa de texto no display LCD: "Reservatorio Min".
    EscreverLCD();
    lcd.print("Reservatorio Min");
  }
  delay(1000);
}

void VerificaSensores() { // Verifica todos os sensores e se é necessário reabastecer.

  VerificarNivel();
  if( digitalRead(SENSOR_RESERVATORIO1)==LOW){ // Condição que indica que a reserva está vazia.
    ModuloALVER();
    EscreverLCD();
    lcd.print("Reserva Vazia");
    delay(2000);
  }
  else
  {
    if( digitalRead(SENSOR_CAIXA2)==LOW && digitalRead(SENSOR_CAIXA1)==LOW ){ // Condição que leva a outra função para o abastecimento caso a caixa esteja vazia.
      ModuloALOFF();
      EscreverLCD();
      lcd.print("Caixa vazia");
      AbastecerCaixa();
    }
    else if (digitalRead(SENSOR_CAIXA2)==HIGH  && digitalRead(SENSOR_RESERVATORIO2)==HIGH) { // Condição que verifica os sensores máximos da caixa e do reservatório e se estiverem em nível alto, sistema estará estável
      ModuloALVERDE();
      EscreverLCD();
      lcd.print("Sistema Estavel");
    }
    else if (digitalRead(SENSOR_CAIXA2)==LOW) { // Condição para verificar se a caixa está cheia e se é póssivel reabastecer.
      cont = 0;
      Reabastecer();
      TempoReabastecido();
    }
    delay(3000);
  }
}

void loop() { // Faz o loop do programa  verificando sempre pela função verificaSensores.

  VerificaSensores();
  delay(100);
}

Postado

Está  ativo na porta 3 do arduino, todas funções  do código  e que aparece no LCD estão  funcionando, só  a bomba que fica ligada, testei com outro código  e sem fazer o loop e ela permanece ligada, o que pode ser?

Postado

Programa feito com subrotinas,  legal. Problema: não sei onde está a parte do programa principal que coordena tudo isso, cada programador tem seu estilo, sem saco para entender o seu. Programa com mais comentários são úteis não só para si como para uma segunda pessoa que venha a analisar o código.

  • Curtir 1
Postado

Tranquilo Sérgio. Isso estava ocorrendo, pois a bomba estava ativando com nível LOW e desligando com nível HIGH, já fiz o reajuste nas demais pendências e deu tudo certo, obrigado!

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!