Medir níveis de tensão impondo limites máximos e Mínimos

Boa noite

Sou iniciante e estou querendo ajuda num projetinho … preciso medir V1=5V V2=5.6V V3=14V V4=18V e V5=22V utilizando as portas analógicas do arduino UNO, porém não sei como colocar a condicional para medir os limites aceitável… tipo V1 tem que ser maior que 4.5V e menor que 5.5V e assim sucessivamente, para valores acima de 5V terei que utilizar divisor de tensão, porém minha dificuldade esta em colocar esses limites … tipo se estiver entre 4.5 e 5.5V aprova e já segue medindo a próxima

Olá,

porém não sei como colocar a condicional para medir os limites aceitável...

Você consegue medir o valor EXATO?

Poste o código com o que já fez até agora, e não esqueça de colocar entre tags [ code][/ code], assim seu código aparece assim:

Código

Seria mais ou menos assim:

[
float V1 = 5.0;
float r1 = 100000;
float r2 = 10000;
void setup()
{
Serial.begin(9600);
Serial.println(“VOLTIMETRO COMPARADOR”);
Serial.print((int)(V1 / (r2 / (r1 + r2))));
Serial.println(“V”);

delay(2000);
}
void loop() {
float v = (analogRead(0) * V1) / 1024.0;
float Vmicro = v / (r2 / (r1 + r2));
if (Vmicro>= 4.5 || Vmicro<=5.5)
{
Serial.print(“Tensao: “);
Serial.print(Vmicro);
Serial.println(” V”);
Serial.println(“APROVADO”);
delay (1000);
}
else
{
Serial.print(Vmicro);
Serial.println(“REPROVADO”);
}
}

]

Não testei seu código, porém a comparação:

if (Vmicro>= 4.5 || Vmicro<=5.5)

Já testa dentro de dois limites.
O que o código que você postou faz de diferente em relação ao resultado esperado?

Perguntas:
1 - Você está tentando fazer o Arduino ler e comparar várias entradas analógicas ao mesmo tempo?
Cada uma com um valor de tensão?
2 - OU após cada leitura ele prossegue para a próxima, exemplo: mediu 5V vai para a próxima medir 5.6V?

Sim, ele está conseguindo ler, porém se eu colocar valores fora do range estabelecido nessa condicional , ele aprova :confused: , dá a entender que essa condição , não está surtindo efeito, eu preciso que ele verifique as tensões em cada entrada analógica ... uma por vez ...eu pretendo dividir o teste em passos.... tipo passo01=V1 passo02=V2 etc .... é possível fazer com que ele meça todas as tensões ao mesmo tempo? utilizando portas analógicas diferente é claro

Desculpe não perceber, na verdade a sua comparação está errada:

Em vez de:

if (Vmicro>= 4.5 || Vmicro<=5.5)

use:

if (Vmicro>= 4.5 && Vmicro<=5.5)

Note o uso de && (lógica e) ao invés de || (lógica ou).

Explicação:
No seu if() atual é aprovado quando é maior ou igual a 4.5 OU menor ou igual a 5.5, ou seja, todos os valores possíveis!

Teste com o valor zero > é menor que 5.5, então aprovado.
Teste com 10 > é maior que 4.5, então aprovado.

Altere de acordo e teste

é possível fazer com que ele meça todas as tensões ao mesmo tempo?

Sim, utilizando millis() (veja o exemplo: Blink Without Delay), porém como o Arduino tem apenas um processador, não será realmente em “pararelo”, porém para o usuário será tão rápido que parecerá.

LEIA o exemplo e nos traga suas dúvidas e dificuldades

Funcionou perfeitamente ... muito obrigado.... próximo passo é colocar uma interrupção dentro do loop .. não tenho ideia de como fazer rsrsrs.. quero que no meio do loop eu acione um botão e o arduine pare de executar o código, executa o resto as tarefas contodas no loop após acionar novamente o mesmo botão.

DiogoFarias:
Funcionou perfeitamente ... muito obrigado.... próximo passo é colocar uma interrupção dentro do loop .. não tenho ideia de como fazer rsrsrs.. quero que no meio do loop eu acione um botão e o arduine pare de executar o código, executa o resto as tarefas contodas no loop após acionar novamente o mesmo botão.

Quote

é possível fazer com que ele meça todas as tensões ao mesmo tempo?

Sim, utilizando millis() (veja o exemplo: Blink Without Delay), porém como o Arduino tem apenas um processador, não será realmente em "pararelo", porém para o usuário será tão rápido que parecerá.

LEIA o exemplo e nos traga suas dúvidas e dificuldades

Você leu o exemplo e tentou algo?

Olá Giov014 ... eu declinei dessa ideia de medir as tensões "ao mesmo tempo" ... rsrs minha "briga" agora é outra ... estou tentando da uma pausa no meio do loop coloquei um while(1) ele da uma pausa, porém não sei sair dessa pausa rsrsrs, quero que quando eu acione um botão específico o loop retorne de onde parou, tipo ... eu terei um botão para dar o start ... então ele inicia o loop contando passos.. chegando no passo 4 ele pára, e espera eu acionar um botão para continuar o loop ... desculpa a demora para dar o outro feedback ...

DiogoFarias:
Olá Giov014 ... eu declinei dessa ideia de medir as tensões "ao mesmo tempo" ... rsrs minha "briga" agora é outra ... estou tentando da uma pausa no meio do loop coloquei um while(1) ele da uma pausa, porém não sei sair dessa pausa rsrsrs, quero que quando eu acione um botão específico o loop retorne de onde parou, tipo ... eu terei um botão para dar o start ... então ele inicia o loop contando passos.. chegando no passo 4 ele pára, e espera eu acionar um botão para continuar o loop ... desculpa a demora para dar o outro feedback ...

Poste aqui no fórum o que conseguiu fazer até agora, com esse "while(1)" e vamos lhe auxiliar.
Sem ver o código ou explicação, no momento não sei o que são esses "passos".

Eu coloquei essa sentença

[

while (digitalRead(prossiga)==HIGH)
{
}
if (digitalRead(prossiga)==LOW)

]

Então quando chegar nessa linha ele pára se o usuário acionar o botão prossiga ele realiza o resto das ações.

Eu coloquei um Pull-up no pino referente ao botão prossiga do Arduino

A tarefa mais complexar é medir a frequência de 1Khz, preciso checar a amplitude e a frequência de um sinal de áudio....

Este último post foi muito pouco informativo.
Nos ajude a ter ajudar, poste o código completo.

...
while (digitalRead(prossiga)==HIGH)
{
}
...

Isto vai fazer o código ficar travado enquanto o botão não estiver pressionado (com pull-up), porém como não tem o código completo, o "bounce" mecânico do botão pode ser um problema (solucionado com lógicas "debounce").

A tarefa mais complexar é medir a frequência de 1Khz, preciso checar a amplitude e a frequência de um sinal de áudio....

Para começar, pode usar o analogRead() e digitalRead(), porém pode ter problemas com a velocidade de coleta de amostra do analogRead() com a configuração padrão.
Já pesquisou sobre? Já tentou algo?