![Как да изчетем аналогови стойности с Raspberry Pi Pico и MicroPython](http://ardudevelop.eu/wp-content/uploads/2024/12/Как-да-изчетем-аналогови-стойности-с-Raspberry-Pi-Pico-и-MicroPython.png)
Въведение
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 изходни резултати](http://ardudevelop.eu/wp-content/uploads/2024/12/Как-да-изчетем-аналогови-стойности-с-Raspberry-Pi-Pico-и-MicroPython-изходни-резултати.png)
Заключение
С този код можете лесно да изчитате аналогови сигнали с различна резолюция, използвайки Raspberry Pi Pico. Това е чудесен начин да разберете как работи ADC и как можете да адаптирате данните за вашите проекти. В следващите статии ще разгледаме как да визуализираме тези данни или да ги използваме за управление на други компоненти.
Документация: