Вбудований датчик температури Raspberry Pi Pico

02.08.2021  |  Ihor Lizogyb

Головне фото

Освоївшись із базовими принципами роботи з мікроконтролером, перейдемо до складніших проєктів. Я вже згадував що крім вбудованого світлодіода Raspberry Pi Pico має власний датчик температури, який розташований в самому серці МК, а саме в чіпі.

Складнощів роботи з цим датчиком не виникає, проте потрібно розібратись що таке аналого-цифровий перетворювач АЦП(англ. ADC) та як він працює.

Аналого-цифровий перетворювач – пристрій який перетворює вхідний, аналоговий сигнал в цифровий, який здатний кількісно характеризувати амплітуду цього сигналу в певний момент часу.

Щоб зрозуміти його дію розглянемо її на прикладі мікрофону вашого смартфону.

Pico_temp_sensor

Він є конденсаторним, за будовою нагадує конденсатор, складається із двох металічних пластин, еластичної рухомої(мембрана) та нерухомої(електрод), коли до такого мікрофону надходить звукова хвиля, вона сприяє коливанню еластичної металічної пластинки, при цьому змінюється ємність утвореного конденсатора(мікрофона), а якщо він підключений до джерела струму це призводить до зміни напруги на ньому, а відповідно і в колі до якого він підключений, тобто утворюється сигнал, який далі потрібно оцифрувати.

Cпеціальна мікросхема(АЦП) отримує цей сигнал розбиває його на певну кількість рівномірних участків(квантує цей сигнал) і вимірює його на цих участках перетворюючи аналоговий сигнал в послідовність біт. При перетворенні також використовується округлення, якщо аналоговий сигнал не дотягує або незначно перевищує певний рівень кванутвання.

Pico_temp_sensor1

Якість перетвореного сигналу залежить від розрядності та частоти дескритизації АЦП.

Кокротко з принципом поботи АЦП ознайомились, щоб детальніше розібрати його роботу потрібний цілий цикл статтей, зокрема розібрати роботу операційних підсилювачів і тп, тож давайте перейдемо до цікавішого, а саме до АЦП Raspberry Pi Pico, який опрацьовує сигнал із датчика температури, він є 12 бітним тобто має 4096 рівні квантування(212=4096), проте є особливість отримані значення АЦП підганяються до 16 біт, тобто вихідний сигнал в залежності від вхідного може змінюватись від 0 до 65536(216=65536), це зроблено для зручності в роботі з системами MicroPython.

Raspberry Pi Pico має 4 АЦП, при чому датчик температури підключений до 4. З ним ми і будемо працювати.

Давайте перейдемо до написання коду, я використовуватиму IDE Thonny.

PYTHON CODE:


# Підключимо бібліотеку для роботи
# Підключимо бібліотеку для роботи
# з апаратною частиною плати
import machine
# Підключимо бібліотеку для роботи
# з часом та таймерами
import time

# Створимо змінну, яка міститиме пін АЦП із підключеним
# датчиком температури 
temp_sensor = machine.ADC(4)
# При зчитуванні ми отримуватимемо дані із АЦП від 0
# до 65535, їх потрібно пертворити у мілівольти
cor_factor = 3.3 / (65535)

while True:
    # Зчитаємо дані із датчика, підключеного до АЦП
    reading = temp_sensor.read_u16() * cor_factor
    # За документацією значення напруги 0.706 В відповідає
    # температурі 27С і змінюється на 1.72 mV за зміни
    # температури на 1 градус. Побудуємо математичну
    # модель(вираз) для визначення температури
    temp = 27 - (reading - 0.706)/0.001721
    # Виведемо в консоль покази температури
    print(temp)
    time.sleep(2)

В нашому проєкті ми будемо використовувати бібліотеки time та machine. Бібліотека time використовуємо для створення таймера, який буде затримувати виконання тіла циклу на вказане значення секунд, бібліотека machine використовується для отримання доступу до апартаної частини контроллера.

Для того щоб зчитати значення з входу АЦП використовується функція read_u16(). Використавши її ми будемо отримувати число в межах від 0 до 65536 в залежності від даних датчика. Далі потрібно взяти в розрахунок перетворення сигналу з аналогового в цифровий і використати коригуючий коефіцієнт, сигнал логічної одиниці рівний 3.3В і він відповідатиме числу 65536, тому коефіцієнт коригування має бути рівним cof_cor = 3.3 ÷ 65536. Далі вважаємо що на 1 градус припадає зміна напруги в 1.72мВ. Використаємо цю особливість і складемо вираз для обчислення температури.

Після написання скрипту, його потрібно зберегти на комп'ютер або на саму плату Raspberry Pi Pico(Якщо зберігаєте на плату і бажаєте щоб плата могла виконувати скрипт без підключення до ПК, вкажіть назву скрипта main.py) та завантажити на виконання.

В результаті отримаємо наступний результат:

Pico_temp_sensor2
Pico_temp_sensor_title0 Pico_temp_sensor_title1 Pico_temp_sensor_title2
Назад