Como fazer pra meu sensor de fluxo ligar um motor dc no Arduíno? Sou leigo nesse assunto, já vi diversos artigos e não consigo progredir com o projeto... Sei que o sensor a cada pulso conta 2.25 mililitros... minha duvida é se com uma condição if tem como ligar o motor?
Ex: vazao = pulso * 0.00225;
if (vazao == 1)
{
liga motor
delay(3000);
desliga motor
}
float vazao = pulso * 0.00225;
if (vazao > 50)
{
digitalWrite(pino_motor, HIGH);
delay(3000);
digitalWrite(pino_motor, LOW);
}
Queres ligar o motor só por 3 segundos???
bubulindo:
float vazao = pulso * 0.00225;
if (vazao > 50)
{
digitalWrite(pino_motor, HIGH);
delay(3000);
digitalWrite(pino_motor, LOW);
}
Queres ligar o motor só por 3 segundos???
Fiz algumas mudanças e incrementei algumas coisa... estou esperando o material chegar (sensor de nível, motores, etc) gostaria de saber se esta correto ou tem erros no código.
int Pulso; //Variável para a quantidade de pulsos
int j = 0; //Variável para contagem
float vazaoagua; //Variável para armazenar o valor em L
int pinAgua = 11; //Variável para o nivel
int pinBomba = 12; //Variável para a bomba
int pinRegistro = 3; //Variável para o registro
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(0, incrpulso, RISING); //Configura a porta digital 2
pinMode(pinAgua, INPUT);
pinMode(pinBomba, OUTPUT);
pinMode(pinRegistro, OUTPUT);
}
void loop ()
{
pulso = 0; //Começa do 0 variável para contar os giros das pás internas
vazao = pulso * 0.00225; //converto os pulsos em L
if (vazao > 1) //fecha o registro
{
digitalWrite(pinRegistro, HIGH);
delay(500);
digitalWrite(pinRegistro, LOW);
}
if (digitalRead(pinAgua) == HIGH) {
digitalWrite(pinBomba, LOW);
}
else {
digitalWrite(pinBomba, HIGH);
}
}
void incrpulso ()
{
pulso++;
}
Na minha opinião tens um erro ao inicializares a variável pulso dentro do loop.
Depois o teu cálculo não está a calcular vazão... está a calcular quantidade de água. Vazão é calculada dividindo a quantidade de água por uma unidade de tempo.
unsigned long pulso = 0; //Começa do 0 variável para contar os giros das pás internas
unsigned long tempoAnterior = 0;
void loop (){
if (millis() - tempoAnterior >= 60000) { //litros por minuto
vazao = pulso * 0.00225; //converto os pulsos em L
tempoAnterior = millis();
}
if (vazao > 1) //fecha o registro
{
digitalWrite(pinRegistro, HIGH);
delay(500);
digitalWrite(pinRegistro, LOW);
}
if (digitalRead(pinAgua) == HIGH) {
digitalWrite(pinBomba, LOW);
}
else {
digitalWrite(pinBomba, HIGH);
}
}
Assim de minuto a minuto recebes a vazão de água em litros/minuto. Podes aumentar a frequência a que o valor é calculado, mas terás de corrigir o cálculo. Por exemplo, podes calcular o valor de 30 em 30 segundos, mas tens de multiplicar a variável vazao por 2 para continuares com litros por minuto.
Me desculpe, quero saber a quantidade de água que passara pelo sensor, assim quando a quantidade X de passar por ele acionar a um motor que funcionara como registro. Infelizmente já pesquisei em varias fontes, mas não estou tendo capacidade suficiente de programar isso
Ligas o sensor a um pino que use interrupções (como o D2 e D3).
Configuras a interrupção nesse pino para quando o sinal passar de zero para um aumentar uma variável do tipo unsigned long.
A quantidade que passou pelo sensor vai ser a variável que conta os pulsos vezes 2.25 mililitros.
Outra maneira é na tua interrupção adicionares 2.25 a uma variável do tipo float.