Raspberry Pi Pico: чтение аналоговых входов (Arduino IDE)
В этом руководстве показано, как считывать аналоговые значения с помощью Raspberry Pi Pico в Arduino IDE. В качестве примера мы будем считывать значения с потенциометра, но всё, что вы узнаете, можно применить к любому аналоговому датчику или периферийному устройству.
У нас есть аналогичное руководство с использованием прошивки MicroPython: Raspberry Pi Pico: чтение аналоговых входов (MicroPython).
Если вы привыкли программировать Arduino, ESP32 и/или ESP8266 с помощью Arduino IDE, вы обнаружите, что программирование Raspberry Pi Pico во многом аналогично.
Необходимые условия
Вам необходимо установить платы Raspberry Pi Pico в Arduino IDE, а также знать, как загружать код на плату. Сначала ознакомьтесь со следующим руководством, если вы этого ещё не сделали:
Аналоговые измерения – Raspberry Pi Pico
В этом руководстве вы узнаете, как считывать аналоговый вход с помощью Raspberry Pi Pico. Это полезно для чтения значений с переменных резисторов, таких как потенциометры, или аналоговых датчиков.
Raspberry Pi Pico имеет 12-битный АЦП с четырьмя каналами на фиксированном наборе выводов (плюс дополнительный встроенный датчик температуры). Это означает, что он может преобразовывать аналоговый сигнал в цифровой в виде числа в диапазоне от 0 до 4095.
У него пять каналов АЦП, но только четыре доступны на GPIO: GPIO26, GPIO27, GPIO28 и GPIO29.
Первые три GPIO (26, 27 и 28) можно использовать для считывания напряжения с периферийных устройств, а GPIO29 можно использовать для измерения уровня напряжения источника питания VSYS на плате Raspberry Pi Pico (VSYS – это входное напряжение, которое питает плату).
Пятый канал АЦП подключён к встроенному датчику температуры.
Таким образом, вот основные характеристики аналоговых выводов платы Raspberry Pi Pico:
12-битное разрешение – преобразует аналоговый сигнал в значение от 0 до 4095;
4 канала АЦП на внешних GPIO;
GPIO 26, 27 и 28 можно использовать для считывания выходного напряжения с периферийных устройств;
GPIO29 может измерять входное напряжение, питающее плату (VSYS);
Существует пятый канал АЦП, который подключён к внутреннему датчику температуры.
Определите выводы АЦП на вашей плате Raspberry Pi Pico. Они выделены тёмно-зелёным цветом.
Чтобы узнать больше о распиновке Pico, прочитайте следующее руководство: Распиновка Raspberry Pi Pico и Pico W: описание GPIO.
analogRead()
Считывание аналогового входа на Raspberry Pi Pico с помощью Arduino IDE так же просто, как использование функции analogRead(), которая принимает в качестве аргумента GPIO, который вы хотите прочитать, следующим образом:
analogRead(GPIO);
По умолчанию ваш код установит 10-битное разрешение. Чтобы установить 12-битное разрешение, вы можете использовать функцию analogReadResolution() следующим образом:
analogReadResolution(12);
Схема подключения
Прежде чем продолжить, подключите потенциометр к плате Raspberry Pi Pico. Вы можете подключить вывод данных к любому выводу АЦП. Мы будем использовать ADC0 на GPIO 26.
Необходимые компоненты
Вот список компонентов, необходимых для сборки схемы:
Raspberry Pi Pico
Потенциометр
Макетная плата
Соединительные провода
Схема подключения – Raspberry Pi Pico
Вы можете использовать следующую схему для подключения потенциометра к плате Raspberry Pi Pico.
В этом примере мы используем GPIO26 для чтения аналоговых значений с потенциометра, но вы можете выбрать любой другой GPIO, поддерживающий АЦП.
Код – Raspberry Pi Pico: чтение аналоговых входов
Следующий код для Raspberry Pi Pico считывает аналоговые значения с GPIO 26 и выводит результаты в монитор последовательного порта.
/*********
Rui Santos
Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-analog-inputs-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
// Potentiometer is connected to GPIO 26 (Analog ADC0)
const int potPin = 26;
// variable for storing the potentiometer value
int potValue = 0;
void setup() {
Serial.begin(115200);
analogReadResolution(12);
delay(1000);
}
void loop() {
// Reading potentiometer value
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);
}
Как работает код
Этот код просто считывает значения с потенциометра и выводит эти значения в монитор последовательного порта.
В коде вы начинаете с определения GPIO, к которому подключён потенциометр. В этом примере это GPIO 26.
const int potPin = 26;
В setup() мы инициализируем последовательную связь на скорости 115200 бод.
Serial.begin(115200);
Устанавливаем 12-битное разрешение с помощью функции analogReadResolution().
analogReadResolution(12);
Если вы предпочитаете использовать 10-битное разрешение по умолчанию, вам просто нужно удалить эту предыдущую строку.
В loop() вы используете функцию analogRead() для чтения аналогового входа с potPin.
potValue = analogRead(potPin);
Наконец, вы выводите значения, считанные с потенциометра, в монитор последовательного порта.
Serial.println(potValue);
Загрузка кода на Raspberry Pi Pico
Чтобы вы могли загрузить код на Raspberry Pi Pico, плата должна находиться в режиме загрузчика.
Если на Raspberry Pi Pico в данный момент установлена прошивка MicroPython, вам необходимо вручную перевести его в режим загрузчика. Для этого подключите Raspberry Pi Pico к компьютеру, одновременно удерживая кнопку BOOTSEL.
Для последующих загрузок с использованием Arduino IDE плата должна автоматически переходить в режим загрузчика без необходимости нажимать кнопку BOOTSEL.
Теперь выберите COM-порт в меню Tools > Port. Возможно, COM-порт будет неактивен (серый). Если это так, не беспокойтесь – он автоматически найдёт порт, как только вы нажмёте кнопку загрузки.
Загрузите код.
Вы должны получить сообщение об успешной загрузке.
Демонстрация
После загрузки кода на плату откройте монитор последовательного порта на скорости 115200 бод.
Поворачивайте потенциометр и наблюдайте за изменением значений.
Максимальное значение, которое вы можете получить, равно 4095, а минимальное – 0.
Заключение
В этом руководстве вы узнали об аналоговом чтении с помощью Raspberry Pi Pico. У него пять 12-битных каналов АЦП, четыре из которых доступны на GPIO, а пятый канал подключён к внутреннему датчику температуры.
Считывание напряжения на GPIO так же просто, как использование функции analogRead() и передача соответствующего GPIO в качестве аргумента. Это даст вам значение от 0 до 4095, где 0 соответствует 0 В, а 4095 – 3,3 В.
Мы надеемся, что это руководство оказалось для вас полезным. Если вы только начинаете работу с Raspberry Pi Pico, вам могут быть интересны следующие руководства: