КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Raspberry Pi Pico: подключаем потенциометр и работаем с АЦП (Arduino IDE)





Общие сведения

В этом уроке мы научимся использовать Аналого-цифровой преобразователь (АЦП) 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);
}

Ссылки




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями