В этом уроке мы подключим ультразвуковой анемометр к Arduino для измерения скорости и направления ветра. Ультразвуковой анемометр использует ультразвуковые волны для измерения скорости и направления ветра. В отличие от традиционных механических анемометров, которые используют вращающиеся чашки или лопасти для измерения ветра, ультразвуковые анемометры не имеют движущихся частей. Эта особенность делает их прочными, надежными и хорошо подходящими для различных сложных условий.
Термин «анемометр» происходит от греческого слова «анемос», что означает «ветер». Ультразвуковые анемометры широко используются в таких областях как метеорология, изучение энергии ветра, навигация и исследования. Эти приборы особенно полезны в условиях, требующих высокой точности и сбора данных в реальном времени.
В этом проекте мы будем использовать ультразвуковой анемометр Renkeer, специально разработанный для наружных измерений. Датчик может измерять скорость ветра в диапазоне от 0 до 40 м/с и направление ветра от 0 до 360° с высокой точностью. Анемометр работает на маломощном чипе, потребляя всего 0,12 Вт, что делает его пригодным для установок с питанием от солнечных батарей или аккумуляторов.
Для сопряжения анемометра с платой Arduino мы будем использовать протокол RS485. Модуль RS485 будет способствовать передаче данных с датчика на плату Arduino. Затем данные о скорости и направлении ветра будут отображаться на ЖК-экране 16×2, подключенном к Arduino.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- Ультразвуковой анемометр (купить на AliExpress).
- Модуль преобразования логики TTL в RS485 (модуль MAX485) (купить на AliExpress).
- ЖК дисплей 16x2 с модулем I2C (купить на AliExpress).
- Блок питания 12 В.
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Ультразвуковой датчик анемометра
Ультразвуковой анемометр — это специализированный прибор, который измеряет скорость и направление ветра, количественно выражая их в метрах в секунду (м/с) и градусах (°) соответственно. Ветровые условия могут значительно меняться на коротких расстояниях из-за таких факторов, как время суток, географическое положение и препятствия, такие как здания или рельеф местности.
Ультразвуковые анемометры измеряют скорость ветра, определяя разницу во времени, необходимое ультразвуковому импульсу для прохождения в каждом направлении между парами преобразователей, вызванную движением воздуха. Этот метод позволяет проводить точные измерения даже при низкой скорости ветра, поскольку не требуется преодолевать механическую инерцию.
Ультразвуковой анемометр Renkeer
Ультразвуковой анемометр Renkeer — это инновационное устройство, разработанное для точного измерения скорости и направления ветра на открытом воздухе. Он отличается компактной конструкцией, отсутствием подвижных частей и высоким уровнем защиты, что делает его исключительно прочным и пригодным для суровых условий.
Внутри анемометр использует маломощные чипы, сохраняя потребление энергии на уровне эффективных 0,12 Вт. Это делает его идеальным выбором для установок с питанием от солнечных батарей или аккумуляторов, особенно в условиях, где требуется надежный и долгосрочный сбор данных. Технология устройства обеспечивает компактную структуру, дополнительно дополненную дополнительными модулями для измерения температуры и давления воздуха. Анемометр предлагает ряд выходных сигналов, включая 420 мА, 05 В, 0~10 В и RS485, предоставляя пользователям гибкие возможности интерфейса.
Корпус анемометра изготовлен из высокопрочного материала ABS, что повышает его адаптивность к использованию в различных условиях окружающей среды. Благодаря сочетанию точности, долговечности и доступности ультразвуковой анемометр Renkeer является ценным инструментом для тех, кто хочет точно измерять ветровые условия.
Технические характеристики ультразвукового анемометра Renkeer
- Электропитание: 10-30 В постоянного тока.
- Диапазон скорости ветра: 0~40 м/с.
- Диапазон направления ветра : 0~360°.
- Точность измерения скорости ветра: ±0,5+2%FS (60%RH,25℃).
- Точность измерения направления ветра: ±3°(60%RH,25℃).
- Разрешение скорости ветра: 0,01 м/с.
- Разрешение направления ветра: 1°.
- Рабочая среда : -40~80℃, 0~95%RH.
- Ветроустойчивость: 75 м/с.
- Время отклика: 1 с.
- Уровень защиты: IP65.
- Выходной сигнал: 4~20 мА, 0~5 В, 0~10 В, RS485.
- Начальная скорость ветра: 0,5 м/с.
Схема и распиновка датчика
Ниже представлена внутренняя схема ультразвукового анемометрического датчика.
Ультразвуковой анемометр работает по протоколу RS485 и, следовательно, может легко взаимодействовать с Arduino, ESP32 или любыми другими микроконтроллерами, используюя модуль MAX485.
Вот 4 провода для датчика.
- Коричневый провод: VCC (10-30 В).
- Черный провод: GND.
- Желтый провод: RS485-A.
- Синий провод: RS485-B.
Определение формата кадра данных и протокол связи
Определение формата кадра данных
При использовании протокола связи Modbus-RTU формат выглядит следующим образом:
- Начальная структура ≥ 4 байта
- Код адреса = 1 байт
- Код функции = 1 байт
- Область данных = N байт
- Проверка ошибок = 16-битный CRC-код
- Время до конца структуры ≥ 4 байта
Структура фрейма запроса хоста:
Код адреса | Код функции | Адрес регистрации старта | Длина регистра | Проверка младшего бита кода | Проверка старшего бита кода |
1 байт | 1 байт | 2 байта | 2 байта | 1 байт | 1 байт |
Структура кадра ответа ведомого устройства:
Код адреса | Код функции | Эффективные байты | Область данных 1 | Область данных 2 | Область данных N | Проверка младшего байта кода | Проверка старшего байта кода |
1 байт | 1 байт | 1 байт | 2 байта | 2 байта | 2 байта | 1 байт | 1 байт |
Теперь рассмотрим как считать с анемометра значения скорости и направления ветра.
Считывание значений скорости и направления ветра
Кадр запроса
Код адреса | Код функции | Первоначальный адрес | Длина данных | Проверка младшего бита кода | Проверка старшего бита кода |
0x01 | 0x03 | 0x00 0x00 | 0x00 0x02 | 0xC4 | 0x0B |
Кадр ответа:
Код адреса | Код функции | Возвращает количество допустимых байтов | Значение скорости ветра в реальном времени | Значение направления ветра в реальном времени | Проверка младшего бита кода | Проверка старшего бита кода |
0x01 | 0x03 | 0x04 | 0x00 0x7D | 0x00 0x5A | 0xEA | 0x10 |
Скорость и направление ветра из ответного кадра можно рассчитать следующим образом:
007D (шестнадцатеричное) =125=> Скорость ветра=1,25 м/с
005A (шестнадцатеричное) =90=> Направление ветра=90°с.ш.
Схема проекта
Схема подключения ультразвукового анемометра к плате Arduino представлена на следующем рисунке.
Ультразвуковой анемометр взаимодействует с микроконтроллером по протоколу RS485. Поэтому для этого проекта мы использовали модуль MAX485 — это популярный чип приемопередатчика RS-485, обычно используемый для последовательной связи. При сопряжении MAX485 с Arduino вы, как правило, будете иметь дело с полудуплексной связью, когда передача и прием данных происходят в разное время.
Вот схема соединений между MAX485 и Arduino.
- VCC (MAX485) -> 5 В (Arduino).
- Земля (MAX485) -> Земля (Arduino).
- RO (MAX485) -> 2 (цифровой контакт Arduino).
- DI (MAX485) -> 3 (цифровой контакт Arduino).
- RE (MAX485) -> 8 (цифровой контакт Arduino).
- DE (MAX485) -> 7 (цифровой контакт Arduino).
Схема соединений между MAX485 и датчиком анемометра:
- VCC -> 12 В (Анемометр).
- GND -> GND (Анемометр).
- A (MAX485) -> Контакт анемометра A (желтый цвет).
- B (MAX485) -> Контакт анемометра B (синий цвет).
Вы можете использовать макетную плату для сборки и перемычки/соединительные провода для соединения датчика и модуля RS485 с Arduino. Ультразвуковой анемометр требует 12 В для работы. Вы можете использовать батарею 12 В или источник питания постоянного тока 12 В.
Исходный код программы
После сборки датчика согласно схеме выше давайте перейдем к коду программы этого проекта. Согласно таблице выше, фрейм запроса для получения шестнадцатеричного показания датчика выглядит следующим образом:
0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B
Датчик передает данные со скоростью 4800 бод. Мы установили тот же параметр в коде чтобы получить требуемые показания.
Скопируйте следующий код и вставьте его в Arduino IDE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#include <SoftwareSerial.h> #define RE 8 #define DE 7 const byte anemometer[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B}; byte values[9]; SoftwareSerial mod(2, 3); void setup() { Serial.begin(9600); mod.begin(4800); pinMode(RE, OUTPUT); pinMode(DE, OUTPUT); delay(1000); } void loop() { // Transmit the request to the sensor digitalWrite(DE, HIGH); digitalWrite(RE, HIGH); delay(10); mod.write(anemometer, sizeof(anemometer)); digitalWrite(DE, LOW); digitalWrite(RE, LOW); delay(10); // Wait until we have the expected number of bytes or timeout unsigned long startTime = millis(); while (mod.available() < 9 && millis() - startTime < 1000) { delay(1); } if (mod.available() >= 9) { // Read the response byte index = 0; while (mod.available() && index < 9) { values[index] = mod.read(); Serial.print(values[index], HEX); Serial.print(" "); index++; } Serial.println(); // Parse the Wind Speed value int Wind_Speed_Int = int(values[3] << 8 | values[4]); float Wind_Speed_m_s = Wind_Speed_Int / 100.0; float Wind_Speed_kph = Wind_Speed_m_s * 3.6; // Conversion to km/h Serial.print("Wind Speed: "); Serial.print(Wind_Speed_kph); Serial.println(" km/h"); // Parse the Wind Direction value int Wind_Direction = int(values[5] << 8 | values[6]); Serial.print("Wind Direction: "); Serial.print(Wind_Direction); Serial.println(" degrees"); } else { Serial.println("Sensor timeout or incomplete frame"); } delay(1000); } |
Тестирование работы проекта
Чтобы загрузить код на плату Arduino Nano, выберите Arduino Nano из списка плат. Затем выберите COM-порт. Наконец, нажмите кнопку загрузки, чтобы загрузить код.
После загрузки кода откройте последовательный монитор, и вы увидите следующие показания.
Скорость и направление ветра будут равны нулю, когда ветер не дует.
Когда дует ветер, отображаются значения скорости ветра в км/ч и направления ветра в градусах.
Скорость и направление ветра, измеряемые ультразвуковым анемометром, зависят от множества факторов. К ним относятся время суток, поскольку ветровые режимы могут меняться с утра до вечера, и географические элементы, такие как наличие холмов, долин или искусственных сооружений, которые могут направлять или препятствовать потоку ветра.
Добавление к проекту ЖК-дисплея
Теперь давайте подключим ультразвуковой анемометр и ЖК-дисплей 16×2 I2C к Arduino и посмотрим на значение скорости и направления ветра на ЖК-дисплее.
Аппаратное подключение
Ниже представлена схема подключения для добавления дополнительного подключения ЖК-дисплея.
Подключения датчика анемометра и RS485 соединения остаются такими же, как указано выше. Только добавляются соединения для ЖК-дисплея следующим образом:
- VCC (ЖК-дисплей) -> 5 В (Arduino)
- GND (ЖК-дисплей) -> GND (Arduino)
- SDA (ЖК-дисплей) -> A4 (Arduino)
- SCL (ЖК-дисплей) -> A5 (Arduino)
Исходный код программы
Для компиляции кода требуется библиотека I2C LCD. Поэтому скачайте эту библиотеку и добавьте ее в папку с библиотеками Arduino.
Теперь скопируйте следующий код и вставьте его в Arduino IDE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#include <SoftwareSerial.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display #define RE 8 #define DE 7 const byte anemometer[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B}; byte values[9]; SoftwareSerial mod(2, 3); void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); mod.begin(4800); pinMode(RE, OUTPUT); pinMode(DE, OUTPUT); lcd.setCursor(2, 0); lcd.print("Wind Speed"); lcd.setCursor(2, 1); lcd.print("Measurement"); delay(3000); } void loop() { // Transmit the request to the sensor digitalWrite(DE, HIGH); digitalWrite(RE, HIGH); delay(10); mod.write(anemometer, sizeof(anemometer)); digitalWrite(DE, LOW); digitalWrite(RE, LOW); delay(10); // Wait until we have the expected number of bytes or timeout unsigned long startTime = millis(); while (mod.available() < 9 && millis() - startTime < 1000) { delay(1); } if (mod.available() >= 9) { // Read the response byte index = 0; while (mod.available() && index < 9) { values[index] = mod.read(); Serial.print(values[index], HEX); Serial.print(" "); index++; } Serial.println(); // Parse the Wind Speed value int Wind_Speed_Int = int(values[3] << 8 | values[4]); float Wind_Speed_m_s = Wind_Speed_Int / 100.0; float Wind_Speed_kph = Wind_Speed_m_s * 3.6; // Conversion to km/h Serial.print("Wind Speed: "); Serial.print(Wind_Speed_kph); Serial.println(" km/h"); // Parse the Wind Direction value int Wind_Direction = int(values[5] << 8 | values[6]); Serial.print("Wind Direction: "); Serial.print(Wind_Direction); Serial.println(" degrees"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Speed:"); lcd.print(Wind_Speed_kph); lcd.print(" kph"); lcd.setCursor(0, 1); lcd.print("Dir:"); lcd.print(Wind_Direction); lcd.print(" deg."); delay(1000); } else { Serial.println("Sensor timeout or incomplete frame"); } } |
Тестирование и результаты
Загрузите код на плату Arduino Nano. Теперь код Arduino готов выводить показания скорости и направления ветра на ЖК-дисплей
Скорость и направление ветра изменяются в зависимости от скорости дующего ветра.
Кроме того, географический регион сам по себе может влиять на общие ветровые условия: некоторые районы более подвержены постоянным ветрам, а другие — переменным порывам.
Видео, демонстрирующее работу проекта
Заключение
В этом уроке мы представили исчерпывающее руководство по сопряжению ультразвукового анемометра Renkeer с Arduino для измерения скорости и направления ветра. Используя протокол RS485, мы успешно передали данные датчика на Arduino и отобразили их на ЖК-экране 16×2.
Преимущества использования ультразвукового анемометра по сравнению с традиционными механическими вариантами были очевидны в его долговечности, надежности и приспособляемости к различным условиям окружающей среды. Его низкое энергопотребление 0,12 Вт также сделало его идеальным для установок с питанием от солнечных батарей или аккумуляторов. Благодаря высокоточным измерениям в диапазоне от 0 до 40 м/с для скорости ветра и от 0 до 360° для направления ветра, ультразвуковой анемометр Renkeer оказался отличным выбором для тех, кто хотел точно изучать или контролировать условия ветра.
38 просмотров