19 Comentários

Arduino UNO – Sensor de temperatura interno

Este post faz parte da série Arduino UNO: Conversor A/D. Leia também os outros posts da série:

No artigo anterior, falamos sobre a taxa de amostragem do conversor AD o que nos ajudou a entender sobre esse periférico no Arduino UNO. Nesse artigo vamos explorar o sensor de temperatura interno do ATmega328P, que também está agregado ao conversor A/D.

O sensor é um diodo que produz uma tensão proporcional a temperatura interna do microcontrolador. No ATmega328P este sensor está ligado ao canal 8 (ADC8) do conversor. O sensor possui uma relação linear entre tensão e temperatura, porém a tensão de saída do sensor varia de um chip para outro, devido ao seu processo de fabricação.

A temperatura interna do microcontrolador aumenta durante o seu funcionamento e, por exemplo, se um pino é usado para acionar um LED, a temperatura irá aumentar mais.

A temperatura interna pode ser monitorada para verificar se não há problema no sistema. Por exemplo, se a temperatura durante o funcionamento normal acresce por volta de 5°C e no momento ela atingiu 20°C a mais, isso indica um problema no sistema.

A faixa de temperatura de operação do Atmega328 vai de -40°C a 85°C, conforme exibido em sua folha de dados.

Esse sensor não pode ser utilizado para medir a temperatura ambiente, porém ao ligar o microcontrolador, quando o mesmo estiver desligado por um bom tempo, a temperatura lida será bem próxima da temperatura ambiente.

Abaixo são exibidos os valores típicos de temperatura versus tensão, porem para cada chip, a tensão pode variar:

tabela1

A sensibilidade é de aproximadamente 1 mV/°C e precisão do valor medido é de +/- 10°C. Essa precisão pode ser melhorada para aproximadamente 2°C se o ganho e offset forem medidos e usados na equação de temperatura. Isso pode ser feito conforme sugerido no application note: AVR122 - Calibration of AVR’s internal temperature reference, com a seguinte equação:

equação

O valor de ganho e offset são diferentes para tipos de microcontroladores. Conforme sugerido pelo tutorial no site no site Arduino Playground - InternalTemperatureSensor, a equação para o ATmega328P é:

temperatura = (ADC - 324.31) / 1.22

Sketch para teste

Primeiramente vamos entender o que será necessário configurar nos registradores do ADC. Conforme explicado na folha de dados do ATmega328P, para utilizar o sensor de tensão é necessário escolher o canal ADC8 e selecionar a tensão de referência interna de 1,1V.

Para selecionar a tensão de referência interna é necessário configurar o registrador ADMUX, os bits 7:6 - REFS1:RFS0,  conforme a tabela a seguir:

tabela2

Como pode-se observar na tabela deve-se colocar nível lógico 1 nesses dois bits para selecionar a referência de tensão interna.

Agora vamos selecionar o canal 8(ADC8), este canal não é selecionado através da função do arduino, devemos configurar no ADMUX os bits 3:0 - MUX3:0, conforme tabela abaixo:

sensor de temperatura interno

Dessa forma vamos criar uma função para configuração e leitura do sensor conforme sketch a seguir:

A figura a seguir exibe os valores lidos de temperatura:

sensor de temperatura interno

Saiba mais

Arduino - Primeiros Passos

Arduino UNO

Arduino - Entradas/Saídas digitais

Referências

Arduino Playground - InternalTemperatureSensor

AVR122 - Calibration of AVR’s internal temperature reference

Outros artigos da série

<< Arduino UNO - Taxa de amostragem do conversor A/D
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Arduino UNO - Sensor de temperatura interno
Comentários:
Notificações
Notificar
guest
19 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Guilherme
Guilherme
18/02/2019 10:53

Na linha 19 não entendi como ele diz se o valor é 0 ou 1 para selecionar a tensão interna e o adc8. Alguém ainda por aí?

Marcos Kazan Fleury Silveira
Marcos Kazan Fleury Silveira
10/11/2014 12:13

Essa rotina causa algum problema de leitura nas outras portas analógicas ao selecionar a tensão interna de referência 1v1 ?

Thiago Marchesi
Thiago Marchesi
22/07/2014 08:30

Testei e funcionou legal..... bem sensível.

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Thiago Marchesi
22/07/2014 08:37

Maravilha, agora da para monitorar a temperatura interna do AVR.

Thiago Marchesi
Thiago Marchesi
22/07/2014 08:13

Muito interessante, não tinha me atentado a este recurso dos avr´s.
Testarei em breve. Parabens pelo post.
Abraço.

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Thiago Marchesi
22/07/2014 08:32

Obrigado, Thiago.
Depois me conte como foi o seu teste. abraços

jeferson
jeferson
09/07/2014 21:22

ótima publicação irei testar

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  jeferson
12/07/2014 12:26

Maravilha Jeferson, depois conte para nós os seus resultados. Abraços

Leonan Trentini
13/09/2017 14:09

Será que funciona também no nodemcu esp8266?

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Leonan Trentini
13/09/2017 18:10

Não. Esse código foi feito para o ATmega328.

Guilherme Batalha
Guilherme Batalha
20/05/2017 17:43

Nossa, esse artigo já foi postado á algum tempo, mas caso o autor ainda esteja por aí gostaria de fazer uma pergunta; Alterando a tensão interna para 1,1 v influencia noq exatamente? pq eu estou usando quase todas as portas do arduino UNO nesse meu projeto, incluindo as digitais... então eu gostaria de saber se pode acabar gerando algum problema.... eu iria usar esse seu código para acionar um cooler, caso a temperatura lida fosse maior que 60ºc. pq onde vai ficar o arduino tbm vai ficar um Relé de Estado Sólido que vai esquentar bastante.... att. Guilherme

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Guilherme Batalha
23/05/2017 16:55

Olá Guilherme, no caso é alterado a tensão de referencia do conversor AD para 1,1V diminui o valor da resolução. Não irá alterar nada nas portas. Da uma lida nesse artigo que fala sobre o conversor AD: https://www.embarcados.com.br/arduino-entradas-analogicas/ Abraços,

trackback
25/05/2015 23:02

[…] Arduino UNO - Sensor de temperatura interno […]

trackback
22/05/2015 21:18

[…] Arduino UNO - Sensor de temperatura interno […]

trackback
05/05/2015 14:59

[…] Arduino UNO - Sensor de temperatura interno […]

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
NVIDIA JETSON – A Inteligência Artificial na palma de sua mão

Data: 08/07 às 14:00h Apoio: Arrow | NVIDIA
 
INSCREVA-SE AGORA »



 
close-link

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link