Estou tentando construir termostato com Arduino. Quero ligá-lo usando a bateria / carregador de celular, o que torna a tensão do sistema bastante variável. No momento, eu uso o Arduino Uno, mas, uma vez concluído, eu o portarei para o Lilypad.
Primeiro, tentei usar o sensor de temperatura TMP36 . Até agora, foi um fracasso completo. Embora o próprio sensor pareça muito estável, não consigo descobrir uma maneira de medir com precisão sua tensão.
Usar a referência 5v incorporada para sensores analógicos não está funcionando - mesmo alimentado a partir de + 5V do USB arduino são realmente + 4,8V (que muda a temperatura medida em alguns graus). Quando a placa é alimentada a partir da bateria, a voltagem cai para cerca de 4V e a temperatura medida dispara. Eu também tentei usar + 3.3V da placa como referência. Parece ser mais estável quando a placa é alimentada por USB, mas sua voltagem diminui ao ficar sem bateria.
Existe outra maneira de medir de forma confiável a tensão de saída do sensor?
Para o segundo estágio, planejo usar termistores. Acabei de encomendar alguns desses termistores de 20K .
Pelo que entendi, seria mais fácil medir com precisão se eu construir um divisor de tensão e usar V_in como tensão de referência para o ADC.
Algumas perguntas sobre eles:
- Faz sentido usar poucos divisores de tensão com resistores fixos diferentes para aumentar a precisão?
- Posso usar pinos programáveis como V_in e medir a temperatura usando alguns níveis de tensão diferentes. Embora não esteja claro para mim se isso realmente aumentará a precisão.
fonte
Respostas:
Parece que você está ciente do problema com a alteração da tensão de referência e, se você usar um dispositivo como o TMP36 (10mV / degC fixo), nada poderá fazer senão usar uma referência de tensão de um chip para estabilizar as coisas.
No entanto, se você estiver usando um RTD ou um termistor, o problema não surgirá. O ADC está fazendo uma medição ratiométrica - ele compara a entrada do ADC com a tensão de referência, MAS, se você alimentar o RTD ou o termistor (através de um resistor adequado) da mesma tensão de referência, isso não afetará as leituras. Se a ref sobe 10%, o mesmo ocorre com a tensão no ADC.
fonte
Eu acho que você deve considerar o uso de um sensor de temperatura digital como DS18B20 / DS18S20 porque ele não depende da precisão do seu ATmega ADC para medir um sinal de falha, ele usa o protocolo digital de 1 fio para relatar a temperatura.
Consulte os seguintes tutoriais
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino
fonte
Sua medição será tão boa quanto a tensão de referência para o ADC é boa. O Arduino, por padrão, usa a tensão de alimentação como tensão de referência, mas no seu caso, a maneira correta de fazer isso seria usar o pino Aref do arduino. Você precisa obter um chip especial chamado "Referência de tensão" e conectá-lo ao pino Aref, depois configurar o ADC para usar a referência externa no código do Arduino (
analogReference(EXTERNAL)
)A tensão da referência deve ser selecionada para que o giro completo do seu sensor de temperatura caiba na tensão de referência. O TMP36 produzirá ~ 1.5V a 100C, então você teria que usar referência acima de 1.5V para medir temperatura de até 100C. Você deseja que sua referência seja o mais próximo possível da tensão máxima medida para obter a maior resolução possível.
O Atmega328p possui duas referências internas que podem ser usadas sem nenhum componente externo. Um é 1.1V, outro 2.56V. Eles geralmente têm uma precisão um pouco pior do que a que você obteria usando um componente dedicado externo. Consulte a documentação do Arduino para obter a folha de dados analogReference e Atmega328p para obter a precisão da referência interna.
Se você realmente deseja enlouquecer com intervalos diferentes, pode usar várias referências externas e alterná-las usando um comutador analógico como 74hc4051. Ou você pode alternar entre duas referências internas.
Com termistores, você obtém melhores resultados se configurar uma fonte de corrente constante em vez de usar um resistor estéreo. Por outro lado - um resistor estúpido alimentado por uma referência de tensão estável funcionaria bem.
Ao escolher uma referência externa, verifique se você tem voltagem suficiente para acomodar a voltagem de queda quando a alimentação é feita com pilhas e as pilhas estão gastas. Vref + Vdropout <Vbat-min.
fonte
Não ter uma referência ADC estável é na verdade um sintoma de outro problema no seu circuito: você não está fornecendo uma tensão suficientemente alta para a placa. Isso é indicado pela fonte de 5V caindo para 4V e pela queda de 3,3V também.
O regulador de tensão (MC33269D-5.0 IIRC) na placa Arduino tem uma tensão de abandono de ~ 1,0V, portanto, você precisa fornecer pelo menos 6V para obter uma saída estável de 5V. As pilhas AA começam em 1,5-1,6V e estão quase descarregadas em 1,1V, portanto, você deve alimentar a placa com pelo menos 6 pilhas AA para obter uma saída estável durante toda a vida útil da bateria.
Alimentado corretamente, você pode usar a referência ADC interna ou as linhas de 5V ou 3.3V. Como o sensor de temperatura varia em torno de 10 mV por grau Celsius, você pode usar um divisor de tensão para definir a tensão de referência equivalente à tensão de saída máxima esperada do sensor (por exemplo, para 50 graus C). Isso fornecerá uma medida mais precisa.
Se você deseja usar menos de 6 pilhas AA, tente um conversor de impulso DC-DC, por exemplo, https://www.sparkfun.com/products/10968 . O exemplo vinculado leva 1V - 4V e produz 5V. A saída seria alimentada diretamente no pino de 5V do Arduino, ignorando seu regulador.
Para que a placa funcione por mais tempo com baterias, coloque o MCU em repouso entre as leituras do sensor. A biblioteca de baixa potência do rocketscream é ótima para esse fim. Mas isso só é realmente útil ao usar um regulador / conversor DC-DC eficiente, pois o regulador padrão do Arduino usa 10mA sozinho!
fonte
Resposta para a pergunta Existe outra maneira de medir com confiabilidade a tensão de saída do sensor?
O ADC usa a tensão de referência para a conversão de analógico para digital. Portanto, se houver uma alteração na tensão de referência, os valores convertidos (ou seja, valor digital) serão alterados. O valor digital será diferente para a mesma entrada analógica se a tensão de referência mudar.
Uma opção fácil é usar a tensão de referência interna dentro do Arduino (ou seja, controlador Atmega).
Consulte o link abaixo, onde é fornecido um código de amostra para usar o ADC interno (nome da função do Arduino - analogReference (DEFAULT))
http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
Penso que isto resolverá o seu problema e não há necessidade de mudar para termistores.
fonte