Kazalo:

Monitor strojne opreme računalnika: 6 korakov (s slikami)
Monitor strojne opreme računalnika: 6 korakov (s slikami)

Video: Monitor strojne opreme računalnika: 6 korakov (s slikami)

Video: Monitor strojne opreme računalnika: 6 korakov (s slikami)
Video: Топ 5 скрытых полезных программ Windows 10 2024, November
Anonim
Monitor strojne opreme računalnika
Monitor strojne opreme računalnika
Monitor strojne opreme računalnika
Monitor strojne opreme računalnika
Monitor strojne opreme računalnika
Monitor strojne opreme računalnika

Zdravo vsi. Ta projekt sem začel iz dveh razlogov: pred kratkim sem v računalniku zgradil vodno hladilno zanko in potreboval nekaj, da bi vizualno zapolnil nekaj prostora v ohišju, želel pa sem, da so bile temperature in druga statistika preverjene s hitrim pregledom, ne da bi OSD -jevi zapolnili vogal zaslona. Seveda obstajajo že pripravljene rešitve za to, vendar večina preprosto ne ustreza mojemu feng shuiju. Zato sem se namesto, da bi v ohišje postavil 7 -palčni zaslon HDMI s kablom, ki štrli iz ohišja in vedno vklopljeno opravilno vrstico Windows, sem se odločil zgraditi svojo igračo.

Ker nisem inženir niti programer, ampak samo fant s spajkalnikom in nekaj samoučnega znanja, to ne bo le navodilo po korakih, poskušal se bom osredotočiti tudi na problem reševanje in raziskovalni vidiki, ki so me pripeljali do te gradnje.

IZJAVA O ODGOVORNOSTI: VSE MOJE DELO SE DELI KOT USTVARJALNO SKUPNO ATRIBUTION-SHAREALIKE 4.0. VZDRŽEVAL sem VEČ PRIMEROV PO INTERNETU, ČE PREPOZNAJETE NEKAJ DELA TEGA DELA KOT VAŠEGA, PROSIMO, DA SE ZA PRISPIS KONTAKTIRATE. NI NAMENJEN KRŠITEV, Z veseljem bom odpravil vsako napako. HVALA VAM

DRUGI ODGOVOR: MOJE DELO SE DELI TAKOJ. Nisem odgovoren za kakršno koli škodo, ki izhaja iz uporabe katere koli kodeksa ali navodil

Zaloge

  • Arduino Nano (ali UNO, če želite)
  • TFT zaslon. V mojem primeru je to 3,5 -palčni zaslon, združljiv z ILI9486 / ILI9488L.
  • Temperatura Senso. V tem primeru analogni temperaturni senzor TMP36.
  • Kabli, žice, dupont konektorji (več o tem kasneje)
  • (neobvezno) Ogledna plošča za testiranje
  • (neobvezno, vendar priporočljivo) majhna plošča

1. korak: Študija izvedljivosti (nekako)

Kot sem rekel, nisem hotel in zaslon HDMI se mi je zataknil v ohišju računalnika, zato sem, zavit v svojo iznajdljivost, začel iskati podobne ideje po internetu. In to je nasvet številka ena: Google je vaš prijatelj (no, vsak dostojen iskalnik …). Živimo v svetu, kjer pravzaprav nič ni več izvirno, toda namesto da bi na ta stavek gledali z negativnim pomenom, bi to lahko uporabili v svojo korist: kar koli želite ustvariti, je verjetno nekje nekje že naredil kaj podobnega, zato če ne vem, kako uresničiti idejo, obstaja velika verjetnost, da boste tam našli koristne informacije. Pri iskanju po internetu je pogosto koristno upoštevati dva pravila:

  1. ne odlašajte po strani 3 ali 4 katerega koli iskanja, skoraj vedno je izguba časa. Namesto tega
  2. spremenite iskalne izraze, samo preoblikujte vprašanje z drugega vidika (npr.: "arduino temperature sensor" -> "read temperature with arduino").

Pravzaprav je tam polno dobrih projektov in priznam, da sem prve dni preučeval večino teh projektov. Toda nobeden od njih ni bil pripravljen iti name, saj sem hotel nekaj, kar bi ustrezalo mojim potrebam.

Ker sem moral narediti nekaj po meri, sem se odločil, da se osredotočim na pravo strojno opremo za uporabo in programsko stran pustim za pozneje, ker je programsko opremo vedno mogoče ustvariti in prilagoditi potrebam, na drugi strani pa strojno opremo zavezujem k razpoložljivosti in lastnosti.

Želel sem nekaj, kar temelji na Arduinu, ker sem ga že imel, dobro dokumentirano in njegova skupnost cveti. Tu ni težav, kot sem že rekel ob obilju informacij.

Želel sem, da je zaslon dovolj velik, da ga lahko jasno vidite od nekaj metrov stran in bi ustrezal videzu moje postave, to je izključilo vse nokia in LCD znakovne zaslone. Tudi OLED ne pridejo v poštev, saj so majhni. Zato sem se odločil za barvni zaslon TFT. Zaslon na dotik ni potreben, saj bo v notranjosti računalnika. Našel sem 3,5 -palčnega, že zasnovanega za Arduino, ~ 15 € na Amazonu. Dovolj dobro.

Zdaj, ko je bila določena strojna oprema, sem se osredotočil na programsko opremo.

Skoraj vsi projekti, na strani Arduino, so si precej podobni. Kodo za prikaz in komunikacijski protokol moram samo prilagoditi za zbiranje podatkov iz strežniške aplikacije. Na strani računalnika je večina projektov temeljila na C, C ++, C#, python, večina projektov pa je ponujala le vmesnik CLI ali strežnik, podoben storitvi Windows. Namesto tega sem hotel grafični vmesnik. V operacijskem sistemu Windows nikoli nisem uporabljal jezika, podobnega C, pustimo pri miru stavbo grafičnega vmesnika. Pred 15 leti pa sem se naučil nekaj Visual Basica, zato sem ga preizkusil in brezplačno različico Visual Studio prenesel iz Microsofta.

Po študiju številnih podobnih projektov sem se odločil za uporabo OpenHardwareMonitorja, da bi dobil vse podatke o strojni opremi in RivaTuner za FPS, ker so ti brezplačni in dovolj dokumentirani.

2. korak: Preizkus strojne opreme

Testiranje strojne opreme
Testiranje strojne opreme
Testiranje strojne opreme
Testiranje strojne opreme
Testiranje strojne opreme
Testiranje strojne opreme

Preden vklopite spajkalnik in za vedno in v času in prostoru pritrdite katero koli elektronsko komponento, je dobra praksa izdelati preskusni prototip (nasvet številka dva). Na srečo ni več leto 1995. Dandanes je precej enostavno urediti precej zapletene prototipe tudi na majhnih ploščah. V mojem primeru je zaslon TFT padel v izhodu za Arduino Uno, zato sem ga spustil na svoj Arduino uno in se začel igrati s knjižnicami primerov ter prebrati referenčne priročnike, da bi razumel načela delovanja in omejitve.

Na tej točki sem ugotovil, kako risati črte in bitne slike ter pisati besedilo, zato sem se začel ukvarjati s kodiranjem programske opreme, vse sekundarne stvari sem pustil za pozneje, vendar bom tukaj vključil temperaturni senzor.

Na neki točki navzdol sem imel na zaslonu prazno mesto, vendar noben podatek iz senzorjev osebnega računalnika ni bil resnično uporaben, zato sem se odločil, da v ohišje postavim temperaturni senzor za temperaturo okolice. Zaslon poje skoraj vse zatiče Arduino, na srečo analogni pin A5 ni uporabljen, zato sem privezal TMP36. Preizkusil sem celo DHT22, vendar je za to aplikacijo preveč.

Obstaja veliko primerov za TMP36, enega sem pravkar skopiral v funkcijo. TMP35 ima 3 zatiče, Vin gre na 5V, GND gre na maso in Out gre na pin A5. Med Vin in GND sem postavil 0,1uF keramični kondenzator. Pravijo, da je potrebno. Verjetno je v tem primeru neuporaben, toda … Za boljše odčitavanje temperature sem celo nastavil analogno referenčno napetost Arduino na pin 3.3v. V tem primeru še vedno neuporabno, vendar …

3. korak: Arduino koda

Prosimo, prenesite in odprite priloženo kodo Arduino, da sledite razlagi v tem koraku. Poskušal sem v kodi pustiti dovolj komentarjev, da so jasni, ne da bi jih preplavili.

Zagotovo boste potrebovali knjižnici MCUFRIEND_kbv in Adafruit GFX. Oboje je enostavno namestiti iz Arduino IDE.

Program lahko razdelimo na naslednje razdelke:

  1. opredeliti in razglasiti vse globalne spremenljivke in druge potrebne stvari
  2. inicializirajte zaslon, nastavite zunanjo referenco in narišite uporabniški vmesnik (vse to vsebuje funkcija setup (), saj se mora zagnati samo enkrat)
  3. preberite podatke iz serijske povezave in jih razporedite v matriko (funkcija loop ())
  4. branje podatkov zunanjega senzorja temperature (funkcija readExtTemp ())
  5. tiskanje podatkov na zaslon (funkcija printData ())
  6. nazaj na zanko

ODDELEK 1: Izjave in opredelitve

V začetnem razdelku kode sem uporabil veliko kazalcev in nizov, zato sem lahko v krajših časih stisnil veliko ponavljajočih se vrstic kode za pisanje ciklov FOR. Ja, len sem. Kot vidite, sem deklariral kazalec in ga napolnil z vsemi slikami iz datoteke pics.h. To je omogočilo trik cikla FOR za risanje vseh ikon.

2. ODDELEK: setup (), večinoma risba uporabniškega vmesnika

Odločil sem se za privzeto pisavo, saj nima preglednega ozadja, zato omogoča pisanje nove vrstice besedila na staro, ne da bi jo morali izbrisati. Če bi uporabili drugo pisavo, bi pred pisanjem nove vrstice na staro besedilo narisali črni kvadrat, kar bi povzročilo neprijeten utripajoč učinek.

Po nekaj testiranjih sem prišel do dobrega kompromisa med berljivostjo in prikazanimi informacijami. Zaslon sem razdelil v dva stolpca in 5 vrstic. V levem stolpcu so podatki o CPE -ju in matični plošči, vključno z imenom CPU -ja od zgoraj navzdol, temperaturo, obremenitvijo, porabo RAM -a in temperaturo matične plošče. Desni, namenjen grafičnemu procesorju, vključuje ime, temperaturo, obremenitev grafičnega procesorja, števec okvirjev na sekundo in zunanji temperaturni senzor.

Kot lahko vidite v kodi, sem se odločil, da se izognem uporabi slik na kartici SD, saj se nalaga zelo počasi. Odločil sem se, da vse ikone vključim v pomnilnik PROGMEM in narišem črte z namenskim ukazom drawLine (). to je uporabno tudi za manjše popravke uporabniškega vmesnika.

V slabem poskusu, da bi uporabniškemu vmesniku dal videz globine, sem narisal dve stvari (črte, pravokotnike, slike) z različnimi barvami in z majhnim odmikom. Žal to ni rezultat, na katerega sem upal, vendar bo uspel.

Zadnje vrstice te funkcije so za tiskanje nadomestnih mest na TFT, dokler Arduino ne prejme podatkov.

ODDELEK 3: glavna zanka (), pridobivanje podatkov in oblikovanje

Tu se zgodi čarobnost: podatki se prejemajo skozi serijo, se dodelijo pravilni spremenljivki in nato natisnejo. Da bi vse to dosegli v najmanjšem številu vrstic, sem uporabil ukaz za stikalo in cikel for.

Komunikacijski protokol, s katerim sem prišel, je razdeljen na dva dela: začetno izvajanje po rokovanju in dejanski del podatkov.

Rokovanje je potrebno za izvajanje funkcije samodejne povezave, ko se zažene računalniški program. Gre takole:

  • Računalnik pošlje niz za rokovanje (v tem primeru je samo "*****;")
  • Arduino pošlje nazaj odgovor

Enostavno peasy.

Podatkovni del izgleda tako: "i: xxx, yyy, zzz, aaa,;" pomen je:

"i" je indeks, v kodi sem ga poimenoval componentSelector. Vrednosti "i" so:

  • i = 0 - IMENA. Naslednje vrednosti so imena, prikazana v prvi vrstici na zaslonu. To bo poslano in natisnjeno na zaslonu le enkrat, saj je danes precej težko zamenjati procesor in grafični procesor …
  • i = 1 - PODATKI 1. STOLPCA - naslednje vrednosti so prikazane v levi polovici zaslona od zgoraj navzdol. V mojem primeru: temp procesorja, obremenitev procesorja, poraba RAM -a, temp matične plošče.
  • i = 2 - PODATKI 2. STOLPKA - kot zgoraj, vendar za desno polovico zaslona
  • i = 3 - UKAZ TISKANJA. V tem primeru bo surovi serijski niz samo "3:;" ker drugi podatki niso potrebni.

"xxx, yyy, zzz, aaa" so dejanske vrednosti. arduino jih bere kot nize, celotno oblikovanje pa opravi računalniški program. Za i = 0 so te vrednosti po 14 znakov za imena strojne opreme. Za i = 1 ali 2 bodo to le trije znaki, dovolj za prikaz temperature in sličic na sekundo. Seveda ":", "," in ";" znaki so v teh poljih prepovedani.

":" Je ločilo med componentSelector in vrednostmi, "," je ločevalnik vrednosti in ";" je konec vrstice

Ko prejema podatke, jih bo Arduino shranil kot niz do oznake »;« simbol, potem bo poiskal simbol ":" in ga uporabil za pridobitev vrednosti componentSelecor. To bo uporabljeno za funkcijo stikala za izbiro pravilnega postopka. Uporablja se tudi za izbiro pravilnega indeksa v matriki allData.

Po tem bo Arduino poiskal simbol "," in nadaljeval z vnosom vrednosti v matriko allData.

Če je componentSelector 0, bo zastavica printName nastavljena na true. Če je componentSelector 3, se pokličeta funkciji readExtTemp () in printData ().

Oddelek 4: funkcija readExtTemp ()

Tukaj ni veliko za povedati, 32 -krat se odčita s pin A5 in vrednost temperature prikaže kot niz. Jaz sem pri upornikih, zato uporabljam Celzius. Vse, kar je nad 100 ° C, ni pravilno, zato bo na zaslonu prikazano kot "---". Za vse, kar je manj kot 100 ° C, bo oblikovano tako, da bo na zaslonu dovolj prostora za 3 znake. Senzor je mogoče odstraniti in znova vstaviti in ne bo prikazana nobena čudna vrednost.

Oddelek 5: funkcija printData ()

Kot vedno sem za cikle zaporedno tiskal stvari na zaslonu. Če je zastavica printNames res, bo natisnila imena, zastavo nastavila na false in nadaljevala.

Oddelek 6: nazaj na zanko

Dovolj samoumevno, bi rekel …

pics.h datoteko

Tu sem shranil vse ikone za uporabniški vmesnik. Možno je uporabiti bralnik kartic SD, vključen v zaslon, vendar mi je v Arduinu ostalo dovolj pomnilnika za črno -bele ikone.

Oblikoval sem jih z urejevalnikom ikon Junior, saj je brezplačen in zelo dober za slikanje majhnih ikon s piksli. Moral sem pretvoriti datoteke ikon (shranjene kot PNG) s spletnim orodjem SKAARHOJ.

4. korak: Koda Visual Basic

Koda Visual Basic
Koda Visual Basic

Tukaj je koda VB

OBVESTILO: prvič delim projekt Visual Studio. Pravkar sem kopiral projektne mape in jih stisnil. Če to ne deluje, mi sporočite boljši način za izmenjavo tovrstnih projektov. Hvala vam

Kot sem že rekel, ne morem ustvariti grafičnega vmesnika v C# ali drugih jezikih, vendar sem imel v Visual Basicu nekaj časa nazaj izkušnje. Prenesel sem izdajo Visual Studio Community (seveda je brezplačna) z okoljem Visual Basic. No, moral sem ugotoviti veliko stvari, saj sem nazadnje uporabljal VB različico 2005 ali tako … Toda internet je kot običajno poln dobrih namigov.

Ko smo ugotovili nekaj vmesniških stvari, je novejša različica dejansko lažja in prilagodljivejša od stare.

Za ta program sem želel nekaj z obrazcem Windows, ki pa je popolnoma obvladljivo iz ikone v sistemski vrstici. Obrazec sem dejansko uporabil skoraj samo za namene odpravljanja napak, saj rad vnesem polja z besedilom in sezname za branje izhodnih vrednosti funkcij in nekaj ukaznih gumbov za njihovo testiranje.

"Končni" program je le ikona v pladnju z pojavnim menijem, ki prikazuje različne kontrolnike in glavni obrazec z dvema seznama, ki prikazujeta podatke, poslane v Arduino.

Izvedel sem funkcijo samodejne povezave in funkcijo "start at boot". Več o tem kasneje.

Glavni program je le prilagoditev različnih primerov in delčkov kode z uporabo knjižnice OpenHardwareMonitor in knjižnice v skupni rabi pomnilnika RivaTuner.

Program gre takole:

  • pridobite podatke iz knjižnic OpenHardwareMonitor in RTSSSm
  • pripravi in formatira vse podatke za komunikacijski protokol
  • pošljite podatke v Arduino
  • sperite in ponovite

seveda se imena strojne opreme preberejo ob zagonu in pošljejo le enkrat.

Števec FPS se vklopi le, če uporabljate združljivo aplikacijo (npr. Igro, program za 3D modeliranje itd.), Sicer bo oznaka mesta "---" poslana na zaslon.

Ne bom podrobno razlagal, kako pridobiti vrednosti iz knjižnic, saj so dobro dokumentirane na internetu in nekoliko razumljive iz kode. Želim samo povedati o težavah pri doseganju temperature matične plošče v knjižnici OpenHardwareMonitor (od zdaj naprej OHMonitor, ker je življenje prekratko). Imam Asus Maximus VIII Gene MoBo, ki je na matični plošči opremljen s temperaturnimi senzorji fu ** ton, vendar jih OHMonitor imenuje kot temperaturni senzor #1, #2… #n IN nikjer ni določena lokacija temperature. Zato sem moral namestiti grozno programsko opremo Asus AI Suite, kjer imajo senzorji vsaj NAMENA in primerjajo različne temperature med obema programoma. Videti je, da je moj splošni temperaturni senzor na matični plošči številka 2 za OHMonitor, zato sem, kot vidite v podmesniku Timer1_tick pod vsebino MoBo, moral poiskati ime senzorja, ki vsebuje niz " #2", da dobim pravilno odčitavanje.

TL; DR: sami boste morali poskrbeti za ustrezne temperaturne senzorje matične plošče. Ostalo je verjetno dobro.

Vendar je to samo različica 1, nameravam ta pripomoček namestiti v svoj drugi računalnik, zato bom verjetno uporabil način za izbiro senzorjev in morda celo preoblikoval vmesnik na Arduinu na poti.

Funkcija samodejne povezave

Ta funkcija je pravzaprav preprosta: če računalnik ni povezan z Arduinom, se vsaka x milisekunda (na podlagi Timer1) pokliče ta funkcija. Poskuša se povezati z vsemi vrati COM v računalniku, če je uspešen, pošlje niz za rokovanje "*****;". Če je odgovor "R", je priključena pravilna naprava in sledite običajnemu postopku. V nasprotnem primeru poskusi z naslednjimi vrati COM.

Kot lahko vidite, je pri tej funkciji veliko izjem. To je zato, ker sem želel, da se v celoti vključi in predvaja, brez napak. Če obravnavam izjeme, mi je uspelo prezreti popolno odsotnost zunanje naprave, napravo pa lahko celo vklopim in vklopim, kadar koli želim, ne da bi pri tem nastala napaka pri prekinitvi.

Funkcija Začni ob zagonu

Želel sem, da se program zažene ob zagonu. Precej enostavno, pravite. Povejte v ustrezno mapo, pravite. Vendar ne. Zaradi knjižnic OHMonitor in RTSS za zbiranje informacij potrebujemo raven izvajanja skrbnika. To pomeni popolnoma moteč zaslon UAC ob vsakem zagonu te aplikacije. Ni šans. Zato sem prilagodil scenarij, ki ga je naredil Matthew Wai (povezava tukaj), da bi dosegel tihi začetek ob zagonu. Pravkar sem kopiral skript v datoteko Resources1, razdeljen na več delov, nato pa uvedel podprogram, ki ustvari (ali odstrani) datoteko opravil Windows, prilagojeno trenutni lokaciji izvršljivega programa in podobnim.

Ikona sistemskega pladnja

Zahvaljujoč objektom NotifyIcon in ContextMenu sem lahko implementiral enostaven in maščoben način za nadzor aplikacije. Z desno miškino tipko kliknite ikono pladnja in prikaže se meni. Obstajajo te ocene:

  • Začni ob zagonu: potrdite in počistite polje, da omogočite ali onemogočite funkcijo zagona ob zagonu
  • Samodejna povezava: enako kot zgoraj, vendar upravlja funkcijo samodejne povezave
  • Connect/Disconnect: upravlja povezavo. Ne deluje, če je omogočena samodejna povezava
  • Čas osveževanja: prikaže spustni podmeni, čas osveževanja lahko izberete od 1 do deset sekund
  • Povečaj: odpre glavno okno. Enako kot dvojni klik na ikono
  • Izhod: samoumevno

Sestavljanje programske opreme

Za pripravo programske opreme boste verjetno morali prenesti in dodati sklic na knjižnice, ki niso vključene v kodo.

Knjižnico OpenHardwareMonitor najdete tukaj. Prenesti morate programsko opremo, odpreti datoteko zip in kopirati datoteko OpenHardwareMonitorLib. DLL v mapo projekta.

Tukaj je povezava do knjižnice RTSSharedMemoryNET, ki jo morate prenesti in prevesti za svojo arhitekturo, nato pa kopirati RTSS [TL; DR] moryNET. DLL v mapo vašega projekta.

Zdaj morate v svojo kodo dodati referenco, navodila tukaj

Ne pozabite sestaviti strežniških projektov RTSS [TL; DR] moryNET in PCHwMon za isto arhitekturo.

Vključil sem že pripravljen namestitveni program, tako da lahko namestite celotno stvar, ne da bi se morali poigrati z Visual Basic. Preveden je za x86, deloval bo tako na arhitekturah x86 kot x64. Zahteva, da se. NET framework 4.7.2 zažene.

V vsakem primeru boste morali namestiti RivaTuner. Tukaj ga lahko najdete kot samostojno aplikacijo ali pa namestite Msi Afterburner, ki mora vključevati strežnik RTServer.

5. korak: Končna izvedba strojne opreme

Priporočena: