Arduino с анемометром: измерение скорости ветра
В этом руководстве вы узнаете, как использовать анемометр с платой Arduino для измерения скорости ветра. Мы рассмотрим, как запитать и подключить датчик к Arduino, а также напишем простой код для получения значений скорости ветра в различных единицах измерения.
В этом руководстве мы рассмотрим следующие темы:
Знакомство с анемометром
Анемометр — это устройство, которое позволяет измерять скорость ветра. Он обычно используется в метеостанциях.
Использование этого датчика довольно простое. Он выдает аналоговый сигнал, напряжение которого пропорционально скорости ветра. Мы используем анемометр с тремя чашами, как показано на фото ниже.
Технические характеристики анемометра
В зависимости от производителя и модели анемометр может иметь различные характеристики. Например, вот характеристики анемометра, используемого в этом руководстве:
Входное напряжение: 12–24 В постоянного тока
Выходное напряжение: 0–5 В
Диапазон измерений: 0–32,4 м/с
Разрешение: +/- 0,3 м/с
Это означает, что когда аналоговый сигнал равен 0, скорость ветра составляет 0. Однако в моем случае я заметил, что когда анемометр не двигался, выходное напряжение составляло 0,054 В, а не 0 В.
Поэтому я считаю это минимальным значением, измеренным когда датчик не движется. Рекомендую вам сделать то же самое и определить минимальное значение, считываемое с датчика, с помощью мультиметра.
Эти характеристики могут отличаться для вашей конкретной модели. Поэтому вам нужно учитывать это при преобразовании аналогового сигнала в скорость ветра.
Распиновка анемометра
Анемометр имеет три провода:
Синий провод |
Сигнал |
Черный провод |
GND |
Коричневый провод |
Питание |
Подключение анемометра к Arduino
Анемометр, который мы используем, требует входного напряжения не менее 12 В. Поэтому вы не можете запитать его непосредственно от Arduino — вам нужен внешний источник питания.
Мы питаем датчик с помощью адаптера питания 12 В и подключаем его к анемометру через разъем питания. Вы можете использовать любой другой подходящий источник питания.
Схема подключения: Arduino с анемометром
Вот список компонентов, которые вам понадобятся для этого руководства:
Плата Arduino — читайте Лучшие стартовые наборы Arduino
Подключение датчика к Arduino довольно простое. Вам нужно лишь подключить сигнальный провод к аналоговому пину Arduino и соединить GND вместе.
В моем случае мне нужно запитать датчик от внешнего источника питания 12 В.
Черный провод |
GND Arduino и GND источника питания |
Синий провод |
Подключить к аналоговому пину. Мы используем A0 |
Коричневый провод |
Источник питания 12 В (+) |
Arduino с анемометром — код для измерения скорости ветра
Следующий код считывает аналоговый сигнал с анемометра и преобразует его в скорость ветра.
Вы можете загрузить следующий код на вашу плату Arduino. Возможно, вам потребуется изменить некоторые переменные в зависимости от параметров вашего анемометра.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/arduino-anemometer-measure-wind-speed/
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.
*********/
// Constants (Change the following variables if needed)
const int anemometerPin = 0; // analog pin 0 (A0)
const float minVoltage = 0.054; // Voltage corresponding to 0 m/s
const float maxVoltage = 5; // Voltage corresponding to 32.4 m/s (max speed)
const float maxWindSpeed = 32.4; // Maximum wind speed in m/s
// Conversion factors
const float mps_to_kmh = 3.6; // 1 m/s = 3.6 km/h
const float mps_to_mph = 2.23694; // 1 m/s = 2.23694 mph
void setup() {
Serial.begin(9600);
}
void loop() {
// Read analog value from anemometer (ADC value between 0-1023 on Arduino for 0-5V)
int adcValue = analogRead(anemometerPin);
// Convert ADC value to voltage (Arduino ADC range is 0-5.0V)
float voltage = (adcValue / 1023.00) * 5.0;
// Ensure the voltage is within the anemometer operating range
if (voltage < minVoltage) {
voltage = minVoltage;
} else if (voltage > maxVoltage) {
voltage = maxVoltage;
}
// Map the voltage to wind speed
float windSpeed_mps = ((voltage - minVoltage) / (maxVoltage - minVoltage)) * maxWindSpeed;
// Convert wind speed to km/h and mph
float windSpeed_kmh = windSpeed_mps * mps_to_kmh;
float windSpeed_mph = windSpeed_mps * mps_to_mph;
// Print wind speed
Serial.print("Wind Speed: ");
Serial.print(windSpeed_mps);
Serial.print(" m/s, ");
Serial.print(windSpeed_kmh);
Serial.print(" km/h, ");
Serial.print(windSpeed_mph);
Serial.println(" mph");
delay(1000);
}
Как работает код?
Сначала определите пин, с которого вы считываете датчик (в нашем случае A0), минимальное и максимальное выходное напряжение датчика, а также максимальную скорость ветра.
// Constants (Change the following variables if needed)
const int anemometerPin = 0; // analog pin 0 (A0)
const float minVoltage = 0.054; // Voltage corresponding to 0 m/s
const float maxVoltage = 5; // Voltage corresponding to 32.4 m/s (max speed)
const float maxWindSpeed = 32.4; // Maximum wind speed in m/s
Это параметры для нашего датчика. Ваши параметры могут отличаться. Когда датчик не движется, он выдает напряжение 0,054 В, поэтому мы считаем это минимальным значением.
Далее у нас есть коэффициенты преобразования для перевода скорости ветра из м/с в км/ч и мили/ч.
// Conversion factors
const float mps_to_kmh = 3.6; // 1 m/s = 3.6 km/h
const float mps_to_mph = 2.23694; // 1 m/s = 2.23694 mph
В функции setup() мы инициализируем Serial Monitor.
void setup() {
Serial.begin(9600);
}
В функции loop() мы получаем новые показания с датчика каждую секунду.
Сначала мы считываем значение с пина АЦП и преобразуем его в значение напряжения. Максимальное значение, считываемое с пина АЦП Arduino, составляет 1023, что соответствует 5 В. Таким образом, мы можем преобразовать значение в напряжение с помощью следующей строки:
// Read analog value from anemometer (ADC value between 0-1023 on Arduino for 0-5V)
int adcValue = analogRead(anemometerPin);
// Convert ADC value to voltage (Arduino ADC range is 0-5.0V)
float voltage = (adcValue / 1023.00) * 5.0;
Затем у нас есть следующее условие для проверки, находятся ли считанные значения в определенном диапазоне.
if (voltage < minVoltage) {
voltage = minVoltage;
} else if (voltage > maxVoltage) {
voltage = maxVoltage;
}
Далее мы можем легко преобразовать полученное напряжение в значение скорости ветра (в качестве альтернативы вы можете использовать функцию Arduino map()).
float windSpeed_mps = ((voltage - minVoltage) / (maxVoltage - minVoltage)) * maxWindSpeed;
Затем мы преобразуем полученные значения в км/ч и мили/ч.
// Convert wind speed to km/h and mph
float windSpeed_kmh = windSpeed_mps * mps_to_kmh;
float windSpeed_mph = windSpeed_mps * mps_to_mph;
Наконец, мы выводим полученные результаты.
// Print wind speed
Serial.print("Wind Speed: ");
Serial.print(windSpeed_mps);
Serial.print(" m/s, ");
Serial.print(windSpeed_kmh);
Serial.print(" km/h, ");
Serial.print(windSpeed_mph);
Serial.println(" mph");
delay(1000);
Тестирование кода
Загрузите код на вашу плату Arduino. Убедитесь, что датчик правильно подключен и запитан.
Откройте Serial Monitor на скорости 9600 бод.
Раскрутите датчик, чтобы имитировать ветер, и наблюдайте значения, выводимые в Serial Monitor каждую секунду.
Вот и всё. Теперь вы можете считывать скорость ветра с помощью вашей платы Arduino. Теперь вы можете добавить анемометр в вашу метеостанцию.
Заключение
В этом руководстве вы узнали, как подключить анемометр к плате Arduino. Это основной датчик, который стоит добавить в вашу метеостанцию для получения данных о скорости ветра.
У нас есть руководства для более чем 30 датчиков для Arduino. Вы можете ознакомиться с ними ниже:
Надеемся, что это руководство было для вас полезным. Вам также могут понравиться другие связанные руководства: