Беспроводной флюгер кроме простого указания направления ветра имеет абсолютный кодовый датчик. Обычные бытовые погодные станции имеют разрешение измерения направления ветра 22,5°, обновляемое каждые 14 секунд. Как самому сделать флюгер в домашних условиях?
В погодной станции, которую я собрал, измерение направления ветра имеет разрешение 0,1°, и обновляется каждую секунду.
Шаг 1: Новый тип флюгера
Я хотел изготовить флюгер на крышу своими руками, который был бы точнее, чем обычный потребительский флюгер и стоил бы дешевле, чем профессиональный. Задумка в том, чтобы использовать недорогой датчик, который по Bluetooth’у пересылал бы данные на дисплей. Частью задумки было сделать самодельный флюгер из металла и дерева, работающий на солнечной энергии. Материалы должны быть доступны и недороги, а также метео- и водостойкими.
Шаг 2: Собираем материалы
Для изготовления флюгера своими руками вам понадобятся:
- 8 шарикоподшипников с глубоким желобком 5х16х5мм
- 14 деревянных стержней 0,48х30 см
- Неодимовые магниты 0,6х1,27 см
- Заглушка для медной трубки 1,9 см
- Медная соединительная муфта 1,27 см
- Медная трубка 1,27 см длиной 15 см
- Медная трубка 1,9 см длиной 30 см
- Муфта медная переходная 1,27х1,9 см
- Абсолютный угловой кодовый датчик, шина SPI, SOIC-8, датчик положения MLX90316KDC-BDG-100-RE
- Микроконтроллер ATmega328P-PU, адаптер для программирования DIP-28
- Кварцевый осциллятор 16 МГц
- Конденсаторы 20 пФ
- Модуль Bluetooth HM-10, в качестве ведущего устройства
- Модуль Bluetooth HM-10 с несущей платой и регулятором напряжения
- Отсек на две пальчиковые батарейки (типа АА)
- Штыревой адаптер
- USBasp программатор
- Arduino IDE бесплатное ПО
- ЖК-дисплей 2х16 с последовательным подключением
- Arduino Pro Mini 8 МГц 3.3В
- Адаптер USB TTL
- Аккумуляторный блок с USB-выходом
- Тактильные кнопки
- Прозрачная пластиковая мыльница, послужит корпусом для дисплея
- Прямоугольный пластиковый корпус для начинки флюгера
Убедитесь, что у плат есть прошивка для HM-модуля. Так же вам понадобятся: провода, 3 транзистора 2N2222, МОП-транзистор IRF9540, резисторы и диоды.
Шаг 3: Проверяем датчик положения MLX90316
Так как я впервые имел дело с этим датчиком, мне нужно было выяснить его чувствительность, чтобы знать, на каком расстоянии от датчика закреплять магнит. Я думал, что если достаточно сильный магнит будет искажать показания датчика, но на практике оказалось, что показания не меняются на расстоянии 1,27 см от прямого контакта.
Так же важно использовать правильную версию датчика – они бывают аналоговые, поддерживающие проприетарный протокол и с шиной SPI. Arduino IDE для этого датчика нужно было обновить, добавьте #include в файле «MLX90316.h». Также в скетче используется библиотека «Metro.h» . Не забудьте, что MOSI и MISO используют одну и ту же кодовую шину числа, в отличии от обычной шины SPI.
Используйте «test.ino», чтобы проверить работу датчика. Для работы датчик нужно подключить к питанию 5В и земле. Цифровой выход 13 подключается к SCK, цифровой выход 12 (MISO) не подключается, цифровой выход 11 подключается к MOSI, цифровой выход 10 подключается к SS.
Файлы
Шаг 4: Программируем модули HM-10
Модули HM-10 пришли с конфигурацией ведомых, без режима ожидания. При подключении к ведущему устройству, они сразу соединялись с ним, без паролей. Для программирования модулей используйте адаптеры FTDI 232 (работающие на 3,3 В), подключите 3,3 В-вый вывод, GND и Rx к Tx, а Тх к Rx; хорошо, если у вас есть разъем-гнездо на плату, чтобы надеть его на выходы адаптера FTDI, а на выводы гнезда припаять провода, идущие к модулю НМ-10.
Принципиальная схема модуля HM-10 есть в инструкции, диод режима подключается к выходу 24, провод сброса подключается к выходу 23, заземление идет к выходам 13, 14,21, а выход 22 нужно доделать паяльником с тонким жалом (может понадобиться помощь, чтобы держать плату). Вам понадобится терминальная программа, позволяющая посылать АТ-команды, для изменения конфигурации.
Программируйте ведомые устройства:
- MODE 2 (Режим 2), данные и АТ-команды в том же потоке данных. Отправьте AT+MODE2
- PWRM 0, режим ожидания, отправьте AT+PWRM0
- ROLE 0, ведомое/удаленное/периферийное устройство, отправьте AT+ROLE0
- PCTL 1, установка режима питания, максимально возможное значение напряжения. Отправьте AT+PCTL1
- FLOW 0, выключение управления потоком данных, отправьте AT+FLOW0
- ADDR ?, вам необходимо узнать MAC-адрес устройства, и записать его. Используется для установления CONN ведущим устройством. Отправьте AT+ADDR?
- CONN XXYYZZ и т.д., устанавливает соединение ведомого устройства с МАС-адресом ведущего устройства. Отправьте AT+CON22C22FF22DA2[МАС-адрес устройства]
- BAUD 0, по умолчанию скорость передачи данных составляет 9600 бод (максимально возможная у ATtiny85 скорость передачи данных). Отправьте AT+BAUD0
- POWE 2, мощность сигнала 0 дБ/мВт, отправьте AT+POWE2
- TYPE 0, убедитесь, что не используется пароль, отправьте AT+TYPE0
- VERS ?, узнать версию. У меня была версия v540, отправьте AT+VERS?
Программируйте ведущее устройство:
- MODE 2, данные и АТ-команды в одном потоке данных. Отправьте AT+MODE2
- PWRM 1, нет режима ожидания (ведущее устройство переходит в спящий режим), отправьте AT+PWRM1
- ROLE 1, ведущее/центральное устройство, отправьте AT+ROLE1
- PCTL 1, установка режима питания, максимально возможное значение напряжения. Отправьте AT+PCTL1
- FLOW 0, выключение управления потоком данных, отправьте AT+FLOW0
- ADDR ?, вам необходимо узнать МАС-адрес данного устройства, и записать его. Используется для подключения устройства (из списка) как ведомого. Отправьте AT+ADDR?
- CONN XXYYZZ, позволяет подключиться к МАС-адресу ведомого устройства, отправьте AT+CON22C22FF22DA2 [МАС-адрес устройства]
- BAUD 0, по умолчанию скорость передачи данных 9600 бод (максимально возможная у ATtiny85 скорость передачи данных). Отправьте AT+BAUD0
- POWE 2, мощность сигнала 0 дБ/мВт по умолчанию, отправьте AT+POWE2
- TYPE 0, убедитесь, что не используется пароль. Отправьте AT+TYPE0
- VERS ?, узнать версию. У меня была версия v540, отправьте AT+VERS?
- У версии v540 устройства не соединяются автоматически при включении питания. Вместо этого программа посылает команду CONN XXYYZZ при каждом включении дисплея.
- Еще интересные АТ-команды:
- TEMP ? отправьте AT+TEMP? для получения значения температуры
- RSSI ? запрос уровня принимаемого сигнала — AT+RSSI?
- BATT ? заряд батареи (имеет аналого-цифровой преобразователь!), отправьте AT+BATT?
- PIO4, PIO7 и т.д. – установка или сброс выходных сигналов (в этой статье не используется, но вообще может пригодиться). Контроллер Atmega328P выходит из спящего режима при получении любых последовательных данных с выхода Tx модуля HM-10 через резистор 10 кОм на вывод аппаратного прерывания INT0.
Шаг 5: Механическая и электронная составляющие погодной станции
Устанавливаем датчик
Погодная станция сделана на базе контроллера Atmega 328p и кристаллов 16МГц, установленных на куске перфорированной платы, и запрограммированных через usbasp-программатор. Датчик MLX90316 посылает данные о направлении напрямую на контроллер, где они преобразуются в последовательные данные ТТЛ-схемами, которые отправляются модулем Bluetooth HM-10 на ЖК-дисплей.
Если вы используете usbasp-адаптер, вам нужно установить модуль питания 3,3-5 В на 5 В, чтобы загрузка прошла нормально. Для работы контроллера 328р вам нужно записать загрузчик операционной системы в инструментах. При загрузке скетча сначала в панели Инструменты выберите плату Pro Mini с чипом 328р и usbasp в качестве программатора. Затем перейдите во вкладку скетча и загрузите его через программатор (а не через кнопку).
Датчик закреплен на плате адаптера, который как раз вплотную поместился в отрезке медной трубки 1,9 см. угла адаптера в просвете трубы закрепит супер клеем. Можно оставить секцию трубы с датчиком незафиксированной в тройнике, чтобы он мог вращаться и при установке запомнить положение севера. Фольгированным скотчем защитите секцию с датчиком от попадания воды.
Собираем механическую часть
Флюгер вращается с помощью двух шарикоподшипников. Для снижения трения с подшипников нужно снять уплотнители и очистить их от смазки. Часовой отверткой вскройте оболочку подшипников и добавьте немного wd-40, чтобы убрать смазку. Для смазки используйте маловязкое масло. Деревянный стержень – это ось, на один конец которой приклеиваем магнит. Стержень вставляется в верхнюю заглушку трубки, и вставляется в трубку, которую припаиваем к заглушке.
Затем просверливаем трубку и стержень и закрепляем винтиком и гайкой. Флюгер вклеиваем в трубку эпоксидкой.
Постарайтесь сделать флюгер как можно более легким. При балансировке оставьте длиннее плечо с хвостом, чем с указателем-противовесом. Для того, чтобы вам легче было придумать оптимальную конструкцию, даю вам фотографии погодного поля в Санта-Монике, Калифорнии (это арт-инсталляция).
Файлы
Шаг 6: Устанавливаем и программируем дисплей
Приклейте на термоклей Arduino Pro Mini к палочке от мороженного, а палочку от мороженного в ЖК-дисплею, так, чтобы контроллер находился над контактами дисплея. По схеме сделайте на кусочке перфорированной платы кнопку включения/выключения, которую подключите к выводу земле и к входу необработанных данных контроллера Pro Mini, и контрольным линиям выводов 5 6 этого же контроллера. Подключите минус и землю кнопки к кнопке, закрепленной на корпусе. Кнопку на плате приклейте термоклеем к дисплею.
Из-за того, что дисплею нужно напряжение 5 В, а датчику – 3,3В, я использовал Pro Mini с встроенным понижающим преобразователем. Это упростило взаимодействие с логическим уровнем между контроллером и датчиком, и даже с устройствами I2C (I2C компоненты 5 В подключаются к выводам SDA и SCL I2C-шины 3В контроллера Pro Mini), в то же время давая дисплею необходимые 5 В.
Внешний аккумулятор c USB-разъёмом я выбрал из-за легкости его перезарядки через USB, из-за того, что он хорошо поместился в корпус станции (мыльницу). USB-коннектора пришлось отрезать (чтобы все поместилось в мыльницу) и соединить провода с коннектором и с контактами схемы-кнопки.
Для монтажа дисплея на крышке мыльницы аккуратно просверливаем 4 отверстия в крышке, и закрепляем дисплей 4-мя миниатюрными винтиками 1,27 см и соответствующими гайками. Просверлите отверстия для кнопки включения, и закрепите ее герметиком. Осторожно нанесите эпоксидку на верхнюю и нижнюю поверхность тумблера и дайте ей застыть. Подключайте компоненты согласно схеме.
Программируйте Pro Mini через FTDI-адаптер, подключенный к разъему программатора.
Расположите датчик так, чтобы антенна была направлена к передней стороне корпуса, свободной от металлических деталей или проводов, и чтобы диод датчика был виден. Термоклеем приклейте датчик к дисплею.
ФайлыШаг 7: Результаты испытаний
Угловой датчик достаточно точный. Дисплей работает отлично, связь с датчиком устойчивая.
В дальнейшем я планирую добавить панель для зарядки трех никель-металлгидридных аккумуляторов от солнца.