Опишу ход "разработки". В процессе работы над прибором были проведены эксперименты, совершены ошибки.
Версия 1.0
Оборудование: NodeMCU 8266 + BME280
Это решение несколько месяцев успешно работало, измеряя и считая всё кроме ветра. Подключалось к сети WiFi, выходило в интернет, получало по NTP дату-время, отправляло данные на Народный мониторинг. Оставалось только прикрутить анемометр-флюгер
Попытка №1 – изготовление на 3D-принтере.
Были изучены вопросы:
- Определение положения оси флюгера по диску с отверстиями с помощью оптопар.
- Расчет кода Грея на диске (или барабане), преобразование его в двоичный.
- Спроектированы и напечатаны крыльчатка, корпус анемометра, оптический счетчик сигнала (а также вариант с датчиком холла)
Выводы:
1) Для флюгера не требуется высокая точность (и разрядность). Купленный имеет 16 положений (22,5 град) - этого достаточно.
2) Самодельный - трудоемко, не надежно
3) Подшипники нельзя разносить по длине вала в напечатанном пластмассовом корпусе. Малейший перекос зажимает вал, анемометр плохо вращается и нечувствителен.
Попробовали вместо вала 5 мм и подшипников применить иглу, вращающуюся в глухих отверстиях головок болтов. Рамка была спаяна из полипропиленовых труб. Датчик – вращающиеся магниты и датчик Холла. Работает нормально, но в итоге от решения отказались, купили на Алиэкспресс готовые.
Сейчас иногда возникают сомнения в правильности показаний флюгера. ДОСААФовский - большой и с двумя хвостами. Наш - маленький и шустрый. Его крутит ветром слишком легко. Возможно проблема в месте установки (говорили, что нельзя ставить близко к крыше - будут роторы). Возможно в размерах и форме. Будем разбираться.
Версия 1.2
Купленные флюгер и анемометр предлагались в вариантах RS-485, 0-5В, 4-20 мА. В момент выбора было очевидным решением 0-5В. Как работает АЦП в Ардуино известно, с потенциометром экспериментировали, код был написан. Не учли, что NodeMCU трехвольтовая, АЦП на ней только один (!) и работает он от 0 до 1 В. Кроме того, на него есть жалобы, в отличие от UNO или NANO.
Вывод – прикрутить к NodeMCU Ардуино Nano, передавать данные между ними по I2C. Не получилось. На I2C «сидят» датчик, экран и «связь». Возможно из-за подтягивающих резисторов, или чего-то еще, но шина не заработала. Получилось выполнить обмен данными по UART, экран и датчик остались на разных устройствах, только нужно было рассоединять контакты UART при прошивке модулей и подключении к компьютеру. Кроме того пришлось не пользоваться выводом в Serial-порт. Решение не понравилось нестабильностью и ненадежностью.
Версия 1.3
Arduino NANO+ENC28j60
Хорошо работало измерение, расчеты, отправка на сервер. НО по-отдельности в виде экспериментов! На общий код не хватает памяти. Шилд на этом чипе не имеет аппаратной поддержки TCP, стандартная библиотека не работает. Нестандартные – либо непонятны, либо занимают огромную часть и без того небольшой памяти, ничего не оставляя на пользовательский код и переменные. Код оптимизировал, сократил, таки запустил, но с урезанным функционалом. Такое мне не нужно. Вывод – использовать Ethernet W5100 и для верности Arduino Mega 2560.
После того, как научились получать значения датчиков из интернета, отменилась задача вывода значений на индикатор одним устройством (а также получение даты-времени из интернета и расчеты разного рода) . Индикатор (или табло) стал автономным модулем. Метеостанция должна только измерять и отправлять данные. Это сильно упростило код, так что можно снова вернуться к дешевым NANO и ENC28j60.
Эксперимент с радиомодулями Nrf24L01
Для передачи показаний в пределах аэродрома пробовал использовать эти радиомодули (дальнобойные, с антенной). Чтобы их запустить пришлось потратить несколько дней и прочитать 50 страниц форума. Оказалось, что стандартными средствами модуль прекрасно передает данные, но только если делает это непрерывно. Если возникает пауза в передаче – засыпает и больше не просыпается, хотя должен это делать. Имеется ошибка в библиотеке. Как оказалось перед передачей надо поставить команды PowerUp (); delay (2) – только в этом случае корректно просыпается и начинает передавать. Радиус на местности получается более 200 метров, сквозь стены помещения – более 30 м. Это больше, чем WiFi. Вывод – решили не пользоваться. Первый вариант – наладить везде Wi-Fi и провести общую локальную сеть, передавая данные в формате TCP. Второй вариант – получать данные уже с Народного мониторинга.
Табло на семисегментных индикаторах.
Для него освоил изготовление печатных плат: проектирование в Layout Sprint, работу с фоторезистом, травление, сверление, пайку (и выпаивание!) микросхем. Крайний раз делал это в детстве с отцом, с тех пор всё сильно изменилось и упростилось. Собранное табло работать отказывалось. Причин было несколько: неисправная микросхема, КЗ на дорожках. Но это не всё. После исправления оно «глючило» - самопроизвольно отказывали микросхемы, погасали, мигали, сбоили индикаторы. Знающий человек выяснил, что микросхемы «шумные». Напаял на питание правильные конденсаторы, погасил сигнал, врезав в сигнальные линии резисторы. Вывод – табло достаточно трудоемкое изделие. Но самое главное – индикаторы не видны на солнце! Так что место ему только в помещении. Надо смотреть планшет и работу с WEB-страницами или ЖК-индикаторы.
Планы по проговариванию в эфир:
Рассказывали, что таким образом за границей автоматически включают огни полосы. Планируется сделать так: В радиостанции типа FL-760 имеется светодиод, который загорается при появлении несущей в эфире. Несложно к нему подключиться (оптопарой или просто фотодиодом) определить пятикратное включение за 2-3 секунды. После этого метеостанция может включить реле передачи и воспроизвести заранее записанные на карточку MP3 файлы – про ветер и давление QFE. Пока остановился на том, что нет лишней радиостанции, а имеющаяся от ZLINа не имеет нужной лампочки…
Продолжение (радиостанцию нашли). Первая проблема с электропитанием. Нужно запитывать от 12 В. Источник питания – отдельная проблема. Все стандартные импульсные – шумят и свистят в эфире. БП от компьютера – тоже. Трансформаторный блок питания, вероятно, подойдет, но имеющийся - на 18 В, а стабилизатор 7812 – не тянет, при передаче рация «гаснет». Пока обходимся АКБ 12В 7АЧ.
Вторая проблема – фотодиод, «смотрящий» на лампочку появления несущей. Написан код, который распознает нажатия, он работает с модулем фотодиода, все прекрасно. При нажатии тангенты – загорается красная лампочка – все хорошо. Но на зеленый светодиод он не реагирует. СПЕКТР не тот! Фотодиод чувствителен к инфракрасному. Припаяли перемычку на радиостанции между этими светодиодами - теперь загораются оба сразу, фотодиод реагирует нормально.
Записали голос, нарезали на файлы. Воспроизводится хорошо. Голос обычной женщины был "неубедительный", поехали в аэропорт к диспетчеру. У неё правильно звучат "гектопаскали" и обороты типа "ветер у земли".
Занимаемся согласованием mp3-плеера и микрофонного входа.
Пока всё...