Olá, amigos!
Sou novo no fórum e bem iniciante nos assuntos que envolvem eletrônica e programação.
Estou tentando construir um de sistema de aquisição para medir temperatura no processo de usinagem. Basicamente a medição é feita por meio de um sinal de tensão que é gerado na operação, baseado no efeito Seebeck (como nos termopares). A partir da obtenção do sinal de tensão eu converto no valor de temperatura por meio de uma equação T(V). Ou seja, a temperatura é função dessa tensão gerada no sistema. Esse sinal é bem baixo, varia até cerca de 10 mV.
Consegui construir o o sistema baseado em um trabalho que encontrei por aqui, um caso de estudo da repetibilidade de medição de temperatura de um termopar. Segue o link:
(http://labdegaragem.com/forum/topics/repetibilidade-de-medi-o-de-te...)
No meu caso, o ponto principal é que o valor do sinal de tensão de entrada seja o mais próximo do valor que o programa imprime. Como o sinal é muito baixo, utilizei o HX711 para amplificar e converter o sinal analógico.
Usei o mesmo escopo do trabalho do link anterior, mas tentei fazer uma espécie de calibração do sistema, usei uma fonte de tensão DC aplicando diferentes tensões na entrada do sistema (na faixa de 0 até aproximadamente 15 mV) e fui vendo o que o programa imprimia.
Fiz de forma bem empírica mesmo, observei que uma das linhas do código faz uma espécie de conversão, dividindo a tensão que é lida pela função LoadCell.geData() por uma constante de 4250. Quando mudava esse valor, observava que o erro entre a tensão aplicada no sistema pela fonte e a tensão que o programa me dava mudava conforme eu alterava essa constante. Repeti esse procedimento algumas vezes alterando o valor da constante.Consegui o melhor resultado usando a constante de 4185. Parte do código é apresentada abaixo:
void loop()
{
LoadCell.update(); // atualiza a balança
if (millis() > t + 250) // contagem de tempo 250 milisegundos
{
float i = LoadCell.getData(); // faz a leitura da tensão
float v = LoadCell.getCalFactor(); // faz a leitura do fator de calibração
Serial.print("Tensão no Termopar: "); // imprime mensagem
Serial.print((i / 4250), 3); // divide o valor por 4250 com 3 casas decimais
Serial.print(" Fator de ganho "); // imprime mensagem
Serial.println(v);
t = millis(); // atualiza o tempo
}
Até então, meu sistema consegue medir bem os valores de tensão. A minha dúvida é sobre o que vem a ser essa constante, qual a função do termo 4250 no código, e por que ao alterar o valor para 4185 eu obtenho resultados melhores.
Utilizei a mesma metodologia que o Heitor (do link anterior) adotou para a construção, mesmocircuito apresentado na imagem. A calibração foi uma ideia que tive pra me certificar de que não estava obtendo valores muito diferentes da tensão de entrada.
Decidi compartilhar a minha dúvida com vocês na esperança de encontrar alguma resposta. O lab de garagem já tem me ajudado bastante desde que decidi me aventurar nesse projeto. Agradeço demais aos que puderem contribuir de alguma forma.
Tags:
Boa noite,
Achei esse diagrama muito parecido com o meu. Depois descobri que era meu.KKKK
Olá, José Gustavo!
Exatamente! kkkkkkk
Foi com base nele, através de uma contribuição sua presente link que postei no tópico, que consegui tocar meu projeto.
Já aproveito pra agradecer e pedir desculpas por não ter referenciado.
Vamos por partes, para eu me lembrar da função desse fator divisor de 4250.
Datasheet do HX711:
https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english...
conversor ADC tem precisão de 24 bits
Biblioteca HX711:
https://github.com/bogde/HX711
LoadCell.setCalFactor(128.0); // fator de calibração = 128 (ganho do canal A)
Serial.print((i / 4250), 3); // divide o valor por 4250 com 3 casas decimais
Esse tutorial foi revisado por mim:
Balança digital com Arduino e célula Strain Gauge – Revisada
https://blog.eletrogate.com/balanca-digital-com-arduino-aprenda-a-u...
Na verdade, a biblioteca usada é a HX711_ADC
https://github.com/olkal/HX711_ADC
Corrigindo informações, baseando-me no diagrama da SparkFun :
https://cdn.sparkfun.com/assets/f/5/5/b/c/SparkFun_HX711_Load_Cell.pdf
VBG = 1,25 V
AVDD = VBG(R1+R2)/R2 = 1,25V ((20K +8,2K) / 8,2K)
AVDD = 1,25V x 3,4390 = 4,298 V
Fiz uma montagem parcial agora e medi 4,294 V em AVDD.
Bom dia Edmilson,
Me desculpe o engano, acho que estou muito cansado.
Troquei o ganho do amplificador do valor de 128 por 180! Eu apaguei o post para não confundi-lo.
Além do mais, o datasheet não explica em detalhes como é feito o processo de conversão.
Essas são as minhas suposições:
Se a tensão sobre o sensor é de 10 mV, a tensão de entrada do ADC do HX711 será amplificada por 128 (fator de ganho).
Vadc = 1280 mV.
O canal A mede tensões entre +- 20 mV, e o ganho é de 128.
O conversor ADC tem 24 bits => 2 elevado a 24 = 16777216
23 bits para o sinal positivo e 23 bits para o sinal negativo
para a tensão máxima de (0,020 x 128) = 2,56V (positiva ou negativa)
2 elevado a 23 = 8388608
2,56 V / 8388608 = 0,000000305175 V = 305,175 nanoVolts (bit menos significativo)
Supondo que na entrada do sensor do HX711 seja de 1 mV:
Agora terei que analisar a Biblioteca, para ver como ela faz as medições...
Quase chegando à explicação final.
Um detalhe, a Biblioteca foi atualizada. Recomendo que atualize-a também.
A versão que eu usei era a 1.01. A versão mais atual é a 1.1.5.
Não se esqueça de reinicializar a IDE, após a atualização.
https://github.com/olkal/HX711_ADC
( OBS: nos exemplos, os pinos usados no Arduino são diferentes - D4 e D5)
Não estudei a fundo a Biblioteca, mas se você retirar o divisor dessa linha do programa :
Serial.print((i), 3);
Vai perceber que a medição é feita em miliVolts !
Por isso, o fator divisor ideal é 4194,31 para que a medição seja feita em Volts:
(OBS - esse valor muda de acordo com a tensão de referência do seu módulo)
No exemplo de 1 mV :
Se não usar o fator divisor, a medição será 4,194 aproximadamente
4,194 / 4194 = 0,001 !
Um pouco complicado para entender.
Concorda com as minhas explicações?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por