Olá galera

Sou novo por aqui e também sou novo em programação de Arduíno.

Bom, enfim, tenho um projeto no qual tenho 2 reservatórios de  água, um inferior e outro superior, no inferior está ligado 2 bombas que servirão para abastecimento do reservatório superior, desejo então que essas bombas ao ser alterada a chave de manual para automático que as bombas fiquem revesando de 10 em 10 segundos até abastecer por completo o tanque superior. 

tanque superior possui sensores de nível minimo e máximo, o inferior somente sensor de nível minimo para proteger as bombas.

Usei esse código abaixo, gostaria da muito ajuda de vcs na elaboração do código, esse dai eu peguei de outro projeto e alterei algumas partes, mas não funcionou.

const int MA = 11; // Manual Automático
const int NBI = 10; // Nível Baixo Reservatório Inferior
const int NBS = 9; // Nível Baixo Reservatório Superior
const int NMS = 8; // Nível Máximo Reservatório Superior
const int BOT_MB1 = 12; // Botoeira de Acionamento MB1
const int BOT_MB2 = 13; // Botoeira de Acionamento MB2
const int MB1 = 2; // Pino de Alimentação MB1
const int MB2 = 3; // Pino de Alimentação MB2
const int ON = LOW; // Indicação de Nível Baixo
const int OFF = HIGH; // Indicação de Nível Alto
int ESTADO_MB1 = 0; // Verifica se MB1 está desligado
int ESTADO_MB2 = 0; // Verifica se MB2 está desligado
unsigned long TEMPO_FALHA = 98000; // 98s

int FALHA = 0; //flag que sinaliza a existencia de falha no sistema de bombeamento 0 = sem //falhas,

unsigned int TEMPO_ALTERNANCIA = 10 * 1000; // 10s
int BOMBA_SELECIONADA = MB1; // Indica a motobomba selecionada
int ENCHIMENTO = 0; // Indica condição de enchimento do reservatório
unsigned long t_inicial = 0; // contagem do tempo inicial
int MODO_MANUAL_REMOTO = 0; // flag que identifica modo manual_remoto 0 = nao esta neste
//modo; 1 = esta no modo manual remoto

unsigned long H_PARTIDA = 0; // Verifica a contagem da hora de partida
unsigned long H_ATUAL = 0; // Verifica a hora atual
unsigned long T_OPERACAO = 0; // Verifica o tempo de operação

void setup() {
pinMode(NBI, INPUT); //10, função utilizada p/ configurar pino digital como entrada
pinMode(NBS, INPUT); // pino 9
pinMode(NMS, INPUT); // pino 8
pinMode(MA, INPUT); // pino 11
pinMode(BOT_MB1, INPUT); // pino 12
pinMode(BOT_MB2, INPUT); // pino 12
pinMode(MB1, OUTPUT); // pino 2, pino digital 2 como saída
pinMode(MB2, OUTPUT); // pino 3
Serial.begin(9600); // taxa de transmissão igual a 9600 bps
// INICIALIZACAO
digitalWrite(MB1,OFF);
digitalWrite(MB2,OFF);


}

void loop() {

while (MA == 1){
if (digitalRead(NBI) == LOW) {//verifica se tem agua no reservatorio inferior
if (digitalRead(NBS) == HIGH) {// verifica se o reservatorio superior esta
//vazio
//PARTE A BOMBA SELECIONADA!!
if (H_PARTIDA == 0) {
H_PARTIDA = (unsigned long) millis(); // calculos para logica de falha
}
//checa_tempo_operacao(); // verifica o tempo de operacao da bomba
//selecionada
H_ATUAL = (unsigned long) millis();
T_OPERACAO = H_ATUAL - H_PARTIDA;
if (T_OPERACAO > TEMPO_FALHA) { // calculos para logica de falha
FALHA = 1;
}
digitalWrite(BOMBA_SELECIONADA,ON);
switch (BOMBA_SELECIONADA) { //atualiza variaveis de estado que sao lidas
// pelo sistema de supervisao
case MB1: ESTADO_MB1 = 1; // pino 2
ESTADO_MB2 = 0;
break;
case MB2: ESTADO_MB2 = 1; // pino 3
ESTADO_MB1 = 0;
break;
}
ENCHIMENTO = 1; // informa que o sistema esta em processo de
//Enchimento
} else if ( (digitalRead(NBS) == LOW) && (digitalRead(NMS) == LOW) &&
(ENCHIMENTO == 1) ) {
if (H_PARTIDA == 0) {
H_PARTIDA = (unsigned long) millis(); // calculos para
//logica de falha
}
H_ATUAL = (unsigned long) millis(); // calculos para logica de
//falha
T_OPERACAO = H_ATUAL - H_PARTIDA; // calculos para logica
//de falha
//checa_tempo_operacao(); // verifica o tempo de operacao da
//bomba selecionada
if (T_OPERACAO > TEMPO_FALHA) { // calculos para logica de
//falha
FALHA = 1;
}
digitalWrite(BOMBA_SELECIONADA,ON);
switch (BOMBA_SELECIONADA) { //atualiza variaveis de
//estado que sao lidas pelo sistema de supervisao
case MB1: ESTADO_MB1 = 1;
ESTADO_MB2 = 0;
break;
case MB2: ESTADO_MB2 = 1;
ESTADO_MB1 = 0;
break;
}
} else {//desliga bombas
digitalWrite(BOMBA_SELECIONADA,OFF);
switch (BOMBA_SELECIONADA) { //atualiza
//variaveis de estado que sao
//lidas pelo sistema de //supervisao
case MB1: ESTADO_MB1 = 0;
ESTADO_MB2 = 0;
break;
case MB2: ESTADO_MB2 = 0;
ESTADO_MB1 = 0;
break;
}
ENCHIMENTO = 0;
H_PARTIDA = 0;
}
}
else { //sem agua no reservatorio inferior
digitalWrite(MB1,OFF); //desliga bombas
digitalWrite(MB2,OFF);
ESTADO_MB1 = 0;
ESTADO_MB2 = 0;
H_PARTIDA = 0;
}
}

while (MA == 0){
if (digitalRead(NBI) == LOW && digitalRead(NMS) == LOW) { //impede acionamento
//das bombas se nao houver agua no reservatorio inferior
if (digitalRead(BOT_MB1) == HIGH) {
delay(500);
if (ESTADO_MB1 == 0) {
digitalWrite(MB1,ON);
ESTADO_MB1 = 1;
}
else {
digitalWrite(MB1,OFF);
ESTADO_MB1 = 0;
}
}
else {
if (digitalRead(BOT_MB2) == HIGH) {
delay(500);
if (ESTADO_MB2 == 0) {
digitalWrite(MB2,ON);
ESTADO_MB2 = 1; }
else {
digitalWrite(MB2,OFF);
ESTADO_MB2 = 0;
}
}
}
}
else { //sem agua no reservatorio inferior
digitalWrite(MB1,OFF); //desliga bombas
digitalWrite(MB2,OFF);
ESTADO_MB1 = 0;
ESTADO_MB2 = 0;
}
}
}

Exibições: 1050

Responder esta

Respostas a este tópico

Oi JF, bom dia,

ainda não analisei seu code para verificar se o mesmo está correto.

Mas o que me chamou a atenção foi o tempo de intercambio das bombas: 10 Segundos??

Acredito que você está utilizando contatores ou relés para acionara as bombas.

Este tempo é muito pequeno. Assim que a bomba atinge a sua estabilidade ela é desligada e ligada a outra.

Na minha opinião, este tempo curto causará desgastes dos contatores (ou relés), e provavelmente aquecimento

das bombas, e um consumo maior de energia elétrica, alem de reduzir a vida útil das bombas.

Rui

 

Bom dia, é porque é um projeto para apresentar no curso, estou utilizando bombas de limpadores de para brisa, o tempo de 10 segundos é o suficiente para demonstrar o funcionamento na apresentação.

Alguém pode me ajudar por favor, preciso de ajuda urgente, devo apresentar esse projeto dia 07/03

Oi JF, bom dia,

corrija esta linhas e teste novamente.

Nestas 2 linhas  :   while (MA == 1)  e   while (MA == 0)  o valor será sempre 11.

Correto é assim: while (digitalRead(MA) == 1)   e  while (digitalRead(MA) == 0) .

Rui

Fiz, mas mesmo assim não funcionou, preciso de algo simples que faça somente o revezamento das bombas até chegar no nível máximo, se tiver algo que possa me ajudar.

Oi JF, bom dia.

Qual curso você está fazendo, que precisa apresentar este projeto?

Rui

Olá Rui, bom dia!

Automação Industrial
porem a escola a qual eu estou fazendo está uma bagunça e estou tendo que fazer esse projeto sem a orientação de ninguém, e como conheço poucas pessoas aqui onde estou a morar, tenho que buscar na net.

é algo simples tipo quando o nível do reservatório superior estiver baixo acionar MB1 e  Alternar com MB2 em um determinado tempo até chegar ao nível máximo.

fiz esse código simples 

const int NBI = 10; // Nível Baixo Reservatório Inferior
const int NBS = 9; // Nível Baixo Reservatório Superior
const int NMS = 11; // Nível Máximo Reservatório Superior
const int BOT_MB1 = 12; // Botoeira de Acionamento MB1
const int BOT_MB2 = 13; // Botoeira de Acionamento MB2
const int MB1 = 2; // Pino de Alimentação MB1
const int MB2 = 3; // Pino de Alimentação MB2

void setup() {

pinMode(NBI, INPUT); //10, função utilizada p/ configurar pino digital como entrada
pinMode(NBS, INPUT); // pino 9
pinMode(NMS, INPUT); // pino 8
pinMode(BOT_MB1, INPUT); // pino 12
pinMode(BOT_MB2, INPUT); // pino 12
pinMode(MB1, OUTPUT); // pino 2, pino digital 2 como saída
pinMode(MB2, OUTPUT); // pino 3


}

void loop() {

if (digitalRead (NBI) == HIGH && digitalRead (NMS) == LOW) {
digitalWrite (MB1,HIGH);
digitalWrite (MB2, LOW);
delay (15000);
digitalWrite (MB2, HIGH);
digitalWrite (MB1, LOW);
delay (15000);
}

else {
digitalWrite (MB1, LOW);
digitalWrite (MB2, LOW);
}
}

As bombas estão alternando de  mas porem não está obedecendo a condição

if (digitalRead (NBI) == HIGH && digitalRead (NMS) == LOW) funciona direto independente de NBI estiver LOW ou NMS estiver HIGH.

Oi JF, boa tarde,

Primeiramente um recomendação:

Evite postar o seu código na área de texto do tópico, pois alem de dificultar a navegação no tópico,

pois o tópico fica muito extenso, o código perde a formatação.

Procure postar como arquivo anexado ou no site www.pastebin.com.

Agora teste este código que anexei veja se atende sua necessidade.

Rui

Anexos

Obrigado Rui pela ajuda e pela recomendação.
Nãodeu certo, vejo que o codigo parece está correto, porem não está obedecendo a condição para acionamento das bombas, mesmo se eu desativar os sensores as bombas ficam sempre ligadas alternando entre si.

JF, bom dia.

post o esquema das ligações deste projeto.

Rui

Segue em anexo...

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço