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





Обсуждение