Go Down

Topic: Ajuda com arduino (Read 1 time) previous topic - next topic

jtn1609

Oct 28, 2017, 09:10 pm Last Edit: Oct 28, 2017, 09:25 pm by jtn1609
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
       }

bubulindo

Code: [Select]

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???
This... is a hobby.

jtn1609

Code: [Select]

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.

Code: [Select]

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



bubulindo

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.

Code: [Select]


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.
This... is a hobby.

Go Up