Як зробити своїми руками електронну метеостанцію. Моя саморобна домашня метеостанція на Arduino Nano

Сьогодні, щоб зібрати робочий прототип базової домашньої метеостанції не потрібно мати сильні навички програмування (у нашому випадку і поготів) або схемотехніки. Досить вміння «гуглити» і дещиці бажання зробити щось своїми руками. У цьому матеріалі я розповім та покажу, як за вечір зібрати домашню метеостанцію з підключенням до мережі. Базовий бюджет – лише 10 доларів.

Текст може містити і, напевно, містить граматичні, орфографічні, пунктуаційні та інші види помилок, включаючи смислові. Я всіляко прошу читачів вказувати ці помилки за допомогою системи ORPHUS. Для цього достатньо виділити необхідну ділянку тексту та натиснути комбінацію клавіш CTRL+Enter.

Базовий набір комплектуючих

Основою нашого майбутнього пристрою є налагоджувальна плата NodeMCU на базі модуля ESP8266. Я взяв її на Gearbest, але за бажання ви можете пошукати її і на інших майданчиках.

Для з'єднання модулів можна використовувати шлейф із BLS-роз'ємами ($0.9) або безпайкову макетну плату з набором з'єднувальних проводів ($3.74).

Підключення та налаштування

Незважаючи на доступні 4 висновки, підключається наш датчик всього по 3 проводах: живлення +5В (1 висновок), земля (4) та лінія передачі даних (2). Харчування для датчика беремо або з піна VUSB або з 3V, якщо першого на вашій платі не виявилося. Лінію даних підключаємо до порту GPIO14 (пін D5).

Нагадаю, що навичок програмування у нашому випадку не потрібно абсолютно жодних. Прошивку для модуля генеруватимемо за допомогою сайту WiFi-IoT.ru, автором якого є Максим Малкін, також відомий за проектом домашньої автоматизації homes-smart.ru. Для початку просто реєструємось на WIFi-IoT і підтверджуємо пошту.

Перед складання прошивки необхідно підготувати придбаний модуль до роботи та очистити його від можливого попередньо встановленого китайського ПЗ. Для цього нам знадобиться робочий USB-microUSB кабель та комп'ютер або віртуальна машина з Windows. Після реєстрації на сайті ви потрапите на англомовну сторінку Getting started з поясненнями з підготовки модуля до роботи. Завантажуйте файли з програм з перших двох пунктів інструкції.

Теоретично, після підключення модуля до комп'ютера, Windows повинна сама знайти драйвера і встановити їх. На випадок, якщо цього не станеться, спробуйте ідентифікувати на платі мікросхему (відрізняється великою кількістю ніжок) біля microUSB порту. Найімовірніше це будуть CP2102 або CH340 (драйвери до них доступні за посиланнями).

Після встановлення драйверів повторно підключаємо плату до комп'ютера і запускаємо програму NodeMCU Flasher, яку завантажили раніше. У списку вибираємо присвоєний нашому пристрої COM-порт. Швидше за все, він буде один, інакше його номер можна уточнити в диспетчері пристроїв Windows. У вкладці Config вказуємо розташування завантаженого раніше blank-файлу з розширенням .bin.

Для NodeMCU параметри у вкладці Advanced необхідно виставити відповідно до наведеного нижче скріншоту, після чого повертаємося на стартову сторінку і натискаємо кнопку Flash. Про завершення процесу прошивки програма просигналізує зеленою галочкою в нижньому лівому кутку.

Після даних маніпуляцій модуль готовий до завантаження прошивки, яку ми ще маємо скомпонувати. Йдемо до конструктора та відзначаємо необхідні нам пункти:

  • «DHT22» - це наш датчик температури та вологості;
  • "Час та NTP" - для відображення часу у веб-інтерфейсі;
  • "Налаштування за замовчуванням". Натискаємо шестерню біля цього пункту та вводимо логін та пароль від точки доступу, до якої буде підключений модуль. Інші пункти поки не чіпаємо.

Натискаємо клавішу «Скомпілювати» внизу сторінки та на виході отримуємо готове до встановлення ПЗ. Викачуємо одним файлом.

Далі повторюється процес із прошивкою blank-файлу, тільки замість нього вибираємо вже завантажену на комп'ютер прошивку. Після завершення процесу повністю перезавантажуємо модуль (відключаємо та підключаємо заново USB-кабель) та відправляємось в адмін-панель роутера у пошуках модуля. Оскільки ми не використовували попереднє присвоєння статичного IP, роутер повинен сам видати адресу. Нагадаю, що адмін-панель зазвичай знаходиться за адресою 192.168.0.1 або 192.168.1.1. Моєму модулю роутер видав адресу 192.168.1.142. Після переходу через це IP потрапляємо у веб-інтерфейс нашої метеостанції. Попередньо необхідно буде ввести стандартний логін esp8266 і пароль 0000 у спливаючому вікні.

Тепер потрібно вказати модулю якого порту підключений датчик, щоб перший зміг зчитувати його показання. Робиться це на сторінці Hardware. Відповідною відміткою активуємо перший датчик, а в рядку GPIO вказуємо 14 порт. Відбудеться ініціалізація та на головній сторінці інтерфейсу з'явиться відображення температури та вологості. Ура!

Насамкінець не забудьте на сторінці Main змінити пароль для входу в систему та часовий пояс для відображення часу. Також необхідно перевести модуль на статичну IP-адресу (кнопка внизу сторінки), щоб після перезавантаження роутера ваша метеостанція не втратилася. Якщо знаєте налаштування свого роутера, то краще зробити безстрокову оренду IP-адреси для модуля, замість установки статичного IP.

Прототип готовий, тепер перейшовши за встановленою IP-адресою можна переглянути температуру та вологість у місці, де ви встановили датчик.

Підключення метеостанції до сервісу метрик Thingspeak.com

Але просто дивитись температуру не цікаво. Потрібна візуалізація даних, щоб можна було простежити якісь тенденції у зміні показань. Для цього реєструємось у сервісі метрик Thingspeak.com та у своєму профілі створюємо новий канал.

На сторінці, що відкрилася, заповнюємо назву каналу, відзначаємо перші два поля field і записуємо туди значення «temp» (перше поле) і «humidity / temp» (друге).

Тепер знову займемося модулем. У конструкторі прошивок на додаток до всіх попередніх позначок додаємо «Thingspeak.com», компілюємо прошивку та прошиваємо за аналогією. На жаль, всі налаштування на модулі доведеться зробити наново, т.к. OTA-оновлення зі збереженням їх доступні лише у платній версії ПЗ (ціна питання лише 100 рублів на модуль).

Повертаємось на сторінку створеного нами каналу у сервісі Thingspeak.com та відкриваємо вкладку «Api Keys». Нам знадобиться код із поля "Write Api Key". Його потрібно скопіювати та вставити у відповідне поле на сторінці "Servers" у веб-інтерфейсі нашої метеостанції, попередньо не забувши встановити позначку на "Enable Thingspeak.com send.".

Покази надсилатимуться кожні 5 хвилин. А виглядатиме це в результаті буде таким чином:

Зовнішній вигляд графіків піддається редагуванню, тому ви вільні творити! 🙂

Підсумки

Напевно хтось запитає: «Чому підсумковий результат відрізняється від представленого на наведеній вище та великій картинці?». Як мінімум тому, що інформації в цьому матеріалі новачкам у темі точно вистачить на вечір-другий, а підключення дисплея та барометра вимагатиме наявності базових навичок пайки та відповідного обладнання. Якщо ви зацікавлені у подальшому вдосконаленні метеостанції та моїх нотатках на цю тему, то обов'язково напишіть про це у коментарях.

Метеостанція побудована на 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 код для 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 RastRequest=b20 Hardware Symbol HumidRaw=B.7 Symbol TempRa. 3 Symbol Speed ​​= B.0 do, Read Humidity ReadADC10 HumidRaw, HValue; RH10 = RH10 - 258 pause 100; d temperature Readtemp12 TempRaw, TValue; Get temperature SignBit = TValue / 256 / 128 якщо SignBit = 0 then positive ; It"s negative so TValue = TValue ^ $ffff + 1 ; two comp positive: TempC_100 = TValue * 6 ; TC = value * 0.0625 TValue = TValue * 25 / 100 TempC_100 = TempC_0 % 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... Then; Під range HQuotient = 0 HFract = 0 endif ; minute), request rain gauge data from 08M inc RainRequest if RainR equest >= 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; Перші групи потрібні не 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, 1 ), 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; Завантажити попередній час" count в b3 ;Hardware definitions Symbol DataRequest = pin3 Symbol BucketSensor = pin4 setint %00010000, %00010000 ; pin4 is interrupt pin main: for w0 = 1 to 60000 ; ; 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; Була interrupt from the 18M2 ? serout 2, N2400, ("r", LastHour, ThisHour); Yes, se send previous hour's count & curent count. do: loop while DataRequest = 1 ; bucket-tip count do: loop while BucketSensor = 1 ;

Внутрішній блок – код 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 є використані для mBar code, коли вони доступні) symbol Quotient = b2 symbol Fract = b3 symbol SignBit = b4 symbol Humidity = b5 symbol HFract = b14 symbol Dir = w5 symbol DirLo = b10 symbol DirHi = b 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 для pressure rising or falling (up arrow or down arrow) symbol active = b19 ; Telltale shows activity на LCD screen symbol LCD_Status = b20 ; Чи є 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 "Рисунок / 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 ADC chip.hi2cout (%00011000) ;set MCP3422 for 16 bit continuous conversion pause 500 hserout 0, (13) : pause 100 ; 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; майже завжди роз'єднано до великої кількості серійних і сертифікованих повідомлень ; so sprinkling the program with "gosub switches" to check the switch status is more ; ефективне, що 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" на LCD для конкретних дій і успішний "серін" від бездротовості. gosub telltale; Display перша група на 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; Всі групи мають start identifier, data and an end identifier: ; Start = "xS", End is "xE" eg Wind Start is WS, Wind End is WE ; Multiple data є відокремленим до 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 ; механічні stops на tipping bucket so that 1 tip is 0.5 mm rain. if LastOrThis = "c" then ; Вирішує, скільки часу на дисплеї попередньої години 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) ; Завантажити другу групу до комп'ютера COM port serout Computer, N2400, ("WS", #Dir," ", #Speed, "WE") ; Wind serout Computer, N2400, ("RS", #RainCountLastHour," ", #RainCountThisHour, "RE"); Rain gosub switches; Відповідь на "матер" на Picaxe forum для mbar code loop: ; Measuring atmosperic pressure with 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 ADC reading and 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 gos telltale; Відправити pressure до комп'ютера COM port serout Computer, N2400, ("PS:", #mbar, "PE") ; Initialize попередній pressure reading (lastmbar) if not already set if lastmbar = 0 then lastmbar = mbar RiseFall = " " endif ; Перейти до списку або знизу до списку, якщо кнопка буде змінена, якщо 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:00 або 12:00. Графіки можна прокручувати вперед-назад за допомогою мишки. Вони можуть бути збережені. Для цього необхідно клацнути по них правою кнопкою миші та вказати ім'я та файл значення. Можна налаштувати обмежений набір даних APRS, що записуються раз на хвилину на один рядок файлу APRS.TXT і які зберігаються в тій же папці, де знаходиться Weather.exe. Зазначу, що температура в градусах за Фаренгейтом і опади в 1/100ths на дюйм.

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

Позначення Тип Номінал Кількість ПриміткаМагазинМій блокнот
Датчик температури та відносної вологості повітря
Датчик температури

DS18B20

1 У блокнот
Датчик вологостіHIH-36101 У блокнот
Резистор

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

МБОУ ЗОШ Селіхінського сільського поселення

Тема проекту

Метеостанція в домашніх умовах

Виконав:

Пюві Райніс, учень 5 кл.

Керівник:

Безсмертна О.О.

2016р

Тема : «Метеостанція в домашніх умовах»

Гіпотеза: Чи можна створити метеостанцію в домашніх умовах?

Ціль: Виготовлення метеостанції в домашніх умовах та спостереження за змінами погоди.

Завдання:

    Дізнатися, що таке метеостанція.

    Вивчити історію фенології.

    Вивчити будову метеостанції.

    Виготовити метеостанцію у домашніх умовах;

    Спостерігати за погодою та записувати результати спостережень до таблиці;

Методи дослідження:

    пошуковий (збір інформації на тему)

    спостереження

    практичний (виготовлення приладів)

    аналітичний (порівняння результатів)

    Вступ.

При вивченні на уроці географії теми: «Погода та метеорологічні спостереження», нам задали додому виготовити своїми руками метеорологічний прилад та провести спостереження за погодою відповідно до цього приладу. У мене виникло питання: «Чи можна створити метеорологічну станцію в домашніх умовах і проводити спостереження за погодою?».

Наш далекий предок був у великій залежності від мінливості погоди. Він не розумів суті та закономірності природних явищ і все незрозуміле пояснював наявністю надприродної, «божественної» сили. По волі богів сходило сонце, йшов дощ, пересихали річки, налітав вітер.

Усі народи обожнювали Сонце, Місяць, вітер, блискавку та грім. У східних слов'яндо прийняття ними християнства особливо шанувався Перун- землеробський бог, подавач дощу, творець блискавки та грому, у його владі була поява весняної зелені на землі та деревах. Прийнявши нову віру, наші предки стали шанувати Іллю-громовержця.

Багато народів вважали Сонце головним джерелом життя Землі. Вони називали його «князем Землі та царем неба». Місяць шанували як княгиню.

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

    З історії фенології.

Фенологія - Наука про закономірності сезонного розвитку природи. Розвиток фенології визначається запитами практики (сільського, рибного, мисливського, лісового господарства, охорони навколишнього середовища, охорони здоров'я та ін.).

Фенологія дозволяє прогнозувати сезонні явища та планувати господарську діяльність (природоохоронні заходи, терміни сільськогосподарських робіт тощо) відповідно до термінів цих явищ.

(№1.)

Є свідчення, що найдавніші народи землі - китайці та єгиптяни - у своїй землеробській практиці вміли ознайомитися з сезонним розвитком природи. Сезонні явища знайшли відображення у низці праць античних авторів (наприклад, у грецького філософа Феофраста (372-287 р. до н. е.) та римського письменника Плінія Молодшого (62-114 р. н. е.)).

У середні віки в російських та зарубіжних літописах і хроніках іноді велися записи про терміни наступу найважливіших сезонних явищ (наприклад, у монастирі Кракова за 1490-1527 р., у палаці японського мікадо з 812 р. та ін.). Однак ці матеріали залишалися без систематизації та наукової обробки.

У Росії найстародавнішим вважається рукописний календар, датований 1670 роком, а першим друкованим календарем слід вважати «Святці або календар, виданий Копієвським в Амстердамі і датований 1702 роком.

Перша думка про необхідність вести спостереження за сезонними явищами природи у Росії належала Петру I.

У 1721 року Петро писав із Москви до Петербурга А.Д. Менишкову: «Коли дерева будуть розкидатися, тоді велите надсилати нам звістки цих, понеділка, наклеївши на папір з підписами чисел, щоб дізнатися, де раніше почалася весна». А указом государя, виданим 28 березня 1722 року, наказувалося адміралу Крюйсу вести систематичні записи про стан погоди у Петербурзі.

У другій половині XVIII століття караульним біля Кремлівської стіни ставилося в обов'язок відзначати стан морозу, настання хуртовини, товщину снігового покриву, характер вітру, граду, грози та інші показники погоди.

З 1864 року почав видаватися «Київський народний календар» із прогнозами погоди на кожен місяць. Його метою було «дати народу знання у популярній формі на суворо науково викладених статтях та у довідковому відділі, пристосованому до потреб народу». Тепер це завдання метеорології-науці про погоду. Вона отримала свою назву від грецького слова "метеора" - "щось у небі".

Після революції 1917 метеорологія продовжувала вдосконалюватися. В даний час гідрометеорологічна служба розташовується тисячами наглядових станцій, безліччю обсерваторій та цілою низкою науково-дослідних установ. Працівники метеослужби прагнуть надати інформацію не лише на найближчу, а й на віддалену перспективу.

№2.

    Поняття метеостанції, її склад.

Метеостанція – сукупність різних приладів для метеорологічних вимірів (спостереження за погодою).

У вузькому значенні метеостанція - установа, яка проводить метеорологічні спостереження. Основним офіційним метеостанціям світу надано синоптичні індекси. У Росії її більшість метеостанцій перебувають у віданні Росгидромета. Залежно від встановленого обсягу спостережень метеостанції мають певний розряд. Дані метеостанцій СРСР публікувалися у «Метеорологічному місячнику».

Розрізняють аналогові та цифрові метеорологічні станції.

На класичній (аналоговій) метеостанції є:

1.Термометр для вимірювання температури повітря та ґрунту.

2. Барометр для вимірювання тиску.

3. Анемометр для спрямування вітру.

4. Осадкомір (плювіограф) для вимірювання опадів.

5. Гігрометр для вимірювання вологості повітря

6. Снігомірна рейка – рейка, призначена для вимірювання товщини снігового покриву при метеоспостереженнях.

7.Термограф-самописець, безперервно реєструючий температуру повітря.

№3.

4.Метеорологічні прилади:

Термометр (грец. θέρμη - тепло; μετρέω - вимірюю) - прилад для вимірювання температури повітря, ґрунту, води і так далі. Існує кілька видів термометра: рідинні; механічні; електронні;

Барометр (ін.-грец. βάρος – «важкість» і μετρέω – «вимірюю») – прилад для вимірювання атмосферного тиску. Ртутний барометр був винайдений італійським математиком і фізиком Еванджелістою Торрічеллі в 1644 році, це була тарілка з налитою в неї ртуттю та пробіркою (колбою), поставленою вниз отвором. Коли атмосферний тиск підвищувався, ртуть піднімалася в пробірці, коли вона знижувалася - ртуть опускалася. Через незручність така конструкція перестала застосовуватися і поступилася місцем барометру-анероїду, але метод, за яким такий барометр був виготовлений, став застосовуватися в термометрах.

А.А. Летягін. Географія. Початковий курс: 5 клас: підручник для учнів загальноосвітніх організацій/А.А. Летягін; за ред. В.П. Дронова.-3-еїзд., Дораб. та доп.-М.: Вентана-Граф, 2015р.-160с.



«Так, давайте одразу домовимося: ви не збираєтесь знімати кіно для Голлівуду. Навіть у Країні чудес стверджується не більше п'яти відсотків від усіх сценаріїв, і тільки один відсоток іде потім у виробництво… Таким чином, натомість ви збираєтеся створити свій власний Голлівуд.»
Ед Гаскель «Знімаємо цифрове кіно, або Голлівуд вдома»

Передмова

Що, ще одна погодна станція на 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 акумуляторів – це їхня довга зарядка.

Загальна схема метеостанції

Підведемо підсумки. Ось загальна схема, як усе працює.



Далі буде.

- Вологість:

Діапазон виміру 20÷90%.

Похибка ±5%.

Роздільна здатність 1%.

- Температура:

Діапазон виміру 0÷50 про С.

Похибка ±2°С.

Роздільна здатність 1 про С.

4. Вимірювання тиску та температури датчиком BMP-180.

- Тиск:

Діапазон виміру 225÷825 мм рт. ст.

Похибка ±1 мм рт. ст.

Роздільна здатність 1 мм рт. ст.

- Температура:

Діапазон виміру -40,0÷85,0 про С.

Похибка ±1°С.

Роздільна здатність 0,1 про С.

5. Циклічна анімована зміна показань.

6. Режим "зозулі". Щогодинний короткий звуковий сигнал. Якщо активовано і лише у денний час.

7. Озвучує натискання кнопок. Короткий звуковий сигнал лише вдень.

8. Збереження налаштувань в незалежній пам'яті мікроконтролера.

Налаштування.

1. Вхід у налаштування та перегортання меню проводиться кнопкоюMENU .

2. Перемикає параметр для налаштування в межах однієї сторінки меню кнопкоюSET .

3. Встановлення параметра кнопкамиPLUS / MINUS . Кнопки працюють по одиночному натисканню, а при утриманні виконується прискорена установка.

4. Встановлюваний параметр блимає.

5. Через 10 с від останнього натискання на кнопки прилад перейде в основний режим, налаштування запишуться в пам'ять.

6. Сторінки меню.

CLOC :

- Скидання секунд.

- Встановлення хвилин.

- Встановлення годинника.

- Встановлення щодобової корекції точності ходу. У старшому розряді символc . Діапазон встановлення±25 сек.

ALAr :

– хвилини спрацьовування будильника.

– годинник спрацьовування будильника.

- Активація будильника. У старшому розряді символA. У молодших On , якщо робота будильника дозволена,OF – якщо заборонено.

– активація режиму "зозулі". У старших розрядах символиcu. У молодших On , якщо робота "зозулі" дозволена,OF – якщо заборонено.

DiSP :

- Тривалість індикації часу. На індикаторіd xx . Діапазон встановлення

- Тривалість індикації вологості. На індикаторіH xx . Діапазон встановлення 0 ÷ 99 сек. Якщо встановлено 0, параметр не відображатиметься.

– тривалість індикації температури, виміряної датчиком вологості. На індикаторіtHxx . Діапазон встановлення 0 ÷ 99 сек. Якщо встановлено 0, параметр не відображатиметься.

- Тривалість індикації тиску. На індикаторіP xx . Діапазон встановлення 0 ÷ 99 сек. Якщо встановлено 0, параметр не відображатиметься.

– тривалість індикації температури, виміряної датчиком тиску. На індикаторіtPxx . Діапазон встановлення 0 ÷ 99 сек. Якщо встановлено 0, параметр не відображатиметься.

- Швидкість анімації. У старшому розряді символ S. Діапазон встановлення 0 ÷ 99. Чим менша величина, тим вища швидкість.

LiGH :

niGH- Налаштування нічного режиму.

– хвилини увімкнення нічного режиму.

– годинник увімкнення нічного режиму.

– яскравість індикатора у нічному режимі. У старшому розряді символ n. Діапазон установки 0 ÷ 99. Яскравість індикатора відповідає нічному режиму.

dAY- Налаштування денного режиму.

– хвилини увімкнення денного режиму.

– годинник увімкнення денного режиму.

– яскравість індикатора у денному режимі. У старшому розряді символ d. Діапазон установки 0÷99. Яскравість індикатора відповідає денному режиму.

Робота приладу.

1. В основному режимі відбувається циклічна зміна інформації на індикаторі. Встановлено таку послідовність виведення: час – вологість (у старшому розряді символ H) – температура виміряна датчиком вологості – тиск (у старшому розряді символ P) – температура виміряна датчиком тиску. Якщо тривалість відображення будь-якого параметра встановлена ​​в 0, то індикатор він виводитися нічого очікувати.

2. З основного режиму можна перемикати індикацію кнопками PLUS/MINUS.

3. У разі помилки зчитування даних із датчика DHT11 при індикації температури та вологості на індикатор виводяться прочерки.

4. Якщо будильник активовано, див. У заданий час включається звуковий сигнал - щомиті подвійні сигнали протягом однієї хвилини. Звуковий сигнал може бути достроково вимкнений натисканням будь-якої кнопки. Під час спрацювання будильника на індикатор протягом 30 секунд виводиться час.

5. Щодобово (о 0 годині 0 хвилин і 30 сік) проводиться цифрова корекція часу., DS1307.

4. Тип індикатора (загальний анод або катод) вибирається джампером. Якщо джампер встановлено, вибрано індикатор із загальним анодом.

5. На схемі показані два індикатори, що встановлюються лише одні.

6. Їжачка має бути з вбудованим генератором. Залежно від струму споживання, можливо знадобиться установка підсилювача (транзисторного ключа).

Під час обговорень та доопрацювань у темі форуму з'явилося кілька різних версій цього проекту.

По можливості оновлені матеріали викладатимуться тут. Короткі описив архівах

Подяка studiotandemза підготовку матеріалів та тестування прошивок.