Estou com um projeto de Hidrômetro remoto, onde o Arduino irá ler os valores de um sensor anexado a um hidrômetro. Para simular no arduino antes de implementar o sensor de vez, decidi utilizar um led que faz uma contagem de pulsos (vezes que ele liga) e é controlado por um botão. Além disso o projeto está sendo simulado na plataforma SimulIdle, e é aí que entra minha dúvida. Para começar a introduzir o sensor, que eviará pulsos ao arduino, implementei um gerador de ondas quadradas (clock) no círcuito. Gostária de saber como posso fazer para que o meu código do arduino leia essas alterações e a cada pulso contabilize mais um valor, e quando chegar em 10 pulsos, reinicie a contagem. Além disso, cada pulso indica a passagem de 0,001L pelo hidrômetro, e eu gostaria de que o meu código fizesse a soma.
É minha primeira vez utilizando o fórum e gostaria de saber como faço para adicionar imagens, assim eu consigo mostrar meu círcuito também!
Obrigada pela atenção, qualquer dúvida sobre o projeto estou a disposição
const int botao = 2;
const int led = 13;
int contador = 0;// Define o estado inicial de contador como 0
boolean state = 0; // Cria uma condição de estado booleano
void setup() {
pinMode(13, OUTPUT); // Define o pino do LED como saída
pinMode(2, INPUT_PULLUP); // Define o pino 2 como entrada
Serial.begin(9600);
}
void loop() {
if (!digitalRead(botao)) // Se o botão é lido
state = !state; // Inverto o estado do botão
if (state) { // If com estado do botão inalterado
digitalWrite(led, HIGH);
delay (50);
digitalWrite(led, LOW); // Cria o pulso do led
delay(50);
contador++
if (contador>10)
Serial.print
Serial.print("");
Serial.println (contador);// Imprime o contador no monitor serial
}
else {
digitalWrite(led, LOW); // Caso aconteça algo além do if
}
while (!digitalRead(botao)) {} // Aguarda soltar o botão
delay(50);
}
Para fazer upload de imagem voce tem opções.
Usar o copy/paste copiando a imagem e colando na area de replay ou clicando
no icone indicado pelo circulo vermelho.
No seu projeto que dispositivo será usado para ler o hidrômetro?
Qual a frequência destes pulsos vindo do hidrômetro? (min e max).
Não uso este simulador que voce citou, mas uso o Wokwi que é online.
Vou similar o seu código nele.
PS: existem erros de sintaxe no seu código, faltam ; no final de 2 linhas.
Da forma que está não compila.
Olá, obrigada
Vou utilizar um sensor chamado Sirius ACBR da sensorLab, ele consegue emitir até 7 pulsos por segundo (max) e nao tem uma minima.
Fiz umas correções no código, pois eu quero que a cada pulso simbolize +0,001 m^3. Entretando, a soma não está funcionando da forma esperada, ao invés de somar na ultima casa de 0,001 ele soma na primeira, então fica 1,001. Vou tentar arrumar hoje durante o dia.
Obrigada novamente
const int botao = 2;
const int led = 13;
float contador = 0.001;// Define o estado inicial de contador como 0.001
boolean state = 0; // Cria uma condição de estado booleano
void setup() {
pinMode(13, OUTPUT); // Define o pino do LED como saída
pinMode(2, INPUT_PULLUP); // Define o pino 2 como entrada
Serial.begin(9600);
}
void loop() {
if (!digitalRead(botao)) // Se o botão é lido
state = !state; // Inverto o estado do botão
if (state) { // If com estado do botão inalterado
digitalWrite(led, HIGH);
delay (1000);
digitalWrite(led, LOW); // Cria o pulso do led
delay(1000);
Serial.println (contador,3);// Imprime o contador no monitor serial
contador++,3;
}
else {
digitalWrite(led, LOW); // Caso aconteça algo além do if
}
while (!digitalRead(botao)) {} // Aguarda soltar o botão
delay(50);
}
Sem olhar para o resto, você precisa trocar essa linha aqui:
contador++,3;
por
contador+=0.001;
Há outros problemas com o seu código. Você conseguiu progredir no seu projeto?
Olá, desculpe a demora! Consegui progredir sim, obrigada pela ajuda atualmente fiz diversas mudanças no código, vou anexar ele nessa mensagem, por mais que no momento eu nao esteja com nenhuma dúvida e o código funcionce, seria super legal receber algumas dicas do que melhorar
const int sensor = 13; // Pino onde o sensor está conectado
const int bomba = 2; // Pino onde a bomba está conectada
float valorHidrometro = 2.705; // Valor inicial do hidrômetro
float volume = 0; // Variável para armazenar o cálculo do volume
float vazaoinstantanea = 0; // Variável para armazenar o cálculo da vazão
float duracaoMinuto = 0;
unsigned long tempoInicio = 0; // Variável para armazenar o início da contagem de tempo
unsigned long tempoFim = 0; // Variável para armazenar o fim da contagem de tempo
unsigned long duracao = 0; // Duração do pulso
extern volatile unsigned long timer0_millis;
void setup() {
pinMode(sensor, INPUT); // Configura o pino do sensor como entrada
pinMode (bomba, OUTPUT); // Configura o pino bomba como saída
Serial.begin(9600); // Inicializa a comunicação serial para monitorar o valor
}
void loop() {
unsigned long tempoAtual = millis(); // Pega o tempo atual em milissegundos
// Detecta o início do pulso
if (digitalRead(sensor) == HIGH && tempoInicio == 0) {
tempoInicio = millis(); // Marca o tempo de início do pulso
ultimoPulso = tempoAtual; // Atualiza o último pulso detectado
}
// Detecta o final do pulso
if (digitalRead(sensor) == LOW && tempoInicio > 0) {
duracao = tempoAtual - tempoInicio; // Calcula a duração do pulso em milissegundos
noInterrupts();
timer0_millis = 0; // Reset do millis()
interrupts();
valorHidrometro += 0.001; // Incrementa o valor do hidrômetro a cada pulso
volume = valorHidrometro * 1000; // Calcula o volume
duracaoMinuto = duracao / 6000.0; // Converte a duração para segundos e calcula a vazão
if (duracaoMinuto > 0) {
vazaoinstantanea = volume / duracaoMinuto; // Calcula a vazão
}
// Exibe os valores no monitor serial
Serial.print("Valor do Hidrometro: ");
Serial.println(valorHidrometro, 3); // 3 casas decimais
Serial.print("Volume: ");
Serial.println(volume, 1); // 1 casa decimal
Serial.print("Duracao (s): ");
Serial.println(duracaoMinuto, 5); // 3 casas decimaiss
Serial.print("Vazao: ");
Serial.println(vazaoinstantanea, 3); // 3 casas decimais
tempoInicio = 0;
duracao = 0;
duracaoMinuto = 0;
delay(1000); // Atraso de 1 segundo
}
// Verifica se passou mais de 5 segundos desde o último pulso
if (tempoAtual - ultimoPulso > 5000) {
// Reset dos valores para 0
volume = 0;
duracaoMinuto = 0;
vazaoinstantanea = 0;
// Exibe que os valores foram zerados
Serial.println("Nenhum pulso detectado nos ultimos 5 segundos:");
Serial.print("Valor do Hidrometro: "); // Exibe os valores no monitor serial
Serial.println(valorHidrometro, 3); // 3 casas decimais para o hidrômetro
Serial.print("Volume: ");
Serial.println(volume, 1); // 3 casas decimais para o volume
Serial.print("Duracao (m): ");
Serial.println(duracaoMinuto, 3); // Duração do pulso em segundos
Serial.print("Vazao: ");
Serial.println(vazaoinstantanea, 3); // 3 casas decimais para a vazão
}
}
Qualquer dúvida é só me chamar
Olá!
Pequena observação:
0,001L = 0,000001 m^3 e não 0,001 m^3