-
Posts
4 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Leonardo C. Lima
-
-
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?
-
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?
#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);
} -
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?
#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);
}
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
Problemas com realização de projeto
em Eletrônica
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!