ESP8266 NodeMCU с анемометром: измерение скорости ветра (Arduino IDE)
В этом руководстве вы узнаете, как подключить анемометр к плате ESP8266 NodeMCU для измерения скорости ветра. Мы рассмотрим, как запитать и подключить датчик к плате, а также напишем простой код для получения значений скорости ветра в различных единицах измерения.
У нас есть аналогичное руководство для ESP32 с анемометром: измерение скорости ветра (Arduino IDE)
Содержание:
В этом руководстве мы рассмотрим следующие темы:
Знакомство с анемометром
Анемометр — это устройство, которое позволяет нам измерять скорость ветра. Он обычно используется на метеостанциях.
Использовать этот датчик довольно просто. Он выдает аналоговый сигнал, напряжение которого пропорционально скорости ветра. Мы используем анемометр с тремя чашками, как показано на изображении ниже.
Технические характеристики анемометра
В зависимости от производителя, анемометр может иметь различные характеристики. Например, вот характеристики анемометра, используемого в данном руководстве:
Входное напряжение: 12-24В постоянного тока
Выходное напряжение: 0-5В
Диапазон измерения: 0-32,4 м/с
Разрешение: +/- 0,3 м/с
Это означает, что когда аналоговый сигнал равен 0, скорость ветра равна 0. Однако в моем случае, после подачи питания на датчик и применения делителя напряжения, я заметил, что когда анемометр не двигался, выходное напряжение составляло 0,033В, а не 0В.
Поэтому я считаю это минимальным значением, измеренным, когда датчик не двигается. Я рекомендую вам сделать то же самое и определить минимальное значение, считываемое с датчика, с помощью мультиметра.
Эти характеристики могут отличаться в зависимости от производителя. Поэтому вам необходимо учитывать это при преобразовании аналогового сигнала в скорость ветра.
Распиновка анемометра
Анемометр имеет три провода:
Синий провод |
Сигнал |
Черный провод |
GND |
Коричневый провод |
Питание |
Подключение анемометра к ESP8266
Анемометр требует входное напряжение не менее 12В. Поэтому вы не можете запитать его напрямую от ESP8266 — вам нужен внешний источник питания.
Мы питаем датчик с помощью блока питания 12В и подключаем его к анемометру через разъем питания. Вы можете использовать любой другой подходящий источник питания.
Преобразование сигнала данных с 5В в 3.3В
В случае моего датчика он работает в диапазоне от 0 до 5В. Однако аналоговый пин ESP8266 может считывать максимум 3,3В. Поэтому нам нужно преобразовать сигнал 5В в сигнал 3,3В. Для этого мы можем использовать делитель напряжения.
Примечание: если вы используете анемометр, подобный тому, что от Adafruit, вам не нужно беспокоиться об этом, потому что максимальное выходное напряжение составляет 2В.
Делитель напряжения — это простая схема, которая уменьшает большое напряжение до меньшего. Используя 2 резистора и входное напряжение, мы можем создать выходное напряжение, которое является частью входного. Ниже вы можете увидеть формулу, которую вам нужно использовать для расчета резисторов, необходимых в вашей схеме:
Если мы используем резистор 1 кОм (R1) и резистор 2 кОм (R2), мы получим максимальное выходное напряжение 3,3В, что является максимумом, который может считать ESP8266.
Вот как выглядит схема делителя напряжения (где 5В — это максимальное значение вывода данных датчика):
Вы можете использовать любую другую комбинацию резисторов, но вам нужно учитывать максимальное выходное напряжение, допускаемое используемой комбинацией резисторов.
Подробнее здесь: Как преобразовать уровень с 5В в 3,3В
Подключение схемы: ESP8266 с анемометром
Вот список компонентов, необходимых для этого руководства:
ESP8266 (читайте сравнение плат разработки ESP8266)
Вы можете использовать следующую схему в качестве справки для подключения датчика к ESP8266. Не забудьте соединить выводы GND вместе:
Если вы используете анемометр, подобный тому, что от Adafruit, который выдает максимум 2В, вы можете подключить выходной пин напрямую к аналоговому пину ESP8266 (делитель напряжения не нужен).
Черный провод |
GND ESP8266 и GND источника питания |
Синий провод |
Подключить к аналоговому пину A0 (через делитель напряжения, при необходимости). |
Коричневый провод |
Источник питания 12В (+) |
ESP8266 с анемометром — код измерения скорости ветра
Следующий код считывает аналоговый сигнал с анемометра и преобразует его в скорость ветра.
Вы можете загрузить следующий код на ваш ESP8266. Возможно, вам потребуется изменить некоторые переменные в зависимости от параметров вашего анемометра.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-anemometer-wind-speed-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 Softwar
*********/
// Constants (Change the following variables if needed)
const int anemometerPin = A0; // GPIO pin connected to anemometer (analog pin)
const float minVoltage = 0.033; // Voltage corresponding to 0 m/s
const float maxVoltage = 3.3; // Voltage corresponding to 32.4 m/s (max speed) (when using voltage divider)
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(115200);
}
void loop() {
// Read analog value from anemometer (ADC value between 0-1023 on ESP8266 for 0-3.3V)
int adcValue = analogRead(anemometerPin);
// Convert ADC value to voltage (ESP8266 ADC range is 0-3.3V)
float voltage = (adcValue / 1023.00) * 3.3;
// 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);
}
Как работает код?
Сначала определите пин, к которому подключен датчик, минимальное и максимальное выходное напряжение датчика, а также максимальную скорость ветра.
const int anemometerPin = A0; // GPIO pin connected to anemometer (analog pin)
const float minVoltage = 0.033; // Voltage corresponding to 0 m/s
const float maxVoltage = 3.3; // Voltage corresponding to 32.4 m/s (max speed) (when using voltage divider)
const float maxWindSpeed = 32.4; // Maximum wind speed in m/s
Это параметры для нашего датчика. Ваши могут отличаться. При использовании делителя напряжения максимальное напряжение, которое считает ESP8266, составляет 3,3В, что будет соответствовать максимальной скорости ветра. Когда датчик не двигается, он выдает напряжение 0,033 (считанное на выходе делителя напряжения), поэтому мы считаем его минимальным значением.
Затем у нас есть коэффициенты преобразования для перевода скорости ветра из м/с в км/ч и мили в час.
// 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(115200);
}
В loop() мы получаем новые показания с датчика каждую секунду.
Сначала мы считываем значение на пине АЦП и преобразуем его в значение напряжения. Максимальное значение, считываемое на пине АЦП ESP8266, равно 1023, что соответствует 3,3В. Таким образом, мы можем преобразовать значение в напряжение, используя следующую строку:
// Read analog value from anemometer (ADC value between 0-1023 on ESP8266 for 0-3.3V)
int adcValue = analogRead(anemometerPin);
// Convert ADC value to voltage (ESP8266 ADC range is 0-3.3V)
float voltage = (adcValue / 1023.00) * 3.3;
Связанный контент: ESP8266 — чтение аналоговых значений с Arduino IDE
Затем у нас есть следующее условие для проверки, находятся ли считанные значения в определенном диапазоне.
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);
}
Тестирование кода
Загрузите код на ваш ESP8266. Убедитесь, что датчик правильно подключен и запитан.
Откройте Serial Monitor с baud rate 115200.
Вращайте датчик, чтобы имитировать ветер, и наблюдайте за значениями, которые выводятся в Serial Monitor каждую секунду.
Вот и всё. Теперь вы можете считывать скорость ветра с помощью вашего ESP8266. Теперь вы можете добавить анемометр на вашу метеостанцию.
Заключение
В этом руководстве вы узнали, как подключить анемометр к вашей плате ESP8266. Это фундаментальный датчик для добавления на вашу метеостанцию для получения данных о скорости ветра.
У нас есть руководства для более чем 20 датчиков с ESP8266. Вы можете ознакомиться с ними ниже:
Надеемся, вы нашли это руководство полезным. Вам также могут понравиться другие связанные руководства:
ESP8266 NodeMCU веб-сервер: отображение показаний датчиков на шкалах
DIY облачная метеостанция с ESP32/ESP8266 (база данных MySQL и PHP)
ESP8266 NodeMCU веб-сервер с BME680 — метеостанция (Arduino IDE)
Узнайте больше об ESP8266 с нашими ресурсами: