Начало - Безопасност
Сензор за метеорологична станция на Arduino. Безжична метеорологична станция

Гледането на времето е много вълнуващо занимание. Реших да изградя собствена метеорологична станция на базата на популярната .

Прототипът на метеорологичната станция изглежда така:

Функции на моята метеорологична станция:

  • измерване и показване на стайни и външни температури;
  • показване на текущо време (часове и минути);
  • показване на текущи фази на луната и лунен ден;
  • прехвърляне на резултатите от измерването към компютър чрез серийна връзка;
  • предаване на резултатите от измерването чрез протокол MQTTс помощта на приложение на вашия компютър.


шестнадесетичен
-файл
фърмуер за (версия от 9 май 2018 г.) - .
Как се флашва шестнадесетичен-файл към борда Ардуино, описах.

Микроконтролер Ардуино Нано 3.0

„Сърцето“ на моята метеорологична станция е микроконтролер eBay):

За да контролирам показването и запитването на сензорите, използвам таймер 1 Ардуино, предизвикващи прекъсвания с честота 200 Hz (период - 5 ms).

Индикатор

За показване на измерените показания на сензора и текущото време, свързах се с Ардуиночетирицифрен LED индикатор Foryard FYQ-5643BHс общи аноди (анодите на еднакви сегменти от всички разряди се комбинират).
Индикаторът съдържа четири седемсегментни цифри и две разделителни (часови) точки:

Индикаторните аноди са свързани чрез токоограничаващи резистори към клемите Ардуино:

освобождаване от отговорност 1 2 3 4
заключение A3 A2 D3 D9

Катодите на сегментите са свързани към щифтовете Ардуино:

сегмент а b c d д f ж стр
заключение D7 D12 D4 D5 D6 D11 D8 D13

Индикаторният сегмент светва, ако има висок потенциал на анода на съответния разряд (1) и нисък потенциал на катода (0).

използвам динамична индикацияза извеждане на информация на индикатора - във всеки момент е активна само една цифра. Активните разряди се редуват с честота 200 Hz (период на показване 5 ms). В същото време трептенето на сегментите е невидимо за окото.

Датчик за температура DS18x20

За да мога да измервам температурата дистанционно, свързах сензор , който осигурява измерване на външната температура в широк диапазон. Сензорът е свързан към шината 1-проводники има три изхода - мощност ( VCC), данни ( DAT), Земята ( GND):

сензорен изход VCC DAT GND
заключение Ардуино 5V A1 GND

Между щифтове VCCИ DATВключих 4,7 kOhm издърпващ резистор.

За да конвертирате между градуси по Целзий и Фаренхайт, можете да използвате следната таблица:

Поставих сензора извън прозореца на къщата в пластмасова кутия за химикал:

\

Професионалните метеорологични станции използват екран на Stevenson, за да предпазят термометъра от пряка слънчева светлина и да осигурят циркулация на въздуха. Екран на Стивънсън):

Сензор за налягане и температура BMP280

Живачните барометри и анероидните барометри традиционно се използват за измерване на атмосферното налягане.

IN живачен барометъратмосферното налягане се балансира от теглото на живачен стълб, чиято височина се използва за измерване на налягането:

IN анероиден барометъризползва се компресия и разширяване на кутията при атмосферно налягане:

За измерване на атмосферното налягане и стайната температура в моята домашна метеорологична станция използвам сензор - малък SMD-размер на сензора 2 x 2,5 mm, базиран на пиезорезистивна технология:

Шалът със сензора е закупен от платформа за търговия eBay:

Сензорът е свързан към шината I2C(данни за контакт - SDA/SDI, контакт за синхронизация - SCL/SCK):

сензорен изход VCC GND SDI SCK
заключение Ардуино 3V3 GND A4 A5

Adafruit- файлове Adafruit_Sensor.h, Adafruit_BMP280.h, Adafruit_BMP280.cpp.

Единици за атмосферно налягане

Сензор чрез функция readPressureпоказва атмосферното налягане в паскали. Основната единица за измерване на атмосферното налягане е хектопаскал(hPa) (1 hPa = 100 Pa), чийто аналог е несистемната единица " милибар" (mbar) (1 mbar = 100Pa = 1hPa). За преобразуване между често използвани единици за налягане извън системата " милиметър живачен стълб" (mmHg) и хектопаскали се използват следните съотношения:
1 hPa = 0,75006 mm Hg. Чл. ≈ 3/4 mmHg; 1 mmHg =1,3332 hPa ≈ 4/3 hPa.

Зависимостта на атмосферното налягане от надморската височина

Атмосферното налягане може да бъде представено както в абсолютна, така и в относителна форма.
Абсолютно налягане QFE(английски) абсолютно налягане) е текущото атмосферно налягане, което не отчита корекцията над морското равнище.
Атмосферното налягане намалява с приблизително 1 hPa с увеличаване на надморската височина с 1 m:

Барометричната формула ви позволява да определите корекцията на показанията на барометъра, за да получите относително налягане (в mmHg):
$\Delta P = 760 \cdot (1 - (1 \over (10^ ( (0.0081350 \cdot H) \over (T + 0.00178308 \cdot H) ))))$ ,
където $T$ е средната температура на въздуха по скалата на Ранкин, ° Ра, $H$ - надморска височина, футове.
Преобразуване на градуси Целзий в градуси Ранкин:
$^(\circ)Ra = (^(\circ)C \cdot 1.8) + $491,67
Барометричната формула се използва за барометрична нивелация - определяне на височини (с грешка 0,1 - 0,5%). Формулата не отчита влажността на въздуха и изменението на гравитационното ускорение с височината. При малки разлики във височината тази експоненциална зависимост може да се апроксимира с достатъчна точност чрез линейна зависимост.
Относително налягане QNH(английски) относително налягане, Морска височина с Q-код) е атмосферното налягане, коригирано спрямо средното морско ниво. Средно морско ниво, MSL) (За ISAи температура 15 градуса по Целзий) и първоначално се задава, като се вземе предвид надморската височина, на която се намира метеостанцията. Може да се установи от данни от метеорологичните служби, показания от калибрирани инструменти на обществени места, летища (от доклади METAR), от интернет.
Например за близкото летище Гомел ( UMGG) Мога да видя действителния доклад за времето METARна ru.allmetsat.com/metar-taf/russia.php?icao=UMGG:
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD//NOSIG ,
Къде Q1014- налягане QNHна летището е 1014 hPa.
История на отчетите METARналичен на aviationwxchartsarchive.com/product/metar.
За нормално относително атмосферно налягане QNHсе приема налягане от 760 mm Hg. Чл. или 1013,25 hPa (при температура 0ºС, на ширина 45º на северното или южното полукълбо).
Настроих налягането за анероидния барометър QNHс помощта на винта за настройка на чувствителността:

Прогноза за времето

Анализът на промените в налягането ви позволява да изградите прогноза за времето и нейната точност е по-висока, колкото по-рязко се променя налягането. Например, старо правило за моряците е, че спад на налягането от 10 hPa (7,5 mm Hg) за период от 8 часа показва приближаването на силни ветрове.

Откъде идва вятърът? Въздухът тече към центъра на зоната с ниско налягане, създавайки вятър- хоризонтално движение на въздуха от области с високо налягане към области с ниско налягане (високото атмосферно налягане изтласква въздушни маси в области с ниско атмосферно налягане). Ако налягането е много ниско, вятърът може да достигне силен бури. В същото време в района намаленаналягане (депресия на налягането или циклон), топлият въздух се издига и образува облаци, които често носят дъждили сняг.

В метеорологията посоката на вятъра се приема за посоката, от която вятърът духа:

Тази посока се свежда до осем точки.

Често се използва алгоритъм за прогнозиране на времето въз основа на барометрично налягане и посока на вятъра. Замбрети.

Сензор за влажност

За определяне на относителната влажност на въздуха използвам модула DHT11(закупен от пазара eBay):

Сензор за влажност DHT11има три изхода - захранване ( + ), данни ( навън), Земята ( - ):

сензорен изход + навън -
заключение Ардуино 5V D10 GND

За работа със сензора използвам библиотеката от Adafruit- файлове DHT.h, DHT.cpp.

Влажността на въздуха характеризира количеството водни пари, съдържащи се във въздуха. Относителна влажностпоказва процентното съдържание на влага във въздуха спрямо максимално възможното количество при текущата температура. Използва се за измерване на относителна влажност :

За хората оптималният диапазон на влажност на въздуха е 40 ... 60%.

Часовник за реално време

Използвах модула като часовник за реално време RTC DS1302(шалът с часовника е закупен от платформата за търговия eBay):

Модул DS1302свързва се с автобуса 3-жилен. За да използвате този модул заедно с Ардуиноразработена библиотека iarduino_RTC (от iarduino.ru).

Табло с модул DS1302има пет пина, които свързах към щифтовете на платката Ардуино Нано:

заключение RTC VCC GND RST CLK DAT
заключение Ардуино 5V GND D2 D1 D0

За да поддържам правилни показания на часовника, когато захранването е изключено, поставих батерия в слота на платката CR2032.

Точността на часовниковия ми модул се оказа не много висока - часовникът избързва с около една минута за четири дни. Затова нулирам минутите до „нула“ и часа до най-близката, като задържам натиснат бутона, свързан към щифта A0 на Arduino, след включване на захранването на метеорологичната станция. След инициализацията щифтът A0 се използва за предаване на данни чрез серийна връзка.

Прехвърляне на данни към компютър и работа по MQTT протокол

За прехвърляне на данни чрез серийна връзка към Ардуиносвързва USB-UARTконвертор:

Заключение Ардуиноизползвани за предаване на данни във формат 8N1(8 бита данни, без паритет, 1 стоп бит) при 9600 bps. Данните се предават на пакети, като дължината на пакета е 4 знака. Прехвърлянето на данни се извършва в " малко взрив" режим, без използване на хардуер сериен порт Ардуино.

Формат на предаваните данни:

Параметър 1-ви байт 2-ри байт 3-ти байт 4-ти байт
външна температура о интервал или минус десетки градуси или пространство единици градуси
стайна температура аз интервал или минус десетки градуси или пространство единици градуси
атмосферно налягане стр стотни mm r. Чл. десетки mmHg единици mmHg с.
относителна влажност ч пространство десетки процента или интервал единици проценти
текущо време десетки часове единици часове десетки минути единици минути

MQTT

Голангпротоколно клиентско приложение MQTT, изпращане на информация, получена от метеорологичната станция към сървъра ( MQTT-брокер) :

Обслужване ви позволява да създадете акаунт с безплатен тарифен план "" (лимит: 10 връзки, 10 Kb/s):

За да наблюдавате показанията на метеорологичните станции, можете да използвате Android- приложение :

Хранене

За захранване на метеорологичната станция, която използвам зарядно устройствоот старо мобилен телефон Motorola, произвеждащи напрежение от 5 V с ток до 0,55 A и свързани към контактите 5V(+) и GND (-):

За захранване можете да използвате и 9 V батерия, свързана към контактите. VIN номер(+) и GND (-).

Работа на метеорологичната станция

При стартиране сензорите се инициализират и тестват.

При липса на сензор DS18x20грешка "E1" се показва, когато няма сензор - грешка "E3".

След това започва работният цикъл на метеостанцията:

  • измерване и показване на външна температура;
  • измерване и показване на стайна температура;
  • измерване и показване на атмосферното налягане и неговата тенденция;
  • измерване и показване на относителна влажност на въздуха;
  • показване на текущо време;
  • показване на лунната фаза и лунния ден.


Видеозапис на моята метеорологична станция в действие е достъпен на моя -канал: https://youtu.be/vVLbirO-FVU

Температурен дисплей

При измерване на температурата се показват две температурни цифри, а за отрицателна температура знак минус (със символ за градус в най-дясната цифра);
за външна температура знакът за градус се показва в горната част:


за стайна температура - по-долу:

Дисплей за налягане

При измерване на налягането се показват три цифри на налягането в mmHg (със символа " П" най-вдясно):

Ако налягането спадне рязко, тогава вместо символа " П"символът най-вдясно се показва" Л"ако е нараснал рязко, тогава" з". Критерият за остротата на промяната е 8 mm Hg за 8 часа:

Тъй като метеорологичната ми станция показва абсолютно налягане ( QFE), тогава показанията се оказват малко подценени в сравнение с информацията в доклада METAR(който осигурява QNH) (14 UTC, 28 март 2018 г.):

Коефициент на налягане (според АТИС) възлиза на $(1015 \над 998) = $1,017. Надморска височина на летище Гомел (код на ICAO UMGG) над морското равнище е 143,6 m. Температурата според ATIS е 1 ° В.

Показанията от моята метеостанция почти съвпаднаха с абсолютното налягане QFEспоред информацията АТИС!

Максимално/минимално налягане ( QFE), записани от моята метеостанция за целия период на наблюдение:

Показване на относителната влажност

Относителната влажност на въздуха се показва като процент (символът за процент се показва в двете десни цифри):

Показване на текущото време

Текущият час се показва на индикатора във формат "ЧЧ:ММ", като разделителното двоеточие мига веднъж в секунда:

Показване на лунните фази и лунния ден

Първите две цифри на индикатора показват текущата лунна фаза, а следващите две - текущия лунен ден:

Луната има осем фази (дадени са английски и руски имена (в синьо - неточно)):

Фазите се показват на индикатора с пиктограми:

фаза пиктограма
нарастващ сърп (полумесец)
намаляващ сърп (полумесец)

Прехвърляне на данни към компютър

Ако свържете метеорологична станция с USB-UARTпреобразувател (например, базиран на микросхема CP2102), свързан с USB- компютърен порт, можете да използвате терминална програма, за да наблюдавате данните, предавани от метеорологичната станция:

Разработих на език за програмиране golangпрограма, която поддържа дневник на метеорологичните наблюдения и изпраща данни на услугата , и може да се види на Android-смартфон с помощта на приложението :

Според дневника за наблюдение на времето можете например да изградите графика на промените в атмосферното налягане:
пример за графика със забележимо минимално налягане


пример за графика с леко повишаване на налягането

Планирани подобрения:

  • добавяне на сензори за посока и скорост на вятъра

В метеорологичните станции анемометър с три чаши (1) се използва за измерване на скоростта на вятъра, а ветропоказател (2) се използва за определяне на посоката на вятъра:

Използва се и за измерване на скоростта на вятъра анемометри с гореща жица(английски) анемометър с гореща тел). Като нагрята жица можете да използвате волфрамова жичка от електрическа крушка със счупено стъкло. В промишлено произведените анемометри с горещ проводник сензорът обикновено се намира върху телескопична тръба:

Принципът на работа на това устройство е, че топлината се отстранява от нагревателния елемент поради конвекция от въздушен поток - вятър. В този случай съпротивлението на нишката се определя от температурата на нишката. Законът за промяна на съпротивлението на нишката $R_T$ в зависимост от температурата $T$ има формата:
$R_T = R_0 \cdot (1 + (\alpha \cdot (T - T_0)))$ ,
където $R_0$ е съпротивлението на нишката при температура $T_0$, $\alpha$ е температурният коефициент на съпротивление (за волфрам $\alpha = 4,5\cdot(10^(-3) (^(\circ)( C^( -1))))$).

При промяна на скоростта на въздушния поток температурата се променя при постоянен ток на нажежаема жичка (анемометър с DC, английски CCA). Ако температурата на нагревателния елемент се поддържа постоянна, токът през елемента ще бъде пропорционален на скоростта на въздушния поток (анемометър с постоянна температура, английски). CTA).

Следва продължение

IN свободно време, а този път написах инструкции за направата на малка метеорологична станция. Той ще функционира като часовник с дата и ще показва вътрешни и външни температури. Ще използваме Arduino UNO като основен контролер, но друга платка с Atmega328p на борда също ще работи. За показване използваме графичния екран WG12864B. Ще свържем и два температурни сензора ds18b20. Единият е на закрито, вторият ще бъде изнесен навън. Да започнем.

В процеса на производство на домашни продукти ще ни трябва:

Arduino UNO (Или всяка друга платка, съвместима с Arduino)
- WG12864B графичен екран
- температурен датчик ds18b20 2 бр.
- Захранване 6 – 12 V
- Резистори 4.7 Kom 0.25 W 2 бр.
- Резистори 100 ома 0,25 W
- Отделение за батерии за 4 батерии тип ААА „pinky”.
- Кутия за патрони SEGA
- Електрическа лента
- Свързващи проводници
- Платка
- Бутони
- Канцеларски нож
- Поялник
- Припой, колофон
- Двустранна лента

Стъпка 1 Подгответе WG12864B3.
Тези, които не са работили с екрани преди, може да се уплашат от големия брой модификации на привидно идентични екрани. Нека обясня малко. Повечето екрани от този тип работят на чипове ks0107/ks0108. Всички екрани могат да бъдат разделени на 4 вида:

Вариант A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T

Вариант B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Displays AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, 4F, TM1 2864L-2, 12864J-1

Вариант C: Shenzhen Jinghua Displays Co Ltd. JM12864

Опция D: Wintek-Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS19264/HD61202

Изглеждат почти еднакви. Но техните свързващи щифтове са различни. Избрах и ви препоръчвам WG12864B3 V2.0, но ако екранът, който сте получили, е различен или просто нямате такъв под ръка, можете лесно да го разберете с помощта на таблицата:

Накратко характеристики:

Има много в интернет различни схемивръзки и всичко изглежда работи. Работата е там, че има не само различни екрани, но и два начина за свързването им: сериен и паралелен. Когато използвате връзка чрез сериен порт– имаме нужда само от 3 микроконтролерни изхода. С паралелен минимум 13. Изборът в този случай е очевиден; Arduino така или иначе няма много пинове. За паралелна връзка диаграмата на свързване е както следва:

За серийната връзка, която ще използваме, диаграмата е както следва:

WG12864B – Arduino UNO 1 (GND) – GND 2 (VCC) – +5V 4 (RS) – 10 5 (R/W) – 11 6 (E) – 13 15 (PSB) – GND 19 (BLA) – чрез резистор 100 Ohm - +5V 20 (BLK) – GND

За да регулирате контраста, трябва да има потенциометър на екрана. Има екрани без него, но това вече е рядкост:

Необходим е резистор от 100 ома, така че напрежението от 5 волта да не изгори случайно диодите за подсветка.

Стъпка 2 Изработка на тялото.
За случая вземете кутия от патрон за конзола на Sega. Ако не намерите тази кутия под ръка, можете да използвате друга кутия. Основното е, че екранът и Arduino пасват в него.

Отрежете прозрачното фолио отгоре на кутията, така че да не останат парчета:

След това с помощта на макетен нож изрязахме прозорец с размери 37x69 за екрана.

От задната страна по ръба на изреза залепваме двустранна лента, за предпочитане черна:

Отстраняваме защитната хартия от лентата и залепваме нашия екран върху нея:

Отвън трябва да изглежда така:

Под екрана, също с двустранна лента, прикрепяме Arduino, като преди това направихме изрези за USB порти захранващ контакт:

От двете страни на кутията трябва да се направят изрези за гнезда на Arduino, така че да може да се затваря свободно:

Стъпка 3 Температурни сензори.
Ще използваме цифрови температурни сензори DS18B20. Използвайки ги, получаваме по-голяма точност на измерване, грешка не повече от 0,5 °C, в широк температурен диапазон от -55 ... + 125 °C. Освен това сензорът е цифров и сам извършва всички изчисления, а Arduino просто получава готови показания. Когато свързвате този сензор, не забравяйте за издърпващия резистор, номинален 4,7 KOhm, между контактите DQ и VDD. Възможни са и няколко опции за свързване. С външно захранване според мен най-добър вариант, ще го използваме:

За всяка опция за захранване сензорите са свързани паралелно:

Ще поставим сензора за вътрешна температура на малка дъска заедно с два бутона, които ще използваме, за да настроим часа и датата на часовника:

Свързваме общия проводник от двата бутона към GND, свързваме проводника от първия бутон към A0, от втория към A1.
Прикрепяме го с двустранна лента до Arduino:

По-добре е да изберете сензор, който трябва да бъде поставен извън помещението в метален, прахо- и водоустойчив корпус:

Изчислете проводника с необходимата дължина, така че да можете да окачите сензора извън прозореца, основното е, че е не повече от 5 метра; ако имате нужда от по-голяма дължина, ще трябва да намалите стойността на издърпването резистор.

Свързваме проводника от DQ шината за данни на двата сензора към пин 5 на Arduino.
Vdd - +5 Arduino.
GND - GND Arduino.

Стъпка 4 Хранене.
За захранване можете да използвате захранване с напрежение от 6 до 12 волта. В края на захранващия проводник запоете щепсел, подходящ за захранващия контакт на Arduino:

Или можете да поставите отделение за батерии в кутията за четири AAA батерии. И свържете положителния проводник от отделението към Vin Arduino, а отрицателния проводник към GND.

Стъпка 5 Подгответе средата за програмиране.
Първо трябва да изтеглите и инсталирате Arduino IDE от официалния уебсайт

И също така добавете към двете библиотеки, необходими за скицата. OneWire – необходим за комуникация със сензори ds18b20:

U8glib – използва се за показване на информация на екрана:

Изтегляне на библиотеки. След това разопаковаме архивите и преместваме съдържанието на архивите в папката „библиотеки“, намираща се в папката с инсталираната Arduino IDE. Можете също да добавяте библиотеки чрез Arduino IDE. За да направите това, без да разопаковате архивите, стартирайте Arduino IDE и изберете от менюто Sketch – Connect Library. В горната част на падащия списък изберете „Add.Zip библиотека“. Посочваме местоположението на изтеглените архиви. След всички стъпки трябва да рестартирате Arduino IDE.

Стъпка 6 Редактиране на скицата.
Температурните сензори работят с помощта на протокола One Wire и имат уникален адресза всяко устройство - 64 битов код. Не е препоръчително да добавяте команди за търсене на сензори към скицата. Няма нужда да зареждате Arduino всеки път, когато сензорите хълцат. Следователно, първо, след като съберем всичко заедно, качваме скицата в Arduino, намираща се в менюто File - Examples - Dallas Temperature - OneWireSearch. След това стартирайте Tools - Port Monitor. Arduino трябва да намери нашите сензори, да напише адреси и показания на температурата. Тези адреси трябва да бъдат записани или просто копирани някъде. Сега отворете скицата Ard_Tic_Tak_WG12864B_2_x_Term_Serial и потърсете редовете:

Байт addr1=(0x28, 0xFF, 0x75, 0x4E, 0x87, 0x16, 0x5, 0x63);//вътрешен адрес байт addr2=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97);//външен адрес сензор

Заменяме адресите на съответните сензорни локации с нашите адреси.
Нашият часовник не използва RTC (часовник за реално време) модул, така че е необходимо да регулирате тактовата честота. За удобство разкоментирайте реда (секунди ще се появят на екрана):

//u8g.setPrintPos(44, 50); u8g.print(sec); // Изходни секунди за контрол на правилността на хода

Инсталирайте точното време, чрез монитора на порта. За да направите това, отворете монитора на порта, изчакайте завършването на първоначалните температурни измервания и влезте текуща датаи час във формат "ден, месец, година, часове, минути, секунди". Без интервали, числа, разделени със запетаи или точки.

Ако часовникът бърза, променяме стойността на по-голяма; препоръчвам да експериментирате със стъпки от 100 единици. Ако изоставам, трябва да намаля стойността в реда:

If (micros() - prevmicros >494000) ( // промяна на нещо друго, за да коригирате, че беше 500000

Ние емпирично определяме числото, при което часовникът работи доста точно. За да определите точността на хода, трябва да покажете секундите. След прецизно калибриране на числото, секундите могат да бъдат коментирани и по този начин да бъдат премахнати от екрана.
Качете скицата.

Исках да имам собствена метеорологична станция, която предава показанията от сензори към обществена карта за наблюдение (търсене в Google за 5 секунди). Оказа се, че не е толкова трудно, колкото изглежда. Да видим какво е направено.

За на това действиеВзех го за себе си Ардуино Унои Ethernet Shield w5100 за него. Всичко това е поръчано от Китай на Aliexpress.

Там поръчах и сензори: DHT22, DHT11, DS18B20, BMP280 (планирани са и сензори за газ и дим...)

След търсене във форуми, Google, Yandex, намерих добра версия на скицата - https://student-proger.ru/2014/11/meteostanciya-2-1/

Там в коментарите човек публикува завършена скица със сензори за светлина и газ. Взех ги за основа.

В тези скици нямаше поддръжка за 280-ия сензор за налягане, говорихме с автора, той замени 180 с 280. Всичко работи перфектно (много му благодаря за това)

По-долу е даден пример за окончателната скица, която измислих.

IN в моментаИмам свързани сензори:
DHT22 - 1 бр.
DHT11 - 1 бр.
BMP280 - 1 бр.
DS18B20 — 2 бр.

ВНИМАНИЕ! Преди да качите скицата, не забравяйте да промените MAC адреса на устройството, за да не пречите на другите (например вземете Mac адреса на мобилния си телефон и променете последните букви/цифри в него, което няма да „безпокои“ ” вашата локална мрежа!

Приблизителна схема на свързване (снимка, направена от тази скица в Интернет):

По технически причини не мога да публикувам скицата директно тук. Сложих го в архива. Линкът към него е в горния ред.

Както можете да видите, има показания и те работят правилно, например ще публикувам няколко екранни снимки от моите сензори:

Препоръчително е да изтеглите фърмуера, преди да свържете компонентите, за да сте сигурни, че платката работи. След сглобяването можете да го флашнете отново, платката трябва да мига гладко. При проекти с мощни консуматори в захранващата верига на платката 5V (адресируеми led лента, серво, двигатели и т.н.) е необходимо да се подаде външно 5V захранване към веригата преди това свързване на Arduinoкъм компютъра, защото USB няма да осигури необходимия ток, ако например лентата го изисква. Това може да доведе до изгаряне на защитния диод на платката Arduino. Ръководство за изтегляне и качване на фърмуера може да се намери под спойлера на следващия ред.

Съдържанието на папките в архива

  • библиотеки– проектни библиотеки. Заменете съществуващите версии
  • фърмуер– фърмуер за Arduino
  • схеми– схеми на свързване на компоненти

Допълнително

  • Както показа експериментът, температурният сензор извън кутията показва 0,5 градуса по-малко, отколкото вътре! Необходимо е по-добро подреждане на електрониката, отстраняване и екраниране на топлината от нагревателните елементи...

  • Ако дисплеят е твърде слаб/на бял фон
    На платката на драйвера на дисплея има копче за контраст (към което са свързани проводниците), с негова помощ можете да регулирате контраста до желания. Освен това контрастът зависи от ъгъла на гледане на дисплея (това е LCD) и можете да настроите дисплея да показва ясно дори под ъгъл „дисплей на нивото на пъпа, гледайки отгоре“. А контрастът също силно зависи от захранването: от 5V дисплеят показва възможно най-ясно и ярко, докато при захранване от USB през Arduino напрежението ще бъде около 4,5V (част от него пада върху защитния диод по USB ред) и дисплеят вече не е толкова ярък. Регулирайте изхода с помощта на въртящо се копче с външно захранване от 5V!

  • Ако сензорът за CO2 не работи правилно (информация от Евгений Иванов)
    Е, има скици за калибриране в папката на библиотеката на сензора в примери. може също да се стартира чрез сляпо късо свързване на конектора „HD“ към маса за 7+ секунди.
    Разбира се, не е нужно да правите това навън на студа... можете просто да напълните бутилка с чист въздух със сензор вътре и да я затворите. Калибрирането отнема поне 20 минути.
    По подразбиране сензорът идва с включено автоматично калибриране, което се случва всеки ден и ако сензорът се използва в непроветрено помещение, тогава това калибриране бързо премества стойностите извън нормата, така че трябва да бъде деактивирано.
    Документация.

  • Автоматично калибриране на сензора CO2 е деактивиран в скицата!

  • Ако имате Сензорът BME280 не работи, най-вероятно адресът му е друг. Проектът използва библиотеката Adafruit_BME280, която няма отделна функция за промяна на адреса, така че адресът се задава ръчно във файла на библиотеката Adafruit_BME280.h почти в самото начало на файла ( е в папката Adafruit_BME280 в папката на вашите библиотеки, трябва да сте го инсталирали там), моят модул имаше адрес 0x76. Как мога да разбера адреса на моя модул BME280? Има специална скица, наречена i2c скенер. Можете да го търсите в Google, можете. Мигате тази скица, отваряте порта и получавате списък с адреси на устройства, свързани към i2c шината. За да не ви пречат другите модули, можете да ги деактивирате и да оставите само BME280. Посочваме получения адрес в библиотеката, запазваме файла и зареждаме фърмуера на метеорологичния часовник. всички!

  • Ако часовникът е бавен, проблемът най-вероятно е в захранването на веригата. Ако проблемът не изчезне, когато смените захранването с по-добро, прикрепете кондензатор за захранване на RTC модула (запоен директно върху платката при VCC и GND): винаги керамичен, 0,1-1 µF (маркировка 103 или 104 , вижте таблицата за маркиране). Можете също така да предоставите електролит (6.3V, 47-100 uF)

Настройки на фърмуера

#define RESET_CLOCK 0 // нулиране на часовника, докато фърмуерът се зарежда (за модул с несменяема батерия). Не забравяйте да поставите 0 и да го флашнете отново! #define SENS_TIME 30000 // време за актуализиране на показанията на сензора на екрана, милисекунди #define LED_MODE 0 // RGB LED тип: 0 - основен катод, 1 - основен анод #define LED_BRIGHT 255 // CO2 LED яркост (0 - 255) # define BLUE_YELLOW 1 // жълт цвят вместо син (1 да, 0 не), но поради характеристиките на връзката жълтото не е толкова ярко #define DISP_MODE 1 // показване в горния десен ъгъл: 0 - година, 1 - ден от седмицата, 2 - секунди #define WEEK_LANG 1 // език на деня от седмицата: 0 - английски, 1 - руски (транслитериран) #define DEBUG 0 // показване на дневника за инициализация на сензора при стартиране #define PRESSURE 1 // 0 - графика на налягането, 1 - графика на прогнозата за дъжд (вместо налягане). Не забравяйте да коригирате границите на графиката // ограниченията за показване на графиките #define TEMP_MIN 15 #define TEMP_MAX 35 #define HUM_MIN 0 #define HUM_MAX 100 #define PRESS_MIN -100 #define PRESS_MAX 100 #define CO2_MIN 300 #define CO2_MAX 2000

Един ден, докато се разхождах из града, видях нов магазин за радиоелектроника, който отвори врати. След като влязох в него, намерих голям брой щитове за Arduino, защото... Имах Arduino Uno и Arduino Nano у дома и веднага дойде идеята да играя с предаватели на сигнал от разстояние. Реших да купя най-евтиния предавател и приемник на 433 MHz:

Предавател на сигнал.


Приемник на сигнал.

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

Предавателят има следните характеристики:
1. Модел: MX-FS - 03V
2. Обхват (в зависимост от наличието на блокиращи обекти): 20-200 метра
3. Работно напрежение: 3.5 -12V
4. Размери на модула: 19 * 19 мм
5. Модулация на сигнала: AM
6. Мощност на предавателя: 10mW
7. Честота: 433MHz
8. Необходима дължина на външна антена: 25см
9. Лесен за свързване (само три проводника): DATA ; VCC ; Земята.

Характеристики на приемния модул:
1. Работно напрежение: DC 5V
2. Ток: 4mA
3. Работна честота: 433.92 MHz
4. Чувствителност: - 105dB
5. Размери на модула: 30 * 14 * 7 мм
6. Необходимо външна антена: 32 см.

Интернет казва, че обхватът на предаване на информация при 2Kb/sec може да достигне до 150m. Не съм го проверявал сам, но в двустаен апартамент се приема навсякъде.

Хардуер за домашна метеорологична станция

След няколко експеримента реших да свържа сензор за температура, влажност и предавател към Arduino Nano.


Температурният сензор DS18D20 е свързан към Arduino, както следва:

1) GND към минуса на микроконтролера.
2) DQ през изтеглящ резистор към земята и към щифт D2 на Arduino
3) Vdd до +5V.

Предавателният модул MX-FS - 03V се захранва от 5 волта, изходът за данни (ADATA) е свързан към пин D13.

Свързан с Arduino Uno LCD дисплейи барометър BMP085.


Схема на свързване към Arduino Uno

Приемникът на сигнала е свързан към щифт D10.

Модул BMP085 - цифров датчик за атмосферно налягане. Сензорът ви позволява да измервате температура, налягане и надморска височина над морското равнище. Интерфейс за свързване: I2C. Захранващо напрежение на сензора 1.8-3.6 V

Модулът е свързан към Arduino по същия начин като другите I2C устройства:

  • VCC - VCC (3,3 V);
  • GND - GND;
  • SCL - към аналогов пин 5;
  • SDA - към аналогов пин 4.
  • Много ниска цена
  • Захранване и I/O 3-5 V
  • Определяне на влажност 20-80% с 5% точност
  • Откриване на температура 0-50 градуса. с 2% точност
  • Честота на запитване не повече от 1 Hz (не повече от веднъж на 1 секунда)
  • Размери 15.5mm x 12mm x 5.5mm
  • 4 пина с 0,1" разстояние между щифтовете

DHT има 4 пина:

  1. Vcc (захранване 3-5V)
  2. Data out - Извеждане на данни
  3. Не се използва
  4. генерал

Свързва се към D8 на Arduino.

Софтуерна част от домашна метеорологична станция

Предавателният модул измерва и предава температурата на всеки 10 минути.

По-долу е програмата:

/* Версия на скица 1.0 Изпращайте температурата на всеки 10 минути. */ #include #include #include #define ONE_WIRE_BUS 2 //Пин за свързване на сензора Dallas OneWire oneWire(ONE_WIRE_BUS); Далас Температурни сензори (&oneWire); DeviceAddress insideThermometer; void setup(void) ( //Serial.begin(9600); vw_set_ptt_inverted(true); // Необходимо за DR3100 vw_setup(2000); // Задаване на скоростта на предаване (bit/s) сензори.begin(); if (! сензори .getAddress(insideThermometer, 0)); sensors.setResolution(insideThermometer, 9); : "); //Serial.println(tempC); //Формиране на данни за изпращане int number = tempC; char symbol = "c"; //Сервисен символ за определяне, че това е сензор String strMsg = "z"; strMsg += " "; strMsg.toCharArray(msg, 255); void loop(int j=0 j<= 6; j++) { sensors.requestTemperatures(); printTemperature(insideThermometer); delay(600000); } } //Определение адреса void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16); //Serial.print("0"); //Serial.print(deviceAddress[i], HEX); } }

Приемащото устройство получава данни, измерва налягането и температурата в помещението и ги предава на дисплея.

#include #include LiquidCrystal lcd(12, 10, 5, 4, 3, 2); #включете сензор dht11; #define DHT11PIN 8 #include #include BMP085 dps = BMP085(); дълга температура = 0, налягане = 0, надморска височина = 0; void setup() ( Serial.begin(9600); vw_set_ptt_inverted(true); // Необходимо за DR3100 vw_setup(2000); // Задаване на скоростта на приемане vw_rx_start(); // Стартиране на мониторинг на излъчване lcd.begin(16, 2) ; Wire.begin(); //lcd.setCursor(0)); // Буфер за съобщението uint8_MESSAGE_LEN ; // Дължина на буфера if (vw_get_message(buf, &buflen)) // Ако съобщението е получено ( // Започнете анализиране на int i; // Ако съобщението не е адресирано до нас, излезте if (buf != "z") ( return; ) char command = buf; // Командата е с индекс 2 // Числовият параметър започва с индекс 4 i = 4; // Тъй като предаването е символ по символ; тогава трябва да конвертирате набора от знаци в числото while (buf[i] != " ") ( number *= 10; number += buf[i] - "0"; i++; ) dps.getPressure(&Pressure); (&Altitude); getTemperature(&Temperature); //Serial.print(command);

lcd.print("T=");
lcd.setCursor(2,0);
lcd.print(номер);
lcd.setCursor(5,0);
lcd.print("P=");

lcd.print(Налягане/133,3);

lcd.print("mmH");

lcd.setCursor(0,1); lcd.print("T="); lcd.print(температура*0,1); lcd.print("H="); lcd.print(sensor.humidity);lcd.home();// забавяне (2000);
int chk = sensor.read(DHT11PIN);
превключвател (chk) ( case DHTLIB_OK: //Serial.println("OK"); break; case DHTLIB_ERROR_CHECKSUM: //Serial.println("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: //Serial.println("Time out" грешка"); прекъсване; по подразбиране: //Serial.println("Неизвестна грешка"); прекъсване; ) ) )

P.S. В бъдеще смятам да добавя следното:

1 - сензор за влажност към предавателя, преработете алгоритъма за предаване на данни
- сензор за измерване на скоростта и посоката на вятъра.

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

1 - сензор за влажност към предавателя, преработете алгоритъма за предаване на данни
- прехвърлете приемника и предавателя на отделен микроконтролер.

По-долу има снимка на случилото се:

1 - сензор за влажност към предавателя, преработете алгоритъма за предаване на данни
Списък на радиоелементитеНаименование1 - сензор за влажност към предавателя, преработете алгоритъма за предаване на данни
Тип
превключвател (chk) ( case DHTLIB_OK: //Serial.println("OK"); break; case DHTLIB_ERROR_CHECKSUM: //Serial.println("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: //Serial.println("Time out" грешка"); прекъсване; по подразбиране: //Serial.println("Неизвестна грешка"); прекъсване; ) ) )

Ардуино Уно

1 - сензор за влажност към предавателя, преработете алгоритъма за предаване на данни
Тример резистор 1 - сензор за влажност към предавателя, преработете алгоритъма за предаване на данни
- прехвърлете приемника и предавателя на отделен микроконтролер.


 


Прочетете:



Pandao промо кодове за точки

Pandao промо кодове за точки

Понякога, когато се опитате да влезете в официалния магазин на цифровия гигант, Play Market пише за активиране на промоционален код. За да получите цялостна...

Инсталиране на допълнителна RAM памет

Инсталиране на допълнителна RAM памет

„Принципите на естественото запаметяване се основават на нервни връзки, които се създават в мозъка“, казва Олга Зимнякова, невролог...

Какво да направите, ако слушалките не възпроизвеждат звук на лаптоп

Какво да направите, ако слушалките не възпроизвеждат звук на лаптоп

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

Справочник диоди Мощни изправителни диоди 220V

Справочник диоди Мощни изправителни диоди 220V

Основната цел на токоизправителните диоди е преобразуване на напрежението. Но това не е единствената област на приложение на тези полупроводникови...

feed-image RSS