Indholdsfortegnelse:

SilverLight: Arduino -baseret miljømonitor til serverrum: 3 trin (med billeder)
SilverLight: Arduino -baseret miljømonitor til serverrum: 3 trin (med billeder)

Video: SilverLight: Arduino -baseret miljømonitor til serverrum: 3 trin (med billeder)

Video: SilverLight: Arduino -baseret miljømonitor til serverrum: 3 trin (med billeder)
Video: Arduino with Silverlight 2024, Juli
Anonim
SilverLight: Arduino -baseret miljømonitor til serverrum
SilverLight: Arduino -baseret miljømonitor til serverrum
SilverLight: Arduino -baseret miljømonitor til serverrum
SilverLight: Arduino -baseret miljømonitor til serverrum
SilverLight: Arduino -baseret miljømonitor til serverrum
SilverLight: Arduino -baseret miljømonitor til serverrum
SilverLight: Arduino -baseret miljømonitor til serverrum
SilverLight: Arduino -baseret miljømonitor til serverrum

Engang fik jeg til opgave at lede efter en miljøsonde til overvågning af temperaturen i min virksomheds serverrum. Min første idé var: hvorfor ikke bare bruge en Raspberry PI og en DHT -sensor, den kan konfigureres på mindre end en time inklusive OS -installationen. Til dette fik jeg den kolde reaktion fra bind for øjnene, at jeg ikke ville gøre det, fordi det ville koste mere i arbejdstiden at oprette det end at købe en enhed. At skulle acceptere snæversynede mennesker som dette i en del af mit liv var en ting, og jeg bestilte noget EATON -junk i enterprise grade fra Ebay og kalder det, men jeg besluttede i det øjeblik, at jeg til mit eget serverrum vil bygge en fuldstændig Open Source Arduino baseret enhed, som vil være meget bedre end hvad jeg lige har bestilt.

Dette projekt er kodenavnet SilverLight, spørg mig ikke, hvor jeg får disse navne fra:) Jeg kiggede lige på den skinnende halv akrylboks og besluttede mig med dette navn, det har ikke noget at gøre med mikrohoof -produktet, hvad jeg fandt ud af efter.

Trin 1: Hardware Design

Hardware design
Hardware design
Hardware design
Hardware design
Hardware design
Hardware design

Kommerciel hardwareoversigt.

Ok, så jeg kommer ikke engang i gang med hvis gode idé var at sætte en miljømonitor inde i en ups, men der er naturligvis et marked for det, så lad os se, hvad disse kan gøre:

Miljøovervågningsenhed KOMPATIBILITET

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

10/100Mb ConnectUPS-X, ConnectUPS-BD og ConnectUPS-E med FW V3.01 og højere. DIMENSIONER (LXBXH)

2,26 x 1,48 x 1,15 (tommer) 57,6 x 37,6 x 29,3 (mm) VÆGT

1,19 oz (34 g)

Det er meget nyttig information ikke sandt? Ingen bekymringer, for de kan ikke gøre meget. For selv at komme i gang skal din UPS have et andet dyrt tilføjelseskort til dette, der forbinder dette med den miljøsensor, du køber separat, normalt med et standard CAT5-kabel (prøv ikke engang at tilslutte noget til den port, fordi der ikke er noget standard om det). De hævder, at enheden har brug for 10 minutter for at "varme op", der i virkeligheden var timer, og når den først voila, viste den sig i deres langsomt opdaterede java -grænseflade, og vi har temperatur og fugtighed. Det var let at oprette advarselsbaserede forhold fra dette tidspunkt, men hvem bekymrer sig, lad os bygge noget bedre.

Dette projekt er en samling af flere af mine projekter: Natalia vejrstation, Shadow of Phoenix. Boksen er i stand til at overvåge følgende miljøbegrænsninger:

  • Temperatur/fugtighed/varmeindeks
  • LPG, røg, alkohol, propan, hydrogen, metan og kuliltekoncentrationer i luften (MQ2)
  • Solfølsomhed (lyser lyset i serverrummet?)
  • Motion PIR -sensor (du kan endda tænde/slukke lysene automatisk fra nu takket være bevægelsessensoren, når nogen kommer ind i rummet)

Alle disse data blev pænt vist på en LCD -skærm, mens de også blev videresendt til en computer (Orange PI Zero) for yderligere behandling og advarsler. Selvom det ville være muligt at tilslutte digitale sensorer som DHT og den digitale pin på MQ2 direkte til OrangePI, foretrækker jeg altid at bruge dedikerede mikroer til disse opgaver, og når du også skal opdatere LCD'en og lave andet lavt niveau ting Arduino er bare uovertruffen og kan pålideligt køre non-stop i mange år (faktisk ikke en eneste Arduino, der kører 24/7 mislykkedes på mig endnu). OrangePI med sine mangler (lad os se det er en computer på 10 $) som ubrugelig til stor arbejdsbyrde, ingen bsd -understøttelse, integreret wifi er oppustet osv. Kan let håndtere lille arbejdsbyrde som at tage sensoraflæsninger gennem seriel (USB) og behandle dem.

Dette er et meget simpelt projekt hardware, som kræver følgende komponenter:

  • Arduino PRO Micro
  • LCD -skærm 2x16 karakter RGB
  • AC-DC isolerende switch strømmodul 220V til 5V HLK-5M05 (disse er meget gode til Arduino/ESP projekter), dette er 5V/5W versionen!
  • 2x300ohm modstande
  • 2xleds (rød/grøn)
  • PIR bevægelsessensor
  • MQ2 sensor
  • DHT22
  • LDR
  • 2X10Kohm modstand
  • Summer
  • Orange PI Zero
  • mini USB datakabel

Jeg gider ikke engang lave et PCB til dette, jeg brugte bare almindeligt brødbræt, fordi komponenterne simpelthen kan tilsluttes Arduino (se billeder vedhæftet):

-DHT22 kræver en 10K pullup til VCC (digital)

-LDR kræver en 10K pulldown til GND (analog)

-MQ2 kan tilsluttes direkte til en hvilken som helst analog pin (analog) <foretrækker at bruge analog, hvorfor ikke, når vi har en MCU med analoge ben, hvor vi kan få den nøjagtige værdi i stedet for at justere en gryde på bagsiden af enheden for at få HIGH eller LOW ud af det, på grund af limningen i mit design, der alligevel er utilgængelig. Tjek:

-PIR kan tilsluttes direkte til en hvilken som helst pin (digital)

-LCD: kan drives med 4 ben, kan tilsluttes en hvilken som helst pin (digital) skal bruge +2 RS/E (digital)

-Buzzer: kan tilsluttes direkte til alle Arduino -pins (digital)

Den pinout, jeg brugte, kan ses i koden. Tilslutning af alt sammen efter dette er ret lige fremad, du kan også gøre dem en efter en, sørg for at 1 sensor fungerer perfekt, og fortsæt derefter til den næste, alt hvad du kan få galt er ved en fejl at forbinde ledninger til forkerte steder (f.eks. Bytte vcc /gnd for en sensor, indtil nu har dette aldrig dræbt nogen af mine enheder). Hvad jeg vil bemærke her, at der var stablet for mange VCC og GND'er til mig, jeg kunne ikke presse dem gennem en terminalstik, så jeg lodde dem alle.

Også om DHT'erne glem ikke fra mine andre projekter: Hvis du sætter DHT -biblioteket i din kode, og DHT -sensoren ikke er tilsluttet eller forkert er DHT tilsluttet (f.eks. 11 defineret i kode, du bruger 22), der kan føre til programmet at hænge for evigt i starten.

Om PIR -bevægelsesdetekteringssensorerne, som du kan se på mit billede, er der masser af falske forfalskninger af disse, faktisk ville jeg endda have svært ved at købe en ægte fra Ebay. Forfalskningerne fungerer lige så godt, selv i det lange løb, men de har deres kredsløb spejlet, hvilket får + og - benene til at vende, også disse er lette at genkende fra: kommer med blå pcb ikke den sædvanlige grønne, mangler etiketterne til potterne. Jeg var heldig at finde en ægte i min kasse, ellers ville ændringen af positionen dække de 2 lysdioder til mig. Jeg har fundet ud af, at begge gryder skruet til midtvejs virker for mig. Dette vil give dig lang nok rækkevidde til at registrere, også når der er bevægelse, vil det digitale ben blive holdt i HØJ position i cirka et minut, så du behøver ikke at gøre op i koden for dette. På forfalskningerne er det let at afgøre, hvilken side der er - og + bare se på de tilsvarende ben for de elektrolytiske hætter, der er forbundet til stifterne.

Til skæring af kassen brugte jeg diamant dremelhoved (som var en overkill men fungerede fantastisk) og almindelig boremaskine. Disse forbindelsesbokse er lette at arbejde med, og selvom jeg ikke kan lide at lime, havde jeg ikke skruer og bolte ved hånden, da jeg byggede dette, så købte at lime ting sammen (som også let kan opvarmes og skilles ad senere ved at bruge samme limpistol uden filament i den).

Trin 2: Software Design

Software Design
Software Design
Software Design
Software Design

Arduino -koden er også enkel, den trækker dybest set alle sensoraflæsninger i begyndelsen af hver sløjfe. Tænder lysdioderne, hvis der er bevægelse eller røg og afspiller også en alarmlyd på summeren, hvis der er røg (dette er den eneste blokeringskode, så jeg gjorde det kort), viser derefter dataene på LCD -skærmen og sender dem til sidst over pc'en med en 10 sekunders holdetid for ikke at oversvømme havnen.

Dette projekt bruger envejskommunikation fra Arduino-> OrangePI, der er ingen kommandoer af nogen art implementeret. Selvom dette ville være helt muligt at gøre det, som jeg gjorde det i et af mine andre projekter, hvor computeren kan sende LCD_PRINT1 eller LCD_PRINT2 for at overskrive en linje på LCD -skærmen med sin egen besked (f.eks. Ip -adresse, oppetid, systemdato, cpu -brug), skærmområdet er så lille til visning af data fra 3 sensorer, at jeg ikke engang gad. SOL- og SMK-værdierne kan begge gå op til 4 cifre 0000-1023 og optage allerede 8 værdifulde tegn på skærmen.

Med LCD'et kan du bemærke et lille trick i koden, at der efter hver måleværdi påføres et tryk med hvide mellemrum (""), så flytter jeg markøren til faste positioner for at placere de nye ikoner og data. Disse er der, fordi LCD -skærmen ikke er så smart at forstå tal, den tegner bare, hvad den får, og for eksempel hvis du havde en solværdi på 525, som pludselig faldt til 3, så viser den 325 og efterlader det gamle uønsket på skærmen der.

En C -kontrolkode, der kører på OrangePI og logger miljødata og sender e -mail -advarsler, når det er nødvendigt.

OrangePI kører Armbian (som i skrivende stund er baseret på Debian Stretch). Jeg vil inkludere dette i softwaredelen om, at det var et problem, hvad det løste. Her er enhedens gennemsnitlige strømafløb:

0,17 A - kun Arduino + sensorer

0.5-0.62 A - OrangePI -opstart

0,31 A - Orange PI i tomgang

0.29 A - Orange PI slukket (kan ikke rigtig lukke det ned, det har ikke ACPI eller lignende)

0,60 A - Stresstest 100% CPU -brug på 4 kerner

Jeg har haft denne OrangePI i en æske siden længe. Med den gamle kerne tappede enheden så meget strøm (som måleren sagde toppede omkring 0,63 A), hvad PSU'en sandsynligvis ikke kunne give, at den simpelthen ikke kunne starte, opstartsprocessen sad fast, og jeg fik de 2 ethernet -lysdioder til at lyse op konstant og gør ingenting.

Nu er det lidt irriterende, da HLK-5M05 hævder, at det kan gøre 5W på 5V, hvilket gør det i stand til at levere 1 ampere, men da disse enheder kommer ud af Kina, ved du bare aldrig, at 0,63 A-toppen var langt lavere end den nominelle maks. værdi. Så jeg kørte simple genstartstest ned, fra 10 genstarter ville OrangePI kun starte to gange med succes, hvilket næsten fik mig til at smide det ud af projektet, da jeg ikke kan lide buggy inkonsekvent adfærd i kredsløb. Så jeg begyndte at google rundt, måske er der en måde at sænke strømforbruget ved opstart fra software (da det kun var et problem dengang) og fandt en artikel, der talte om tilpasning af script.bin, men det var til Orange PI -pc'en og filer manglede fra lageret, så uanset som sidste udvej har jeg foretaget den magiske "passende opgradering" for at opgradere firmwaren, kernen og alt andet, i håb om at det vil dræne mindre, og enheden kan starte op og:

Linux silverlight 4.14.18-sunxi #24 SMP fre 9. februar 16:24:32 CET 2018 armv7l GNU/Linux

Linux silverlight 4.19.62-sunxi #5.92 SMP Onsdag 31. juli 22:07:23 CEST 2019 armv7l GNU/Linux

Det virkede! At kaste hardware til et softwareproblem er normalt de dovne java -udviklere, der skal gå, men i dette tilfælde har vi løst et hardwareproblem med software, hvilken stor succes. Jeg har gjort som 20 flere genstartstest, enheden startede hver eneste sag. Jeg vil stadig bemærke, at strømstødet fra at tænde Opi (tilslutte/afbryde) er så stort, at det vil nulstille Arduino til enhver tid (en simpel genstart vil bare flimre på LCD'en, men forårsager ingen yderligere problemer), men dette problem er stadig skjult, da de 2 vil blive startet sammen.

Jeg har også kigget på kernemodulerne:

usb_f_acm u_serial g_serial libcomposite xradio_wlan mac80211 lima sun8i_codec_analog snd_soc_simple_card gpu_sched sun8i_adda_pr_regmap sun4i_i2s snd_soc_simple_card_utils ttm 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

Hvad har vi egentlig brug for fra disse? Ok pwr og termisk kan være nyttig, men lyd, seriel port, wifi (allerede brudt hw) vi har ikke brug for alle disse kan blive sortlistet. Jeg vil også oprette en brugerdefineret kerne med kun de nødvendige moduler senere.

Det, vi har brug for, og som ikke er indlæst som standard, er CDC ACM til at kommunikere med Arduino, aktivere det med:

ekko "cdc-acm" >> /etc /modules

Herefter kan du allerede teste forbindelsen med:

skærm /dev /ttyACM0 9600

Du skal se statusdataene blive sendt hvert 10. sekund.

Advarsler og overvågning

Fra advarsler indsætter jeg lige system () opkald i C -kontrolkoden, der modtager dataene fra seriel, så der kræves ingen eksterne værktøjer. Nogle eksempler på advarsler:

- Temperaturen går over 30 C

- Fugtighed går over 70 % (ikke sundt for serverne)

- Bevægelse registreret i rummet (dette kan være irriterende, hvis du fortsætter i dit serverrum)

- Røg eller gas opdaget (advarsler over 100 kan tages alvorligt, jeg har leget med denne sensor, og den tænder for mange ting, for eksempel skabte røg ved siden af sensoren med loddejern lidt over 50, mens rygning af cigaret næste o det steg op til 500, det opdagede endda gas fra almindelig deodorant langt væk)

For at beholde historiske data gad jeg ikke udvikle et værktøj, hvorfor skulle jeg genopfinde hjulet, når vi fik fremragende overvågningsrammer derude. Jeg vil vise et eksempel på, hvordan jeg kan integrere dette i min personlige favorit, Zabbix:

apt-get installere zabbix-agent

Tilføj til slutningen af: /etc/zabbix/zabbix_agentd.conf

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

UserParameter = silverlight.tmp, head -1 /dev/shm/silverlight-zbx.log | awk -F "," '{print $ 2}' UserParameter = silverlight.sol, head -1 /dev/shm/silverlight-zbx.log | awk -F "," '{print $ 4}' UserParameter = silverlight.mot, head -1 /dev/shm/silverlight-zbx.log | awk -F "," '{print $ 5}' UserParameter = silverlight.smk, head -1 /dev/shm/silverlight-zbx.log | awk -F "," '{print $ 6}'

Kørsel af zabbix_agentd -p skulle nu returnere de korrekte værdier:

silverlight.hum [t | 41]

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

Varmeindekset, jeg indsamler det, men ser ikke nogen praktisk brug af det, så det er bare logget. I C -kontrolkoden har jeg implementeret 2 logfunktioner, den første logger alle data i brugervenligt format:

[SILVERLIGHT] Data modtaget den 2019-09-10 23:36:08 => Fugtighed: 44, Temp: 22, Hej: 25, Solar: 0, Bevægelse: 0, Røg: 21

[SILVERLIGHT] Data modtaget 2019-09-10 23:36:18 => Fugtighed: 44, Temp: 22, Hej: 25, Solar: 0, Motion: 0, Røg: 21 [SILVERLIGHT] Data modtaget 2019-09 -10 23:36:29 => Fugtighed: 44, Temp: 22, Hej: 25, Solar: 0, Bevægelse: 0, Røg: 22 [SILVERLIGHT] Data modtaget den 2019-09-10 23:36:39 => Fugtighed: 44, Temp: 22, Hej: 25, Solar: 0, Bevægelse: 0, Røg: 21

Den anden:

void logger2 (tegn *tekst) {

FIL *f = fopen ("/dev/shm/silverlight-zbx.log", "w"); hvis (f == NULL) {printf ("Fejl ved åbning af hukommelseslogfil! / n"); Vend tilbage; } fprintf (f, "%s", tekst); fclose (f); Vend tilbage; }

Dette vil sætte en 1 liner log i hukommelsen (eliminere unødvendige rw -operationer på sdcard), som altid vil blive overskrevet næste gang. Denne log indeholder kun de 6 datakolonner og ingen tidsstempel, den er let læselig for Zabbix.

Som en sidste bonus: Sådan programmeres Arduino direkte fra OrangePI, så du ikke behøver at gå op til enheden hver gang og tilslutte din bærbare computer.

Der er 2 måder:

-Let måde: Installer fuld Arduino IDE, og biblioteker bruger et fjernt skrivebord som X11 med videresendelse, Xrdp, Xvnc, Nxserver osv.

-Hård måde: Installer Arduino IDE og brug kommandolinjen

Vi vil gøre den hårde måde denne gang, da jeg ikke er glad for at installere X11 på servere. Til dette skal du bruge 6 komponenter:

1, Arduino IDE til ARM 32 bit ->

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

3, Arduino Makefile -projekt -> git -klon

4, DHT -bibliotek

5, Sparkfun board definitioner

6, SilverLight.ino, hovedkode

For at gøre det lettere har jeg samlet de nødvendige filer til de sidste 4 punkter (sketchbook.tgz), så du skal kun bruge de første 2

Først er det bedst at oprette en almindelig bruger, der har rw -adgang til USB -porten:

adduser sølv

usermod -a -G dialout sølv

SCP sketchbook.tgz til enheden i den nyoprettede brugers hjemmemappe og udtræk den lige der:

cd /hjem /sølv

tjære xvzf skitsebog.tgz

For at forstå lidt, hvad der foregår under emhætten, når du bruger den grafiske IDE:

Opbygningsarbejdsgangen til at bygge en Arduino -skitse ved brug af Arduino IDE er beskrevet på Arduino -webstedet https://www.arduino.cc/en/Hacking/BuildProcess og mere detaljeret her: https://www.arduino.cc/ da/Hacking/BuildProcess

Generelt er standard Arduino -byggeprocessen:

Kombiner.ino -filer i hovedskitsefilen. Transformation af hovedskitsefilen: tilføj #include -sætningen; oprette funktionserklæringer (prototyper) af alle funktioner i hovedskitsefilen; tilføj indholdet af main.cxx -filen i målet til hovedskitsfilen. Kompilér koden til objektfiler. Link objektfilerne til at producere en.hex -fil, der er klar til at uploade den til Arduino.

Der er nogle små forskelle mellem Arduino standard byggeprocessen og byggeprocessen ved hjælp af Arduino-Makefile:

Kun en.ino -fil understøttes. Funktionserklæringer oprettes ikke automatisk i.ino -filen. Brugeren skal sørge for at oprette de korrekte funktionserklæringer.

Hjertet i byggeprocessen er Makefile. Bare rolig, alt er forberedt til dig, det er lidt mere kompliceret, når du kompilerer på denne måde til ikke -standardbrædder som SparkFun -serien.

BOARD_TAG = promicro

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/sketchbook/Ar

Og alt hvad du behøver at skrive er a: lav upload (som først bygger.hex -filerne og derefter bruger avrdude til at uploade dem), vil det ende med noget i retning af:

mkdir -p build-promicro-16MHzatmega32U4

lav nulstil [1]: Indtastning af bibliotek '/home/silver/sketchbook'/home/silver/sketchbook/Arduino-Makefile/bin/ard-reset-arduino --caterina/dev/ttyACM0 make [1]: Leaving directory ' /home/silver/sketchbook 'make do_upload make [1]: Entering directory'/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 flash: w: build -promicro -16MHzatmega32U4/sketchbook. hex: i Tilslutning til programmør:. Fundet programmør: Id = "CATERIN"; type = S Softwareversion = 1.0; Der er ikke givet nogen hardwareversion. Programmereren understøtter automatisk tilføjelse. Programmereren understøtter bufferlageret hukommelsesadgang med bufferstørrelse = 128 bytes. Programmereren understøtter følgende enheder: Enhedskode: 0x44 avrdude: AVR-enhed initialiseret og klar til at acceptere instruktioner avrdude: Enheds signatur = 0x1e9587 (sandsynligvis m32u4) avrdude: læser inputfil "build-promicro-16MHzatmega32U4/sketchbook.hex" avrdude: skriver flash (11580 bytes): avrdude: 11580 bytes med flash skrevet avrdude: safemode: Sikringer OK (E: CB, H: D8, L: FF) avrdude udført. Tak skal du have.

Tja tak avrdude, og nu er vores Arduino nulstillet og programmeret med den nye kode, hvad du bare kan redigere med vi eller din foretrukne editor lokalt, ingen grund til IDE'er. Jeg vil bemærke, at du skal lukke både C -kontrolprogrammet, skærmen eller andet, der får adgang til arduinoen, mens du uploader, ellers kommer porten tilbage som /dev /ttyACM1 efter nulstilling.

Trin 3: Lukning og Todo -liste

Lukning og Todo -liste
Lukning og Todo -liste
Lukning og Todo -liste
Lukning og Todo -liste
Lukning og Todo -liste
Lukning og Todo -liste

Selvom jeg har oprettet denne miljøsensorboks til serverrum, kan du bruge den til kemi/elektroniske laboratorier, lagre, almindelige lokaler og alt andet. Og ja, da det bruger TCP/IP, er det en IoT -enhed, G jeg skulle også have sat det til titlen for at gøre det mere driftigt:)

Du kan nemt ændre både hardware og software for også at kunne tænde lyset i rummet automatisk. Tag et kig på mit andet projekt: Shadow of phoenix, hvordan fungerer det for lysstyring, du har al hardware til rådighed til at gøre det samme (det bruger hold -timere til at holde lysene tændt, så længe der blev registreret bevægelse inden for en tidsperiode, hvis der er bevægelse igen, vil en timer blive stødt op).

Når OrangePI kører en full stack Armbian, er mulighederne ubegrænsede, du kan oprette en lokal webgrænseflade skrevet fra bunden i php for at vise historiske data på grafer. Er det ikke allerede bedre, at du har en fuldstændig Open Source -enhed, der overvåger dit serverrum, hvad du kan være stolt af at bygge, hvis du synes det, så byg det selv!

Anbefalede: