Go Down

Topic: Voltímetro com Arduíno UNO - HELP (Read 3901 times) previous topic - next topic

Estou precisando de ajuda estou com um arduino UNO e pretendo fazer um projeto Voltímetro com leitura no display 16 02

Situação no momento display ligado funcionando pino A0 fazendo leitura DC de uma fonte 5V rodando normal

preciso agora de uma "luz" para fazer quatro tensões que vem do trafo acionar um buzzer

1;92 maior que acionar buzzer
1;07 maior que acionar buzzer
0;94 maior que acionar buzzer
0;21 maior que acionar buzzer

 
este é o circuito quatro reles que são acionados através de um push botão; vai ser usado para testar isolação de motores eletricos
ou seja o buzzer vai acionar e dar um sinal que o motor esta com isolação baixa

segue em anexo minha programação

Desde ja agradeço se alguém puder ajudar


Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

#include <LiquidCrystal.h>

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

sou novo na programação estou precisando de uma ajuda


void setup() {
  lcd.begin(16, 2);
  lcd.print("tensao");
}

void loop() {
 
  int Valor = analogRead(A0);
  float voltagem = Valor * (5.0 / 1023.0);
  lcd.setCursor(0, 1);
  lcd.print(voltagem);
}

Code: [Select]


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



Algo assim?

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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?

Code: [Select]

if (digitalRead(botao) == LOW) {
   //faxz o que tem a fazer...
}
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).


Mortis

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):
Code: [Select]
#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.

http://arduino.cc/en/Tutorial/DigitalPins

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 ?

tecdiego

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.
Code: [Select]
#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.

Mortis

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


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


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?


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?  :P

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

Mortis


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

HugoPT

Quote
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.
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

tecdiego

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.

Go Up