Raspberry Pi Pico: чтение аналоговых входов (Arduino IDE)

В этом руководстве показано, как считывать аналоговые значения с помощью 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 с потенциометром

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. Они выделены тёмно-зелёным цветом.

Распиновка Raspberry Pi Pico W Распиновка 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.

Схема подключения потенциометра к 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.

Raspberry Pi Pico - режим загрузчика

Для последующих загрузок с использованием Arduino IDE плата должна автоматически переходить в режим загрузчика без необходимости нажимать кнопку BOOTSEL.

Теперь выберите COM-порт в меню Tools > Port. Возможно, COM-порт будет неактивен (серый). Если это так, не беспокойтесь – он автоматически найдёт порт, как только вы нажмёте кнопку загрузки.

Raspberry Pi Pico - COM-порт не найден в Arduino IDE

Загрузите код.

Кнопка загрузки Arduino IDE

Вы должны получить сообщение об успешной загрузке.

Raspberry Pi Pico - успешная загрузка кода в Arduino IDE

Демонстрация

После загрузки кода на плату откройте монитор последовательного порта на скорости 115200 бод.

Открыть монитор последовательного порта

Поворачивайте потенциометр и наблюдайте за изменением значений.

Raspberry Pi Pico - регулировка потенциометра, аналоговое чтение

Максимальное значение, которое вы можете получить, равно 4095, а минимальное – 0.

Чтение аналоговых значений в Arduino IDE на Raspberry Pi Pico

Заключение

В этом руководстве вы узнали об аналоговом чтении с помощью Raspberry Pi Pico. У него пять 12-битных каналов АЦП, четыре из которых доступны на GPIO, а пятый канал подключён к внутреннему датчику температуры.

Считывание напряжения на GPIO так же просто, как использование функции analogRead() и передача соответствующего GPIO в качестве аргумента. Это даст вам значение от 0 до 4095, где 0 соответствует 0 В, а 4095 – 3,3 В.

Мы надеемся, что это руководство оказалось для вас полезным. Если вы только начинаете работу с Raspberry Pi Pico, вам могут быть интересны следующие руководства: