Raspberry Pi Pico с анемометром: измерение скорости ветра (MicroPython)

Узнайте, как подключить анемометр к Raspberry Pi Pico для измерения скорости ветра. Мы рассмотрим, как запитать и подключить датчик к Pico, а также напишем простой код для получения значений скорости ветра в различных единицах измерения. Плата Raspberry Pi Pico будет программироваться с использованием прошивки MicroPython.

Raspberry Pi Pico с анемометром - измерение скорости ветра MicroPython

В этом руководстве мы рассмотрим следующие темы:

Необходимые условия – прошивка MicroPython

Для выполнения этого руководства вам необходимо установить прошивку MicroPython на плату Raspberry Pi Pico. Вам также потребуется IDE для написания и загрузки кода на плату.

Рекомендуемая IDE для MicroPython на Raspberry Pi Pico – это Thonny IDE. Следуйте следующему руководству, чтобы узнать, как установить Thonny IDE, прошить прошивку MicroPython и загрузить код на плату.

Знакомство с анемометром

Анемометр – это устройство, которое позволяет измерять скорость ветра. Он широко используется на метеостанциях.

Использование этого датчика довольно простое. Он выдает аналоговый сигнал, напряжение которого пропорционально скорости ветра. Мы используем анемометр с тремя чашками, как на изображении ниже.

Датчик ветра - анемометр

Технические характеристики анемометра

В зависимости от производителя, анемометр может иметь различные характеристики. Например, вот характеристики анемометра, используемого в данном руководстве:

  • Входное напряжение: 12-24В постоянного тока

  • Выходное напряжение: 0-5В

  • Диапазон измерения: 0-32,4 м/с

  • Разрешение: +/- 0,3 м/с

Это означает, что когда аналоговый сигнал равен 0, скорость ветра равна 0. Однако в моем случае, после подачи питания на датчик и применения делителя напряжения, я заметил, что когда анемометр не двигался, выходное напряжение составляло 0,033В, а не 0В.

Raspberry Pi Pico измерение напряжения от датчика ветра без ветра

Поэтому я считаю это минимальным значением, измеренным когда датчик не движется. Рекомендую вам сделать то же самое и определить минимальное значение, считываемое с датчика, с помощью мультиметра.

Эти параметры могут отличаться в зависимости от производителя. Поэтому вам нужно учитывать это при преобразовании аналогового сигнала в скорость ветра.

Распиновка анемометра

Анемометр поставляется с тремя проводами:

Синий провод

Сигнал

Черный провод

GND

Коричневый провод

Питание

Распиновка анемометра, датчика ветра

Подключение анемометра к Raspberry Pi Pico

Анемометр требует входное напряжение не менее 12В. Поэтому вы не можете запитать его напрямую от Raspberry Pi Pico, вам нужен внешний источник питания.

Блок питания 12В постоянного тока

Мы питаем датчик с помощью блока питания 12В и подключаем его к анемометру через разъем питания. Вы можете использовать любой другой подходящий источник питания.

Адаптер разъема питания постоянного тока

Преобразование сигнала данных из 5В в 3.3В

В случае нашего датчика он работает в диапазоне от 0 до 5В. Однако аналоговые выводы Raspberry Pi Pico могут считывать максимум 3,3В. Поэтому нам нужно преобразовать сигнал 5В в сигнал 3,3В. Для этого мы можем использовать делитель напряжения.

Примечание

Если вы используете анемометр, подобный тому, что выпускает Adafruit, вам не нужно беспокоиться об этом, потому что максимальное выходное напряжение составляет 2В.

Делитель напряжения – это простая схема, которая уменьшает большое напряжение до меньшего. Используя 2 резистора и входное напряжение, мы можем создать выходное напряжение, которое является долей входного. Ниже вы можете увидеть формулу, которую нужно использовать для расчета резисторов, необходимых в вашей схеме:

Формула делителя напряжения

Если мы используем резистор 1 кОм (R1) и резистор 2 кОм (R2), мы получим максимальное выходное напряжение 3,3В, что является максимумом, который может считать Raspberry Pi Pico.

Вот как выглядит схема делителя напряжения (где 5В – это максимальное значение вывода данных датчика):

Делитель напряжения 5В в 3.3В

Вы можете использовать любую другую комбинацию резисторов, но вам нужно учитывать максимальное выходное напряжение, допускаемое используемой комбинацией резисторов.

Схема подключения: Raspberry Pi Pico с анемометром

Raspberry Pi Pico с анемометром - схема подключения датчика ветра

Вот список компонентов, которые вам понадобятся для этого руководства:

  • Raspberry Pi Pico

  • Анемометр (датчик скорости ветра)

  • Блок питания 12В постоянного тока

  • Адаптер разъема питания постоянного тока

  • Резистор 1 кОм и резистор 2 кОм

  • Макетная плата

  • Соединительные провода

  • Мультиметр

Вы можете использовать следующую схему в качестве справки для подключения датчика к плате. Не забудьте соединить выводы GND вместе.

Raspberry Pi Pico с датчиком ветра - анемометр - схема подключения

Мы подключаем вывод данных к GPIO 26 Raspberry Pi Pico. Другие выводы, которые вы можете использовать – это GPIO 27 и 28.

Рекомендуем прочитать: Распиновка Raspberry Pi Pico и Pico W: описание GPIO

Если вы используете анемометр, подобный тому, что выпускает Adafruit, который выдает максимум 2В, вы можете подключить выходной вывод напрямую к аналоговому выводу Raspberry Pi Pico (делитель напряжения не нужен).

Черный провод

GND платы Pico и GND источника питания

Синий провод

Подключить к аналоговому выводу Pico (через делитель напряжения, если необходимо), мы используем GPIO 26.

Коричневый провод

Источник питания 12В (+)

Raspberry Pi Pico с анемометром – код MicroPython для измерения скорости ветра

Следующий код считывает аналоговый сигнал с анемометра и преобразует его в скорость ветра.

Вы можете загрузить следующий код на ваш Raspberry Pi Pico. Возможно, вам потребуется изменить некоторые переменные в зависимости от параметров вашего анемометра.

from machine import ADC, Pin
from time import sleep

# Константы
anemometer_pin = 26    # GPIO вывод, подключенный к анемометру
min_voltage = 0.033    # Напряжение, соответствующее 0 м/с
max_voltage = 3.3      # Напряжение, соответствующее 32.4 м/с (макс. скорость при использовании делителя напряжения)
max_wind_speed = 32.4  # Максимальная скорость ветра в м/с

# Коэффициенты преобразования
mps_to_kmh = 3.6      # 1 м/с = 3.6 км/ч
mps_to_mph = 2.23694  # 1 м/с = 2.23694 миль/ч

# Настройка АЦП
adc = ADC(Pin(anemometer_pin))

while True:
    # Чтение аналогового значения с анемометра
    adc_value = adc.read_u16() # чтение значения, 0-65535 в диапазоне напряжений 0.0В - 3.3В

    # Преобразование значения АЦП в напряжение
    voltage = (adc_value / 65535.0) * 3.3

    # Проверка, что напряжение находится в рабочем диапазоне анемометра
    if voltage < min_voltage:
        voltage = min_voltage
    elif voltage > max_voltage:
        voltage = max_voltage

    # Преобразование напряжения в скорость ветра
    wind_speed_mps = ((voltage - min_voltage) / (max_voltage - min_voltage)) * max_wind_speed

    # Преобразование скорости ветра в км/ч и миль/ч
    wind_speed_kmh = wind_speed_mps * mps_to_kmh
    wind_speed_mph = wind_speed_mps * mps_to_mph

    # Вывод скорости ветра
    print("Wind Speed:")
    print("{:.2f} m/s".format(wind_speed_mps))
    print("{:.2f} km/h".format(wind_speed_kmh))
    print("{:.2f} mph".format(wind_speed_mph))
    print()

    sleep(1)

Как работает код?

Начнем с импорта необходимых модулей. Классы ADC и Pin из модуля machine для настройки GPIO в качестве выводов АЦП.

from machine import ADC, Pin
from time import sleep

Определяем вывод, с которого считываем показания датчика, минимальное и максимальное выходное напряжение датчика, а также максимальную скорость ветра. Мы используем GPIO 26 для чтения аналогового сигнала с датчика ветра.

anemometer_pin = 26  # GPIO вывод, подключенный к анемометру
min_voltage = 0.033   # Напряжение, соответствующее 0 м/с
max_voltage = 3.3    # Напряжение, соответствующее 32.4 м/с (макс. скорость при использовании делителя напряжения)
max_wind_speed = 32.4 # Максимальная скорость ветра в м/с

Затем у нас есть коэффициенты преобразования для перевода скорости ветра из м/с в км/ч и мили в час.

# Коэффициенты преобразования
mps_to_kmh = 3.6     # 1 м/с = 3.6 км/ч
mps_to_mph = 2.23694 # 1 м/с = 2.23694 миль/ч

Создаем объект ADC на GPIO, который используется для чтения аналогового датчика.

adc = ADC(Pin(anemometer_pin))

Наконец, у нас есть цикл while, который получает новые значения скорости ветра каждую секунду.

Сначала мы считываем значение на выводе АЦП и преобразуем его в значение напряжения. Для чтения аналогового сигнала используйте функцию read_u16() на объекте adc.

while True:
    # Чтение аналогового значения с анемометра
    adc_value = adc.read_u16() # чтение значения, 0-65535 в диапазоне напряжений 0.0В - 3.3В

Максимальное значение, считываемое на выводе АЦП Pico (16 бит), равно 65535, что соответствует 3,3В.

Таким образом, мы можем преобразовать значение в напряжение с помощью следующей строки:

# Преобразование значения АЦП в напряжение
voltage = (adc_value / 65535.0) * 3.3

Затем у нас есть следующее условие для проверки, находятся ли считанные значения в определенном диапазоне.

# Проверка, что напряжение находится в рабочем диапазоне анемометра
if voltage < min_voltage:
    voltage = min_voltage
elif voltage > max_voltage:
    voltage = max_voltage

Далее мы можем легко преобразовать полученное напряжение в значение скорости ветра следующим образом:

# Преобразование напряжения в скорость ветра
wind_speed_mps = ((voltage - min_voltage) / (max_voltage - min_voltage)) * max_wind_speed

Затем мы преобразуем полученные значения в км/ч и мили в час.

# Преобразование скорости ветра в км/ч и миль/ч
wind_speed_kmh = wind_speed_mps * mps_to_kmh
wind_speed_mph = wind_speed_mps * mps_to_mph

Наконец, мы выводим полученные результаты.

# Вывод скорости ветра
print("Wind Speed:")
print("{:.2f} m/s".format(wind_speed_mps))
print("{:.2f} km/h".format(wind_speed_kmh))
print("{:.2f} mph".format(wind_speed_mph))
print()

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

Запустите или загрузите код на вашу плату с помощью Thonny IDE.

Thonny IDE запуск кода

В оболочке MicroPython Shell вы должны получить данные о скорости ветра.

Raspberry Pi Pico измерение скорости ветра MicroPython - демонстрация

Возможно, вам потребуется дополнительная калибровка датчика для получения более точных результатов.

Заключение

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

Анемометр – это важный датчик для добавления к вашей метеостанции. Если вы хотите создать метеостанцию на базе Raspberry Pi Pico, у нас есть другие руководства, которые могут быть вам полезны: