Съдържание:

SilverLight: Екологичен монитор на базата на Arduino за сървърни помещения: 3 стъпки (със снимки)
SilverLight: Екологичен монитор на базата на Arduino за сървърни помещения: 3 стъпки (със снимки)

Видео: SilverLight: Екологичен монитор на базата на Arduino за сървърни помещения: 3 стъпки (със снимки)

Видео: SilverLight: Екологичен монитор на базата на Arduino за сървърни помещения: 3 стъпки (със снимки)
Видео: «Интернет вещей», Джеймс Уиттакер из Microsoft 2024, Ноември
Anonim
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи
SilverLight: Ардуино мониторинг на околната среда за сървърни стаи

Веднъж получих задачата да потърся екологична сонда за наблюдение на температурата в сървърната стая на моята компания. Първата ми идея беше: защо просто не използвате Raspberry PI и DHT сензор, той може да бъде настроен за по -малко от час, включително инсталацията на операционната система. За това получих студения отговор от страна на началници със завързани очи, че няма да направим това, защото това ще струва повече в работно време, за да го настроите, отколкото закупуването на устройство. Това, че трябваше да приемам тесногръди хора като тази за част от живота си, беше едно и поръчах някакъв боклук от корпоративен клас EATON от Ebay и му се обадих, но в този момент реших, че за моята собствена сървърна стая ще изградя изцяло Arduino с отворен код базирано устройство, което ще бъде много по -добро от това, което току -що поръчах.

Този проект е с кодово име SilverLight, не ме питайте откъде получавам тези имена:) Току -що погледнах лъскавата половин акрилна кутия и реших с това име, няма нищо общо с продукта microhoof, за който разбрах след това.

Стъпка 1: Дизайн на хардуера

Хардуерен дизайн
Хардуерен дизайн
Хардуерен дизайн
Хардуерен дизайн
Хардуерен дизайн
Хардуерен дизайн

Преглед на търговския хардуер.

Добре, така че дори не започвам с чиято страхотна идея беше да сложа монитор за околната среда в прозорци, но очевидно има пазар за него, така че нека видим какво могат да направят:

Устройство за мониторинг на околната среда СЪВМЕСТИМОСТ

10/100Mb Network-MS, PXGUPS, PXGPDP и PXGMS.

10/100Mb ConnectUPS-X, ConnectUPS-BD и ConnectUPS-E с FW V3.01 и по-нови. РАЗМЕРИ (ДХШХВ)

2.26 x 1.48 x 1.15 (инча) 57.6 x 37.6 x 29.3 (мм) ТЕГЛО

1,19 унции (34 г)

Това е много полезна информация, нали? Не се притеснявайте, защото те не могат да направят много. За дори да започнете, вашият UPS ще трябва да има друга скъпа добавъчна карта за това, която го свързва със сензора за околната среда, който купувате отделно, обикновено със стандартен кабел CAT5 (дори не се опитвайте да включите нищо в този порт, защото няма нищо стандартно за това). Те твърдят, че устройството се нуждае от 10 минути, за да "загрее", което в действителност е било часове и след като се е случило voila, то се е появило в бавно актуализиращия се Java интерфейс и имаме температура и влажност. Настройването на условия, базирани на сигнали, беше лесно от този момент, но на кого му пука, нека изградим нещо по -добро.

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

  • Температурен/влажен/топлинен индекс
  • LPG, дим, алкохол, пропан, водород, метан и въглероден окис във въздуха (MQ2)
  • Слънчева чувствителност (свети ли светлината в сървърната стая?)
  • Сензор за движение PIR (дори можете автоматично да включвате/изключвате светлините отсега нататък благодарение на сензора за движение, когато някой влезе в стаята)

Всички тези данни са добре показани на LCD екран, като същевременно са предадени на компютър (Orange PI Zero) за по -нататъшна обработка и сигнали. Въпреки че би било възможно да свържете цифрови сензори като DHT и цифровия щифт на MQ2 директно към OrangePI, винаги предпочитам да използвам специални микро за тези задачи и когато трябва да актуализирате LCD и да правите други ниски нива нещо Arduino е просто непобедимо и може надеждно да работи без прекъсване в продължение на много години (всъщност нито един Arduino, който работи 24/7, все още не е успял при мен). OrangePI с неговите недостатъци (нека си признаем, че е 10 $ компютър) като неизползваем за голямо натоварване, без bsd поддръжка, интегриран wifi е подут и т.н. може лесно да се справи с малко работно натоварване като вземане на показанията на сензора през сериен (USB) и тяхната обработка.

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

  • Arduino PRO Micro
  • LCD екран 2x16 знака RGB
  • AC-DC изолиращ превключвател захранващ модул 220V до 5V HLK-5M05 (те са много добри за проекти Arduino/ESP), това е версията 5V/5W!
  • 2x300ohm резистори
  • 2x легла (червено/зелено)
  • PIR сензор за движение
  • MQ2 сензор
  • DHT22
  • LDR
  • 2X10Kohm резистор
  • Звуков сигнал
  • Orange PI Zero
  • мини USB кабел за данни

Дори не си направих труда да направя печатна платка за тази просто използвана обикновена платка, защото компонентите могат просто да бъдат свързани към Arduino (вижте приложените снимки):

-DHT22 ще изисква 10K издърпване към VCC (цифрово)

-LDR ще изисква 10K изтегляне към GND (аналогов)

-MQ2 може да бъде директно свързан към всеки аналогов щифт (аналогов) <предпочитайте да използвате аналогов, защото защо не и когато имаме MCU с аналогови щифтове, където можем да получим точната стойност, вместо да регулираме някакъв пот на гърба на устройството, за да получим ВИСОК или НИЗКО от това, поради залепването в моя дизайн, което така или иначе е недостъпно. Проверете:

-PIR може да бъде директно свързан към всеки пин (цифров)

-LCD: може да се управлява с 4 пина, може да бъде свързан към всеки щифт (цифров) ще се нуждае от +2 RS/E (цифров)

-Buzzer: може да бъде директно свързан към всякакви щифтове на Arduino (цифрови)

Развора, който използвах, може да се види в кода. Свързването на всичко заедно, след като това е доста направо, можете също да ги направите един по един, уверете се, че 1 сензор работи перфектно, след което преминете към следващия, всичко, което можете да сбъркате, е погрешно свързване на проводници на грешни места (например смяна на vcc /gnd за сензор, досега това никога не убиваше нито едно от моите устройства). Това, което бих отбелязал тук, че имаше твърде много VCC и GND, натрупани за мен, не можах да ги изцедя през клемна лента, така че ги запоявах всички.

Също така за DHT не забравяйте от другите ми проекти: ако поставите DHT библиотеката в кода си и DHT сензорът не е свързан или е свързан грешен DHT (напр. 11, дефинирани в кода, който използвате 22), това може да доведе до програмата да виси завинаги в началото.

Относно сензорите за откриване на движение PIR, както можете да видите на снимката ми, има много фалшиви фалшификати от тях, всъщност дори би ми било трудно да си купя истински от Ebay. Фалшификатите работят също толкова добре, дори в дългосрочен план, но имат огледална верига, което води до обръщане на щифтовете + и - също лесно се разпознават от: идват със синя печатна платка, а не обичайното зелено, липсват етикетите за потметрите Имах късмет да намеря истински в кутията си, в противен случай промяната на позицията ще покрие двата светодиода за мен. Открих, че и двата саксии, завъртяни до средата, ми вършат работа. Това ще ви осигури достатъчно дълъг обхват за усещане, също когато има движение, цифровият крак ще бъде задържан във ВИСОКА позиция за около минута, така че не е нужно да правите кода за това. На фалшификатите е лесно да се определи коя страна е - и + просто погледнете съответните крака за електролитни капачки, свързани към щифтовете.

За рязане на кутията използвах диамантена глава dremel (която беше прекалено много, но работеше чудесно) и обикновена пробивна машина. Тези разпределителни кутии са лесни за работа и въпреки че не ми харесва лепенето, нямах под ръка винтове и болтове, когато изграждах това, така че взех сделка за залепване на неща заедно (които също могат лесно да се затоплят и разглобяват по -късно с помощта на същия лепило без филм в него).

Стъпка 2: Софтуерен дизайн

Софтуерен дизайн
Софтуерен дизайн
Софтуерен дизайн
Софтуерен дизайн

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

Този проект използва еднопосочна комуникация от Arduino-> OrangePI, няма изпълнени никакви команди. Въпреки че това би било напълно възможно да го направя, както го направих в един от другите ми проекти, където компютърът може да изпрати LCD_PRINT1 или LCD_PRINT2, за да презапише един ред на LCD екрана със собствено съобщение (напр.: ip адрес, ъптайм, системна дата, използване на процесора), площта на екрана е толкова малка за показване на данни от 3 сензора, че дори не се притесних. Стойностите на SOL и SMK могат да достигнат до 4 цифри 0000-1023, като вече заемат 8 ценни знака на екрана.

С LCD дисплея можете да забележите малък трик в кода, че след всяка измерена стойност се прилага отпечатване на бели пространства (""), след което премествам курсора на фиксирани позиции, за да поставя новите икони и данни. Те са налице, защото LCD дисплеят не е толкова умен за разбиране на числата, той просто извлича това, което получава и например, ако имате слънчева стойност 525, която внезапно намали до 3, тогава ще покаже 325, оставяйки старите боклуци на екрана там.

Контролен код C, работещ на OrangePI, регистриращ данните за околната среда и изпращащ имейл сигнали, когато е необходимо.

OrangePI работи с Armbian (който по време на писането се основава на Debian Stretch). Ще включа това в софтуерната част, тъй като беше проблем с рж какво реши. Ето средния разход на енергия на устройството:

0,17 A - само Arduino + сензори

0,5-0,62 A - OrangePI зареждане

0,31 A - Оранжев PI в празен ход

0,29 A - Orange PI изключен (не може да се изключи, няма ACPI или нещо подобно)

0,60 A - Стрес тест 100% използване на процесора на 4 ядра

Имах този OrangePI в кутия от дълго време. Със старото ядро устройството източи толкова много ток (както каза измервателният уред достигна максимум около 0,63 А), което той захранващ блок вероятно не можеше да осигури, че просто не се зарежда, процесът на зареждане се заби и аз светнах 2 -те Ethernet светодиода постоянно и не прави нищо.

Сега това е някак досадно, тъй като HLK-5M05 твърди, че може да направи 5W на 5V, което го прави в състояние да осигури 1 Amp, но с тези устройства, идващи от Китай, просто никога не знаете, пикът на 0.63 A беше много по-нисък от номиналния стойност. Затова провеждах прости тестове за рестартиране, от 10 рестартиране OrangePI щеше да се стартира само два пъти успешно, което почти ме накара да го изхвърля от проекта, тъй като не харесвам бъгито непоследователно поведение в схемите. Затова започнах да се разхождам, може би има начин да се намали консумацията на енергия по време на зареждане от софтуера (тъй като тогава това беше само проблем) и намерих някаква статия, която говори за промяна на script.bin, но това беше за Orange PI PC и файловете липсваха от хранилището, така че каквото и да е в краен случай, направих магическото "подходящо надграждане", за да надстроя фърмуера, ядрото и всичко останало, надявайки се, че ще се изтощи по -малко и устройството ще може да се стартира и:

Linux silverlight 4.14.18-sunxi #24 SMP Fri Feb 9 16:24:32 CET 2018 armv7l GNU/Linux

Linux silverlight 4.19.62-sunxi #5.92 SMP ср. 31 юли 22:07:23 CEST 2019 armv7l GNU/Linux

Проработи! Хвърлянето на хардуер към софтуерен проблем обикновено са мързеливите разработчици на java, но в този случай решихме хардуерен проблем със софтуера, какъв голям успех. Направих още около 20 теста за рестартиране, устройството стартира всеки отделен случай. Все пак бих отбелязал, че пренапрежението при включване на Opi (свързване/изключване) е толкова голямо, че ще нулира Arduino всеки момент (обикновено рестартиране просто ще трепне върху LCD, но няма да причини допълнителни проблеми), но този проблем остава скрит, тъй като 2 ще бъдат заредени заедно.

Разгледах и модулите на ядрото:

usb_f_acm u_serial g_serial libcomposite xradio_wlan mac80211 Лима sun8i_codec_analog snd_soc_simple_card gpu_sched sun8i_adda_pr_regmap sun4i_i2s snd_soc_simple_card_utils ТТМ sun4i_gpadc_iio snd_soc_core cfg80211 snd_pcm_dmaengine industrialio snd_pcm snd_timer Snd sun8i_ths soundcore cpufreq_dt uio_pdrv_genirq uio thermal_sys pwrseq_simple

Какво наистина ни трябва от тези? Добре, pwr и термичната може да са полезни, но звукът, серийният порт, wifi (вече счупен hw), не се нуждаем от всичко това, могат да бъдат включени в черния списък. Също така по -късно ще създам персонализирано ядро само с необходимите модули.

Това, от което се нуждаем и не се зарежда по подразбиране, е CDC ACM, за да комуникира с Arduino, активирайте го с:

ехо "cdc-acm" >> /etc /modules

След това вече можете да тествате връзката с:

screen /dev /ttyACM0 9600

Трябва да виждате данните за състоянието, които се изпращат на всеки 10 секунди.

Сигнали и наблюдение

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

- Температурата надвишава 30 градуса

- Влажността надхвърля 70 % (не е здравословно за сървърите)

- Открито движение в стаята (това може да бъде досадно, ако продължавате да ходите в сървърната си стая)

- Открит дим или газ (предупрежденията над 100 могат да бъдат взети на сериозно, играл съм с този сензор и той се включва за много неща, например създаването на дим до сензора с поялник доведе до малко над 50, докато пушенето на цигара следващото o той нарасна до 500, дори откри газ от обикновен дезодорант от далеч)

За съхраняване на исторически данни не се притеснявах да разработвам инструмент, защото защо да преоткриваме колелото, когато имаме отлични рамки за наблюдение там. Ще покажа пример за това как да интегрирам това в моя личен фаворит, Zabbix:

apt-get install zabbix-agent

Добавете в края на: /etc/zabbix/zabbix_agentd.conf

UserParameter = silverlight.hum, глава -1 /dev/shm/silverlight-zbx.log | awk -F "," '{print $ 1}'

UserParameter = silverlight.tmp, глава -1 /dev/shm/silverlight-zbx.log | awk -F "," '{печат $ 2}' UserParameter = silverlight.sol, глава -1 /dev/shm/silverlight-zbx.log | awk -F "," '{печат $ 4}' UserParameter = silverlight.mot, глава -1 /dev/shm/silverlight-zbx.log | awk -F "," '{печат $ 5}' UserParameter = silverlight.smk, глава -1 /dev/shm/silverlight-zbx.log | awk -F "," '{печат $ 6}'

Изпълнението на zabbix_agentd -p трябва да върне сега правилните стойности:

silverlight.hum [t | 41]

silverlight.tmp [t | 23] silverlight.sol [t | 144] silverlight.mot [t | 0] silverlight.smk [t | 19]

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

[SILVERLIGHT] Получени данни в 2019-09-10 23:36:08 => Влажност: 44, Температура: 22, Висока: 25, Слънчева: 0, Движение: 0, Дим: 21

[SILVERLIGHT] Получени данни в 2019-09-10 23:36:18 => Влажност: 44, Температура: 22, Висока: 25, Слънчева: 0, Движение: 0, Дим: 21 [SILVERLIGHT] Получени данни в 2019-09 -10 23:36:29 => Влажност: 44, Температура: 22, Висока: 25, Слънчева: 0, Движение: 0, Дим: 22 [СРЕБЪРНА СВЕТЛИНА] Данни, получени в 2019-09-10 23:36:39 => Влажност: 44, Температура: 22, Висока: 25, Слънчева: 0, Движение: 0, Дим: 21

Второто:

void logger2 (char *текст) {

FILE *f = fopen ("/dev/shm/silverlight-zbx.log", "w"); if (f == NULL) {printf ("Грешка при отваряне на лог файла на паметта! / n"); връщане; } fprintf (f, "%s", текст); fclose (f); връщане; }

Това ще постави 1 линеен регистър в паметта (премахване на ненужните rw операции на sdcard), който винаги ще бъде презаписан следващия път. Този дневник ще съдържа само 6 -те колони с данни и няма времева маркировка, той е лесно четим за Zabbix.

Като последен бонус: как да програмирате Arduino директно от OrangePI, така че да не се налага да ходите всеки път до устройството и да включвате вашия лаптоп.

Има 2 начина:

-Лесен начин: Инсталирайте пълна Arduino IDE и библиотеките използват някакъв отдалечен работен плот като X11 с препращане, Xrdp, Xvnc, Nxserver и т.н.

-Труден начин: Инсталирайте Arduino IDE и използвайте командния ред

Този път ще направим по -трудния начин, тъй като не обичам да инсталирам X11 на сървъри. За това ще ви трябват 6 компонента:

1, Arduino IDE за 32 -битова ARM ->

2, Python serial-> apt-get install python-serial

3, проект на Arduino Makefile -> git clone

4, DHT библиотека

5, Дефиниции на дъска Sparkfun

6, SilverLight.ino, основен код

За да улесня, събрах файловете, необходими за последните 4 точки (sketchbook.tgz), така че ще ви трябват само първите 2

Първо, най -добре е да създадете обикновен потребител, който има rw достъп до USB порта:

добавка сребро

usermod -a -G диалозно сребро

SCP sketchbook.tgz към устройството в новосъздадената домашна директория на потребителя и го извлечете точно там:

cd /home /сребро

tar xvzf sketchbook.tgz

За да разберете малко какво се случва под капака, когато използвате графичната IDE:

Работният процес на изграждане на скица на Arduino при използване на Arduino IDE е описан на уебсайта на Arduino https://www.arduino.cc/en/Hacking/BuildProcess и по -подробно тук: https://www.arduino.cc/ bg/Hacking/BuildProcess

Като цяло стандартният процес на изграждане на Arduino е:

Комбинирайте.ino файловете в основния файл на скица. Трансформация на основния скичен файл: добавете #include оператора; създаване на декларации за функции (прототипи) на всички функции в основния файл на скица; добавете съдържанието на файла main.cxx на целта към основния файл на скица. Компилирайте кода за обектни файлове. Свържете обектните файлове с.hex файл, готов за качването му в Arduino.

Има някои малки разлики между стандартния процес на изграждане на Arduino и процеса на изграждане с помощта на Arduino-Makefile:

Поддържа се само един.ino файл. Декларациите за функции не се създават автоматично във файла.ino. Потребителят трябва да се погрижи за създаването на правилните декларации за функции.

Сърцето на процеса на изграждане е Makefile. Не се притеснявайте, всичко е подготвено за вас, малко по -сложно е при компилирането по този начин за нестандартни платки като серията SparkFun.

BOARD_TAG = промикро

ALTERNATE_CORE = SparkFun BOARD_SUB = 16MHzatmega32U4 ARDUINO_PORT =/dev/ttyACM0 USER_LIB_PATH =/home/silver/sketchbook/libraries ARDUINO_DIR = /opt/arduino-1.8.9 include /home/silver.rketch

И всичко, което трябва да въведете, е: make upload (който първо ще изгради.hex файловете, след което използва avrdude, за да ги качи), ще завърши с нещо като:

mkdir -p build-promicro-16MHzatmega32U4

направи нулиране make [1]: Въвеждане на директория '/home/silver/sketchbook'/home/silver/sketchbook/Arduino-Makefile/bin/ard-reset-arduino --caterina/dev/ttyACM0 make [1]: Напускане на директорията ' /home/silver/sketchbook 'make do_upload make [1]: Въвеждане на директория'/home/silver/sketchbook '/opt/arduino-1.8.9/hardware/tools/avr/bin/avrdude -q -V -p atmega32u4 - C /opt/arduino-1.8.9/hardware/tools/avr/etc/avrdude.conf -D -c avr109 -b 57600 -P/dev/ttyACM0 / -U флаш: w: build -promicro -16MHzatmega32U4/sketchbook. hex: i Свързване с програмист:. Намерен програмист: Id = "CATERIN"; тип = S Версия на софтуера = 1.0; Не е дадена версия на хардуера. Програмистът поддържа увеличение на автоматичното добавяне. Програмистът поддържа достъп до буферирана памет с размер на буфера = 128 байта. Програмистът поддържа следните устройства: Код на устройството: 0x44 avrdude: AVR устройството е инициализирано и готово да приеме инструкции avrdude: Подпис на устройството = 0x1e9587 (вероятно m32u4) avrdude: четене на входящ файл "build-promicro-16MHzatmega32U4/sketchbook.hex" avrdude: писане на флаш (11580 байта): avrdude: 11580 байта флаш написан avrdude: safemode: Предпазители OK (E: CB, H: D8, L: FF) avrdude направено. Благодаря ти.

Е, благодаря avrdude, а сега нашият Arduino е нулиран и програмиран с новия код, това, което можете просто да редактирате с vi или любимия си редактор локално, няма нужда от никакви IDE. Бих отбелязал, че трябва да затворите както контролната програма на C, екрана или нещо друго, което има достъп до arduino, докато качвате, в противен случай портът ще се върне като /dev /ttyACM1 след нулиране.

Стъпка 3: Затваряне и списък с задачи

Списък на затваряне и задачи
Списък на затваряне и задачи
Списък на затваряне и задачи
Списък на затваряне и задачи
Списък на затваряне и задачи
Списък на затваряне и задачи

Въпреки че създадох тази кутия за сензори за околната среда за сървърни помещения, можете да я използвате за химия/електронни лаборатории, складове, обикновени стаи и всичко друго. И да, тъй като използва TCP/IP, това е IoT устройство, G трябваше да го сложа и в заглавието, за да стане по -предприемчив:)

Можете лесно да промените както хардуера, така и софтуера, за да можете автоматично да включвате и осветлението в стаята. Обърнете внимание на другия ми проект: Shadow of phoenix как работи това за контрол на светлината, имате под ръка целия хардуер, за да правите едно и също нещо (той използва таймери за задържане, за да запали светлините, докато в рамките на период от време, ако отново има движение, таймерът ще бъде повдигнат).

С OrangePI, работещ с пълен стек Armbian, възможностите са неограничени, можете да създадете локален уеб интерфейс, написан от нулата във php, за да показвате исторически данни на графики. Не е ли вече по -добре, че имате изцяло устройство с отворен код, наблюдаващо вашата сървърна стая, какво можете да се гордеете с изграждането, ако мислите така, изградете го сами!

Препоръчано: