Go Down

Topic: Sensor de corrente(programação) (Read 12612 times) previous topic - next topic

wilsonalves

Estava a pôr só um gnd enquanto que tinha de interligar os 2, Como mudo o valor 2=0 para 1.96=0??
Estou farto de tentar e dar voltas e não consigo perceber como mudar esse valor


wilsonalves

E mais outra questão bubulindo é que não consegui perceber se foi engano seu ou não quando fez esta conta //5V = 1024 1V = (1*1024)/5 = 204.8 ~ 209 >Arredondou para 209 porquê para 209 e não 205???
Cumprimentos e desculpe estar a ser chato

bubulindo

Foi engano. São 205.

Como disse, tens de verificar as leituras e ajustar os parâmetros do map() para dar a leitura correcta. O 1,96V será do facto de não teres um divisor de corrente perfeito. As contas que fiz em cima servem para fazer este ajuste. Em vez de usares 1 e 3, usas valores mais precisos. Ou seja, 1,96 + (100*9,4mV) e 1,96 - (100*9,4mV) e aplicas as mesmas fórmulas que usei antes.
This... is a hobby.

Osias Neto

Quote
E mais outra questão bubulindo é que não consegui perceber se foi engano seu ou não quando fez esta conta //5V = 1024 1V = (1*1024)/5 = 204.8 ~ 209 >Arredondou para 209 porquê para 209 e não 205???

Não li o tópico inteiro, mas acredito que ele simplesmente se enganou amigo, põe 205 lá e vê se é isso mesmo, a capacidade de fazer upload via usb é boa justamente para estes casos,
não está dando certo? Altera o que você acha que possa interferir e vê o resultado instantaneamente. Piorou? Desfaz a alteração e vai para a próxima linha ;)

Quote
Como mudo o valor 2=0 para 1.96=0??

Não entendi direito sua dúvida, mas talvez só arrumando o trecho:

corrente = map(valor, 209, 614, -100, 100);
para:
corrente = map(valor, 205, 614, -100, 100);

pode ser que resolva o problema. Se não, o caminho é por aí, percebe que seu problema maior é matemática, não programação/eletrônica?

wilsonalves

Já consegui pôr o sensor a dar certinho está optimo agora estou a implementar o de 45A-http://sensing.honeywell.com/index.php?ci_id=3108&la_id=1&pr_id=54672
A questão é o output do sensor em ves de ser tensão é Sink/Source existe algum problema na medição o código é basicamente como o Anterior  mas com valores alterados???
Quem souber que me dê uma ajuda na implementação deste sensor sff

Cumprimentos

bubulindo

Uma resistência?? Corrente a passar numa resistência causa uma diferença de potencial. Ligas lá o teu AD e pronto. Já está.

No código tens apenas de refazer a matemática que expliquei anteriormente para chegares aos novos parâmetros.
This... is a hobby.

wilsonalves

Qual a idêia de pôr uma resistência ?
Não bastam as resistências do divisor de tensão??
Voltei a não conseguir que os sensores não dessem valores certos no caso do de (AC)45 A está a 0 tudo bem mas eu ponho 5 Amperes a passar e ele só mede 3.
O de 235(Bat)está a -3 quando não  passa nada e quando lhe ponho 5 Amper fica a -8.
E o de 100A(RC) ontem antes de desligar tudo verifiquei estava tudo bem a medir corretamente fiz save hoje quando voltei estava a -2 e quando lhe ponho 5 amper fica 3.

Não consigo perceber o que estou a fazer mal na formula
Cumpts

bubulindo

Temperatura?

Qual é a estabilidade do sensor e resistências?
This... is a hobby.

wilsonalves

Bom dia sem ter corrente a passar nos sensores eles estão sempre a dar medições na ordem dos 0,1,2 e assim sucessivamente poderá ser ruído ou algo do género então pensei em fazer a média de vários valores e julgo ter o problema resolvido o que acham??
Agora como faço eu a média neste bocado de código:
valor235 = analogRead(A5);                                       //Valor do pino Analógico 5
  //Sinal entre 1V e 3V
  //5V=1024 1.47mV = (0.8085*1024)/5 = 165.5808                    //1.96-(0.235*4.9)=0.8085   
  //5V=1024 2.45mV = (3.115*1024)/5 = 638,952 ~639                 //1.96+(0.235*4.9)=3.115
minimo235=((2.02-(0.235*4.9))*1024/5);                             //Calculo do valor minimo
maximo235=((2.02+(0.235*4.9))*1024/5);                             //Calculo do valor máximo
corrente235 = map(valor235, minimo235, maximo235, -235, 235);     //Calculo da corrente
  Serial.print("BAT:");
  Serial.print(corrente235);                                       //Apresentação dos resultados da corrente no serial monitor
  Serial.println("A");
  lcd.setCursor(3, 2);
  lcd.print(corrente235);                                          //Apresentação do resultado/temperatura no LCD
  delay(1000);                                                     //Actualização dos dados a cada 2 segundo

Cumprimentos

bubulindo

Code: [Select]

unsigned int leituras[10];
unsigned int media = 0;


for(unsigned char i = 0; i <10; i++) {
   leituras[i] = analogRead(pino);
   media += leituras[i];
}//leituras terminadas...

media/=10;


Assim...
This... is a hobby.

wilsonalves

Acabei de por cabos blindados do sensor até ao arduino para ver se conseguia com que os valores estabelizassem e se ficavam certos nenhuma das duas se verificou já não sei mais o que fazer para conseguir com que o arduino dê os valores certinhos!!
Alguem tém alguma sugestão.
Cumprimentos

bubulindo

Condensador na entrada do AD?

Já meteste um osciloscópio?
This... is a hobby.

wilsonalves

Sim pus um condensador na entrada do AD não tenho é nenhum osciloscópio.
E agora existe outra situação o meu sensor de 100 A está a enviar qualquer coisa como 3.50 V enquanto que deveria enviar tipo 1.95 V +/-.

bubulindo

Como tens o circuito ligado?

As tensões antes desses 3,5 estão todas correctas?
This... is a hobby.

wilsonalves

No caso da média como faço para  mostrar no lcd a média dacorrente é que me estão a aparecer os valores que está ler todos seguidos eu fiz assim

Code: [Select]


unsigned long antes100 = 0;
int valor100 = 0;
float corrente100 = 0;
float minimo100 =0;                                             //Valor minimo do map()
float maximo100 =0;                                             //Valor máximo do map()
unsigned int leituras[10];
unsigned int media100 = 0;


//--------------------------------------------------------Sensor de 100A----------------------------------------------------------------
lcd.setCursor(14,1);                                            // Local no Lcd onde vai der apresentada a tensão do regulador
  lcd.print(12);                                                  // Valor da Tensão no regulador de carga

  valor100 = analogRead(A4);                                      // Valor do pino Analógico 4
  //Sinal entre 1V e 3V
  //5V=1024 1V = (0.97*1023)/5 = 198.656 ~ 199                    // 1.95-(0.1*9.4)=0.97   
  //5V=1024 3V = (2.85*1023)/5 = 583.68 ~ 584                     // 1.95+(0.1*9.4)=2.85
  minimo100=((1.922-(0.1*9.7515))*1024/5);                            // Calculo do valor minimo
  maximo100=((1.922+(0.1*9.7515))*1024/5);                            // Calculo do valor máximo
  corrente100 = map(valor100, minimo100, maximo100, -10000, 10000);   // Calculo da corrente
  corrente100 = corrente100/100;
 
  for(unsigned char i = 0; i <10; i++) {
  leituras[i] = analogRead(corrente100);
  media100 += leituras[i];                                        //leituras terminadas...
  media100/=10;                                                   //média um conjunto de 10 amostras 

  Serial.print("RC:");                                            // Apresentação da sigla do regulador de carga no Serial Monitor
  Serial.print(media100);                                         // Apresentação dos resultados da corrente no serial monitor
  Serial.println("A");                                            // Grandeza fisica(A) declarada no serial monitor
  lcd.setCursor(14,2);                                            // Local no LCD onde se vi iniciar o resultado da corrente do regulador de carga
  lcd.print("    ");                                              // Limpeza do LCD dos resultados anteriores
  lcd.setCursor(14, 2);                                           // Local onde se vi iniciar no LCD o resultado da corrente no regulador de carga
  lcd.print(media100);                                            // Apresentação da corrente do regulador de carga no LCD

  PRC=TRC*media100;                                               // Calculo da potência de RC
  lcd.setCursor(14,3);                                            // Local no LCD onde se vai iniciar a (limpeza) da Potência do regulador de carga
  lcd.print("    ");                                              // Limpeza do resultado anterior da potência do regulador de carga
  lcd.setCursor(14,3);                                            // Local no LCD onde se vi iniciar o resultado da Potência do regulador de carga                         
  lcd.print(PRC);                                                 // Aprsentação do resultado da potência do regulador de carga no LCD
  delay(500);                                                   
}


E no caso do sensor a dar 3.5 já está resolvido
Cumprimentos

Go Up