Схема метеостанции. Настольная метеостанция на esp8266 с поддержкой wifi своими руками



«Так, давайте сразу договоримся: вы не собираетесь снимать кино для Голливуда. Даже в Стране чудес утверждается не более пяти процентов от всех сценариев, и только один процент идет затем в производство… Таким образом, вместо всего этого вы собираетесь создать свой собственный Голливуд.»
Эд Гаскель «Снимаем цифровое кино, или Голливуд на дому»

Предисловие

Что, ещё одна погодная станция на Arduino?! Да, ещё одна и, что-то мне подсказывает, не последняя в интернете вещей.


Точно также, как каждый программист обязан написать программу «Hello World!», так и каждый ардуинщик обязан иметь за плечами опыт построения простой или не очень метеостанции.
Уже созданных проектов метеостанций в интернете описано немалое количество, читатель может выбрать любой из них для реализации. Не скрою, я внимательно изучил около десятка подобных проектов и ещё кучу смежных. Поэтому нельзя сказать, что я создал всё с нуля, конечно же я «стоял на плечах гигантов».


Сразу скажу, что в мои планы не входило использование сторонних сервисов для хранения и отображения данных. Хотелось лично пощупать и понять как всё это работает изнутри от начала до конца, от А до Я.


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



Этот проект был реализован в далеком уже 2016 году, но надеюсь еще актуален.

Набор технологий

Мы изучим и будем работать с простыми и сложными вещами:

  • датчиками температуры и влажности типа DHT22, DHT11
  • датчиком барометрического давления типа BMP180
  • WiFi модулем ESP8266
  • радиомодулем типа nRF24 2,4 Ггц
  • семейством Arduino Pro Mini, Arduino Mega
  • солнечной батареей и аккумуляторами
  • языком программирования C/C++
  • языком программирования PHP
  • системой управления базами данных MySQL
  • языком программирования Java и фреймворком Android (создание приложения для Adnroid для отображения погодных данных на смартфоне).

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


Но начнем мы с самого начала правильно. А именно с описания и проектирования будущего устройства «на бумаге» , чтобы в конце концов каждый кирпичик лёг на своё место.

Прототипирование

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


Но это в промышленности, где работники заняты полный рабочий день.


Каждый, кто клепает по вечерам свои поделки pet-project для «internet of things», должен отдавать себе отчёт в том, что он создаёт именно прототип, полуфабрикат. До уровня нормального промышленного изделия ему очень далеко. Поэтому не следует поручать нашим любительским поделкам какие-либо ответственные участки жизнеобеспечения и надеяться, что они нас не подведут.


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


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


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

Требования

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


Итак, наша метеостанция должна:

  • измерять температуру и влажность на улице
  • измерять температуру и влажность в доме
  • измерять атмосферное давление
  • отображать указанные значения на дисплее
  • передавать данные на сервер в интернет, где данные будут храниться в базе данных и отображаться на веб-странице, либо использоваться в мобильном приложении.

Датчики используются самые простые и дешевые. Например, забегая наперед скажу, что температуру DHT22 измеряет достаточно точно, а вот с влажностью немного неточен. Но, опять таки повторюсь, это не имеет значения, поскольку перед нами - прототип, и разброс в 5% влажности ни на что важное в нашей жизни не повлияет.


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

Железо. Выбор компонентов

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


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


Замкнутый круг? Но замкнутые круги для того и существуют, чтобы их разрывать.


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


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


Сразу стало ясно, что в составе метеостанции будет удаленый, заоконный датчик и центральный модуль.


Центральный, основной блок будет расположен внутри помещения. Это важно определить на начальном этапе, от этого «пляшут» такие важные характеристики как температурный режим работы и питание.


Удаленный датчик (или датчики) будет без «мозгов», его задача - периодически проводить измерения и передавать данные на центральный домашний блок. Центральный блок принимает данные от всех датчиков, показывает их на экране и отправляет их же в интернет в базу данных. Ну, а там уже много проще, как только данные оказываются в базе с ними можно делать всё что захочешь, даже графики рисовать.


Для сношений с внешним миром интернет был однозначно выбран WiFi модуль ESP8266 практически без альтернативы (прим. возможно сейчас такие альтернативы появились). К Arduino выпускаются Ethernet платы расширения, но совсем не хотелось привязываться к кабелю.



Интересный вопрос состоял в том, чем обеспечивать связь между заоконным датчиком (или датчиками, про требование расширяемости системы помним?) и центром. Радиомаячки на 433 Мгц однозначно не подходят (они не подходят ни для чего вообще).


Воспользоваться опять ESP8266 ?


Минусы такого решения:

    необходим устойчивый WiFi за пределами дома

    дальность связи не будет большой

    пострадает надежность, при пропадании интернета мы не увидим свои удаленные датчики

    большее энергопотребление.

    Энергопотребление ESP8266:

    при передаче 120-170 mA

    при приеме 50-56 mA

    в режиме Deep Sleep 10 µA (мкА)

    в выключенном состоянии 5 µA (мкА).

В конце концов для связи удаленных датчиков с основным домашним блоком был выбран чип nRF24L01+ с 2,4 Ггц передатчиком и приемником в одном флаконе, с дополнительной внешней антенной, чтоб уж наверняка «пробить» стены.



Энергопотребление nRF24L01+ 2,4 GHz:

  • при приеме 11 mA
  • при передаче на скорости 2Mbps - 13 mA
  • в режиме standby-I - 26 μA (мкА)
  • в выключенном состоянии 900 nA (нА).

Что у ESP8266, что у nRF24L01+ диапазон рабочих температур подходящий: от -40℃ до +80℃.


Купить nRF24L01+ можно примерно за $1, или сразу с внешней антенной за $3. Купить ESP8266-01 можно примерно за $4. Читайте внимательно описание товара! Иначе купите одну антенну.


Ядро системы вырисовалось. Переходим к самим датчикам.


На улице, как известно, температура может достигать отрицательных значений, поэтому датчик DHT11 не подходит, а вот DHT22 в самый раз.



Характеристики DHT22 / AM2302:

  • питание от 3,3 В до 5 В, рекомендуется 5 В
  • потребление 2.5mA максимум, в момент измерения и передачи данных
  • диапазон измерения влажности 0-100% с погрешностью 2-5%
  • диапазон измерения температуры от -40 до +125°C с погрешностью ±0.5°C
  • запрос на измерение не чаще 0,5 Гц - одного раза в 2 секунды.

Внутри дома, я надеюсь, отрицательных температур не будет, поэтому можно использовать DHT11, тем более, что он у меня уже был.


Характеристики DHT11:

  • питание от 3,3 В до 5 В
  • потребление 2,5 mA максимум, в момент измерения и передачи данных
  • диапазон измерения влажности 20-80% с погрешностью 5%
  • диапазон измерения температуры от 0 до +50°C с погрешностью ±2°C
  • запрос на измерение не чаще 1 Гц - одного раза в секунду.

Купить DHT22 можно примерно за $3. DHT11 стоит дешевле - $1, но он и менее точен.


Теперь возвращаемся опять к Arduino. Какую плату выбрать?


Я тестировал отдельные части системы на Arduino UNO. Т.е. подключал к уно ESP модуль и изучал его, отключал, затем подключал nRF24 и т.д. Для финальной реализации заоконного датчика выбрал Arduino Pro Mini как наиболее близкую к Uno из миниатюрных.



По энергопотреблению Arduino Pro Mini также выглядит неплохо:

  • нет преобразователя USB-TTL, который сам по себе «кушает» много,
  • светодиод подключен через 10к резистор.

Для продвинутого сбережения энергии планировалось:

  • удалить светодиод - индикатор питания на Arduino Pro Mini (я пожалел, не стал портить плату)
  • либо использовать «голую» сборку на микропроцессоре Atmel ATmega328 (не использовал)
  • использовать библиотеку Low Power Library или JeeLib .

Из библиотек выбрал Low Power Library , она проста и содержит только то, что нужно.


Для центрального блока, поскольку к нему планировалось подключить многочисленную периферию, была выбрана плата Arduino Mega. К тому же она полностью совместима с UNO и имеет больше памяти. Забегая наперед скажу, что этот выбор полностью оправдался.


Купить Arduino Mega можно примерно за $8.

Питание и энергопотребление

Теперь про питание и энергопотребление.


Arduino Pro Mini бывают двух видов:

  • на напряжение питания 5В и частоту 16МГц
  • на напряжение питания 3,3В и частоту 8МГц.

Поскольку радио-модуль nRF24L01+ требует для питания 3,3 В, а быстродействие здесь не важно, то покупайте Arduino Pro Mini на 8MHz и 3,3В.


При этом диапазон питающего напряжения Arduino Pro Mini составляет:

  • 3,35-12 В для модели 3,3 В
  • 5-12 В для модели 5 В.

У меня уже была Arduino Pro Mini на 5В, только поэтому я её и использовал. Купить Arduino Pro Mini можно примерно за $4.


Питание центрального блока будет от сети 220 В через небольшой блок питания, дающий на выходе 12В, 450mA, 5W. Типа такого за $5. Там еще есть отдельный вывод на 5В.



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


Поэтому Arduino Pro Mini и радиомодуль nRF24 будут запитываться от связки 4-х Ni-Mh аккумуляторов.


И помните, максимальная емкость современного аккумулятора примерно 2500-2700mAh, всё что больше это либо маркетинговые уловки (Ansmann 2850) либо обман (UltraFire 3500).


Li-Ion аккумуляторы я не использую по нескольким причинам:

  • очень дорогие
  • при снижении температуры окружающего воздуха ниже 0°C происходит снижение мощности литий-ионного аккумулятора до 40-50%
  • те которые дешёвые производятся без защиты и небезопасны (при КЗ или разряде могут взрываться и гореть, см. кучу роликов на ютюбе)
  • стареют, даже если не используются (впрочем это можно сказать обо всех химических элементах), через 2 года Li-Ion батарея теряет около 20% ёмкости.

Для прототипа вполне можно обойтись качественными Ni-MH AA или AAA аккумуляторами. Тем более, что нам не нужны большие токи. Единственный минус Ni-MH аккумуляторов - это их долгая зарядка.

Общая схема метеостанции

Подведем итоги. Вот общая схема как всё работает.



Продолжение следует.

(хроно-термо-гигро-барометр)

Как поется в известной песне «Главней всего погода в доме…». Конечно автор под погодой имел ввиду душевное состояние супругов живущих под одной крышей. Но если подходить к этой фразе буквально, то она о том, что под крышей кроме душевного должен быть и климатический комфорт. Предлагаемое устройство обеспечивает измерение и отображение на светодиодном индикаторе температуры и относительной влажности воздуха в помещении, значения атмосферного давления и текущего времени.

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

Внешний вид станции показан на рисунках (Рисунок 1 и Рисунок 2).

Рисунок 1.
Внешний вид станции

Рисунок 2.
Внешний вид станции (обратная сторона)

Видео с демонстрацией работы станции представлено ниже:


Электрическая схема.

Схема электрическая принципиальная представлена на рисунке 3.

Рисунок 3.
Схема электрическая принципиальная.

Станция собрана на микроконтроллере ATmega8. Цепочка R1С1 обеспечивает начальный сброс (Reset) микроконтроллера при включении. Предусмотрено внутрисхемное программирование МК через разъем XP3 «SPI программатор».
Фьюзы МК ATmega8: HIGH=0xD9, LOW=0xE4.

В качестве дисплея используется четырех-разрядный 7-сегментный индикатор типа CL5642BN c общим анодом и двухточечным («:») разделителем часов и минут. Катоды сегментов индикатора подключены к МК через ограничительные резисторы. МК обеспечивает динамическую индикацию поочередно включая транзисторные ключи VT3…VT6.

Хронометр собран на микросхеме DS1307 по штатной схеме включения. Точность хода часов обеспечивается кварцевым резонатором Y1 с частотой 32768Гц. При отсутствии основного питания (5 Вольт) непрерывность хода часов обеспечивается резервным источником питания на гальваническом элементе CR2032 (3 Вольта). Взаимодействие МК с микросхемой DS1307 осуществляется по шине TWI (I2C). Линии шины TWI «подтянуты» к питанию VCC2 резисторами R20, R21. Установка часов и минут обеспечивается кнопками SA1 («Часы+»), SA2 («Минуты+»), SA3 («Установка»). При этом необходимо в момент начала цикла отображения данных на дисплее нажать и удерживать кнопку «Установка». Нажатием или нажатием с удержанием кнопок «Часы+» или «Минуты+» устанавливается время хронометра. При отпускании кнопки «Установка» в микросхему DS1307 в соответствующие ячейки запишутся значения часов и минут, отображенные на дисплее, а в ячейку секунд запишется значение 0. Таким образом можно точно синхронизировать время с внешними эталонными источниками точного времени (например, от вещательных радиостанций или телевидения).

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

Измерение температуры осуществляется датчиком DHT11. МК управляет датчиком по последовательному однопроводному двунаправленному интерфейсу. Линия интерфейса «подтянута» к питанию VCC2 резистором R19.

Для экономного расходования энергии батарей микроконтроллер большую часть своего времени пребывает в состоянии глубокого сна («power-down»). При этом МК перед засыпанием обесточивает все измерительные датчики, подключенные к VCC2 (хронометр, датчик атмосферного давления, датчик влажности и температуры). Обесточивание датчиков обеспечивается ключами на транзисторах VT1 и VT2.

Для пробуждения МК в схему станции включен датчик движения HC-SR501. Его задача - вывести МК из состояния сна. При срабатывании датчик посылает сигнал МК, который пробуждается сам и подает питание VCC2 на периферийные датчики (хронометр, датчик атмосферного давления, датчик влажности и температуры). Ключ на транзисторе VT7 обеспечивает инверсию сигнала датчика движения для согласования с МК. Переключатель «Движение» позволяет отключить датчик движения, для еще большей экономии энергии батарей. В этом случае альтернативную команду на пробуждение МК можно подать нажатием кнопки «Установка».

Питание станции осуществляется от двух альтернативных типов источников: от трех батарей типа АА или от сетевого источника питания 5 Вольт по шине USB. Для переключения между источниками питания необходимо установить переключатель «Питание» в одно из положений: «USB» или «Батарея». При питании от батарей ток потребления станции в режиме сна составляет не более 200мкА, что при емкости батареи 2000мАч соответствует 10000 часам (более одного года) непрерывной работы.

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

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

Печатные платы.

Печатные платы разработаны в программе Dip Trace. Они выполнены на одностороннем фольгированном стеклотекстолите. Расположение деталей на основной печатной плате показано на рисунке (Рисунок 4). На рисунке перемычки со стороны монтажа выделены цветными ломаными линиями. Печатная плата со стороны дорожек показана на рисунке (Рисунок 5).

Рисунок 4.
Печатная плата (вид со стороны радиодеталей).

Рисунок 5.
Печатная плата (вид снизу, зеркальное отображение).

Кнопки и переключатели пульта управления станцией установлены на отдельной печатной плате (Рисунок 6 и Рисунок 7).

Рисунок 6.
Печатная плата Пульта управления (вид сверху).

Рисунок 7.
Печатная плата Пульта управления (вид со стороны дорожек).

Гнездо для подключения USB кабеля установлено на отдельной плате, купленной на AliExpress (Рисунок 8).

Рисунок 8.
Плата с гнездом USB.

Монтаж.

Станция смонтирована в корпусе универсальной коробки для кабельных каналов «Промрукав» - IP42; 400V; полистирол ГОСТ Р 50827.1-2009 ТУ 3464-001-97341529-2012 Артикул 40-0460.

На передней стороне корпуса прорезаны окна для дисплея и датчика движения. На тыльной стороне корпуса размещен датчик влажности и температуры DHT11, кнопки и переключатели пульта управления.

Батарея питания - три элемента AA 1.5 Вольт каждый размещены в специализированном держателе - «кроватке» .

Размещение радиодеталей на печатной плате показан на рисунке (Рисунок 9).

Рисунок 9.
Внешний вид размещения деталей на плате.

Архив к статье «CTBH.rar» содержит:

1. Папку CTBH - файлы проекта на Си в среде Atmel Studio 7.
2. CTBH.dch - схема электрическая принципиальная в формате Dip Trace.
3. CTBH.dip - печатная плата устройства в формате Dip Trace.
4. CTBH_Buttons.dip - печатная плата Пульта управления в формате Dip Trace.
5. CTBH.hex - загрузочный файл для МК.

Удачи Вам в творчестве и всего наилучшего!

Скачать архив.

Метеостанция построена на Picaxe микроконтроллере от Revolution Education Ltd и состоит из двух основных частей: наружный блок, который посылает свои данные каждые 2 секунды, используя передатчик на частоте 433МГц. И внутренний блок, который отображает полученные данные на 20 х 4 ЖК-дисплее, а также атмосферное давление, которое измеряется локально во внутреннем блоке.

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

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

Уличные датчики

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

Датчик температуры и относительной влажности воздуха

Измерение температуры, пожалуй, проще всего. Для это используется датчик DS18B20. Для измерения влажности был использован HIH-3610, выдающий напряжение 0.8 - 3.9В при влажности 0% до 100%

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

Упрощенный код для каждого из датчиков приведен ниже. Более точный код, который считывает значения с точностью до одной десятой, показан на сайте Питера Андерсона . Его код используется в окончательном варианте метеостанции.

Датчик температуры обеспечивает точность ± 0.5 °C. Датчик влажности обеспечивает точность до ± 2%, так что это не очень важно, сколько знаков доступно после запятой!

Пример участка из программного обеспечения, работающего на ПК.

Температура

Main: readtemp B.6, b1 ; read value into b1 if b1 > 127 then neg ; test for negative sertxd (#b1, cr, lf) ; transmit value to PE terminal pause 5000 goto main neg: b1 = b1 - 128 ; adjust neg value sertxt ("-") ; transmit negative symbol sertxt (#b1, cr, lf) ; transmit value to PE terminal pause 5000 goto main

Влажность

Main: readadc B.7,b1 ; read humidity value b1 = b1 - 41 * 100 / 157 ; change to %RH sertxd (#b1, "%", cr, lf) pause 5000 ; wait 5 seconds goto main

Расчет показаний датчика влажности

Расчеты взяты из документации датчика Honeywell HIH-3610. На графике показывана стандартная зависимость при 0 °C.

Напряжение с датчика измеряется на входе АЦП (B.7) микроконтроллера Picaxe 18M2. В коде, показанном выше, значение, которое представлено в виде числа от 0 до 255 (т.е. 256 значений), хранится в переменной b1.

Наша схема питается от 5В, так что каждый шаг АЦП равен:
5/256 = 0.0195 В.

На графике видно начально значение АЦП 0.8 В:
0.8 / 0.0195 = 41

Взяв значения из графика, наклон графика (с учетом смещения) примерно:
Напряжение выхода / % относительной влажности или
(2.65 - 0.8) / 60 = 0.0308 В в% RH
(В документации 0.0306)

Рассчитаем кол-во шагов АЦП на 1% влажности:
(В на % RH) / (шаг АЦП)
0.0308 / 0.0195 = 1.57

% RH = значение с АЦП - смещение АЦП / (шаги АЦП в % RH), или
% RH = значение с АЦП - 41 / 1.57

Итоговая формула расчет для микроконтроллера будет выглядеть: % RH = значение с АЦП - 41 * 100/157

Защитный корпус

Начните с разрезания каждой панели на две части. Планки на одной части будут крепко прикреплены с двух сторон, а на второй части только с одной стороны. Не выбрасывайте эти части - они используются.

К целым частям прикрепите два деревянных бруска 20мм х 20мм сверху и с низу, и прикрутите к ним другие части.

Обрежьте одну из частей с одной целой стороной по размеру и приклейте ее к внутренней стороне одной из сторон. Убедитесь, что планки приклеены так, что образуют вместе "^" форму. Сделайте так со всеми сторонами.

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

Механическая часть

Датчики скорости и направления ветра представляют собой сочетание механических и электронных компонентов. Механическая часть идентична для обеих датчиков.

12мм вставка из фанеры (marine ply) находится между трубой из ПВХ и диском из нержавеющей стали в верхнем конце трубы. Подшипник приклеен к диску из нержавеющей стали и удерживается нержавеющей пластиной.

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

Остальные три отверстия на фотографии предназначены для лопастей. Лопасти длиной 80 мм дают радиус поворота 95мм. Чашки 50 мм в диаметре. Для них я использовал обрезанные флаконы от одеколона, которые имеют почти сферическую форму. Я не уверен в их надёжности, поэтому сделал их легкозаменяемыми.

Электронная часть

Электроника для датчика скорости ветра состоит только из транзисторного ключа, фотодиода и двух резисторов. Они монтируются на небольшой круглой ПП диаметром 32мм. Они установлены в трубе свободно, чтобы влага в случае её попадания стекала вниз не задевая электронику.

Анемометр - один из трех датчиков, который необходимо откалибровать (два других – счетчик осадков и датчик атмосферного давления)

Фотодиод обеспечивает два импульса за один оборот. В простой «последовательной» системе, к которой я стремился (все датчик опрашиваются поочередно), должен быть компромисс между длиной времени, затрачиваемого на опрос каждого датчика (в данном случае, подсчет импульсов) и отзывчивость системы в целом. В идеале, на полный цикла опроса всех датчиков должно уйти не более 2-3 секунд.

На фото выше проверка датчика при помощью мотора с регулируемыми оборотами.

; LCD-specific commands shown in blue hsersetup B9600_4, %10000 ; Use LCD Pin 1, no hserin hserout 0, (13) : pause 100 ; Initialize LCD hserout 0, (13) : pause 100 hserout 0, (13) : pause 100 pause 500 hserout 0, ("ac1", 13) ; Clear display pause 50 hserout 0, ("acc", 13) hserout 0, ("ac81", 13, "adcount: ", 13) ; Print the headings pause 10 hserout 0, ("ac95", 13, "adpulsin: ", 13) ; Print the headings pause 10 do count C.2, 1000, w0 ; Count the pulses (two per rev) w1 = 0 for b8 = 1 to 2 ; Measure pulse length twice pulsin C.2, 1, w2 ; per rev and... w1 = w1 + w2 next w1 = w1 / 2 ; ...calculate average hserout 0, ("ac89", 13, "ad ", #w0, " ", 13) ;Print the count value hserout 0, ("ac9d", 13, "ad ", #w1, " ", 13) ;Print the pulse-length value pause 100 loop

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

Если бы мы имели 100% КПД и лопасти вертелись-бы со скоростью ветра, то:
Радиус ротора = 3.75"
Диаметр ротора = 7.5" = 0.625 фута
Длина окружности ротора = 1.9642 фута

1 фут/мин = 0.0113636 м/ч,
1.9642 фут/мин = 1 об = 0.02232 м/ч
1 м/ч = 1 / 0.02232 об

1 м/ч = 44.8 об
? м/ч = об / 44.8
= (об/мин * 60) / 44.8

Поскольку за поворот выходит два импульса
? м/ч = (импульсов в секунду * 30) / 44.8
= (импульсов в секунду) / 448

Датчик направления ветра - механическая часть

В датчике направления ветра, вместо алюминиевой пластины используется магнит, а вместо оптоэлектронного узла - специальная микросхема AS5040 (магнитный энкодер).

На фото ниже показан 5мм магнит, установленный на торце центрального винта. Выравнивание магнита относительно микросхемы очень важно. Магнит должен быть точно по центру на высоте около 1мм над микросхемой. Как только все будет точно выровнено, датчик будет работать правильно.

Датчик направления ветра - электронная часть

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

Оба метода имеют свои преимущества и недостатки. Основным преимуществом является то, что они оба просты в реализации. Недостатком является то, что они подлежат износу - особенно потенциометры. Альтернативой использованию герконов будет использовать датчика Холла для решения механического износа, но они по-прежнему ограничиваются 8 различными позициями... В идеале, я хотел бы попробовать что-то другое и в конечном счете решил о - поворотном магнитном датчике IC. Хотя это устройство для поверхностного монтажа (которого я стараюсь избегать), оно имеет ряд преимуществ, которые делают ее использование привлекательным!

Он имеет несколько различных форматов вывода, два из которых наиболее подходит для нашей цели. Наилучшая точность достигается с помощью SSI интерфейса. AS5040 выдает импульсы длиной от 1 мкс при 0° и до 1024 мкс при 359,6°

Проверка калибровки датчика направления ветра:

Do readadc10 B.3, w0 ;Read from AS5040 magnetic bearing pause 100 w0 = w0 * 64 / 182 ; Convert to 0 - 360 (degrees) debug ; Display in Prog/Edit debug window loop

Измеритель уровня осадков

Насколько это возможно, я сделал дождемер из пластика и нержавеющей стали, основание сделано из алюминия толщиной 3 мм для жесткости.

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

На данный момент, я оставил его с прозрачными стенками (потому что интересно наблюдать это работает!). Но я подозреваю, что нужно покрасить его белой краской, чтобы отражать тепло летом, во избежание испарения. Я не мог найти маленькую воронку, поэтому пришлось сделать её самому. Обратите внимание на проволоку внутри воронки и по центру желоба. Это поможет остановить поверхностное натяжение воды в воронке и помогает капать воде. Без проволоки, дождь имел бы тенденцию к "водовороту", и его траектория была-бы непредсказуемой

Оптодатчики крупным планом:

Электронная часть дождемера

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

Использование отдельного чипа позволяет использовать его для создания достаточно точной 1-часовой задержки для того, чтобы считать ведра в час.

Калибровка

Picaxe 18м2 получает текущее количество ведерок в час и выводит его на дисплей и компьютер.

В качестве отправной точки, я использую следующие данные:
Воронка диаметров 120мм и емкость площадью 11,311мм2
1 мм дождя = 11,311мм3 или 11,3 мл.
Каждое ведро это 5,65 мл. Таким образом, 2 ведра 2 х 5,65 = 11,3 мл (или 1 мм) осадков. Одно ведро = 0,5 мм осадков.

Для сверки, я купил дешевый стакан для измерения осадков.

Для вышеприведенной схемы и схемы 08М Picaxe для датчика используется одна и та же топология печатной платы. Устройство питается от аккумулятора 12V 7Ah через стабилизатор 7805.
Я использовал набор RF Connect kit для беспроводной связи на 433 МГц. Комплект содержит пару специально запрограммированных PIC контроллеров. Комплект беспроводных модулей в ходе испытаний зарекомендовал себя как достаточно надежный.

На ПП установлен 08М Picaxe и 18м2. Каждый из них имеет свой собственный разъем программирования. Отдельные разъемы, каждый со своим +5 В, предназначены для каждого датчика - за исключением температуры и влажности.

Обратите внимание, что я нарисовал чертёж в Paintshop Pro поэтому я не могу гарантировать точность расстояния между выводами.

Внутренний блок

Во внутреннем блоке используетя 18м2 Picaxe, датчик давления и ЖК-дисплей. Также есть стабилизатор напряжения 5В.

Датчик давления

После нескольких неудачных попыток, я остановился на MPX4115A. Хотя другие датчики имеют диапазон измерения немного больше, они труднодоступны. Кроме того, другие датчики, как правило, работают от 3,3В и требуют дополнительный стабилизатор. MPX4115A выдает аналоговое напряжение от 3,79 и до 4,25В пропорционально давлению. Хотя это почти достаточное разрешение для обнаружения 1 мбар изменения давления, после некоторого обсуждения на форуме, я добавил АЦП MCP3422. Он может работать в 16-битном режиме (или выше) по сравнению с 10-битном режиме Picaxe. MCP3422 может быть связан (как в нашей схеме) в дифференциальный режим с аналоговым входом от датчика. Основным преимуществом является то, что это позволяет корректировать выход датчика, тем самым легко компенсировать ошибки MPX4115A и обеспечить простой способ калибровки датчика.

MPC3422 на самом деле имеет два дифференциальных входа, но так-как один не используется они замкнуты. Выход из MCP3422 имеет интерфейс I2C и соединяется с SDA и SCL контактам на 18м2 Picaxe – выводы B.1 и B.4 соответственно. С моей точки зрения, единственный недостаток в использовании MCP3422 том, что это небольшое устройство для поверхностного монтажа, но я его припаял к адаптеру. В дополнение к I2C интерфейсу MCP3422 18м2 просто обрабатывает поступающие данные из 433МГц беспроводной приемник, выводит данные на дисплей и передает данные на ПК. Для того чтобы избежать ошибок внутреннего блока когда компьютер не работает, нет никаких ответов от ПК. Внутренний блок передает данные и идет дальше. Он передает данные приблизительно в 2-секундным интервалом, чтобы потери данных быстро компенсировались следующий раз. Я использовал незадействованные порты на 18м2 для подключения кнопки на передней панели. Переключатель S1 (вход С.5) используется для включения подсветки ЖК-дисплея. Переключатель S2 (вход C.0) сбрасывает значение давления (мбар) на ЖК-дисплее. Переключатель S3 (вход C.1) переключает осадки отображаемые на ЖК-дисплее между общим в предыдущий час и текущими. Кнопки необходимо удерживать более 1 секунды для их реакции.

Сборка внутреннего блока

Как и в печатной плате для наружного блока, я нарисовал макет вручную с помощью Paintshop Pro, так что в расстояниях могут быть ошибки

Плата немного больше, чем это необходимо, чтобы вписаться в пазы в алюминиевом корпусе.
Я сознательно сделал разъем для программирования немного "внутрь" от края платы, чтобы предотвратить его прикосновение к корпусу. Вырез для ЖК-дисплея производится высверливание и подгонкой до точных размеров.

На фото показано всё уже установленное в корпус.

Штырьки на плате делают сложным её установку в корпус, поэтому мне пришлось отпаять их и припаять дисплей к плате проводами.

Внешний блок - код Picaxe

; ================================================================== ; Main 18M2 code for the Picaxe Weather Station Outdoor (Transmitter) Unit ; Decimal precision Humidity & Temperature routines, ; copyright, Peter H Anderson, Baltimore, MD, Jan, "04 ; ; ================================================================== #Picaxe 18M2 Symbol HValue = w0 Symbol HighWord = w1 Symbol LowWord = w2 Symbol RH10 = w3 Symbol HQuotient = b0 Symbol HFract = b1 Symbol X = b0 Symbol aDig = b1 Symbol TFactor = b2 Symbol Tc = b3 Symbol SignBit = b4 Symbol TValue = w4 Symbol TQuotient = b10 Symbol TFract = b11 Symbol TempC_100 = w6 Symbol MagDir = w7 Symbol MagDirLo = b14 Symbol MagDirHi = b15 Symbol WindSpeed = w8 Symbol WindSpeedLo = b16 Symbol WindSpeedHi = b17 Symbol ThisHour = b18 Symbol LastHour = b19 Symbol RainRequest = b20 ; Hardware Symbol HumidRaw = B.7 Symbol TempRaw = B.6 Symbol DirRaw = B.3 Symbol Speed = B.0 do ; Read Humidity ReadADC10 HumidRaw, HValue ;Get Humidity (HValue) HighWord = 1613 ** HValue ; calculate RH LowWord = 1613 * HValue RH10 = LowWord / 1024 LowWord = Highword * 64 RH10 = RH10 + LowWord RH10 = RH10 - 258 pause 100 ; Read temperature Readtemp12 TempRaw, TValue ; Get temperature SignBit = TValue / 256 / 128 if SignBit = 0 then positive ; It"s negative so TValue = TValue ^ $ffff + 1 ; take twos comp positive: TempC_100 = TValue * 6 ; TC = value * 0.0625 TValue = TValue * 25 / 100 TempC_100 = TempC_100 + TValue TQuotient = TempC_100 / 100 TFract = TempC_100 % 100 / 10 X = TQuotient / 10 ; Calculate temperature correction factor for Humidity if SignBit = 0 then SignBit = " " else SignBit = "-" endif if SignBit = "-" then X = 4 - X else X = X + 4 endif GoSub TempCorrection ; compensate RH HQuotient = RH10 / 10 ; Calculate RH Quotient and... HFract = RH10 % 10 ; ...decimal place. if HQuotient > 99 then ; Over range HQuotient = 99 HFract = 9 endif if HQuotient > 127 then ; Under range HQuotient = 0 HFract = 0 endif ; Read AS540 magnetic encoder for wind direction readadc10 DirRaw, MagDir ; Read from AS5040 magnetic bearing pause 100 ; Read rpm from windspeed counter count Speed, 1000, WindSpeed ; Every 30th cycle (approx 1 minute), request rain gauge data from 08M inc RainRequest if RainRequest >= 30 then high C.1 serin , C.0, N2400, ("r"), LastHour, ThisHour ; Rain counters low C.1 RainRequest = 0 endif ; Send data to Indoor Unit in 8 byte blocks ; First group needs no calibration so calculations are done here first. ; Second group will need "tweaking" - more easily done at indoor end. serout C.2, N2400, ("t", SignBit, TQuotient, TFract, HQuotient, HFract, "A", "B") pause 100 serout C.2, N2400, ("m", MagDirHi, MagDirLo, WindSpeedHi, WindSpeedLo, LastHour, ThisHour, "C") loop TempCorrection: Lookup X, (87, 89, 91, 93, 95, 97, 99, 101, 103, 106, 108, 110, 113, 116, 119, 122, 126), TFactor " -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 if TFactor < 100 then aDig = TFactor / 10 RH10 = RH10 * aDig / 10 TFactor = TFactor % 10 aDig = TFactor RH10 = RH10 * aDig / 100 + RH10 else TFactor = TFactor % 100 aDig = TFactor / 10 RH10 = RH10 * aDig / 10 + RH10 TFactor = TFactor % 10 aDig = TFactor RH10 = RH10 * aDig / 100 + RH10 endif return

Использовано памяти = 295 байт из 2048

Счетчик количества осадков - 08M код

#picaxe 08M Symbol ThisHour = b2 ; Store the current sensor count in b2 Symbol LastHour = b3 ; Save the previous hour"s count in b3 ;Hardware definitions Symbol DataRequest = pin3 Symbol BucketSensor = pin4 setint %00010000, %00010000 ; pin4 is interrupt pin main: for w0 = 1 to 60000 ; Loop for 1 hour pause 60 next LastHour = ThisHour ; Update Last hour"s count with ThisHour = 0 ; current hour & reset current hour goto main ; Do the next hour interrupt: setint %00010000, %00010000 ; Re-instate interrupt if DataRequest = 1 then ; Was the interrupt from the 18M2 ? serout 2, N2400, ("r", LastHour, ThisHour) ; Yes, so send previous hour"s count & curent count. do: loop while DataRequest = 1 ; Wait until 18M2 stops requesting before continuing endif if BucketSensor = 1 then ; Was the interrupt from the rain sensor? inc ThisHour ; Yes, so increment bucket-tip count do: loop while BucketSensor = 1 ; Make sure flag has cleared sensor before continuing endif return

Внутренний блок - код Picaxe

;============================================================================ ; Main Indoor (Receiver) Program. ; ; Receives data from outdoor unit, displays on LCD and passes data on to PC ; Also measures the barometric pressure (thanks to "matherp") ;============================================================================ #PICAXE 18M2 ; Variable Definitions (b2 to b5 are re-used for mBar code when they become available) symbol Quotient = b2 symbol Fract = b3 symbol SignBit = b4 symbol Humidity = b5 symbol HFract = b14 symbol Dir = w5 symbol DirLo = b10 symbol DirHi = b11 symbol Speed = w3 symbol SpeedLo = b6 symbol SpeedHi = b7 symbol RainCountThisHour = b12 symbol RainCountLastHour = b13 symbol LCDRainWhole = b21 symbol LCDRainFract = b22 symbol LastOrThis = b23 ; MCP3422 ADC variables symbol mb900 = 17429 ; ADC reading for 900Mbar, then add 72.288 counts per mbar symbol adj0 = 72 symbol mBarADCValue = w0 symbol adj1 = b4 ; used to add 1 count every 4 mbar symbol adj2 = b5 ; used to add 1 count every 24 mbar symbol mBar = w4 ; Housekeeping variables symbol lastmbar = w8 ; Remember previous mBar reading symbol RiseFall = b18 ; Indicator for pressure rising or falling (up arrow or down arrow) symbol active = b19 ; Telltale shows activity on LCD screen symbol LCD_Status = b20 ; Is LCD Backlight on or off (0 or 1)? ; Hardware Definitions symbol Wireless = C.7 ; Incoming connection from Wireless receiver/decoder symbol Computer = C.2 ; Outgoing serial connection to computer symbol LCD = pinC.5 ; Front-panel button to blank / unblank LCD backlight symbol ClearRiseFall = pinC.0 ; Front-panel button to clear pressure "rising / falling" indicator symbol LastOrThisSwitch = pinC.1 ; Front-panel button to display current or previous hour"s rainfall Init: hsersetup B9600_4, %10000 ; Use LCD Pin 1, no hserin ; ByVac 20x4 IASI-2 Serial LCD hi2csetup i2cmaster, %11010000, i2cfast, i2cbyte ; Initialize I2C for MCP3422 ADC chip. hi2cout (%00011000) ; set MCP3422 for 16 bit continuous conversion pause 500 hserout 0, (13) : pause 100 ; Initialize LCD hserout 0, (13) : pause 100 hserout 0, (13) : pause 100 pause 500 hserout 0, ("ac50", 13) hserout 0, ("ad", 32, 32, 32, 32, 49, 42, 36, 32, 13) ; Define down arrow character (char 10) hserout 0, ("ac1", 13) ; Clear display pause 50 hserout 0, ("acc", 13) ; Hide cursor hserout 0, ("ac81", 13, "ad ", $df, "C", 13) ; Print the headings hserout 0, ("ac88", 13, "admBar", 13) hserout 0, ("ac8e", 13, "adRH %", 13) hserout 0, ("acd5", 13, "ad", "dir", 13) ; Print footings hserout 0, ("acdc", 13, "ad", "mph", 13) ; hserout 0, ("ace3", 13, "ad", "mm", 13) lastmbar = 0 ; Initialize variables LastOrThis = "c" ;========================================================================== ; Main Loop ;========================================================================== main: ; Check if a front-panel switch is pressed. The Picaxe interrupt mechanism is ; almost permanently disabled due to the large number of serin and serout commands ; so sprinkling the program with "gosub switches" to check the switch status is more ; effective that interrupts. gosub switches ; Get first group of values from outdoor unit via 433MHz radio link. serin Wireless, N2400, ("t"), SignBit, Quotient, Fract, Humidity, HFract, b15, b15 ; Flash "telltale" on LCD to indicate activity and successful "serin" from wireless. gosub telltale ; Display first group on LCD hserout 0, ("acc0", 13) hserout 0, ("ad", SignBit, #Quotient, ".", #Fract, " ", 13) hserout 0, ("acce", 13) hserout 0, ("ad", #Humidity,".", #HFract, " ", 13) gosub switches ; Send first group to computer COM port ; Each group has a start identifier, data and an end identifier: ; Start = "xS", End is "xE" eg Wind Start is WS, Wind End is WE ; Multiple data are separated by a single space character. serout Computer, N2400, ("TS", SignBit, #Quotient," ", #Fract, "TE") ; Temperature serout Computer, N2400, ("HS", #Humidity, " ", #HFract, "HE") ; Humidity ; Check switches again and at regular intervals throughout program. gosub switches ; Get second group of values from outdoor unit radio link. serin Wireless, N2400, ("m"), DirHi, DirLo, SpeedHi, SpeedLo, RainCountLastHour, RainCountThisHour, b15 gosub telltale Speed = Speed * 300 / 448 ; Estimated conversion from pulses/sec to mph Dir = Dir * 64 / 182 ; Convert 0 - 1023 to 0 - 359 degrees ; To preserve precision, rain gauge has to be calibrated by adjusting the ; mechanical stops on the tipping bucket so that 1 tip is 0.5 mm of rain. if LastOrThis = "c" then ; Decide whether to display previous hour"s LCDRainWhole = RainCountThisHour / 2 ; rainfall or the current hour"s. LCDRainFract = RainCountThisHour * 5 // 10 else LCDRainWhole = RainCountLastHour / 2 ; LCDRainFract = RainCountLastHour * 5 // 10 endif ; Send second group to LCD hserout 0, ("ac95", 13) hserout 0, ("ad", #Dir, " ", 13) hserout 0, ("ac9c", 13) hserout 0, ("ad", #Speed, " ", 13) hserout 0, ("aca1", 13) hserout 0, ("ad", LastOrThis, " ", #LCDRainWhole, ".", #LCDRainFract, " ", 13) ; Send second group to computer COM port serout Computer, N2400, ("WS", #Dir," ", #Speed, "WE") ; Wind serout Computer, N2400, ("RS", #RainCountLastHour," ", #RainCountThisHour, "RE") ; Rain gosub switches ; Thanks to "matherp" on the Picaxe forum for the mbar code loop: ; Measuring atmosperic pressure with a MPX4115A ; Analogue to digital conversion using a MCP3422 ; MPX output to V+, 2.5V to V- ; ADC in 16 bit mode hi2cin (b1,b0,b2) ; Read in the ADC reading and the status byte from MCP3422 adj1 = 0 adj2 = 0 w1 = mb900 mbar = 900 do while mBarADCValue > w1 ; mBarADCValue = w0 = b1:b0 inc mbar w1 = w1 + adj0 inc adj1 if adj1 = 4 then inc adj2 w1 = w1 + 1 adj1 = 0 endif if adj2 = 6 then w1 = w1 + 1 adj2 = 0 endif loop gosub switches gosub telltale ; Send pressure to computer COM port serout Computer, N2400, ("PS:", #mbar, "PE") ; Initialize previous pressure reading (lastmbar) if not already set if lastmbar = 0 then lastmbar = mbar RiseFall = " " endif ; Display up arrow or down arrow if pressure has changed if mbar > lastmbar then RiseFall = "^" ; ^ lastmbar = mbar endif if mbar < lastmbar then RiseFall = 10 ; Custom LCD character. Down arrow lastmbar = mbar endif hserout 0, ("acc7", 13) hserout 0, ("ad", RiseFall, #mbar, " ",13) gosub telltale goto main ; Check if one of the front panel buttons is pressed. switches: if LCD = 1 then ; LCD Backlight on/off Button is pressed if LCD_Status = 0 then ; Backlight is on so... hserout 0, ("ab0", 13) ; Turn it off LCD_Status = 1 else hserout 0, ("ab1", 13) ; Else turn it on. LCD_Status = 0 endif do: loop while LCD = 1 ; Don"t return while button is pressed endif if ClearRiseFall = 1 then ; Pressure rise/fall button is pressed RiseFall = " " ; Clear indicator and... hserout 0, ("acc7", 13) ; ... update display. hserout 0, ("ad", RiseFall, #mbar, " ",13) do: loop while ClearRiseFall = 1 endif if LastOrThisSwitch = 1 then ; Rain Previous Hour / Last Hour button. if LastOrThis = "c" then LastOrThis = "p" LCDRainWhole = RainCountLastHour / 2 ; Recalculate values and re-display to LCDRainFract = RainCountLastHour * 5 // 10 ; give visual confirmation of button-press else LastorThis = "c" LCDRainWhole = RainCountThisHour / 2 ; LCDRainFract = RainCountThisHour * 5 // 10 endif hserout 0, ("aca1", 13) hserout 0, ("ad", LastOrThis, " ", #LCDRainWhole, ".", #LCDRainFract, " ", 13) do: loop while LastOrThisSwitch = 1 endif return ; Flash "tell-tale" on LCD display to show activity telltale: if active = "*" then active = " " else active = "*" endif hserout 0, ("ac80", 13, "ad", active, 13) return

Использовано памяти = 764 байт из 2048

Программное обеспечение для ПК

Программное обеспечение, работающее на ПК было написано с использованием Borland Delphi 7. Оно довольно примитивно в его нынешнем виде, но это, по крайней мере, показывает связь Picaxe с компьютером.

Графики могут быть выбраны для показа в период 1 час или 12 часов. Графики можно прокручивать вперёд-назад с помощью мышки. Они могут быть сохранены. Для этого необходимо кликнуть по ним правой кнопкой мыши и указать имя и файл значения. Можно настроить ограниченный набор APRS данных, записываемых раз в минуту на одну строку файла APRS.TXT и которые сохраняются в той же папке, где находится Weather.exe. Отмечу, что температура в градусах по Фаренгейту и осадки в 1/100ths на дюйм.

Список радиоэлементов

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

DS18B20

1 В блокнот
Датчик влажности HIH-3610 1 В блокнот
Резистор

4.7 кОм

1 В блокнот
Измеритель скорости и направления ветра
Фототранзистор ИК 1 В блокнот
Светодиод ИК 1 В блокнот
Резистор

220 Ом

1 В блокнот
Резистор

4.7 кОм

1 В блокнот
Магнитный энкодер 1 В блокнот
Электролитический конденсатор 10 мкФ 4 В блокнот
Конденсатор 100 нФ 1 В блокнот
Резистор

4.7 кОм

1 В блокнот
Резистор

10 кОм

1 В блокнот
Измеритель уровня осадков
МК PICAXE

PICAXE-08M

1 В блокнот
Выпрямительный диод

1N4148

2 В блокнот
Конденсатор 100 нФ 1 В блокнот
Резистор

4.7 кОм

1 В блокнот
Резистор

10 кОм

4 В блокнот
Резистор

22 кОм

1 В блокнот
Резистор

220 Ом

2 В блокнот
Светодиод ИК 1

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

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

Конечно, сравнивать эту конструкцию с метрологическими приборами не стоит, но в качестве грубого прогноза она вполне работоспособна.

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

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


Как работает самодельный барометр

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

  • атмосферное давление через прорезь в стекле;
  • влажность воздуха;
  • температура окружающей среды.

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

Необходимые инструменты

В обязательном порядке потребуется:

  • перегоревшая или целая лампа накаливания;
  • защитные перчатки;
  • надфиль или с алмазным сверлом;
  • один кристаллик марганцовки либо обломок от грифеля из химического карандаша - не всегда.

Для изготовления крепления барометра потребуется или клей с подставкой.

Технология изготовления

На руки надевают защитные перчатки. Они будут предохранять кожу от порезов и попадания мелких осколков стекла. Лампочка хрупкая, под случайным излишнем усилии она может развалиться на мелкие осколки. Работать с ней следует очень аккуратно.

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

Способы создания отверстия

Работа надфилем

Боковой гранью режущей кромки осторожно прорезают отверстие в стекле колбы.

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

Сверление отверстия в стекле

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

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

Поэтому для сверления отверстия подбирают специальные сверла с алмазным напылением наконечника. Работают ими очень осторожно.

Наполнение колбы водой

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

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

  • подкрасить воду прибора, например, раствором марганцовки. Конденсат станет лучше виден;
  • снабдить устройством подвешивания или подставкой.

О креплении самодельного барометра

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

  1. подвешивании на ручку или крючок;
  2. стационарной установке на подоконнике.

Петля для подвешивания

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

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

Подставка

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

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

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

Как расшифровать информацию и пользоваться прибором

Наблюдение за конденсатом

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

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

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

Особенности эксплуатации

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

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

О точности показаний

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

Для их отслеживания метеорологи используют:


Мы же значительно искажаем все эти процессы.

Исторически сложилось так, что под термином «барометр» люди стали понимать прибор, который позволяет предсказывать погоду по изменению атмосферного давления. Этому способствовало нанесение на анероидной шкале таких обозначений, как «Ясно», «Сухо», «Дождь» и других природных явлений.

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

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

К тому же в последнее время в быту стали массово использоваться . А они тоже регулируют влажность в помещениях, влияют на работу самодельного барометра.

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

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

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

Сейчас предлагаю посмотреть видеоролик владельца MrSam0delkin «Барометр из лампочки».

Здравствуйте уважаемые друзья сайта "Радиосхемы "! Ещё давно хотел собрать домашнюю метеостанцию , изначально планировалось сделать автономную конструкцию с ЖК индикатором и т.д., но когда руки уже почти потянулись к текстолиту, у меня произошла ситуация, верней в одной из компаний в которой я тружусь, а именно, в серверной комнате сломался кондиционер. Последствия могли бы быть очень печальны, если бы мне не понадобилось заехать туда по другим вопросам, но слава богу всё обошлось. После этой ситуации понял, что идея метеостанции требует срочной реализации, только совсем уже в другом виде. Итак, обо всём по порядку. Представляемая конструкция - это USB примочка к ПК, которая передаёт данные с датчиков по средствам UART - USB с интервалом 2 секунды, соответственно, на ПК установлена программа, которая помимо обработки и отображения полученных данных передаёт их, при желании, на WEB сервер, зайдя на который можно отслеживать все показания в режиме реального времени и как вы понимаете, находясь в любой точке мира. Блок передаваемых данных выглядит следующим образом:

  • +data
  • humidity:хх
  • tempepature:хх
  • pressure:ххх
  • -data

Перемычки JP1, JP2, JP3 предназначены для «зануления» определённых значений, то есть при установленной перемычке JP1 значение влажности будет всегда 0, при установленной JP2 значение температуры всегда будет 0 и при JP3 значение давления всегда 0.

Схема самодельной метеостанции

Схема очень проста и по сути состоит из 4 основных компонентов. Это МК, датчик атмосферного давления + температуры, датчик влажности и USB - UART преобразователь.

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

Датчик давления и температуры

Потрясающий во всех отношениях датчик атмосферного давления и температуры BMP180.


Несмотря на свои крошечные размеры, этот датчик позволяет выдавать удивительно точные показания, как температуры, так и атмосферного давления. Сам датчик имеет размеры ~3х3 мм, готовый модуль ~10х13 мм, питание датчика 3.3 вольта, поэтому на платке имеется стабилизатор. Интерфейс I2C .

DHT11 является датчиком влажности + температуры, довольно хорош в своей ценовой категории. Но есть небольшой минус, это - точность. Если погрешность по влажности вполне в пределах нормы, то с показаниями температуры всё не так хорошо, но нам и не нужны его данные по температуре т.к. температуру будем брать с BMP180. Штыри на модуле перепаяны на прямые, изначально модуль идёт с угловыми штырьками и к тому же они припаяны с другой стороны.

USB - UART преобразователь

Вообще микросхем и готовых USB - UART преобразователей огромное количество, я остановился на этом. Данный модуль работает на микросхеме FT232RL, а вот изготовитель этой микросхемы далеко не FTDI как заявлено на корпусе этой микросхемы, проще говоря, используемая микросхема - это китайская подделка. Но в этом нет ничего страшного, за исключением того, что компания FTDI решила бороться с подделками очень хитрым способом, они выпустили драйвера, которые затирают ID микросхемы на не оригинальных чипах, после чего подделка перестаёт работать. Для того чтобы этого не случилось - достаточно использовать драйвера НЕ ВЫШЕ версии 2.08.14 и тогда никаких проблем не будет, разницы в работе не оригинала вы не заметите. Если всё же это случилось и устройство перестало правильно определяться в диспетчере устройств, то ничего не потеряно, в любом поисковике вы найдёте решение этой проблемы за 5 минут, на этом я не буду останавливаться.

Для своих целей, мне пришлось немного допилить модуль, перепаяв на нём штырьки, с угловых на прямые, и с прямых на угловые.

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

После того, как все модули будут допилены и готовы, можно приступать к сборке. Печатная плата в моём варианте имеет итоговый размер 45 х 58 мм, делал фоторезистивным способом, хотя в виду простоты - лут здесь тоже актуален. Все файлы для платы и прошивки скачайте в общем архиве .

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

Сборка метеостанции

Сборка прибора заняла пол часа, после чего был уже вполне работоспособный вариант устройства.

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

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

Всё, все этапы сборки метеостанции закончены, можно отклеивать бумагу.

А вот и готовый, полностью рабочий вариант устройства.

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

Программа

Теперь от аппаратной части к программной. Программа состоит из одного исполняемого exe файла. При первом запуске, программа будет пошагово «просить» произвести необходимые настройки, сначала происходит инициализация COM порта, программа выдаст вот такое окно:

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

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

По желанию можете указать вариант запуска программы (свёрнутый/ не свёрнутый режим). Есть ещё один раздел - это логин, пароль, частота отправки и галочка разрешить отправку данных на WEB сервер. Здесь немного подробней. Эта настройка, при желании, разрешает отправку значений температуры, влажности и давления на глобальный WEB сервер meteolk.ru - это ресурс созданный специально под этот проект, по сути это просто личный кабинет, где содержится вся информация полученная метеостанцией и ничего кроме этого. Для того чтобы можно было пользоваться этим ресурсом необходимо сначала зарегистрироваться для возможности дальнейшей идентификации пользователя, для этого просто заходите на сайт и нажимаете «Регистрация ». Так сказать пользуйтесь на здоровье, мне не жалко. На странице регистрации указываете имя, логин и пароль.

Всё, на этом регистрация закончена, и учётные данные можно указывать в программе. Это можно сделать и позже, перейдя в настройки через «Меню», не обязательно при первом запуске. После того как будут произведены все настройки, нажимаете сохранить и в окне запуска программы нажимаете кнопку «повторить попытку ». Если всё нормально, то программа запуститься и появится основное окно, после этого создадутся файлы настроек и при последующих запусках, никаких настроек производить уже будет не нужно.

В меню «дополнительно » есть опция «считать данные с контроллера », здесь поясню. Каждые пол часа в оперативку микроконтроллера записываются значения температуры, влажности и давления, всего таких записей может быть 100, если получилось так, что программа не была запущена и вам нужно посмотреть статистику, то при помощи этой опции можно посмотреть данные, это 2-е суток, если таковые есть конечно. При помощи «стереть данные МК» вся собранная ранее статистика и хранящаяся в оперативке - затирается. Помимо текущих, отображаемых значений, есть ещё значения «макс.» и «мин.», это максимальные и минимальные значения, которые были зарегистрированы за время работы программы.
С программой всё, на остальных менюшках не буду останавливаться, думаю, что и так всё интуитивно понятно. Вернусь немного к личному кабинету. После регистрации, можно зайти под своей записью, кстати, можно также зайти под логином «test » и паролем «test », это ради ознакомления. Если у вас есть данные, то вы увидите вот такое окно:

При желании, данные можно посмотреть в графическом варианте, в виде графиков.

Вот и всё. Надеюсь на то, что мой проект вам понравиться и пригодится. Пока-пока! До новых встреч на сайте. Автор Виталий Анисимов . г. Калуга .

Обсудить статью ДОМАШНЯЯ USB МЕТЕОСТАНЦИЯ

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то