Arduino-расходомер воздуха для жилых помещений: Сборка и мониторинг
Компоненты и материалы
| Arduino UNO | × | 1 |
| Перемычки (25 шт.) | × | 25 |
| Беспаечная макетная плата | × | 1 |
| Потенциометр 10 кОм | × | 1 |
| Adafruit RGB LCD 16x2 с подсветкой | × | 1 |
| Резистор 220 кОм | × | 1 |
| Датчик напряжения Diymall DC 0-25V | × | 1 |
| Усилитель сигнала AD620 (DROK) | × | 1 |
| Чашечный анемометр (cup anemometer) | × | 1 |
Инструменты
| Паяльник |
О проекте
Предыстория
Нам нужно было создать расходомер воздуха для жилых помещений. К сожалению, в современной HVAC-индустрии все устройства для измерения потока воздуха рассчитаны на промышленные системы. Существующие датчики для промышленных решеток либо слишком велики для жилых, либо не способны измерять малые потоки жилых HVAC-систем.
Принцип работы
Для генерации сигнала от потока воздуха использовался чашечный анемометр. Лопатки были 3D-печатаны в Autodesk Inventor для оптимизации захвата воздуха. Также 3D-печатана коробка для анемометра.


Для считывания сигнала анемометра выбран датчик напряжения. Сигнал также требовал усиления для более точного измерения. Усилитель увеличивает выходное напряжение анемометра в 10 раз (коэффициент можно менять от 1.5 до 1000 в зависимости от входного напряжения).
Arduino Uno считывает аналоговый сигнал с датчика напряжения и управляет LCD-дисплеем. Для данной задачи требовалась скорость ветра в CFM (кубических футах в минуту) — так и отображается на экране.
Сборка
Электроника
Начинаем с анемометра. Фото устройства:


Смотрите на «Anemometer Top View». Точка крепления лопаток — L-образная и очень тонкая. Не выдержит высоких скоростей. Поэтому спроектировали новые лопатки: толще, более надежное крепление. Цель больших лопаток — уменьшить воздушный зазор между лопаткой и корпусом, увеличить захватываемый воздух и выработанное напряжение. Фото места крепления:

Провели анализ прочности в Autodesk Inventor. Результаты ниже — новые лопатки намного эффективнее на высоких скоростях.


STL-файлы лопаток во вложениях. НЕ устанавливайте новые лопатки пока.
Установим модифицированный анемометр в корпус. STL корпуса во вложениях. Без лопаток протащите анемометр через отверстие внизу корпуса. Приклейте (горячим клеем) дно анемометра к двум тонким деревянным кругам (из Hobby Lobby). Проймите 4 маленьких отверстия через круги и ABS-корпус. Одно — для провода, три — для винтов. Как это выглядит:

Подключение анемометра к усилителю

* Все провода к усилителю — male-to-male
- Паяем красный провод к +S справа. Другой конец — к красному проводу анемометра.
- Паяем черный провод к -S справа. Другой конец — к желтому проводу анемометра.
- Изолента для фиксации.


Питание усилителя
- Желтый провод к GND справа → черный провод батарейного разъема
- Белый провод к Vln справа → красный провод батарейного разъема
Усилитель к датчику напряжения
- Синий провод к GND усилителя → VCC датчика напряжения
- Зеленый провод к Vout усилителя → GND датчика напряжения


Теперь соединим датчик напряжения с Arduino — схема в разделе «Схемы».
Финальные штрихи
Самое сложное позади! Установим электронику на расходомер. Пенопласт — потолок вентиляторного корпуса. Приклеили горячим клеем. Электронику на пенопласте, еще пенопласт — для защиты. Фото:

В пенопласте вырезы для доступа Arduino и усилителя к их 9V батарейкам:

Воронка
Из PVC — 4 трапециевидные доски. Соединены горячим клеем и герметиком. Тот же метод — крепление воронки к корпусу вентилятора. На большом конце воронки — резиновая уплотнительная лента для герметичности при прижатии к венту. Поперечное сечение большого конца — 14'' × 14''. Фронтальный вид воронки на фото.
Калибровка
После сборки откалибровали расходомер. Тестировали с эталонным прибором. Первый код выводил напряжение на LCD. Собранные данные использовались для уравнений перевода в CFM.


На графике две кривые: начальный поток и фактический поток. Разные, так как при сужении воронки скорость слегка падает. Используем уравнение лучшей аппроксимации для фактического потока:
y = 1.1409x² + 44.958x — в Arduino-коде. Код разбит на три части: нулевая скорость, малые/средние скорости, большие скорости. Можно использовать одно уравнение для всего диапазона, но для малых/средних нашли лучшее:
- Large CFM: y = 1.1409x² + 44.958x
- Medium to Low CFM: y = 40x + 20
- Zero CFM: y = 0
Код в следующем разделе. После загрузки — расходомер готов!
Самостоятельная калибровка (опционально)
Хотите калибровать сами? Нужны другие единицы (м/с, миль/ч). Пошагово:
- Найдите способ узнать реальный расход. Самый дешевый — купить анемометр (например, этот).
- Поставьте анемометр перед вентилятором с разными скоростями (как на фото).
- Запишите скорость ветра анемометром на каждой настройке.
- Сделайте так, чтобы расходомер считывал выходное напряжение вентилятора. Загрузите код «Voltage Sensor Code» в Arduino.
- Теперь расходомер показывает напряжение. Запишите напряжение на каждой скорости вентилятора.
- В Excel постройте точечный график «Wind Speed vs Voltage».
- Используйте линию тренда для уравнения, моделирующего зависимость.
- Если тренд нелинеен — найдите отдельные уравнения для нижней и верхней частей графика.
- Подставьте свои уравнения в «Flowmeter Code». Загрузите в Arduino — готово!

Код
Flowmeter Code (C/C++)
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Пины LCD
// Значения резисторов в датчике напряжения
float R1 = 30000;
float R2 = 7500;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
// Инициализация LCD
}
void loop() {
int sensorValue = analogRead(A0);
// Чтение датчика
float voltage = ((5 * sensorValue * (R1 + R2)) / (1024 * R2));
// Уравнение реального напряжения
//*********************************************************//
// Уравнение CFM — кусочная функция напряжения,
// if-ы делят функции на области
//*********************************************************//
if (voltage > 1) {
// Первая область: большой CFM
float cfm = (1.1409 * voltage * voltage) + 44.258 * voltage;
Serial.println(cfm);
lcd.print("CFM = ");
lcd.setCursor(0, 1);
lcd.print(cfm);
delay(1000);
lcd.clear();
delay(1000);
}
else if (voltage > 0.01 && voltage < 1) {
// Вторая область: средний/малый CFM
float cfm = (40 * voltage + 20);
Serial.println(cfm);
lcd.print("CFM = ");
lcd.setCursor(0, 1);
lcd.print(cfm);
delay(1000);
lcd.clear();
delay(1000);
}
else {
// Вентилятор не вращается — CFM = 0
float cfm = 0;
Serial.println(cfm);
lcd.print("CFM = ");
lcd.setCursor(0, 1);
lcd.print(cfm);
delay(1000);
lcd.clear();
delay(1000);
}
}
Code for Voltage Sensor (C/C++)
Код для чтения напряжения при самостоятельной калибровке:
// Значения резисторов в датчике
float R1 = 30000;
float R2 = 7500;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = ((5 * sensorValue * (R1 + R2)) / (1024 * R2));
Serial.println(voltage);
delay(1000);
}
Voltage Sensor Code (C/C++)
Код для калибровки расходомера (с выводом на LCD):
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
float R1 = 30000;
float R2 = 7500;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = ((5 * sensorValue * (R1 + R2)) / (1024 * R2));
Serial.println(voltage);
lcd.print("V = ");
lcd.setCursor(0, 1);
lcd.print(voltage);
delay(1000);
lcd.clear();
delay(1000);
}
Схемы
Производственный процесс
- Очистители воздуха: конструкция, история и будущие тенденции
- Производство кислородных баллонов: от сырья к качественному контролю
- Освежители воздуха: от древних ароматов к современным плагинам
- Кислород: от древнего открытия к современному промышленному гиганту
- Системы кондиционирования воздуха: проектирование, производство и будущие тренды
- Горячевоздушные шары: от монгольфьера к современным полётам
- Системы подушек безопасности: дизайн, история и будущие инновации
- Игра «UFO Attack» на Arduino UNO и матрице MAX7219 — Собираем аркаду с джойстиком Atari
- 3D RGB Arduclock — Bluetooth-часы на адресных LED с RTC
- Мониторинг состояния реки: Arduino-система контроля качества воды