Общие сведения
В этом уроке мы научимся использовать Аналого-цифровой преобразователь (АЦП) Rasbperry Pi Pico и будем управлять яркостью светодиода при помощи потенциометра.
Для этого урока нам понадобится:
Для работы данных примеров в Pi Pico необходимо загрузить прошивку MicroPython и установить Thonny IDE, о том как это сделать можно прочитать в этой статье https://lesson.iarduino.ru/page/pi-pico-python-ide
Подключение
Подключим Trema-модуль Светодиод согласно таблице
Вывод модуля | Вывод Pi Pico |
---|---|
Vcc | 3V3(OUT) |
GND | GND |
S | GP15 |
Подключим Trema-модуль Потенциометр согласно таблице
Вывод модуля | Вывод Pi Pico |
---|---|
Vcc | ADC_VREF |
GND | AGND |
S | GP26 |
Читаем показания АЦП
Если подключить крайние выводы практически любого потенциометра к напряжению питания (один к GND, второй к VCC), то на среднем выводе (ползунок потенциометра) можно считать любое напряжение от GND до VCC. Это происходит за счёт того, что конструкция потенциометра представляет собой делитель напряжения и в любом положении ползунка эквивалентен двум резисторам включённым между рельсами питания.
Напряжения на ползунке потенциометра, конечно, можно использовать для того чтобы питать что-то, чему нужно определённое напряжение, но ток будет очень ограничен сопротивлением и рейтингом мощности самого потенциометра (для таких целей лучше использовать реостат). В мире цифровых технологий гораздо удобнее преобразовать напряжение в число и потом использовать это число, чтобы контролировать что-либо либо, например ШИМ на силовом ключе или источнике постоянного тока. Для преобразования напряжения в число и используется АЦП.
Подключим АЦП, введём в оболочке следующую строку
>>> from machine import ADC
Мы импортировали всё, что необходимо для работы с АЦП Rasbperry Pi Pico. Далее создадим объект АЦП и укажем к какому выводу подключен ползунок потенциометра
>>> pot = ADC("GP26")
Теперь, вызвав метод read_u16()
мы можем узнать какое
где находится ползунок в пределах от 0 до 65535
>>> pot.read_u16() 33544 >>>
Для упрощения понимания мы можем преобразовать это число в проценты:
>>> value = pot.read_u16() >>> percent = int(value / 65535 * 100) >>> print("{} %".format(percent))
Аналоговый диммер
Попробуем использовать эти данные для управления яркостью светодиода при помощи ШИМ.
При вращении ручки потенциометра светодиод будет менять свою яркость.
# Подключаем АЦП, Выводы и ШИМ from machine import ADC, Pin, PWM # Подключаем функцию сна в миллисекундах и называем её from time import sleep_ms as delay # Создаём объект потенциометра pot = ADC("GP26") # Создаём объект светодиода led = PWM(Pin("GP15", Pin.OUT)) # Устанавливаем частоту led.freq(1000) # Запускаем ШИМ led.init() # Бесконечный цикл while True: # Читаем положение ползунка value = pot.read_u16() # Устанавливаем ШИМ на светодиоде led.duty_u16(value) # Ждём 100 миллисекунд delay(100)
Обсуждение