Как да изчетем аналогови стойности с Raspberry Pi Pico и MicroPython

Как да изчетем аналогови стойности с Raspberry Pi Pico и MicroPython

Въведение

Raspberry Pi Pico е идеална платформа за управление и изчитане на аналогови сигнали благодарение на вградените си ADC (Analog-to-Digital Converter) пинове. В тази статия ще ви покажем как да изчитате аналогови стойности от потенциометър или друг аналогов сензор, свързан към пин 28 на Pico, и как да ги преобразувате в различни битови резолюции с MicroPython.

Raspberry Pi Pico има три четири ADC входа: Pin 28 -> ADC 2, Pin 27 -> ADC 1 и Pin 26 -> ADC 0, като ADC 4 не е изведен на външен пин а е свързан към вътрешен температурен датчик на платформата, който ще разгледаме в друга статия. Може да прочетете за характеристиките на тази платформа, както и да видите нейната пин диаграма в ревюто ни за нея: Raspberry Pi Pico – Малък, но Мощен Микроконтролер.

Код

Ето кода, който ще използваме в този урок:

from machine import Pin, ADC
from time import sleep

pot = ADC(Pin(28))

while True:
    potRead_10bit = pot.read_u16() >> 6 # 10bit
    potRead_11bit = pot.read_u16() >> 5 # 11bit
    potRead_12bit = pot.read_u16() >> 4 # 12bit
    potRead_16bit = pot.read_u16() # 16bit
    
    print("potRead_10bit = " , potRead_10bit)
    print("potRead_11bit = " , potRead_11bit)
    print("potRead_12bit = " , potRead_12bit)
    print("potRead_16bit = " , potRead_16bit)
    
    sleep(1)

Обяснение на кода

Нека разгледаме кода ред по ред:

Импортиране на модули:

from machine import Pin, ADC
from time import sleep

machine.Pin и machine.ADC се използват за управление на хардуерните пинове и изчитане на аналогови сигнали.

Модулът time предоставя функцията sleep, която позволява въвеждането на пауза между измерванията.

Инициализиране на ADC пин:

pot = ADC(Pin(28))

Създаваме обект pot, който указва, че пин 28 ще бъде използван като вход за аналогов сигнал.

Главен цикъл:

while True:

Цикълът while True: осигурява непрекъснато изчитане на стойностите от потенциометъра.

Изчитане на стойности с различни резолюции:

potRead_10bit = pot.read_u16() >> 6 # 10bit
potRead_11bit = pot.read_u16() >> 5 # 11bit
potRead_12bit = pot.read_u16() >> 4 # 12bit
potRead_16bit = pot.read_u16() # 16bit

Функцията read_u16() връща 16-битова стойност (0 до 65535).

С побитово изместване (>>) стойността се преобразува в 10, 11, и 12-битови резолюции.

  • 10-битова стойност: 16-битов резултат÷64 (>> 6).
  • 11-битова стойност: 16-битов резултат÷32 (>> 5).
  • 12-битова стойност: 16-битов резултат÷16 (>> 4).

Отпечатване на резултатите:

print("potRead_10bit = " , potRead_10bit)
print("potRead_11bit = " , potRead_11bit)
print("potRead_12bit = " , potRead_12bit)
print("potRead_16bit = " , potRead_16bit)

Всяка стойност се отпечатва в терминала за наблюдение на резултатите.

Добавяне на пауза:

sleep(1)

Пауза от 1 секунда между измерванията, за да не се претоварва терминалът с твърде много данни.

Изходен резултат от кода:

На екранната снимка отдолу е показан изходния резултат от кода. Използвали сме Thonny IDE за стартиране на кода.

Как да изчетем аналогови стойности с Raspberry Pi Pico и MicroPython изходни резултати

Заключение

С този код можете лесно да изчитате аналогови сигнали с различна резолюция, използвайки Raspberry Pi Pico. Това е чудесен начин да разберете как работи ADC и как можете да адаптирате данните за вашите проекти. В следващите статии ще разгледаме как да визуализираме тези данни или да ги използваме за управление на други компоненти.

Документация:

Translate »