Voltímetro com Arduíno UNO - HELP

if (voltagem > 1,92) {
    digitalWrite(led, HIGH);
}

Algo assim?

Preciso de algo quando eu acionar um botão por exemplo entrada 9 verificar se é > que 1;92 e entao escrever no display motor ruim ou baixa isolação

Quando eu presiono entrada 9 é um push botão que tem duas pontas de prova que injetão no motor uma tensão de 400v e tem um circuito que filtra essa tensão para 1;92

estou usando um display 16 02 ja estou consegui ler a tensão na entrada A0

Valeu bubulindo

1,92V ac ou dc?

if (digitalRead(botao) == LOW) {
   //faxz o que tem a fazer...
}

DC

Permita-me fazer uma pergunta, sabes como trabalhar com botões (a parte de eletrônica e ou a parte de programação)?

Cada tensão será medida por uma porta analógica (total de 4) e terás 4 botões, um para cada porta?

Vê se é isso que queres (peguei minha resposta para outro post e adaptei, não testei o código, mas a ideia é mais ou menos essa rs):

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int buttonpin=6; //pino 6
int oldbuttonstate=0; //guarda o estado anterior do botão

void setup(){
  pinMode(buttonpin,INPUT);
  Serial.begin(9600);
}

void loop(){ 
  int buttonstate = digitalRead(buttonpin);  
  if(buttonstate != oldbuttonstate){ //Só envia quando o estado do botão muda
    int Valor = analogRead(A0);
    float voltagem = Valor * (5.0 / 1023.0);
    
    if(voltagem > 1.92f){
      lcd.setCursor(0, 1);
      lcd.print("motor porta 6 ruim");
    }
    oldbuttonstate=buttonstate;  //Guarda o estado anterior, pois para este estado a mensagem já foi enviada
  }
}

lembrando que você deve usar um resistor pulldown ou usar o pullup do arduino para evitar oscilação na porta de entrada.

A parte eletronica esta montada este circuito que você me passou ja tenho montado ..............no momento estou com o display1602 funcionando fazendo leitura na porta A0 siimulando com uma fonte de 5V com um potenciomentro de 10k variando a tensão e verificando no multimentro com o display que tem um erro de +-10% , fica as duvidas:

1- se preciso de 4 portas para entradas de tenões e 4 para sãídas nos display.
2-preciso quando acionar que o motor esta ruim acionar uma porta de saida que liga um led vermelhor se puder me ajudar desde ja agradeço
3-como posto fotos do projeto aqui ?

Boa tarde Junior.
Pelo que eu entendi você quer verificar a tensão de isolamento de um motor e que no display mostre se ele está bom ou ruim.
Dúvidas:
1º Sendo que a tensão quando for maior que 0,21V ele já deve acusar o defeito?
2º A tensão entrará sempre pelo mesmo pino?
Se as respostas para todas as perguntas acima foram sim, então vamos lá:

Você liga a tensão no pino A0 , o botão no pino 7, led vermelho e buzzer no pino 8, led verde pino 9.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int pinLedVerde = 9;
int pinLedVermelho = 8;
int pinButton = 7;
int Valor = 0;
float voltagem= 0;


void setup() {
  lcd.begin(16, 2);
  lcd.print("tensao");
  pinMode(pinLedVerde, OUTPUT);
  pinMode(pinLedVermelho, OUTPUT);
  pinMode(pinButton, INPUT);
}

void loop() {
  
  if (digitalRead(pinButton)==HIGH) {
    Valor = analogRead(A0);
    voltagem = map(Valor, 0,1023, 0,5);
    if (valor>0.21) {
        digitalWrite(pinLedVerde, LOW);
        lcd.setCursor(0, 1);
        lcd.print(voltagem+" Mot. c/prob");
        digitalWrite(pinLedVermelho, HIGH);//liga o buzzer e o led vermelho
    } else {
       digitalWrite(pinLedVermelho, LOW);//desliga o buzzer e o led vermelho
       digitalWrite(pinLedVerde, HIGH);
       lcd.setCursor(0, 1);
       lcd.print(voltagem+" Motor bom");
    }
 } else {
     lcd.setCursor(0, 1);
     lcd.print("Aguardando comando");
    digitalWrite(pinLedVermelho, LOW);
    digitalWrite(pinLedVerde, LOW);
  }
}

Faz um teste que eu ainda não testei, qualquer coisa posta aqui de novo.

Não sei se entendi bem quais são as dúvidas, por favor, me diga se eu me equivocar nas respostas abaixo.

junior0346:
1- se preciso de 4 portas para entradas de tenões e 4 para sãídas nos display.

se desejas ler 4 tensões (quatro motores) simultaneamente, precisarás de 4 entradas.
para o LCD já tens o número de portas necessárias, afinal já estás a usar, a não ser que queiras um LCD para cada motor, mas ai a quantidade de portas em um UNO será insuficiente, obrigando-o a usar shiftregisters ou um arduino mega.

Podes colocar os 4 resultados em um único LCD, tipo:

M1: OK M2: RUIM
M3: RUIM M4: OK

junior0346:
2-preciso quando acionar que o motor esta ruim acionar uma porta de saida que liga um led vermelhor se puder me ajudar desde ja agradeço

Como o tecdiego postou, você só precisa definir a porta como output (normalmente fazemos isso no setup()) e colocá-lá como HIGH após o IF.

Mas agora pergunto, quem aciona o motor e quem aciona o inicio da leitura, o mesmo botão?

junior0346:
3-como posto fotos do projeto aqui ?

Se as fotos forem pequenas você pode anexá-las ao post, caso contrário terás de colocar em algum site e usar o ícone insert image para exibi-la.

Existe um grande número de possibilidades, por exemplo, poderias colocar todo o código no setup() e usar o pino do reset para iniciar o teste pelo arduíno, a comparação sempre será com "IF" e a ação estará depois do "IF" ou do "ELSE".

Fica difícil ajudar, pois não da para saber o quanto de programação você sabe (ou não sabe).

Você já fez o exemplo Blink? :stuck_out_tongue:

tecdiego

1º Sendo que a tensão quando for maior que 0,21V ele já deve acusar o defeito?
Correto acende led vermelho e no display motor ruin
2º A tensão entrará sempre pelo mesmo pino?
Sim pelo Pino A0

Obrigado pelas dicas vou testar ;sou novo na programação mas pelo oque eu vi é oque estou precisando

Muito obrigado mesmo

estou com erro nesta linha : if (valor>0.21) ///// "valor " was not declred in this scope

junior0346:
estou com erro nesta linha : if (valor>0.21) ///// "valor " was not declred in this scope

sim, a declaração esta Valor e na condição esta valor (em c, c++ e outras linguagens, maiúscula e minuscula são "coisas" diferentes)

e creio que o que desejas comparar é a variável voltagem, e não a variável valor

2º A tensão entrará sempre pelo mesmo pino?
Sim pelo Pino A0

Porque motivo queres sempre pelo mesmo pino?Nao tens mais pinos analogicos disponiveis?
Pergunto isto porque se os tiveres livres será mais facil para ti e poupas em hardware, se nao tiveres continua a ser possivel ler todos no mesmo pino mas nunca em simultaneo.Podes usar um mux analogico 74hc4051 para fazer a seleçao de qual entrada que queres ler mas iras necessitar de 3 pinos de controlo para escolher entre as 8 entradas possiveis.
Se mesmo assim tambem nao tiveres pinos livres para isso podes sempre tambem usar um I2C expander(PCF8574) , ou mais que um para te dar mais entradas e saidas digitais livres(podes ligar LCD's ,botoes...) e depois basta chamares o endereço do port expander e tratar os pinos.
Para o port expander apenas necessitas de 2 pinos (os pinos do TWI A4, A5) e alimentaçao 5V.

O Mortis está certo, foi na hora de digitar o código eu coloquei a variável errada, o correto seria a voltagem mesmo ficaria assim if(voltagem>0.21) {...}.
Assim que tiver uma posição manda um feedback.

estou com este erro mandei compilar alguem pode me ajudar?

estou com erro nesta linha : if (valor>0.21) ///// "valor " was not declred in this scope

O problema não está na linha... está noutro sítio do programa. Importas-te de colocar tudo aqui?

Descobri o erro ...............era muito basico Valor com letra maiuscula.

Muito obrigada pela ajuda pessoal hoje vou fazer a montagem final do projeto e ligar um LM35 para conferir a temperatura do Motor......................peguei uma programação pronta ..........mas se alguém tiver alguma dica.

junior0346:
Descobri o erro ...............era muito basico Valor com letra maiuscula.

Como eu disse 5 posts antes :stuck_out_tongue:

junior0346:
... e ligar um LM35 para conferir a temperatura do Motor......................peguei uma programação pronta ..........mas se alguém tiver alguma dica.

Acompanhei umas discussões sobre o LM35 e sobre a tensão de referência máxima ser de 1500mV o que causa perda de um pouco de precisão quando usamos a referência de 5V do AD do arduíno, sendo indicado o uso de um amp op. Mas esse assunto é para os mais experientes que eu ^^

Ou alteras a referência do AD...

http://arduino.cc/de/Reference/AnalogReference

bubulindo:
Ou alteras a referência do AD...

http://arduino.cc/de/Reference/AnalogReference

Ficando o alerta que a alteração afeta todas as portas! ]:slight_smile:

Ola peguei a programação que o Tecdiego passou mas tenho uma duvida vou rodar o projeto amanha

para fazer o loop para todas as tensões é so copiar e alterar o botão 7 para 8 9 10

1;92 maior que aparece display motor RUIM (D10)
1;07 maior que aparece display motor RUIM (D9)
0;94 maior que aparece display motor RUIM (D8)
0;21 maior que aparece display motor RUIM (D7)

entrada esta ligada na porta A0

não preciso que acione buzzer somente que apareça msg no display

É uma duvida muito básica mas preciso de ajuda

Desde ja agradeço toda ajuda do Fórum foi de muita valia

Caro Junior.
O programa já está configurado para que sendo a tensão maior que 0.21V irá aparecer no diplay a mensagem de motor com problema, essa é a parte do código que diz isso:

if (valor>0.21) {...}

Sugiro que você estude um pouco de programação, facilitaria e muito sua vida e se precisar de ajuda estaremos aqui, lembre-se aqui ninguém nasceu sabendo.