Электрификация

Справочник домашнего мастера

Анемометр своими руками

Содержание

Своими руками Измерение воздушного потока подручными средствами

Таблица для определения скорости ветра с помощью флюгера Вильда.

значение указателя скорость ветра м/сек
пластина 200гр пластина 800гр
1
1-2 1 2
2 2 4
2-3 3 6
3 4 8
3-4 5 10
4 6 12
4-5 7 14
5 8 16
5-6 9 18
6 10 20
6-7 12 24
7 14 28
7-8 17 34
8 20 40
характер ветра скорость ветра м/сек признаки
очень легкий 0-1 движение воздуха незаметно
1-3 движение воздуха едва заметно, шелестят листья
легкий 4-5 ветки слегка качаются, дым плывет в воздухе сохраняя очертания клубов
умеренный 6-7 ветки гнуться, ветер «слизывает» дым с трубы и перемешивает его в однородную массу, поднимается пыль
свежий 8-9 верхушки деревьев шумят и качаются
очень свежий 10-11 тонкие стволы деревьев гнутся, завывание ветра в трубах
сильный 12-14 листь срываются, на стоячей воде образуются волны с опрокидыванием гребней
резкий 15-16 тонкие ветки ломаются, затруднено движение против ветра
буря 17-19 толстые ветви ломаются, срывает кровельные покрытия
сильная буря 20-23 тонкие веревья ломаются

Основные виды и варианты использования анемометра

Наиболее распространенные модели анемометра – это:

  • Ручная модель с крыльчаткой, или так называемый лопастной анемометр. Его принцип действия напоминает работу вентилятора, что дало устройству еще одно название – вентиляционный анемометр. Попадая на широкую площадь поверхности лопастей, воздушная масса меняет интенсивность их вращения и позволяет легко рассчитать скорость ветра. От крыльчатки с помощью зубчатого колесного устройства запускается счетный механизм, отмечающий количество оборотов лопастей за единицу времени. Остается только вычислить скорость, которая будет равна произведению длины окружности траектории лопастей и количества оборотов. В числе главного преимущества данной модели – возможность определить не только скорость, но и направление ветра. Область применения лопастного анемометра – измерение параметров воздушных потоков в системах вентиляции и трубопроводах.
  • Чашечный анемометр. Первая модель, сконструированная человеком для измерения скорости ветра. Лопасти устройства напоминают небольшие чашки, последовательно размещенные на концах металлической конструкции и направленные в одну сторону. Принцип работы чашечного анемометра аналогичен действию лопастной модели. Счетчик, «зашитый» в пластиковый корпус, точно определяет количество полных оборотов лопастей за единицу времени. Такой анемометр можно легко сделать своими руками.
  • Термоанемометр – выполняет сразу две функции: определяет скорость и температуру воздушных масс. Принцип работы базируется на законах акустики: прибор улавливает звук, определяет его скорость и рассчитывает скорость ветра, одновременно отмечая его температуру. Электронная «начинка» гарантирует точность измерений и оперативную корректировку данных по мере изменения интенсивности перемещения воздушных масс. Термоанемометр находит широкое применение в ходе лабораторных исследований и контрольных замеров микроклиматических условий на рабочем месте в крупных промышленных цехах.

Принцип действия анемометров всех перечисленных моделей практически одинаков. Закрепленное на высоком шесте устройство поднимают как можно выше и устанавливают в направлении, позволяющем точно уловить движение воздушных масс. Механические анемометры контролируют по поверочному устройству, входящему в комплект поставки. На индукционных моделях показания, выраженные в метрах в секунду, отображаются на встроенном циферблате.

Чашечный анемометр своими руками: схема устройства

Для изготовления самодельного анемометра в домашних условиях понадобится старая модель видеомагнитофона. Его блок вращения головок станет основой будущей конструкции. Для этого с узла снимают лишние детали, чтобы получить в остатке только каркас с осью, блок подшипников и шайбу для крепления двигателя.

  • Во вращающейся части высверливаются отверстия диаметром 4мм, на которых будут устанавливаться чашки лопастей. Три отверстия на одной из них уже есть – это места креплений внутренних узлов в разобранном магнитофоне. По ним стоит ориентироваться, выбирая места для оставшихся девяти отверстий.
  • В отверстия вставляют болты типа М4 длиной 10мм. Надежно закрепить чашки и исключить их вращение на оси лопасти помогут резиновые шайбы, вырезанные из старой велосипедной камеры.
  • Теперь нужно взять 4 пластмассовые кружки для воды одного размера и просверлить в дне отверстие 4мм. Ручки чашек срезают «под корень».
  • Чашки крепят на оси, разворачивая их в одном направлении и фиксируя с помощью болтов и резиновых шайб. Полностью собранная конструкция должна легко вращаться под воздействием даже легкого ветра.

Теперь можно собрать конструкцию полностью. Для этого:

  • На вращающуюся часть узла устанавливается и крепится магнит, еще один элемент старого велосипеда. Затем проводится балансировка узла вращения, чтобы исключить одновременное вращение шеста вместе с движущимися лопастями.
  • В качестве счетного датчика можно использовать снятый с велосипеда мини-компьютер. Его приклеивают к неподвижной части узла, закрыв магнит листом картона. Обязательно стоит проверить датчик тестером на быстроту срабатывания.
  • Остается подключить кабель и закрепить на неподвижной части устройства кусок металлического уголка для последующего монтажа конструкции.

Схема подключения и настройки анемометра

Для точной настройки самодельного анемометра потребуется стандартная модель устройства, изготовленная в заводских условиях. В ходе одновременно выполняемых замеров показания обоих приборов должны полностью совпадать. В случае если достать готовую модель устройства не представляется возможным, самодельный анемометр можно проверить в ходе движения автомобиля в условиях полного отсутствия ветра.

После проверки точности измерения можно приступать к установке конструкции на крышу дома. Для этого понадобится достаточно высокий прочный шест, чтобы измеряемый поток воздушных масс не ограничивали расположенные рядом деревья и постройки. И для полного завершения работ остается только подключить электронную часть прибора. Теперь анемометр полностью готов выполнять свою основную функцию – фиксировать точную скорость ветра за окном.

Как сделать анемометр на базе Arduino


Автор этой самоделки однажды столкнулся с вопросом, как можно определить, есть ли ветер в том месте, где он живет. Такой вопрос возник из-за того, что он хотел поставить ветряк для генерации электричества. С помощью этого хитроумного приспособления можно сделать замеры, как часто бывает ветер, с какой средней скоростью он дует и так далее. В качество основы для сбора и обработки информации лежит плата Arduino.
Материалы и инструменты для изготовления анемометра:
— кусок квадратной трубы;
— болгарка;
— сварка;
— подшипник;
— развертка;
— гвозди;
— краска;
— светодиодиодно-фототранзисторный датчик (можно вытащить из принтера);
— схема Arduino;
— минимальный набор инструмента.

Процесс изготовления:
Шаг первый. Изготавливаем датчик анемометра
Для изготовления датчика нужно взять кусок квадратной трубы и затем в ней вырезать окошко, через него потом будет происходить установка начинки. Внутри этой трубы нужно приварить металлическую пластину, она будет выступать в качестве держателя подшипника. Потом приваривается еще одна пластина для фиксирования нижнего подшипника.
Верх автор решил сделать в виде скатной крыше. Для этого берется четыре треугольника, сперва прихватывается сваркой, а затем хорошо проваривается.

Далее заготовка зажимается в тиски и диаметром сверла на 0.5 мм меньше, чем диаметр подшипника в нижней крышке и середине сверлится отверстие. Оба они нужны для подшипников. Чтобы подшипники встали на места с натяжкой, размер отверстий подгоняется разверткой. После того как подшипники были установлены, в них был вставлен гвоздь 100-ка. В середине окошка на него надевается пластмассовая шайба с четырьмя прорезями. Снизу гвоздя была нарезана резьба и затем на эту ось была накручена крыльчатка.
Шаг второй. Процесс изготовления крыльчатки
Чтобы изготовить крыльчатку нужно взять гайку и приварить к ней электродом на 2мм три гвоздя. Концы гвоздей обрезаются, и на них нарезается резьба. Затем на концы надеваются половинки от мячика.
В качестве держателя к корпусу был приварен шестигранный пруток из нержавеющей стали. А чтобы корпус не ржавел, он был покрыт белой эмалью.


Чтобы датчик мог считывать информацию, нужна шайба с прорезями. Автор достал ее из старой шариковой компьютерной мышки. Когда прорезь проходит перед светодиодно-фототранзисторным датчиком, он посылает сигнал электронике.
Что касается лопастей крыльчатки, то они сперва были изготовлены из теннисных мячиков. При таком размере лопастей крыльчатка заводится при ветре от 5 м/с. Чтобы сделать крыльчатку чувствительнее, были приобретены мячики диметром 55 мм, в таком случае крыльчатка начинает крутится уже при м/с. При этом измерение ведется до 22 м/с.
Шаг третий. Электронная часть
В качестве электронной схемы автор сперва использовал самодельную ЛУТ схему с добавлением зеленой макси из Китая. Но система не могла показывать скорость ветра в метрах/секунду. Она лишь отображала количество оборотов.



На данный момент идет сборка схемы на Arduino. Принцип работы анемометра автора точно такой, как и компьютерной мышки. Нужно теперь лишь соединить две схемы.
Было решено передать импульсы с фототранзистора на Arduino, при этом схема стала воспринимать такие сигналы как нажатия на кнопку. Чтобы получить скорость ветра, нужно просто посчитать, сколько идет нажатий на кнопку в течение определенного времени, скажем, в секунду. Однако не все так просто, чтобы перевести частоту вращения крыльчатки в скорость движения ветра м/с, требуется специальная формула. Ей автор с удовольствием делится.
Вот и все, теперь анемометр можно считать готовым. При необходимости в код можно добавить функцию, которая бы подсчитывала, сколько времени ветер дул с какой-то определенной скоростью. Такая самоделка будет отличным дополнением для тех, кто собирается установить ветряк или пристально следит за погодой.

Как самостоятельно сделать прибор для измерения скорости ветра

Создание анемометра своими руками: нюансы работы

Для изготовления прибора, который измеряет скорость воздушного потока, потребуются подручные средства. К примеру, в качестве лопастей анемометра можно использовать половинки пластиковых пасхальных яиц. Также обязательно потребуется компактный бесщеточный двигатель на постоянных магнитах. Главное, чтобы сопротивление подшипников на валу моторчика было минимальным. Такое требование обусловлено тем, что ветер может быть совсем слабым, и тогда вал двигателя просто не будет проворачиваться. Для создания анемометра сгодится двигатель от старого жесткого диска.
Главная трудность при сборке анемометра заключается в том, чтобы сделать сбалансированный ротор. Двигатель потребуется установить на массивное основание, а на его ротор насадить диск из толстого пластика. Затем из пластиковых яиц нужно аккуратно вырезать три одинаковые полусферы. Они закрепляются на диске при помощи шпилек или стальных стержней. При этом диск предварительно надо разделить на сектора по 120 градусов.
Балансировку рекомендуется проводить в помещении, где полностью отсутствуют всякие движения ветра. Ось анемометра должна находиться в горизонтальном положении. Подгонку веса обычно выполняют с помощью надфилей. Смысл в том, чтобы ротор останавливался в любом положении, а не в одном и том же.

Калибровка прибора

Самодельный прибор обязательно должен быть откалиброван. Для калибровки лучше всего использовать автомобиль. Но понадобится какая-то мачта, чтобы анемометр не попал в зону возмущенного воздуха, создаваемого автомобилем. В противном случае показания будут сильно искажены.

Калибровку следует проводить только в безветренный день. Тогда процесс не затянется. Если же будет дуть ветер, придется долго ездить по дороге и вычислять средние значения скорости ветра. Нужно учитывать, что скорость спидометра измеряется в км/ч, а скорость ветра в м/с. Соотношение между ними – 3,6. Это значит, что показания спидометра потребуется разделить на это число.
Некоторые люди в процессе калибровки используют диктофон. Можно просто надиктовать показания спидометра и анемометра на электронное устройство. В домашних условиях вы сможете создать новую шкалу для своего самодельного анемометра. Только с помощью правильно откалиброванного прибора можно получить достоверные данные о ветровой обстановке в необходимой зоне.

МОДУЛИ СЧИТЫВАНИЯ УГЛОВОЙ СКОРОСТИ (ЭНКОДЕРЫ) ДЛЯ ARDUINO

Модуль считывания угловых скоростей используется для считывания числа оборотов двигателя робота. Обычно это необходимо знать при движения робота по заданной программе. Например: по нашей программе роботу нужно проехать 2 метра и повернуть налево, считаем что у робота 2 одинаковых колеса с 3-ей шаровой опорой как у тележки Lego и они равны диаметру D = 5 см. Вычисляем длину окружности колеса = P x D = 3,14 х 5 = 15,7 см; Вычисляем сколько оборотов должны сделать двигатели робота чтобы он проехал 2 метра = 200 : 15,7 = 12,7 оборотов. Включаем в программе двигатели, а по энкодеру в программе определяем сколько двигатели сделали оборотов, как только их станет 12,7 то двигатели отключаем и для поворота в зависимости от угла и направления поворота подсчитываем количество оборотов одного из колес робота.

Модуль считывания угловых скоростей для моделей роботов FC-03 или энкодер — это небольшая печатная плата с установленными на ней микросхемой LM393, а также несколькими другими электронными компонентами.

FC-03 модуль считывания угловых скоростей называют ещё датчиком оборотов или энкодером. Название происходит от принципа работы датчика.
Используется энкодер для определения скорости двигателя, подсчета импульсов. Датчик оборотов FC-03 снабжен специальным штырьковым разъемом (типа «папа») для подключения к плате микроконтроллера Arduino, AVR, ARM или д.р.

Модуль считывания угловых скоростей, созданный на основе двойного компаратора LM393 и щелевого датчика предназначен для совместного использования со специальными дисками, которые одеваются на вал редуктора или электродвигателя. Таким образом, микроконтроллер получает информацию непосредственно от энкодера о количестве оборотов, проделанных двигателем, и так определяется его скорость.

Диски одеваются на вал редуктора или электродвигателя, чтобы микроконтроллер получал информацию непосредственно от энкодера о количестве оборотов проделанных двигателем.

Рис.1 Щелевой датчик ITR9608

Принцип действия

Воспринимающий элемент модуля – оптическая пара ITR9608. В одном выступе корпуса расположен инфракрасный светодиод, направленный на фототранзистор находящийся в другом выступе. Если в щель между выступами внести непрозрачную пластину, то ИК излучение от светодиода перекрывается и фототранзистор закрывается. Такой компонент иногда называют фотопрерывателем, но он только фиксирует прерывание светового потока. Как показано на схеме с эмиттера транзистора сигнал поступает в схему прибора.Свет преграждает пластина, закрепленная на подвижной части контролируемого механизма. С помощью датчика определяют перемещение в крайние положения двигающейся плоскости, когда связанный с ней элемент конструкции входит в датчик. Измеряют параметры вращения различных механических деталей. Так происходит преобразование механических параметров в электрические величины и далее в программные значения.

Датчик скорости вращения FC-03 используется для измерения частоты вращения. Определить с его помощью направление вращения нельзя. На валу двигателя или шестерни редуктора устанавливается диск с отверстиями. Оптопара модуля имеет прорезь шириной 5 мм. При вращении диска, как изображено на анимации, постоянно в прорези чередуются отверстия и участки пластины. Датчик преобразует чередование элементов диска в электрические импульсы. Электроника модуля делает сигнал датчика пригодным для восприятия цифровыми логическими микросхемами или микроконтроллером.

Принципиальная схема энкодера FC-03:


Рис. 2

Рис. 3 Особенности: Рабочее напряжение: 3.3 Вольт ~5.0 Вольт; Ток потребления энкодера: 1.4 мА; Ширина паза в щелевом датчике: 5 мм — между передатчиком (инфракрасным светодиодом) и приемником (инфракрасным фототранзистором); Используется микросхема: LM393 (двойной компаратор) с широким диапазоном питающего напряжения; Форма выходного сигнала: импульсы прямоугольной формы TTL (0 и 1) и аналоговый сигнал по величине чувствительности ; Плата модуля: PCB (англ. printed circuit board) — печатная плата; LED (светодиоды) индикаторы питающего напряжения и цифрового выходного сигнала: низкий уровень, светодиод горит, высокий уровень-светодиод гаснет; Вес: 8 г ;
Размеры (ДxШxВ) прибл.: 32 x 14 x 10 мм; Диаметр отверстия для монтажа датчика оборотов: 3 мм; Рабочая температура: от 0 ° C ~ + 70 ° C;VCC: напряжение: + 3.3 Вольт ~5.0 Вольт; DO: Цифровой выход; AO: Аналоговый выход; GND: напряжение: — 3.3 Вольт ~5.0 Вольт.

LM393 Датчик скорости для Arduino построен на микросхеме LM393 (двойной компаратор).

Термин «компаратор» произошел от английского слова «compare» — сравнивать. Проще говоря, компаратор — это прибор для сравнения двух или нескольких напряжений с определенной точностью и выдачи результата с минимальной задержкой.

Характеристики микросхемы LM393:

  • Тип компаратора: Precision
  • Количество компараторов в микросхеме LM393: 2 штуки
  • Время отклика компаратора составляет: 1.3 мкс
  • Тип выхода компаратора: CMOS, MOS, TTL, DTL, ECL
  • Ток потребления компаратора составляет: 1 мА
  • Диапазон напряжения питания компаратора: от ± 1.0 В до ± 18 В

Даташит микросхемы LM393 (формат PDF размер 144 КБ)

Модуль считывания угловых скоростей снабжен специальным штырьковым разъемом (типа «папа») для подключения к плате микроконтроллера Arduino, AVR, ARM и др.

FC-03 модуль имеет специальное отверстие в плате, что облегчает его монтаж и крепление на любую роботизированную платформу или шасси робота.

Используется FC-03 модуль для определения скорости двигателя, подсчета импульсов, обнаружения препятствия. Он также станет полезным компонентом для любого робота под управлением микроконтроллера.

Используемые ресурсы:

Урок 29. Тахометр. Определяем скорость вращения при помощи датчика линии

Тахометр собранный с использованием датчика линии прост в подключении. Вам не нужно вносить конструктивные изменения в деталь, скорость вращения которой требуется измерить: сверлить отверстия, делать прорези, устанавливать дополнительные элементы и т.д. Достаточно нанести на неё контрастную линию (чёрную на светлой поверхности или белую на тёмной) и поднести датчик линии, Вы сразу получите точный результат, количество оборотов в минуту. Скетч не нуждается в корректировке, независимо от того, какого цвета будет линия.

Нам понадобится:

  • Arduino х 1шт.
  • Trema-модуль Аналоговый датчик линии х 1шт.
  • Trema-модуль Четырехразрядный LED индикатор х 1шт.
  • Trema Shield х 1шт.

Для реализации проекта нам необходимо установить библиотеку:

  • Библиотека iarduino_4LED (для работы с четырёхразрядным LED индикатором).

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE.

Видео:

Схема подключения:

LED индикатор подключается к любым двум выводам Arduino (как цифровым, так и аналоговым), номера указываются в скетче. Датчик линии подключается к любому аналоговому входу, номер указывается в скетче.

В данном уроке, LED индикатор подключён к цифровым выводам 2 и 3, а датчик линии подключён к аналоговому входу A0.

Алгоритм работы:

  • Вывод информации на LED индикатор осуществляется только в момент перехода датчика линии со светлого на тёмное поле.
  • Первой строкой функции loop, проверяем не находится ли датчик линии на тёмном поле, если это так, то …
  • Выводим количество оборотов в минуту на LED индикатор (если не зафиксировано переполнение millis) и сохраняем время перехода
  • Выполняем цикл while до тех пор, пока датчик линии не покинет тёмное поле. Благодаря чему предыдущая операция выполняется только 1 раз, за всё время нахождения датчика на тёмном поле.
  • Если датчик находится на тёмном или светлом поле, дольше 6 секунд, то выводим надпись «STOP» (эти строки можно убрать, если количество оборотов Вашего устройства ниже 10 в минуту).

Код программы:

#include <iarduino_4LED.h> // подключаем библиотеку для работы с четырёхразрядным LED индикатором iarduino_4LED dispLED(2,3); // объявляем объект для работы с функциями библиотеки iarduino_4LED, с указанием выводов индикатора ( CLK , DIO ) const uint8_t pinLine = A0; // объявляем константу с указанием номера аналогового входа, к которому подключен датчик линии uint32_t strLine = 0; // время перехода датчика со светлого на тёмное поле void setup(){ dispLED.begin(); // инициируем LED индикатор } void loop(){ if(analogRead(pinLine)>400){ // если показания датчика линии больше 400 (тёмное поле) if(strLine<millis()){ // если нет переполнения millis(), то … dispLED.print(60000/(millis()-strLine)); // выводим количество оборотов в минуту на LED индикатор } strLine = millis(); // присваиваем переменной strLine текущее значение millis(); while(analogRead(pinLine)>350){ // ждём пока датчик линии не выйдет из тёмного поля if((millis()-strLine)>6000){dispLED.print(«STOP»);} // если датчик находится на тёмном поле дольше 6 секунд, то выводим на индикатор надпись «STOP» } } if((millis()-strLine)>6000){dispLED.print(«STOP»);} // если датчик находится на светлом поле дольше 6 секунд, то выводим на индикатор надпись «STOP» }

Ссылки:

  • Код программы
  • Библиотека iarduino_4LED.
  • Wiki — Установка библиотек в Arduino IDE.
  • Wiki — Четырёхразрядный индикатор (Trema-модуль).
  • Wiki — Датчик линии, аналоговый.
  • Wiki — Trema Shield.

Анемометром называют устройство, использующиеся в метеорологии для показания скорости и направления ветровых волн. Составляющие компоненты: чашечная верхушка, крепко прицепленная к оси прибора, соединяется с механизмом измерения. Когда воздушный поток проходит сквозь приспособление, чашечки или лопасти активизируются и начинают вращаться вокруг осевого столба.

Конструируют метеорологический инструмент, учитывая, для какого конкретного действия он будет предназначен. Анемометр измеряет количество оборотных действий чашечек или лопастей вокруг осевого центра в определенное время, что обычно равняется расстоянию, после этого считается скорость ветровых потоков в средней величине.

В другом случае лопасти или чашечки присоединяются к индукционному тахометру, заряженному электричеством. Здесь скорость ветровых потоков показывается сразу: не нужно дополнительно просчитывать другие величины и наблюдать за меняющейся скоростью.

Вышеописанный прибор можно с легкостью сконструировать в домашних условиях. Статья ниже расскажет читателю, как сделать автоматический Arduino анемометр в домашних условиях.

Шаг 1: Инструмент и периферия для изготовления анемометра на базе Arduino

В таблице ниже перечислены все необходимые компоненты для конструирования и их особенности.

Компонент Особенности
Модуль МПЗ Во всех инструкциях указано, что общая поддержка модуля равняется 25 тысячам фрагментов фраз, звуковых сигналов и мелодичных тонов. Загруженное аудио делится ровно на 255 музыкальных композиций. Встроено 30 уровней для регулирования громкости, а эквалайзер включает в себя 6 режимов обработки.
«Ручной» анемометр Инструмент представляет собой сенсорный датчик, который используется для слежения и оповещения, для человека, занимающегося различными видами спорта, где учитывается дуновение ветра.

Внутрь встроен контроллер, работа которого заключается в отсеивании помех. Следовательно, исходящий сигнал будет надежным и увеличенным по громкости. Через секунду с момента появления ветра датчик запиликает, и на сенсоре высветится показатель.

Корпус сооружения полностью спрятан от попадания влаги. Разъем, куда присоединен шнур питания, также обмотан водонепроницаемым материалом. Само устройство сконструировано с использованием прочного металла. Поэтому такой сенсор не боится плохих погодных условий под открытым небом.

Микропроцессор Ардуино Составляющие компоненты микропроцессора: аппаратная и программная группа. Программируемый код записан на знаменитом языке программирования С++, который был гораздо упрощен до Wiring. В микропроцессор встроена бесплатная среда, в которой любой пользователь может дать жизнь своей программе с помощью кода. Ардуино-среду разработки поддерживают все операционные системы: Виндовс, Мак ОС и Линукс.

Ардуино-платформа «разговаривает» с компьютером с помощью юсб-кабеля. Чтобы микропроцессор работал в автономном режиме, придется приобрести блок питания до 12 В. Однако питание для Ардуино-платформы, кроме юсб адаптера, может осуществляться с помощью батареи. Определение источника производится автоматическим образом.

Норма для питания платы варьируется между 6 и 20 В. Следует учитывать, что если напряжение в электрической сети меньше 7 В, работа микропроцессора становится неустойчива: возникает перегрев, после чего на плате появляются повреждения. Поэтому не стоит верить указанной в инструкции норме питания и выбрать диапазон, начиная с 7 В.

Встроенная в микропроцессор флеш-память равна 32 кБ. Однако 2 кБ потребуется для работы бутлоадера, с помощью которого осуществляется прошивка Ардуино с использованием компьютера и юсб-кабеля. Предназначение флеш памяти в таком случае – сохранение программ и надлежащих статических ресурсов.

В Ардуино платформу также включена СРАМ-память, в которой числится 2 кБ. Предназначение данного вида памяти микропроцессора – сохранение временных сведений в качестве переменных, использующихся в программных кодах. Данную закономерность можно сравнить с оперативной памятью любого компьютерного устройства. Когда платформа отключается от источника питания, оперативная память очищается.

Динамик с мощностью до 3-х Вт Можно купить в любом компьютерном магазине.
Карта с памятью не меньше 32 Гб Аналогично предыдущему пункту.
Резистор на 220 Ом в количестве 2 штуки Такие резисторы отличаются постоянной мощностью в 0,5 ВТ и точностью до 5 процентов. Работа осуществляется под напряжением не более 350 В.
Батарея «Крона» Батарейка «Крона» сделана на алкалайновой основе и отлично работает на 9 В. Инструмент предназначен для управления электронной самодельной аппаратурой, к которой подключаются периферийные устройства наподобие сенсорных или дисплейных датчиков. Выпускает заряженное «чудо» компания из Германии – Ansmann.
Кабель питания для подзарядки батареи Кабель предназначен для того, чтобы заряжать стандартные батарейки «Крона» на 9 В. С одной стороны торчит штекер с плюсовым центром, с другой – разъем для применения батареи.
Провода для соединения схемы «папа-папа» Данные провода отлично соединяют периферийные устройства между собой.
Бредбоард Бредбоард – специальная дощечка, которая создана для прототипирования. Такое устройство не заставит юного электронщика делать множественные спайки, которые обычно требуются для конструирования электронных устройств.
Клеммник в количестве 3 штуки Клеммник – небольшая коробочка для присоединения пары контактов. Расстояние между разъемами контактов равняется 2х3 мм. Оборудование легко установить на макетной плате: все соединительные провода плотно фиксируются и крепко сжимаются.

Шаг 2: Схема подключения

После того, как все компоненты куплены или собраны, переходим к схеме подключения ардуино анемометра:

  1. Соединяем все вышеперечисленные компоненты выше между собой, используя при этом соединительные провода и клеммники. Питание пока не включаем.
  2. Записываем на флешку 7 поочередных мелодий, придумываем соответствующие названия.
  3. Флешку подключаем к МП3-модулю.
  4. Подаем в устройство питание.
  5. В разделе ниже приведен код программы, которую нужно перенести на Ардуино микропроцессор.
  6. Испытываем прибор в действии.

Шаг 3: Программирование Arduino для считывания данных с анемометра

Алгоритм кода для осуществления работы анемометра:

#include <mp3TF.h> mp3TF mp3tf = mp3TF (); unsigned int speed; unsigned char prev_speed; unsigned int speed_change_counter = 0; boolean speed_changed = false; void setup() { mp3tf.init(&Serial); Serial.begin(9600); } unsigned int measureSpeed() { return analogRead(A0); } void saySpeed() { unsigned char pseudospeed = speed/40; if(pseudospeed == 0) mp3tf.stop(); else if(pseudospeed > 6) mp3tf.play(7); else mp3tf.play(pseudospeed); } void loop() { speed = measureSpeed(); if (abs(speed-prev_speed) > 40 && speed/40 != prev_speed/40) { speed_change_counter = 0; speed_changed = true; prev_speed = speed; } else { if(speed_changed) { if(++speed_change_counter == 10) { speed_changed = false; saySpeed(); } } } delay(100); }

Шаг 4: Дополнительные примеры

Еще один вариант реализации этого устройства продемонстрировали коллеги из компании ForceTronics. Они сделали видео о том как происходил процесс создания анемометра:

Скетч для микроконтроллера от этой компании ниже:

//*****************Arduino anemometer sketch****************************** const byte interruptPin = 3; //anemomter input to digital pin volatile unsigned long sTime = 0; //stores start time for wind speed calculation unsigned long dataTimer = 0; //used to track how often to communicate data volatile float pulseTime = 0; //stores time between one anemomter relay closing and the next volatile float culPulseTime = 0; //stores cumulative pulsetimes for averaging volatile bool start = true; //tracks when a new anemometer measurement starts volatile unsigned int avgWindCount = 0; //stores anemometer relay counts for doing average wind speed float aSetting = 60.0; //wind speed setting to signal alarm void setup() { pinMode(13, OUTPUT); //setup LED pin to signal high wind alarm condition pinMode(interruptPin, INPUT_PULLUP); //set interrupt pin to input pullup attachInterrupt(interruptPin, anemometerISR, RISING); //setup interrupt on anemometer input pin, interrupt will occur whenever falling edge is detected dataTimer = millis(); //reset loop timer } void loop() { unsigned long rTime = millis(); if((rTime — sTime) > 2500) pulseTime = 0; //if the wind speed has dropped below 1MPH than set it to zero if((rTime — dataTimer) > 1800){ //See if it is time to transmit detachInterrupt(interruptPin); //shut off wind speed measurement interrupt until done communication float aWSpeed = getAvgWindSpeed(culPulseTime,avgWindCount); //calculate average wind speed if(aWSpeed >= aSetting) digitalWrite(13, HIGH); // high speed wind detected so turn the LED on else digitalWrite(13, LOW); //no alarm so ensure LED is off culPulseTime = 0; //reset cumulative pulse counter avgWindCount = 0; //reset average wind count float aFreq = 0; //set to zero initially if(pulseTime > 0.0) aFreq = getAnemometerFreq(pulseTime); //calculate frequency in Hz of anemometer, only if pulsetime is non-zero float wSpeedMPH = getWindMPH(aFreq); //calculate wind speed in MPH, note that the 2.5 comes from anemometer data sheet Serial.begin(57600); //start serial monitor to communicate wind data Serial.println(); Serial.println(«……………………………..»); Serial.print(«Anemometer speed in Hz «); Serial.println(aFreq); Serial.print(«Current wind speed is «); Serial.println(wSpeedMPH); Serial.print(«Current average wind speed is «); Serial.println(aWSpeed); Serial.end(); //serial uses interrupts so we want to turn it off before we turn the wind measurement interrupts back on start = true; //reset start variable in case we missed wind data while communicating current data out attachInterrupt(digitalPinToInterrupt(interruptPin), anemometerISR, RISING); //turn interrupt back on dataTimer = millis(); //reset loop timer } } //using time between anemometer pulses calculate frequency of anemometer float getAnemometerFreq(float pTime) { return (1/pTime); } //Use anemometer frequency to calculate wind speed in MPH, note 2.5 comes from anemometer data sheet float getWindMPH(float freq) { return (freq*2.5); } //uses wind MPH value to calculate KPH float getWindKPH(float wMPH) { return (wMPH*1.61); } //Calculates average wind speed over given time period float getAvgWindSpeed(float cPulse,int per) { if(per) return getWindMPH(getAnemometerFreq((float)(cPulse/per))); else return 0; //average wind speed is zero and we can’t divide by zero } //This is the interrupt service routine (ISR) for the anemometer input pin //it is called whenever a falling edge is detected void anemometerISR() { unsigned long cTime = millis(); //get current time if(!start) { //This is not the first pulse and we are not at 0 MPH so calculate time between pulses // test = cTime — sTime; pulseTime = (float)(cTime — sTime)/1000; culPulseTime += pulseTime; //add up pulse time measurements for averaging avgWindCount++; //anemomter went around so record for calculating average wind speed } sTime = cTime; //store current time for next pulse time calculation start = false; //we have our starting point for a wind speed measurement }

Ранее был сделан прототип анемометра из одного ультразвукового дальномера HC-SR04. Он умел рассчитывать проекцию скорости ветра на линию между приемником и передатчиком. Для получения вектора скорости ветра на плоскости (2D) требуется вторая координата, которую мы получим, если добавим второй датчик перпендикулярно первому. В этом случае можно закрепить анемометр стационарно — отпадает необходимость использовать флюгер и как-то организовывать подвижные контакты.

Первая версия

Сказано — сделано, причем основательно.

Из обрезков полипропиленовых труб сварил крестовину. Все датчики отпаял и удлинил проводами, которые проложил внутри труб. Расстояние между датчиками получилось 70 см.

Код программы такой.

#include <dht.h> #include <OneWire.h> #include <DallasTemperature.h> #define Trig 4 #define Echo 2 #define Trig2 8 #define Echo2 12 #define ONE_WIRE_BUS 7 #define Steps dht DHT; #define DHT21_PIN 0 static const float defDist = .6985; // m static const float defDist2 = .713; // m // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); void setup() { pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(Trig2, OUTPUT); pinMode(Echo2, INPUT); Serial.begin(57600); // Start up the library sensors.begin(); Serial.println(«X Distance Tds18820 Tcalc Tdht Hum V»); } unsigned long impulseTime=0; void loop() { // READ DATA //Serial.print(«DHT21, \t»); int chk = DHT.read21(DHT21_PIN); float DHTtemp = 10; float DHThum = 50; switch (chk) { case DHTLIB_OK: // Serial.print(«OK,\t»); DHTtemp =DHT.temperature; DHThum = DHT.humidity; break; default: Serial.print(«DHT Error,\t»); break; } // DISPLAY DATA // Serial.print(DHThum, 1); // Serial.print(«,\t»); //Serial.println(DHTtemp, 1); sensors.requestTemperatures(); // Send the command to get temperatures DS18820 float dist = 0; float dist2 = 0; float temp = sensors.getTempCByIndex(0); //DHTtemp; unsigned long impulseTime=0; unsigned long impulseTime2=0; int N=250; for (int i = 0; i <N; i++) { digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); impulseTime +=pulseIn(Echo, HIGH); delay(50); digitalWrite(Trig2, HIGH); delayMicroseconds(10); digitalWrite(Trig2, LOW); impulseTime2 +=pulseIn(Echo2, HIGH); delay(50); } //float P = 101325; float P = 761 * 133.3; float M = (28.95-10.934*DHT.humidity/100*(133.3*4.579*exp(17.14*temp/(235.3+temp)))/P)/1000; float R= 8.31447; float X = 1.4 * R/M ; //X = 287; float c = sqrt( X *(temp+273.15)); dist = impulseTime * c / 1e6 /N; dist2 = impulseTime2 * c / 1e6 /N; float Speed_of_sound = defDist*N/impulseTime * 1e6; float Speed_of_sound2 = defDist2*N/impulseTime2 * 1e6; float Tcalc = sq(Speed_of_sound)/X — 273.15; float v = c- Speed_of_sound; float v2 = c- Speed_of_sound2; float v3 = sqrt(sq(v) + sq(v2)); int wd = int(atan(-v/v2)*180/3.1416); if (v>0) {wd+=90;} else {wd+=270;} //Serial.println(«X Distance Tds18820 Tcalc Tdht Hum V»); //Serial.println(String(impulseTime) + char(9) + String(impulseTime2)); Serial.println(String(impulseTime) + char(9) + String(impulseTime2) + char(9) + String(dist, 5) + char(9) + String(dist2, 5) + char(9) + String(temp) + char(9) + String(Tcalc) + char(9) + String(DHTtemp)+ char(9) + String(DHThum) + char(9) + String(v) + char(9) + String(v2) + char(9) + String(v3) + char(9) + String(wd)); }

Два последних числа дают искомую горизонтальную скорость и направление ветра. Направление рассчитывается в виде азимута к направлению на север и дается в градусах. Вращение по часовой стрелке.

Увы, результаты меня разочаровали.

При усреднении в 25 измерений, показания в спокойном воздухе прыгают в среднем до 1.5 м/с, при этом измерения выдаются примерно раз в сек. Если усреднить в 10 раз больше показаний ситуация улучшается, но кардинально проблему не решает. К тому же судя по графику скоростей в двух осях, одна пара датчиков фонит существенно больше другой. Скорее всего дело в проводах, которыми я удлинил датчики. Придется переделывать.

Вторая версия

Есть еще одна причина все переделать. Как отмечалось в первой теоретической части, скорость звука изменится на 1 м/с при изменении температуры примерно на 1.5 °С. Погрешности измерений по обоим осям складываются. Нужно понимать, что порывы теплого или холодного воздуха могут существенно исказить показания такого анемометра. Нет смысла в показаниях 4 м/с при легком дуновении теплого ветерка. Из диаграммы натурного эксперимента видно, что даже медленное изменение температуры вызывает дрейф измеренной скорости, а быстрое изменение температуры на 1 градус скачком поменяло измеренную скорость ветра на 1.5 м/с, в то время как датчик температуры медленно отрабатывает это изменение. Важно заметить, что эксперимент этот проходил прямо у меня на столе и изменение температуры было естественным — я ничего не трогал и искусственно ничего не нагревал.

И тут на помощь приходит тот же принцип, что и при измерении расстояния. Если помним, датчики у оригинального HC-SR04 расположены вместе, поэтому результаты не зависят от наличия ветра. Если измерить скорость звука на известном расстоянии сначала в одном направлении, а затем в другом, то разница этих двух показаний, деленная пополам и будет искомой скоростью ветра в проекции на эту ось. При этом, изменение температуры в диапазоне ±25°С дает погрешность ±4%, что абсолютно не критично и мы можем обойтись вообще без термометра. Да и зачем нам термометр? Если мы знаем время прохождения сигнала в обоих направлениях, то по формулам из прошлой статьи мы легко вычислим температуру, а значит сможем уточнить скорость ветра.
Есть лишь одна маленькая загвоздка — придется использовать два HC-SR04 на одной оси. В промышленных образцах датчики попеременно выполняют роль приемника и передатчика. В нашем случае для этого придется подключить пищалки напрямую к arduino и программно генерировать 8 импульсов 40 кГц на одной, после чего вычленять их из другой. Зная про определенные сложности на этом пути, мне представляется проще купить еще 2 датчика по 55 рублей и попытаться обойтись малой кровью. Этим я займусь в следующий раз. А пока на двух датчиках сделаю измерение скорости ветра по одной оси и измерение температуры в такой конфигурации. Главная проблема здесь убрать помехи, которые дают такой большой разброс показаний в спокойном воздухе.

Конструкция

Вооружившись паяльником конструкция была беспощадно распаяна на составляющие. Новую версию решил не делать так основательно, а зря. Никогда не угадаешь, где найдешь, где потеряешь. Получилось как-то так.
Во-первых, приемник расположил как можно ближе к плате, а передатчик удалил всего лишь на 20 см. Второй комплект перевернул на 180 градусов и пищалки скрепил попарно изолентой. Чем точнее соблюсти соосность обоих пар датчиков, тем лучше. В идеале мы должны получить абсолютно идентичные показания скорости прохождения сигнала в обоих направлениях в спокойном воздухе. Натурные испытания подтвердили нашу теорию. В такой конфигурации получается мало помех и весьма точные показания независимо от температуры, что подтверждается графиком ниже.
Вначале я пробовал просто дуть по направлению от синей пары к черной. Моих легких явно недостаточно. Но любопытный факт — воздух в легких успел нагреться на 1°, что раньше вызвало бы скачок скорости на 1.5 м/с, т.к. DS18B20 просто ничего не заметил. Отметим, что мои легкие способны дать всего лишь 0.5 м/с. Дальше я включил большой напольный вентилятор и направил все также от синего к черному. Видно как пошел более прохладный воздух из глубины комнаты и даже DS18B20 начал отрабатывать это снижение, но теперь его значения не используются для расчета скорости. Сделал открытие, что мой вентилятор дует со скоростью около 2 м/с. Дальше в течение паузы видим постепенное увеличение температуры и отличную корреляцию между рассчитанной и измеренной температурой. В конце поставил вентилятор с другой стороны и получил 2 м/с в обратном направлении с падением температуры. Ура, товарищи, это работает!

Программа расчета скорости ветра

#include <dht.h> #include <OneWire.h> #include <DallasTemperature.h> #define Trig 4 // HC-SR04 №1 #define Echo 2 #define Trig2 8 // HC-SR04 №2 #define Echo2 12 #define ONE_WIRE_BUS 7 // DS18B20 #define Steps dht DHT; #define DHT21_PIN 0 // DHT21 static const float defDist = .2121; // m static const float defDist2 = .2121; // m float Tcalc = 0; // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); void setup() { pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(Trig2, OUTPUT); pinMode(Echo2, INPUT); Serial.begin(57600); // Start up the library sensors.begin(); Serial.println(«X Distance Tds18820 Tcalc Tdht Hum V»); } unsigned long impulseTime=0; void loop() { float temp = 0; float DHTtemp = 0; float DHThum = 50; // READ DHT DATA int chk = DHT.read21(DHT21_PIN); if (chk == DHTLIB_OK) { DHTtemp =DHT.temperature; DHThum = DHT.humidity; } if (sensors.getDeviceCount() > 0) { sensors.requestTemperatures(); // Send the command to get temperatures DS18820 temp = sensors.getTempCByIndex(0); //DHTtemp; } float dist = 0; float dist2 = 0; unsigned long impulseTime=0; unsigned long impulseTime2=0; int N=50; for (int i = 0; i <N; i++) { digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); impulseTime +=pulseIn(Echo, HIGH); delay(50); digitalWrite(Trig2, HIGH); delayMicroseconds(10); digitalWrite(Trig2, LOW); impulseTime2 +=pulseIn(Echo2, HIGH); delay(50); } //float P = 101325; float P = 761 * 133.3; float M = (28.95-10.934*DHThum/100*(133.3*4.579*exp(17.14*Tcalc/(235.3+Tcalc)))/P)/1000; //M = 0.02895; float R= 8.31447; float X = 1.4 * R/M ; Tcalc = sq((defDist+defDist2)*N/(impulseTime+impulseTime2) * 1e6)/X — 273.15; float c = sqrt( X *(Tcalc+273.15)); dist = impulseTime * c / 1e6 /N; dist2 = impulseTime2 * c / 1e6 /N; float Speed_of_sound = defDist*N/impulseTime * 1e6; float Speed_of_sound2 = defDist2*N/impulseTime2 * 1e6; float v = (Speed_of_sound-Speed_of_sound2)/2; //float v2 = c- Speed_of_sound2; //float v3 = sqrt(sq(v) + sq(v2)); //int wd = int(atan(-v/v2)*180/3.1416); //if (v>0) {wd+=90;} else {wd+=270;} Serial.println(String(impulseTime) + char(9) + String(impulseTime2) + char(9) + String(dist, 5) + char(9) + String(dist2, 5) + char(9) + String(temp) + char(9) + String(Tcalc) + char(9) + String(DHTtemp)+ char(9) + String(DHThum)+ char(9) + String(M,5) + char(9) + String(v)); }

Программа будет работать и без датчиков DHT-21 и DS18B20. DS18B20 для вычислений в этом коде нигде не задействован — только выводится в терминал как эталон. Без датчика влажности температура будет рассчитываться как для воздуха с 50% влажностью. На практике это вносит очень маленькую погрешность. На измерения скорости ветра эти датчики вообще не оказывают никакого влияния.

Собственно это все что можно выжать из двух HC-SR04. Для получения вектора скорости ветра на плоскости нужно добавить еще 2 датчика перпендикулярно первым и по формулам первой версии получить полную скорость и направление. Этим займусь как только приедут заказанные дополнительные датчики.

P.S.

Датчики давно приехали, конструкцию переделывал еще 2 раза и в конце концов он заработал как надо, но до крыши этот ультразвуковой анемометр так и не доехал, поэтому до сих пор продолжения и не написал, хотя идея рабочая.

P.P.S. 2018

По многочисленным просьбам выкладываю итоговый скетч, который не требует никаких библиотек (кроме стандартной EEPROM) и работает с 4 датчиками. Код со всякими вкусностями типа встроенной калибровки и сохранением калибровочных значений в энергонезависимую память. И самое главное. Описанная выше проблема с погрешностями по одной из осей была связана не с проводами, а с работающими в одной комнате с датчиками импульсными блоками питания компьютера, монитора и т.п. (их схема преобразования работает на близкой частоте 40 кГц). Я остановился на проблеме выноса датчика на улицу подальше от помех (с передачей данных по блютус). В остальном это работает. Это версия для распаянных датчиков, но есть способ не распаивать. Если вернусь к проекту — реализую.
Для этого кода неважно какое расстояние между датчиками. Нужно поместить устройство в безветренное пространство (и без импульсных помех) и через терминал несколько раз отдать 2 команды:

t21.5
u

Первая — текущая температура по эталонному термометру (любой уличный), вторая — говорит контроллеру что сейчас скорость ветра 0. Согласно этим данным он вычислит расстояние между датчиками и запишет их в EEPROM. Все дальнейшие измерения будут отталкиваться от этих значений.

// WindSpeed v.4 — Анемометр // Copyright Evgeny Istomin gena@regimov.net, blog.regimov.net // Используются 4 датчика HC-SR04. Приемник и передатчик разнесены на противоположные концы крестовины // На схеме изображено положение приемников для правильного расчета направления и силы ветра // HC-SR04 №1 // Север (0 гр) // o // | // | // HC-SR04 №2 o——-|———o HC-SR04 №4 // Запад (270гр) | Восток (90 гр) // | // o // HC-SR04 №3 // Юг (180 гр) // при выборе материала крестовины руководствоваться http://temperatures.ru/pages/temperaturnyi_koefficient_lineinogo_rasshireniya // лучший выбор материала — труба инвар 36H, но и обычное железо вполне годится 🙂 #define DEFINE_DISTANCE 0.22 // примерное расстояние между датчиками, измеренное линейкой, в метрах. #define MES_PAUSE 90 // Пауза между измерениями для затухания отражений. В реальности нужно не менее 1, мс. #define MES_AVERAGE 8 // сколько измерений усреднять для температуры. #define PRINT_PERIOD 500 // период вывода измерений в терминал, ms #include <EEPROM.h> #define FALSE 0 #define TRUE 1 #define Echo1 2 #define Echo2 3 #define Echo3 8 #define Echo4 5 #define Trig1 6 // HC-SR04 №1 #define Trig2 7 // HC-SR04 №2 #define Trig3 4 // HC-SR04 №3 #define Trig4 9 // HC-SR04 №4 #define Pow1 10 #define Pow2 11 #define Pow3 12 #define Pow4 13 #define T_ABS 273.15 // температура абсолютного нуля https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D0%BE%D0%BB%D1%8E%D1%82%D0%BD%D1%8B%D0%B9_%D0%BD%D1%83%D0%BB%D1%8C_%D1%82%D0%B5%D0%BC%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B #define PRINT_LOOP PRINT_PERIOD/(4*(MES_PAUSE)) // сколько полных циклов пропустить перед выводом измерений в терминал float defDist1 = DEFINE_DISTANCE; float defDist3 = DEFINE_DISTANCE; float defDist2 = DEFINE_DISTANCE; float defDist4 = DEFINE_DISTANCE; float Tcalc = 0; // температура воздуха (расчетная) const float DHThum = 50; // % влажности float M = 0.02895; // молярная масса кг/моль https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%81%D1%81%D0%B0 const float R = 8.31447; // Универса́льная га́зовая постоя́нная Дж/(моль*К) https://ru.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%BD%D0%B0%D1%8F const float P = 761 * 133.3;// давление в Па. 101325 на уровне моря float X = 1.4 * R / M ; float c = sqrt( X * (Tcalc + T_ABS)); // скорость звука м/с https://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D1%8C_%D0%B7%D0%B2%D1%83%D0%BA%D0%B0 float impulseTime1 = defDist1 / c; float impulseTime2 = defDist2 / c; float impulseTime3 = defDist3 / c; float impulseTime4 = defDist4 / c; unsigned char count = 0; // счетчик циклов /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // простой фильтр-усреднитель float filterA(float y1, float y) { return ((MES_AVERAGE — 1) * y1 + y) / MES_AVERAGE; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // измеряем задержку прохождения звука между датчиками, сек float measument(unsigned char Trig, unsigned char Echo, unsigned char Pow) { float y; digitalWrite(Pow, HIGH); delay(MES_PAUSE); digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); y = pulseIn(Echo, HIGH); if (count > PRINT_LOOP) Serial.print(String(y, 0) + char(9)); digitalWrite(Pow, LOW); return y * 1e-6; }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // запоминаем в flash-памяти расстояния между датчиками void StoreDefDist() { EEPROM.put(0, defDist1); EEPROM.put(1 * sizeof(float), defDist2); EEPROM.put(2 * sizeof(float), defDist3); EEPROM.put(3 * sizeof(float), defDist4); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // читаем из flash-памяти расстояния между датчиками float GetDefDist(int adress) { float dd; EEPROM.get(adress, dd); if (dd <= 0) dd = DEFINE_DISTANCE; return dd; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // расчет скорости звука в зависимости от температуры, давления и влажности void GetC(float t) { M = (28.95 — 10.934 * DHThum * 0.01 * (133.3 * 4.579 * exp(17.14 * t / (235.3 + t))) / P) / 1000; X = 1.4 * R / M ; c = sqrt( X * (t + T_ABS)); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { pinMode(Pow1, OUTPUT); pinMode(Pow2, OUTPUT); pinMode(Pow3, OUTPUT); pinMode(Pow4, OUTPUT); pinMode(Trig1, OUTPUT); pinMode(Trig2, OUTPUT); pinMode(Trig3, OUTPUT); pinMode(Trig4, OUTPUT); pinMode(Echo1, INPUT); pinMode(Echo2, INPUT); pinMode(Echo3, INPUT); pinMode(Echo4, INPUT); digitalWrite(Pow1, HIGH); digitalWrite(Pow4, HIGH); digitalWrite(Pow3, HIGH); digitalWrite(Pow2, HIGH); defDist1 = GetDefDist(0); // читаем из flash-памяти расстояния между датчиками defDist2 = GetDefDist(1 * sizeof(float)); defDist3 = GetDefDist(2 * sizeof(float)); defDist4 = GetDefDist(3 * sizeof(float)); Serial.begin(57600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.println(«impT1\timpT3\timpT2\timpT4\tdist1\tdist3\tdist2\tdist4\tTcalc\tv1\tv2\tWD\tv3 » + String(PRINT_LOOP)); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { // период измерений = 1 / ( 4e-3 * (MES_PAUSE + 1)) impulseTime1 = measument(Trig1, Echo1, Pow1); impulseTime3 = measument(Trig3, Echo3, Pow3); impulseTime2 = measument(Trig2, Echo2, Pow2); impulseTime4 = measument(Trig4, Echo4, Pow4); //if (count > MES_AVERAGE) Serial.print(String(impulseTime1*1e6) + char(9)); Tcalc = filterA(Tcalc, sq((defDist2 + defDist4 + defDist1 + defDist3) / (impulseTime1 + impulseTime3 + impulseTime2 + impulseTime4) ) / X — T_ABS); if ((Tcalc > 70) | (Tcalc < -50)) Tcalc = 0; GetC(Tcalc); float Speed_of_sound1 = defDist1 / impulseTime1 ; float Speed_of_sound2 = defDist2 / impulseTime2 ; float Speed_of_sound3 = defDist3 / impulseTime3 ; float Speed_of_sound4 = defDist4 / impulseTime4 ; float v1 = ((Speed_of_sound3 — Speed_of_sound1) / 2); float v2 = ((Speed_of_sound2 — Speed_of_sound4) / 2); float v3 = sqrt(sq(v1) + sq(v2)); int wd = int(atan(v2 / v1) * 180 / 3.1416); if (v1 < 0) { wd += 180; } else if (v2 < 0) { wd += 360; } if (count > PRINT_LOOP) { Serial.println( String(c, 5) + char(9) + String(Tcalc) + char(9) + String(v1) + char(9) + String(v2) + char(9) + String(wd) + char(9) + String(v3) ); count = 0; } while (Serial.available() > 0) { char inCh = Serial.read(); // установка температуры. формат команды: t21.5 if (inCh == ‘t’) { String a = Serial.readString(); Tcalc = a.toFloat(); GetC(Tcalc); } // u — юстировка (установка на 0). формат команды: u if ((inCh == ‘t’) | (inCh == ‘u’)) { defDist1 = impulseTime1 * c ; defDist2 = impulseTime2 * c ; defDist3 = impulseTime3 * c ; defDist4 = impulseTime4 * c ; StoreDefDist(); } } count++; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

Cамодельный анемометр

roman2205

История такова. Перед тем как тратить деньги на большой проект ветряка решил сначала сделать анемометр, который покажет есть ли у меня ветры. А потом будет как дополнительный датчик для тормозной системы, который будет оповещать, что поднялся сильный ветер.

Должно было получиться что-то вот такое

Этапы изготовления самого датчика:

Корпус сделал так: взял кусок квадратной трубы в ней вырезал окошко, чтобы через него потом смонтировать начинку (кстати окошко вырезал с температурой, но так мне очень хотелось это сделать, что встал и пошел пилить). Затем внутрь приварил пластину (держатель внутреннего подшипника), тогда приварил низ (держатель нижнего подшипника). Когда решил делать верх задумал сделать скатную крышу-для этого вырезал четыре треугольника и аккуратно поприхватывал, а затем проварил полностью и так сделал заостренный козырек. Тогда зажал в тиски и сверлом на 0,5 мм меньше, чем диаметр подшипника просверлил вертикально отверстие в нижние крышке и в средние, оба для подшипников. Чтоб подшипники стали с натяжкой подгонял разверткой. Подшипники встали как родные. Затем в них вставил чуть-чуть подшлифованный гвоздь 100-ку при этом в середине окошка надев на него пластмассовую шаийбу с 4-мя прорезями. На гвозде снизу нарезал резьбу и на нее накрутил крыльчатку.

Крыльчатку изготовил так: к гайке электродом двойкой приварил три гвоздя потом их обрезал и на концах нарезал резьбу которой прикрутил половинки от мячика.

К корпусу приварил держатель- шестигранный пруток из нержавейки. Сам корпус покрасил белой эмалью два раза, чтобы точно не ржавел.

Решил не придумывать велосипед, а сделать так как в компьютерной мышке, есть пластмассовая шайба с четырьмя прорезями на оси вращения, когда крыльчатка крутится то крутится и шайба при этом проемы мелькают над датчиком, который крепится к передней крышки и когда крышка прикручивается, то он как раз становится так что шайба с прорезями крутится и заступает и отступает световой поток от светодиода к фототранзистору. Все… тут вам и импульсы, а их можно посчитать и иметь количество оборотов в секунду.

Светодиодиодно — фототранзисторный датчик выдернул из принтера, там таких навалом.

Сначала сделал из теннисных мячиков

Пришлось немного модифицировать прибор. На крыльчатка от теннисных мячиков он стартовал при ветре 5м/с. были куплены мячики в магазине детских игрушек диаметром 55 мм. Стартует при 2м/с и ведет измерения до 22 м/с, Мне хватаєт.

После того как датчик был готов. Надо было сделать электронику.

Первый вариант был самодельный ЛУТ технология + зеленая маска из Китая, сохнет под ультрафиолетом.

55 на фотографии это оборотов в секунду. Надо было как-то перевести в м/с. Долго думал как, достал даже два анемометры старый еще с СССР и китайский за 50 $, но с поверкой возникли проблемы, потому что ветер порывистый и не дует стабильно.

Поэтому придумал так: в выходной день я с Папой нашли за городом 2 км ровной дороги без машин, без ветра и с обеих сторон посадка деревьев (Папа за рулем а я сидел наполовину за окном) и давай гонять взад вперед. Сначала выставил СССР-кий и китайские анемометры я убедился, что они оба показывают одинаково и правильно, потому что если разделить скорость на спидометре машины на 3,6 то получалась цифра которую показывали анемометры в м/с. Папа ехал с одинаковой скоростью и приборы показывали одинаковый ветер. Таким образом я и проверял свой прибор. Папа добавлял каждый раз +5 км в час, а я записывал новый показатель (оборотов в секунду). Замеры провел трижды. Когда мы ехали более 80 км/ч (22м/с) мой анемометр уже не мог раскрутиться и цифра замирала, потому более 22м/с он не измеряет….

Кстати, Китайский показывал до 28м/с. СССР-кий до 20м/с. Когда установил его в месте с доработанной программой, еще раз сверил с китайским все сошлось.

Сейчас переделывается под Ардуино.

В планах это докрутить в систему умного дома, чтобы можно было со смартфона заходить и управлять нагрузками в доме, смотреть температуру в доме (для меня это актуально, просто порой газ выключают зимой и хорошо видеть какая температура) будет еще датчик газа, и плюс будет отображаться скорость ветра у дома.

Видео работы

Результаты работы за зиму

По результатам за две зимы я увидел что ветры у меня не сильные и ветряк будет не эффективен, поэтому сделал маленький с лопастями по 50см. мощностью в пику 150 Вт. Сделал просто, чтобы хотя бы одна экономная лампочка светила когда свет пропадет.

Теперь немного о Arduino.

Нашел в Интернете схему работы мышки, она наглядно иллюстрирует как работает моя система.

Отталкиваясь от схемы мышки я сделал следующую схемку.

Импульсы поступают с фототранзистора на Arduino, а он воспринимает их как нажатия кнопки.

Алгоритм работы программы таков: Считаем сколько нажатий кнопки произошло за одну секунду вот и имеем частоту вращения. Для того чтобы эту частоту перевести в м/с. еще когда я делал на Атмел я сделал алгоритм расчета частоты в м / с. Выглядел он так:

int ob_per_sec=0; // Переменная в которую попадает частота оборотов в секунду.

int speed_wind=0; // Сюда будет попадать значение после пересчета частоты в м/с.

int speed_wind_max=0; // Сюда попадает максимальное значение показаний ветра м/с.

int speed_wind_2=0; // К-во секунд с начала работы программы со скоростью ветра 2 м/с.

int speed_wind_3=0; // К-во секунд с начала работы программы со скоростью ветра 3 м/с.

int speed_wind_4=0; // К-во секунд с начала работы программы со скоростью ветра 4 м/с.

int speed_wind_5=0; // К-во секунд с начала работы программы со скоростью ветра 5 м/с.

…………………………………………………………..

int speed_wind_22=0; // К-во секунд с начала работы программы со скоростью ветра 22 м/с.

if (ob_per_sec >0 && ob_per_sec<4) { speed_wind=2; speed_wind_2++;}

if (ob_per_sec >4 && ob_per_sec<7) { speed_wind=3; speed_wind_3++; }

if (ob_per_sec >7 && ob_per_sec<11) { speed_wind=4; speed_wind_4++; }

if (ob_per_sec >11 && ob_per_sec<15) { speed_wind=5; speed_wind_5++; }

if (ob_per_sec >15 && ob_per_sec<18) { speed_wind=6; speed_wind_6++; }

if (ob_per_sec >18 && ob_per_sec<23) { speed_wind=7; speed_wind_7++; }

if (ob_per_sec >23 && ob_per_sec<27) { speed_wind=8; speed_wind_8++; }

if (ob_per_sec >27 && ob_per_sec<30) { speed_wind=9; speed_wind_9++; }

…………………………………………………………..

if (ob_per_sec >60 && ob_per_sec<67) { speed_wind=22; speed_wind_22++; }

И выводим на экран значение.

При необходимости можно затем просмотреть сколько минут дул ветер с определенной скоростью, для этого нужно на экран вывести переменную (с необходимым индексом скорости) speed_wind_№ (но разделить ее на 60, чтобы получились минуты.).

Я у себя в программе сделал так: при нажатии определенной кнопки поочередно выводятся все переменные, от speed_wind_1 до speed_wind_22.

Самодельный анемометр

Велокомпьютер

Узел вращения собран. Теперь необходимо подумать об установке датчика вращения и о креплении узла. В качестве датчика оптимально применить геркон, срабатывающий от магнита, закрепленного на вращающемся узле. Частоту импульсов вращения можно преобразовать в оценку скорости ветра при помощи аналоговых или цифровых схем. Но можно пойти более простым путём – использовать велокомпьютер.

Установим в анемометр датчик велокомпьютера

1. Приклеим магнит

Магнит приклеенМагнит извлечен

на вращающейся части узла. Во время крепления можно заодно провести работу по балансировке узла вращения. Магнит применен от комплекта велокомпьютера, единственно он вынут из пластмассового контейнера с помощью которого он крепится на спицах велосипеда. Балансировка необходима для устранения биений при вращении анемометра и как следствие раскачивания шеста и появления посторонних звуков в узлах крепления.

2. Просверлим в неподвижной части

Датчик установленОтверстие 7мм

узла отверстие диаметром 7мм и закрепим клеем герконовый датчик велокомпьютера в пластмассовом корпусе. При вклеивании датчика я собрал узел, положил на магнит кусочек картона толщиной 1мм, вставил датчик смазанный клеем в нужном месте в отверстие до касания с картоном и дополнительно промазал клееем. Такой способ установки датчика позволяет сохранить минимальный зазор между магнитом и датчиком и обеспечить надежное его срабатывание.

3. Проверяем работу узла на отсутствия касаний и по надежности срабатывания датчика (проверяем тестером).

Узел крепления

Узел крепления выполнен из уголка купленного в строительном магазине. Уголок двумя длинными винтами прикреплен к неподвижной части. Особенности крепления зависят от конкретного конструктивного исполнения головки видеомагнитофона.

УголокУголок доработанУголок установлен

Подключаем кабель

Кабель датчика удлинен на 7 метров с применением кабеля для построения компьютерной сети. Для удобства подключения на кабель и в разрывы сигнального кабеля велокомпьютера установлены разъемы от вентиляторов и блока питания компьютера. Сам велокомпьютер выполнен в настольном варианте, при помощи медной проволоки прикручен к магнитной системе двигателя видеоголовки. Получилась устойчивая конструкция.

ОснованиеРазъёмНастольный вариант

Настраиваем самодельный анемометр

анемометрРучка

Для настройки показаний анемометра в идеале применить настоящий анемометр. Я за свою жизнь держал в руках это чудо всего раз пять. Поэтому применил стандартный способ, прикрепил анемометр к ручке из дерева. И при езде на автомобиле в безветренную погоду настроил велокомпьютер по совпадению показаний со спидометром. В моем велокомпьютере настройка заключалась в подборе значения радиуса колеса в миллиметрах. Запоминаем величину найденного радиуса (лучше записываем), а то при смене батарейки компьютер забудет настройки.Цель получить суперточные показания не ставилась. Всё — настроено.

Установка анемометра

Анемометр лучше установить на длинный шест вдали от построек или на крышу дома. При монтаже продумываем все действия, готовим инструмент и крепежный материал. Полезно провести установку шеста без анемометра, сделать крепежные отверстия и отверстия для проходки кабеля. Закрепляем анемометр на шесте и аккуратно монтируем конструкцию. Пропускаем кабель внутрь здания и подключаем велокомпьютер.

В каждом простом велокомпьютере есть опции по замеру максимальной скорости, средней скорости за весь пробег, средней скорости за заданный период. Использование этих опций позволит замерить в месте установки анемометра максимальную скорость ветра, среднюю скорость ветра за период и за всё время его работы. Фрагмент работы самодельного анемометра показан на видео.

Самодельный анемометр sekret-mastera.ru своими руками

Анемометр – это измерительный прибор для определения скорости ветра. Сегодня мы с вами сделаем этот прибор для измерения скорости ветра самостоятельно. Наш самодельный анемометр очень прост в изготовлении, но вместе с тем, скорость ветра он измеряет не хуже, чем настоящий анемометр. Вот как ты можешь сделать самодельный анемометр.

Для того чтобы сделать самодельный анемометр нам понадобится:

• Транспортир

• Спичка

• Трубочка для коктейля, шампур или что-либо подобное

• Клейкая лента

• Хлопчатобумажная швейная нитка или нейлоновая рыболовная леска

• Мяч для большого тенниса стандартного веса

• Игла

Что нужно делать, чтобы получился самодельный анемометр

1. Иголкой проделай в теннисном мяче два крошечных отверстия одно напротив другого. Проще всего это сделать, нагрев кончик иглы на огне.

2. Продень швейную нитку или рыболовную леску сквозь мячик, оставив с одной стороны, примерно сорок пять сантиметров. Крепко привяжи ее и отрежь излишнюю длину.

3. Привяжи второй конец лески к палочке и обмотай ее ниткой, пока расстояние между палочкой и верхом мяча не достигнет тридцать сантиметров.

4. С помощью клейкой ленты прикрепи палочку к транспортиру. Нитка должна свисать с его наружной стороны из центральной точки.

5. Чтобы измерить скорость ветра, расположи транспортир в направлении ветра. Держи его за углы как можно дальше от себя. Нитка не должна касаться транспортира. При нулевой скорости ветра нитка будет висеть прямо вниз вдоль отметки девяносто градусов. Когда подует ветер, сними показания градусов и затем проверь по таблице скорость ветра.

Мы с вами провели очередной опыт и на этот раз измерили скорость ветра, которая постоянна в регионе, где вы проживаете. Проводить различные опыты и эксперименты очень интересно, увлекательно и познавательно. Особенно для таких любознательных мальчиков и девочек, как вы. Вы можете провести и другие опыты по различным направлениям и предметам. Например, очень интересно будет узнать, как же ведут себя муравьи в своей колонии, что делают под землей черви, как можно вырастить собственный кристалл или извлечь ДНК, как сделать самому электромагнит, научится ходить по воде, сконструировать свой телескоп для наблюдения за звездами, построить самодельный компас и многое, многое другое.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх