Raspberry Pi Pico с анемометром: измерение скорости ветра (MicroPython)
Узнайте, как подключить анемометр к Raspberry Pi Pico для измерения скорости ветра. Мы рассмотрим, как запитать и подключить датчик к Pico, а также напишем простой код для получения значений скорости ветра в различных единицах измерения. Плата 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В.
Поэтому я считаю это минимальным значением, измеренным когда датчик не движется. Рекомендую вам сделать то же самое и определить минимальное значение, считываемое с датчика, с помощью мультиметра.
Эти параметры могут отличаться в зависимости от производителя. Поэтому вам нужно учитывать это при преобразовании аналогового сигнала в скорость ветра.
Распиновка анемометра
Анемометр поставляется с тремя проводами:
Синий провод |
Сигнал |
Черный провод |
GND |
Коричневый провод |
Питание |
Подключение анемометра к Raspberry Pi Pico
Анемометр требует входное напряжение не менее 12В. Поэтому вы не можете запитать его напрямую от Raspberry Pi Pico, вам нужен внешний источник питания.
Мы питаем датчик с помощью блока питания 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В – это максимальное значение вывода данных датчика):
Вы можете использовать любую другую комбинацию резисторов, но вам нужно учитывать максимальное выходное напряжение, допускаемое используемой комбинацией резисторов.
Схема подключения: Raspberry Pi Pico с анемометром
Вот список компонентов, которые вам понадобятся для этого руководства:
Raspberry Pi Pico
Анемометр (датчик скорости ветра)
Блок питания 12В постоянного тока
Адаптер разъема питания постоянного тока
Резистор 1 кОм и резистор 2 кОм
Макетная плата
Соединительные провода
Мультиметр
Вы можете использовать следующую схему в качестве справки для подключения датчика к плате. Не забудьте соединить выводы GND вместе.
Мы подключаем вывод данных к 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.
В оболочке MicroPython Shell вы должны получить данные о скорости ветра.
Возможно, вам потребуется дополнительная калибровка датчика для получения более точных результатов.
Заключение
В этом руководстве вы узнали, как подключить анемометр к Raspberry Pi Pico, программируемому с помощью MicroPython, для получения данных о скорости ветра.
Анемометр – это важный датчик для добавления к вашей метеостанции. Если вы хотите создать метеостанцию на базе Raspberry Pi Pico, у нас есть другие руководства, которые могут быть вам полезны: