Общие сведения
В этом уроке мы научимся использовать Аналого-цифровой преобразователь (АЦП) Rasbperry Pi Pico и будем управлять яркостью светодиода при помощи потенциометра.
Для этого урока нам понадобится:
Подключение
Подключим Trema-модуль Светодиод согласно таблице
Вывод модуля | Вывод Pi Pico |
---|---|
Vcc | 3V3(OUT) |
GND | GND |
S | GP15 |
Подключим Trema-модуль Потенциометр согласно таблице
Вывод модуля | Вывод Pi Pico |
---|---|
Vcc | ADC_VREF |
GND | AGND |
S | GP26 |
Читаем показания АЦП
Если подключить крайние выводы практически любого потенциометра к напряжению питания (один к GND, второй к VCC), то на среднем выводе (ползунок потенциометра) можно считать любое напряжение от GND до VCC. Это происходит за счёт того, что конструкция потенциометра представляет собой делитель напряжения и в любом положении ползунка эквивалентен двум резисторам включённым между рельсами питания.
Напряжения на ползунке потенциометра, конечно, можно использовать для того чтобы питать что-то, чему нужно определённое напряжение, но ток будет очень ограничен сопротивлением и рейтингом мощности самого потенциометра (для таких целей лучше использовать реостат). В мире цифровых технологий гораздо удобнее преобразовать напряжение в число и потом использовать это число, чтобы контролировать что-либо, например ШИМ на силовом ключе или источнике постоянного тока. Для преобразования напряжения в число и используется АЦП.
// определяем вывод к которому подключен потенциометр #define POT_PIN 26 void setup() { // включаем последовательный порт Serial.begin(115200); // устанавливаем режим работы потенциометра pinMode(POT_PIN, INPUT); } void loop() { // записываем значение АЦП int raw_value = analogRead(POT_PIN); // преобразуем в процент int percent = (raw_value*100) /1024; // переменная для хранения предыдущего значения static int last_value = 0; // если значение отличается от предыдущего if (last_value != percent) { // выводим новое значение в последовательный порт Serial.println("Ручка потенциометра на " + String(percent) + "%"); // сохраняем значение last_value = percent; } delay(100); }
Аналоговый диммер
Попробуем использовать эти данные для управления яркостью светодиода при помощи ШИМ.
При вращении ручки потенциометра светодиод будет менять свою яркость.
// определяем вывод потенциометра #define POT_PIN 26 // определяем вывод к которому подключён светодиод #define LED_PIN 15 void setup() { // устанавливаем режим работы вывода потенциометра pinMode(POT_PIN, INPUT); // устанавливаем режим работы вывода светодиода pinMode(LED_PIN, OUTPUT); } void loop() { // записываем значение АЦП int raw_value = analogRead(POT_PIN); // преобразуем в процент int percent = (raw_value*100) /1024; // переменная для хранения предыдущего значения static int last_value = 0; // если значение отличается от предыдущего if (last_value != percent) { // записываем новое значение last_value = percent; // устанавливаем широту импулься на выводе светодиода analogWrite(LED_PIN, percent*2.5); } delay(100); }
Обсуждение