Projeto | Medidor de temperatura com MicroPython

Este post faz parte da série Raspberry Pi Pico com MicroPython

Introdução

Nos artigos anteriores trabalhamos com exemplos e projetos que usavam entradas digitais. Uma entrada digital possui apenas dois estados, possuindo estados binários, ou seja, quando você pressiona um botão, ele altera um pino de baixo (desligado) para alto (ligado).

Mas a Raspberry Pi Pico também pode aceitar outro tipo de sinal de entrada: chamado de  entrada analógica. Enquanto o digital assume apenas dois valores, um sinal analógico pode ser qualquer coisa, desde completamente desligado até completamente ligado – com uma faixa de valores possíveis. As entradas analógicas são usadas para tudo e funcionam por meio de um hardware conhecido como conversor analógico-digital (ADC).

Nesse artigo você aprenderá como usar o conversor analógico-digital (ADC) do Raspberry Pi Pico através do projeto de um medidor de temperatura.

O conversor analógico-digital

Como o nome sugere, um conversor analógico-digital leva um sinal analógico e o converte em um sinal digital. Isso porque o microcontrolador RP2040 do Raspberry Pi Pico é um dispositivo digital, como resultado, não há como o Pico entender verdadeiramente um sinal analógico sem depender de um instrumento de conversão.

Um ADC tem duas características principais: sua resolução, medida em bits digitais, e seus canais, ou quantos sinais analógicos ele pode aceitar e converter de uma vez. O ADC do Pico tem uma resolução de 12 bits, ou seja, ele pode transformar um sinal analógico em um sinal digital como um número variando de 0 a 4095. Mas é importante dizer que isso é tratado no MicroPython como um número de 16 bits variando de 0 a 65.535, para que funcione da mesma forma que o ADC em outros microcontroladores MicroPython.

Ele possui três canais conectados aos pinos GPIO: GP26, GP27 e GP28, que também são conhecidos como GP26_ADC0, GP27_ADC1 e GP28_ADC2 para os canais analógicos 0, 1 e 2. Há também um quarto canal ADC, que está conectado a um sensor de temperatura incorporado ao RP2040.

Isso pode ser observado na Figura 1.

medidor de temperatura
Figura 1 – Raspberry Pi Pico pinout.

Materiais necessários

Para esse projeto vamos precisar de:

  • 1 x Raspberry Pi Pico
  • 1 x Protoboard
  • 1 x Led
  • 1 x Potenciômetro de 10kΩ
  • 1 x Resistor de 1kΩ 
  • 1 x Cabo micro USB
  • Jumper

Primeiramente vamos entender como é feita a leitura do potenciômetro. Assim, com a protoboard em mãos e a placa Pico já inserida nela, pegue o seu potenciômetro. Observe que o potenciômetro tem três pinos que se encaixam no protoboard. Comece inserindo o potenciômetro na protoboard, tendo o cuidado de não dobrar os pinos. Conecte o pino central ao pino GP26_ADC0 do seu Pico utilizando o jumper.

Depois, pegue mais dois fios de ligação e conecte um dos pinos externos do potenciômetro, que não seja o central, ao trilho de alimentação do seu protoboard e o trilho de alimentação ao pino 3V3 (pino 36) do seu Pico.

medidor de temperatura
Figura 2 – Montagem do projeto no Fritzing

Programa para ler potenciômetro

Como nos demais programas feitos, vamos utilizar o Thonny IDE. Assim, começaremos com “import machine” para poder acessar os pinos da placa. Da mesma forma que configuramos os pinos digitais faremos com os pinos analógicos.

Assim, vamos configurar o pino GP26_ADC0 como o primeiro canal, ADC0, no conversor. E faremos um loop para a leitura do valor do pino e a impressão em uma única linha:

import machine
import utime

potenciometro = machine.ADC(26)

while True:
    print(potenciometro.read_u16())
    utime.sleep(2)

Observe que a leitura de uma entrada analógica é praticamente igual à leitura de uma entrada digital, mas esta entrada analógica é lida com read_u16(). Em que a parte “u16” simplesmente avisa que, em vez de receber um resultado binário 0 ou 1, você receberá um número inteiro de 16 bits (entre 0 e 65.535).

Após executar você verá o seu programa imprimir um número grande, provavelmente acima de 60.000. Ao girar o potenciômetro esse número pode aumentar ou diminuir mas não de forma brusca. Isso porque não importa para qual direção você gire, o valor nunca chegará perto de 0. A explicação para isso é que com apenas duas pernas conectadas, o potenciômetro atua como um componente conhecido como resistor variável ou varistor.

Portanto, utilizar o terceiro pino do potenciômetro muda completamente o funcionamento do dispositivo. Para observar essa mudança, conecte o terceiro pino do seu potenciômetro à linha do GND e escolha um dos pinos GND do Pico para alimentar essa linha, como mostrado na Figura 3.

medidor de temperatura
Figura 3 – Montagem do projeto no Fritzing
medidor de temperatura
Figura 4 – Montagem do projeto com componentes físicos.

Utilizando o mesmo programa vemos que ao girar o potenciômetro, ao contrário antes, agora ele está variando de quase zero até quase 65.535. Isso acontece pois ao adicionar a conexão de terra à outra extremidade do potenciômetro criou um divisor de tensão.

Agora o potenciômetro está dividindo a tensão entre a saída de 3,3 V do pino 3V3 e os 0 V do pino de terra (GND). Girando o botão totalmente em uma direção, você terá ~100% dos 3,3V; girando totalmente na outra direção, ~0%.

Programa para medir temperatura

O microcontrolador RP2040 da Raspberry Pi Pico possui um sensor de temperatura interno, que é lido no quarto canal do conversor analógico-digital. Da mesma forma que o potenciômetro, a saída do sensor é uma tensão variável: à medida que a temperatura muda, a tensão também muda.

Então, vamos iniciar um novo programa importando as bibliotecas “machine” e “utime”. Depois vamos configurar o conversor analógico-digital, mas desta vez, em vez de usar o número de um pino, use o número do canal conectado ao sensor de temperatura que é o 4.

import machine
import utime

sensor_temp = machine.ADC(4)

Como vimos na leitura do potenciômetro, o valor que é exibido no shell é uma representação decimal da saída bruta do conversor analógico-digital – mas não é a forma mais amigável de visualizá-lo.

Mas existe uma maneira fácil de resolver isso e é usando uma simples conversão. Então o fator de conversão será o resultado da divisão de dois valores: o primeiro número é a tensão máxima possível que o pino pode esperar: 3,3 V, da saída 3V3 do seu Pico; o segundo número é o valor máximo que a leitura de entrada analógica pode ter, que é 65535.

fator_conversao = 3.3 / (65535)

Em seguida, vamos configurar um loop para obter leituras da entrada analógica, aplicar o fator de conversão e armazená-las em uma variável. E ao invés de já imprimir a leitura, vamos fazer uma segunda conversão para transformar a tensão captada pelo conversor analógico-digital em graus Celsius:

while True:
      leitura_ADC = sensor_temp.read_u16() * fator_conversao
temperatura = 27 - (leitura_ADC  - 0.706) / 0.001721

Essa é outra equação matemática específica para o sensor de temperatura no RP2040, os valores são retirados do datasheet do microcontrolador. Você pode visualizar o datasheet do RP2040 na documentação do Pico em rptl.io/rp2040-get-started.

Agora com o programa completo você pode visualizar a temperatura que o sensor do Raspberry Pi Pico está detectando:

import machine
import utime

sensor_temp = machine.ADC(4)
fator_conversao = 3.3 / (65535)

while True:
    leitura_ADC  = sensor_temp.read_u16() * fator_conversao
    temperatura = 27 - (leitura_ADC  - 0.706)/0.001721
    print(temperatura)
    utime.sleep(2)

Conclusão

Com este projeto, nós aprendemos a como utilizar o conversor AD da Raspberry Pi Pico lendo um potenciômetro e o sensor de temperatura interno.

Raspberry Pi Pico com MicroPython

Projeto | Controlador de Semáforo com Micropython Projeto | Registro de dados de temperatura
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Software » Projeto | Medidor de temperatura com MicroPython

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: