Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Leonardo C. Lima

Problemas com realização de projeto

Recommended Posts

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);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de olhar as coisas complicadas verifique as simples. O módulo relé possui na entrada 3 fios: Vcc, GND e comando. O comando está ativado?

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×