[RESOLVIDO] Montagem/ Programação Sensor de nivel + Arduino

Estou programando meu TCC, que seria controlar a distribuição de água de um condomínio a partir do arduino, com sensores de nivel (modelo boia), com um sensor consegui programar tranquilamente, mas com dois não. Não sei se me equivoquei na montagem ou na programação.

Com um Sensor consegui fazer com que a bomba Ligasse e desligasse, mas, com dois a bomba continuou trabalhando do mesmo jeito quando programada com apenas um sensor, alguém tem ideia onde posso ter errado? Grato.

Exibições: 4802

Responder esta

Respostas a este tópico

Olá Lucas,

você pode receber ajuda se postar no www.pastebin.com ou aqui, o seu código, assim as pessoas podem interagir e opinar, analisar,  poste também o circuito ou esquema elétrico que tenha, a mão livre, desenhado com software, rabiscado, mas poste informação, sem essas coisas básicas ninguém poderá oferecer a ajuda que você solicita.

Boa sorte.

Abs.

Obrigado Carlos, irei postar a programação, já o esquema eletrico, não tenho em mãos, apenas observei um na internet e tomei-o como base.

PROGRAMAÇÃO.

const int portasensorA = 4;
const int portabomba = 2;
const int portasensorB = 7;
void setup()
{

pinMode(portasensorA, INPUT);
pinMode(portabomba, OUTPUT);
pinMode(portasensorB, INPUT);
digitalWrite(portasensorA, HIGH);
digitalWrite(portabomba, HIGH);
digitalWrite(portasensorB, HIGH);
}

void loop()
{
int A = digitalRead(portasensorA);

if

(digitalRead(portasensorA)== HIGH) // TEM AGUA
digitalWrite(portabomba, LOW); // LIGA BOMBA

else
digitalWrite(portabomba, HIGH); // DESLIGA BOMBA
delay(5000);
digitalWrite(portabomba, LOW); // LIGA BOMBA
delay(5000);


int B = digitalRead(portasensorB);

if

(digitalRead(portasensorB)== LOW) // N TEM AGUA
{digitalRead(portasensorA)== LOW; // N TEM AGUA

digitalWrite(portabomba, HIGH); // DESLIGA BOMBA

}

else
digitalWrite(portabomba, LOW); // LIGA BOMBA

}

Circuito que tomei como base.

Fiz um vídeo, veja se isso que você deseja, se for prosseguimos.

https://www.youtube.com/watch?v=Ve1qtQ1amgM&feature=youtu.be

Abs.

Carlos boa noite, será que a função switch case que vcs me ensinaram não resolve?

É isso mesmo Carlos, exatamente o que pensei para meu projeto. Tomarei este vídeo quando for montar o mesmo.

Oi Leonardo,

Poderia sim, mas. Ideia é ensinar o que tem de errado no codigo dele, para que ele aprenda, se quiser sinta-se a vontade para colaborar, analise onde tem erros no codigo dele e aponte uma soluçao que mesmo possa implementar, nao obstante pode adaptar seu codigo mencionado para sjudalo na compreesao, desculpe possiveis erros estou teclsndo do iphone.

Um abraço!
Ok abraços.

Embora o Rui já enviou o seu código corrigido, mas como  o Leonardo menciona aqui, é bom você ver a mesma variante com o código feito por ele, mas adaptado ao seu caso, sempre é bom para estudar.

int portasensorA = 6; // Caixa superior
 int portasensorB = 7; // Cisterna inferior
 int Bomba = 9; // Bomba de agua
 
 byte aciona = 0;//

 void setup()
 {
 pinMode(portasensorA, INPUT);
 pinMode(portasensorB, INPUT);
 pinMode(Bomba, OUTPUT);

 }

 void loop()
 {
 int leitura1 = digitalRead(portasensorA);
 int leitura2 = digitalRead(portasensorB);


 if (leitura1 == LOW && leitura2 == LOW) // Caixa cheia, Cisterna cheia, Bomba desligada
 {
 aciona = 0;
 }
 else if (leitura1 == HIGH && leitura2 == HIGH) // Caixa sem agua, Cisterna com agua, Bomba liga
 {
 aciona = 1;
 }
 else if (leitura1 == HIGH && leitura2 == LOW) // Caixa sem agua, Cisterna sem agua, Bomba não liga
 {
 aciona = 2;
 }
 else if (leitura1 == LOW && leitura2 == HIGH) // Caixa com agua, Cisterna com agua Bomba não liga
 {
 aciona = 3;
 }

 switch (aciona)
 {
   case 0:
  
 aciona = 0;// aciona 0
 delay(1000);
 digitalWrite(Bomba, LOW);
 break;
 
 case 1:

 aciona = 1;// aciona 1
 delay(1000);
 digitalWrite(Bomba, HIGH);

 
 break;
 
  case 2:

 aciona = 2;//aciona2
 delay(1000);
 digitalWrite(Bomba, LOW);
 break;
 
  case 3:

 aciona = 4;//aciona3
 delay(1000);
 digitalWrite(Bomba, LOW);

 break;

  }
 }

O principal desde meu ponto de vista é não copiar e colar, e sim estudar, não se esqueça que quando tiver que colocar a mão na massa não vai pedir ajuda em fórum algum, vai ter que resolver na hora, por isso estude sempre, e verifique onde estavam seus erros analisando o código do Rui.

Grande abraço!

Oi Lucas, testa este código aí e se ficar ok poe a Palavra RESOLVIDO antes do inicio do título do Post,

Coloquei umas linhas para acender o LED do arduino para facilitar a visualização.

Se quizer pode tirar ou comentar estas linhas.

Rui

const int portasensorA = 4; // Sensor superior Se fechado bomba fica ligada direto
const int portasensorB = 7; // Sensor inferior Se fechado bomba fica ligada a cada 20 segundos, se Aberto bomba parada
const int portabomba = 2; // Controle da bomba
const int Monitor = 13; // Monitor

void setup()
{
pinMode(portasensorA, INPUT); // Port do sensor A como entrada
pinMode(portasensorB, INPUT); // Port do sensor B como entrada
pinMode(portabomba, OUTPUT); // Port controle da bomba com saída
pinMode(Monitor, OUTPUT); // Port Monitor com saída

digitalWrite(portasensorA, HIGH); // Puul-Up Entrada sensor A
digitalWrite(portasensorB, HIGH); // Puul-Up Entrada sensor B
digitalWrite(portabomba, HIGH); // Desliga a Bomba
digitalWrite(Monitor, LOW); // Desliga monitor
}
void loop()
{
if (digitalRead(portasensorA)== HIGH) // TEM AGUA
{
digitalWrite(portabomba, LOW); // LIGA BOMBA
digitalWrite(Monitor, HIGH); // Liga monitor
}
else
{
digitalWrite(portabomba, HIGH); // DESLIGA BOMBA
digitalWrite(Monitor, LOW); // Desliga monitor

delay(1000);
digitalWrite(portabomba, LOW); // LIGA BOMBA
digitalWrite(Monitor, HIGH); // Liga monitor
delay(1000);

while (digitalRead(portasensorB)== LOW) // N TEM AGUA
{
digitalRead(portasensorA)== LOW; // N TEM AGUA
digitalWrite(portabomba, HIGH); // DESLIGA BOMBA
digitalWrite(Monitor, LOW); // Desliga monitor
}
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço