Obsah:

Hardvérový monitor PC: 6 krokov (s obrázkami)
Hardvérový monitor PC: 6 krokov (s obrázkami)

Video: Hardvérový monitor PC: 6 krokov (s obrázkami)

Video: Hardvérový monitor PC: 6 krokov (s obrázkami)
Video: Writing 2D Games in C using SDL by Thomas Lively 2024, Júl
Anonim
Hardvérový monitor PC
Hardvérový monitor PC
Hardvérový monitor PC
Hardvérový monitor PC
Hardvérový monitor PC
Hardvérový monitor PC

Ahoj všetci. Začal som s týmto projektom z dvoch dôvodov: Nedávno som v počítači postavil vodnú chladiacu slučku a potreboval som niečo, čo by vizuálne vyplnilo priestor v puzdre A chcel som mať možnosť rýchlo skontrolovať teploty a ďalšie štatistiky bez toho, aby OSD vyplňovali rohu obrazovky. Na to samozrejme existujú hotové riešenia, ale väčšina z nich by sa na moje feng shui jednoducho nehodila. Namiesto toho, aby som do svojho kufra vložil 7 -palcový displej HDMI s káblom, ktorý vyčnieva z puzdra, a panel úloh na okne bol vždy zapnutý, rozhodol som sa postaviť vlastnú hračku.

Keďže nie som inžinier ani programátor, ale len chlap s spájkovačkou a niekoľkými znalosťami samoukov, nebude to len návod krok za krokom, pokúsim sa tiež zamerať na problém. riešenie a aspekty výskumu, ktoré ma k tejto stavbe priviedli.

VYLÚČENIE ZÁVERU: VŠETKÁ MOJA PRÁCA JE ZDIEĽANÁ AKO KREATÍVNY SPOLOČNÝ ATTRIBÚCIA-SHAREALIKE 4.0. INŠPIRÁCIU SOM ZÍSKAJEM Z MNOHÝCH PRÍKLADOV PO CELOM INTERNETE, AK ROZPOZNÁŠTE NIEKTORÚ ČASŤ TÚTO PRÁCU AKO SVOJU, PROSÍM KONTAKTUJTE MA. NIE JE URČENÉ ŽIADNE PORUŠENIE, BUDEM RADÝ OPRAVIŤ KAŽDÚ CHYBU. ĎAKUJEM

DRUHÉ VYLÚČENIE ZODPOVEDNOSTI: MOJA PRÁCA SA ZDIEĽA AKO TAK. NEZODPOVEDÁM ZA ZODPOVEDNÚ ŠKODU Z POUŽITIA AKÉHOKOLI MÉHO KÓDU ALEBO NÁVODU

Zásoby

  • Arduino Nano (alebo UNO, ak chcete)
  • TFT displej. V mojom prípade ide o 3,5 "displej kompatibilný s ILI9486 / ILI9488L.
  • Teplota Senso. V prípade analógového teplotného senzora TMP36.
  • Káble, vodiče, dupontné konektory (o tom neskôr)
  • (voliteľné) Breadboard na testovanie
  • (voliteľné, ale odporúčané) malý perfboard

Krok 1: Štúdia uskutočniteľnosti (v poradí)

Ako som povedal, nechcel som a displej HDMI uviazol v mojej skrinke s počítačom, a tak som sa maskovaný vlastnou vynaliezavosťou pustil do hľadania podobných myšlienok na internete. A toto je tip číslo jedna: Google je váš priateľ (každý slušný vyhľadávač …). Žijeme vo svete, v ktorom už nič nie je skutočne originálne, ale namiesto toho, aby sme sa na túto frázu pozerali s negatívnym významom, by sme to mohli použiť vo svoj prospech: čokoľvek chcete vytvoriť, pravdepodobne niekto niekde už urobil niečo podobné, takže ak ste Neviete, ako implementovať nápad, je pravdepodobné, že tam nájdete užitočné informácie. Pri vyhľadávaní na internete je často užitočné mať na pamäti dve pravidlá:

  1. neobťažujte sa ísť po stránke 3 alebo 4 akéhokoľvek vyhľadávania, je to takmer vždy strata času. Namiesto toho
  2. zmeňte hľadané výrazy, stačí otázku preformulovať z iného uhla pohľadu (tj: „snímač teploty arduino“-> „odčítať teplotu s arduino“).

V skutočnosti je tam veľa dobrých projektov a priznám sa, že prvé dni som strávil štúdiom väčšiny týchto projektov. Ale nikto z nich nebol pripravený ísť za mnou, pretože som chcel niečo, čo by zodpovedalo mojim potrebám.

Keďže som musel urobiť niečo na mieru, rozhodol som sa zamerať na správny hardvér na použitie a softvérovú stránku som nechal na neskôr, pretože softvér je vždy možné vytvoriť a prispôsobiť potrebám, na druhej strane hardvérovú stránku som viazaný na dostupnosť. a funkcie.

Chcel som niečo na základe Arduina, pretože som to už mal, je to dobre zdokumentované a jeho komunita prekvitá. Nie je tu žiadny problém, ako som už povedal, veľa informácií.

Chcel som, aby bol dostatočne veľký displej dobre viditeľný zo vzdialenosti niekoľkých metrov a aby zodpovedal vzhľadu mojej stavby. To vylučuje akékoľvek zobrazenie znakov Nokia a LCD. O OLED ani nemôže byť reč, pretože sú malé. Rozhodol som sa teda pre TFT farebný displej. Dotykový displej nie je potrebný, pretože bude vo vnútri počítača. Našiel som 3,5 , už navrhnutý pre Arduino, ~ 15 € na Amazone. Dosť dobré.

Teraz, po určení hardvéru, som sa zameral na softvér.

Takmer všetky projekty, na strane Arduina, sú si dosť podobné. Potrebujem len prispôsobiť kód pre displej a pre komunikačný protokol na zhromažďovanie údajov zo serverovej aplikácie. Na strane počítača bola väčšina projektov založená na jazykoch C, C ++, C#, python a väčšina projektov ponúkala iba rozhranie CLI alebo server podobný službe Windows. Namiesto toho som chcel GUI. V systéme Windows som nikdy nepoužíval žiadny jazyk podobný jazyku C, budovu GUI nechajte na pokoji. Ale naučil som sa nejaký Visual Basic pred 15 rokmi, tak som to skúsil a stiahol som si bezplatnú verziu Visual Studio od Microsoftu.

Po preštudovaní mnohých podobných projektov som sa rozhodol použiť OpenHardwareMonitor na získanie všetkých informácií o hardvéri a RivaTuner pre FPS, pretože tieto sú bezplatné a dostatočne zdokumentované.

Krok 2: Testovanie hardvéru

Testovanie hardvéru
Testovanie hardvéru
Testovanie hardvéru
Testovanie hardvéru
Testovanie hardvéru
Testovanie hardvéru

Pred zapnutím spájkovačky a navždy fixovaním v čase a priestore akéhokoľvek elektronického komponentu je vhodné postaviť testovací prototyp (tip číslo dva). Našťastie už nie je rok 1995. V dnešnej dobe je celkom ľahké usporiadať pomerne zložité prototypy aj na malých doskách. V mojom prípade mal displej TFT pokles vývodov pre Arduino Uno, a tak som ho pustil na svoje Arduino uno a začal som sa hrať s ukážkovými knižnicami a čítať referenčné príručky, aby som pochopil jeho prevádzkové princípy a obmedzenia.

V tomto mieste som prišiel na to, ako kresliť čiary a bitmapy a písať text, a tak som sa začal pohrávať so softvérovým kódovaním, všetky vedľajšie veci som si nechal na neskôr, ale sem zaradím snímač teploty.

V určitom bode v rade som mal na displeji prázdne miesto, ale žiadny z údajov zo senzorov PC nebol skutočne užitočný, a tak som sa rozhodol vložiť snímač teploty do skrinky na teplotu okolia. Displej pohltí takmer všetky piny Arduino, analógový pin A5 našťastie nie je používaný, a tak som zviazal TMP36. Dokonca som testoval DHT22, ale je to pre túto aplikáciu príliš prehnané.

Existuje veľa príkladov pre TMP36, práve som skopíroval jeden z nich do funkcie. TMP35 má 3 piny, Vin ide na 5V, GND ide na zem a Out ide na pin A5. Medzi Vin a GND som umiestnil 0,1uF keramický kondenzátor. Hovoria, že je to potrebné. V tomto prípade je to asi zbytočné, ale … Dokonca som pre lepšie odčítanie teploty nastavil analógové referenčné napätie Arduino na pin 3,3 V. V tomto prípade stále zbytočné, ale …

Krok 3: Arduino kód

Stiahnite si a otvorte priložený kód Arduino a postupujte podľa vysvetlenia v tomto kroku. Snažil som sa nechať v kóde dostatok komentárov, aby boli jasné, bez toho, aby ste ho zahltili.

Knižnice MCUFRIEND_kbv a Adafruit GFX budete definitívne potrebovať. Oba sa dajú ľahko nainštalovať z Arduino IDE.

Program je možné rozdeliť na tieto sekcie:

  1. definujte a deklarujte všetky globálne premenné a ďalšie potrebné položky
  2. inicializujte zobrazenie, nastavte externú referenciu a nakreslite používateľské rozhranie (to všetko je obsiahnuté vo funkcii setup (), pretože sa musí spustiť iba raz)
  3. načítať údaje zo sériového pripojenia a priradiť ich vo funkcii array (loop ())
  4. čítať údaje snímača externej teploty (funkcia readExtTemp ())
  5. tlač údajov na displeji (funkcia printData ())
  6. späť do slučky

ODDIEL 1: Vyhlásenia a definície

V úvodnej časti kódu som použil veľa ukazovateľov a polí, takže som dokázal stlačiť veľa opakujúcich sa riadkov kódu kratšími na zápis cyklov FOR. Áno, som lenivý. Ako vidíte, deklaroval som pole ukazovateľa a vyplnil ho všetkými obrázkami zo súboru pics.h. Vďaka tomu bolo možné urobiť trik FOR cyklu a nakresliť všetky ikony.

ODDIEL 2: nastavenie (), väčšinou kresba používateľského rozhrania

Vyrovnal som sa s predvoleným písmom, pretože nemá priehľadné pozadie, takže umožňuje napísať nový riadok textu na starý bez toho, aby ste ho museli mazať. Použitie iného písma by znamenalo nakresliť čierny štvorec nad starý text pred napísaním nového riadku, čo by viedlo k nepríjemnému efektu blikania.

Po nejakom testovaní som sa dostal k dobrému kompromisu medzi čitateľnosťou a zobrazenými informáciami. Displej som rozdelil na dva stĺpce a 5 riadkov. V ľavom stĺpci sú údaje o CPU a základnej doske, vrátane názvu procesora zhora nadol, teploty, záťaže, využitia pamäte RAM a teploty základnej dosky. Ten pravý, venovaný GPU, obsahuje názov GPU, teplotu, zaťaženie, počítadlo snímok za sekundu a externý snímač teploty.

Ako vidíte na kóde, rozhodol som sa vyhnúť používaniu obrázkov na karte SD, pretože načítanie je skutočne pomalé. Rozhodol som sa zahrnúť všetky ikony do pamäte PROGMEM a nakresliť čiary pomocou vyhradeného príkazu drawLine (). je to tiež užitočné pre malé opravy používateľského rozhrania.

V chabom pokuse dať používateľskému rozhraniu zdanie hĺbky som nakreslil dve zo všetkého (čiary, obdĺžniky, obrázky) s rôznymi farbami as malým posunom. Bohužiaľ to nie je výsledok, v ktorý som dúfal, ale bude to stačiť.

Posledné riadky tejto funkcie slúžia na tlač zástupných symbolov na TFT, kým Arduino nedostane údaje.

ODDIEL 3: hlavná slučka (), načítavanie údajov a formátovanie

Tu nastáva kúzlo: údaje sa získavajú prostredníctvom sériového čísla, priradia sa k správnej premennej a potom sa vytlačia. Aby som to všetko dosiahol v čo najmenšom počte riadkov, použil som príkaz switch case a cyklus for.

Komunikačný protokol, s ktorým som prišiel, je rozdelený na dve časti: počiatočné spustenie po podaní ruky a skutočnú dátovú časť.

Podanie ruky je potrebné na implementáciu funkcie automatického pripojenia pri spustení programu PC. Prebieha to takto:

  • PC odošle reťazec podania ruky (v tomto prípade je to iba „*****;“)
  • Arduino odošle odpoveď

Ľahunké.

Dátová časť vyzerá takto: „i: xxx, rrr, zzz, aaa,;“význam je:

„i“je index, v kóde som ho nazval componentSelector. Hodnoty „i“sú:

  • i = 0 - MENÁ. Nasledujúce hodnoty sú názvy zobrazené v prvom riadku na displeji. Toto bude odoslané a vytlačené na displeji iba raz, pretože dnes je dosť ťažké vymeniť CPU a GPU …
  • i = 1 - 1. ÚDAJE O STĹPCI - v ľavej polovici displeja zhora nadol sa zobrazujú nasledujúce hodnoty. V mojom prípade: teplota CPU, zaťaženie CPU, využitie RAM, teplota základnej dosky.
  • i = 2 - 2. ÚDAJE O STĹPCI - ako je uvedené vyššie, ale pre pravú polovicu displeja
  • i = 3 - TLAČTE PRÍKAZ. V tomto prípade bude surový sériový reťazec iba „3:;“pretože ostatné údaje nie sú potrebné.

„xxx, yyy, zzz, aaa“sú skutočné hodnoty. arduino ich číta ako reťazce a celé formátovanie vykoná počítačový program. Pre i = 0 sú tieto hodnoty pre názvy hardvéru po 14 znakov. Pre i = 1 alebo 2 to budú iba tri znaky, postačujúce na zobrazenie teplôt a snímok za sekundu. Samozrejme „:“, „,“a „;“znaky sú v týchto poliach zakázané.

„:“Je oddeľovač medzi komponentou Selector a hodnotami, „,“je oddeľovač hodnôt a „;“je koniec riadku

Pri príjme údajov ich Arduino uloží ako reťazec až do „;“zobrazí sa symbol, potom vyhľadá symbol ":" a použije ho na získanie hodnoty komponentSelecor. Toto bude použité pre funkciu spínacej skrinky na výber správneho postupu, ktorý treba dodržať. Tiež sa používa na výber správneho indexu v poli allData.

Potom Arduino vyhľadá symbol „,“a pokračuje v zadávaní hodnôt do poľa allData.

Ak je parameter componentSelector 0, príznak printName bude nastavený na hodnotu true. Ak je componentSelector 3, volajú sa funkcie readExtTemp () a printData ().

Časť 4: Funkcia readExtTemp ()

Tu nie je čo povedať, číta sa 32 -krát z kolíka A5 a hodnotu teploty sa zobrazí ako reťazec. Som s Rebelmi, takže používam Celsia. Čokoľvek viac ako 100 ° C je nesprávne, takže sa to na displeji zobrazí ako „---“. Čokoľvek menej ako 100 ° C bude naformátované tak, aby malo dostatok miesta na pokrytie medzery na 3 znaky na displeji. Snímač je možné vybrať a znova vložiť a nezobrazí sa žiadna podivná hodnota.

Časť 5: Funkcia printData ()

Ako vždy som používal na cykly na postupnú tlač vecí na displej. Ak je príznak printNames pravdivý, vytlačí názvy, nastaví príznak na false a bude pokračovať.

Časť 6: späť do slučky

Dosť samozrejmé, povedal by som…

súbor pics.h

Tu som uložil všetky ikony pre používateľské rozhranie. Je možné použiť čítačku kariet SD, ktorá je súčasťou displeja, ale v Arduine mi zostalo dosť pamäte na moje čiernobiele ikony.

Navrhol som ich pomocou Junior Icon Editor, pretože je zadarmo a celkom dobrý na pixelové maľovanie malých ikon. Súbory ikon (uložené ako PNG) som musel previesť pomocou online nástroja SKAARHOJ.

Krok 4: Kód jazyka Visual Basic

Kód jazyka Visual Basic
Kód jazyka Visual Basic

Tu je kód VB

UPOZORNENIE: Toto je prvýkrát, čo zdieľam projekt Visual Studio. Práve som skopíroval priečinky projektu a skomprimoval ich. Ak to nefunguje, dajte mi vedieť lepší spôsob zdieľania tohto druhu projektov. Ďakujem

Ako som už povedal, nemôžem vytvoriť GUI v C# ani v iných jazykoch, ale s jazykom Visual Basic som mal už dávnejšie skúsenosti. Stiahol som si edíciu Visual Studio Community (je to samozrejme zadarmo) s prostredím Visual Basic. No, musel som zistiť veľa vecí, pretože keď som naposledy používal VB, bola to verzia 2005 alebo taká … Ale internet je plný dobrých rád, ako obvykle.

Po zistení niektorých vecí z rozhrania je novšia verzia skutočne jednoduchšia a flexibilnejšia ako stará.

Pre tento program som chcel niečo s oknom, ale plne ovládateľné pomocou ikony na paneli úloh. V skutočnosti som formulár používal takmer iba na účely ladenia, pretože rád vkladám textové polia a zoznamy na čítanie výstupných hodnôt funkcií a niektoré príkazové tlačidlá na ich testovanie.

„Konečný“program je iba ikona panela s rozbaľovacou ponukou, ktorá zobrazuje rôzne ovládacie prvky, a hlavný formulár s dvoma zoznamami, ktoré zobrazujú údaje odoslané do Arduina.

Implementoval som funkciu automatického pripojenia a funkciu „štart pri spustení“. Viac o tom neskôr.

Hlavný program je len adaptáciou rôznych príkladov a útržkov kódu pomocou knižnice OpenHardwareMonitor a knižnice zdieľanej pamäte RivaTuner.

Program prebieha takto:

  • získať údaje z knižníc OpenHardwareMonitor a RTSSSm
  • pripraviť a naformátovať všetky údaje pre komunikačný protokol
  • pošlite údaje do Arduina
  • opláchnite a opakujte

názvy hardvéru sa samozrejme načítajú na začiatku a odošlú sa iba raz.

Počítadlo FPS sa aktivuje iba vtedy, ak je použitá kompatibilná aplikácia (napr. Hra, program 3D modelovania atď.), Inak sa na displej odošle zástupný symbol „---“.

Nebudem podrobne vysvetľovať, ako získať hodnoty z knižníc, pretože je to dobre zdokumentované na internete a trochu zrozumiteľné z kódu. Chcem len povedať o problémoch so zobrazovaním teploty základnej dosky prostredníctvom knižnice OpenHardwareMonitor (odteraz na OHMonitor, pretože život je príliš krátky). Mám Asus Maximus VIII Gene MoBo, ktorý je vybavený fu ** tonovými teplotnými snímačmi na základnej doske, ale OHMonitor ich označuje ako teplotný senzor #1, #2… #n A nikde nie je uvedené teplotné umiestnenie. Musel som teda nainštalovať hrozný softvér Asus AI suite, kde senzory majú najmenej NÁZVY a porovnávať rôzne teploty medzi týmito dvoma programami. Vyzerá to, že všeobecný teplotný senzor mojej základnej dosky je pre OHMonitor č. 2, takže ako vidíte v podsekcii Timer1_tick pod vecami MoBo, musel som hľadať názov senzora obsahujúci reťazec „ #2“, aby som dosiahol správne čítanie.

TL; DR: o správne snímače teploty základnej dosky sa budete musieť postarať sami. Ostatné je asi dobré ísť.

Toto je však iba verzia 1, plánujem nainštalovať tento modul gadget na môj iný počítač, takže pravdepodobne implementujem spôsob výberu senzorov a možno aj redizajn rozhrania v Arduine na cestách.

Funkcia automatického pripojenia

Táto funkcia je v skutočnosti jednoduchá: ak nie je počítač pripojený k Arduinu, nazýva sa táto funkcia každých x milisekúnd (na základe časovača1). Pokúša sa spojiť s každým portom COM v počítači, v prípade úspechu odošle reťazec podania ruky „*****;“. Ak odpoviete „R“, potom je pripojené správne zariadenie a dodržiava sa normálny postup. V opačnom prípade to skúsi ďalší port COM.

Ako vidíte, v tejto funkcii existuje veľa výnimiek. Dôvodom je, že som ho chcel úplne zapojiť a hrať, bez chybového výstupu. Pri riešení výnimiek som bol schopný nastaviť, aby ignoroval úplnú absenciu externého zariadenia, a dokonca môžem zariadenie za chodu zapojiť a odpojiť za chodu kedykoľvek chcem, bez toho, aby sa pre program vygenerovala chyba prerušenia.

Funkcia Start At Boot

Chcel som, aby sa program spustil pri štarte. Celkom ľahké, hovoríte si. Hovorte, že vložte odkaz do príslušného priečinka. Ale nie. Vzhľadom na knižnice OHMonitor a RTSS potrebujeme na zhromažďovanie informácií úroveň spustenia správcu. To znamená úplne otravnú obrazovku UAC pri každom spustení tejto aplikácie. V žiadnom prípade. Preto som upravil skript vytvorený Matthewom Wai (odkaz tu), aby som dosiahol tichý štart pri štarte. Práve som skopíroval skript do súboru Resources1, rozdelil ho na niekoľko častí a potom implementoval podprogram, ktorý vytvorí (alebo odstráni) súbor úloh systému Windows, prispôsobený aktuálnemu umiestneniu spustiteľného programu a podobne.

Ikona na paneli úloh

Vďaka objektom NotifyIcon a ContextMenu som dokázal implementovať jednoduchý a efektívny spôsob ovládania aplikácie. Stačí kliknúť pravým tlačidlom myši na ikonu panela a zobrazí sa ponuka. Existujú tieto možnosti:

  • Začať pri zavádzaní: môžete začiarknutím a zrušením začiarknutia povoliť alebo zakázať funkciu spustenia pri zavádzaní
  • Autoconnect: rovnaké ako vyššie, ale zvláda funkciu autoconnect
  • Pripojiť/Odpojiť: zvládne pripojenie. Nepracuje s povoleným automatickým pripojením
  • Čas obnovenia: poskytuje rozbaľovaciu podponuku, môžete si vybrať čas obnovenia od 1 do desať sekúnd
  • Maximalizovať: otvorí hlavné okno. To isté ako dvojité kliknutie na ikonu
  • Ukončenie: samovysvetľujúce

Kompilácia softvéru

Na zostavenie softvéru budete pravdepodobne musieť stiahnuť a pridať odkaz na knižnice, ktoré nie sú zahrnuté v kóde.

Knižnicu OpenHardwareMonitor nájdete tu. Musíte si stiahnuť softvér, otvoriť súbor zip a skopírovať súbor OpenHardwareMonitorLib. DLL do priečinka projektu.

Tu je odkaz na knižnicu RTSSharedMemoryNET, ktorú musíte stiahnuť a skompilovať pre svoju architektúru, a potom skopírujte súbor RTSS [TL; DR] moryNET. DLL do priečinka projektu.

Teraz musíte do kódu pridať odkaz, pokyny tu

Nezabudnite skompilovať serverové projekty RTSS [TL; DR] moryNET a PCHwMon pre rovnakú architektúru.

Zahrnul som pripravený made setup program, takže môžete nainštalovať celú vec bez toho, aby ste si museli lámať hlavu s Visual Basic. Je zostavený pre x86, bude fungovať na architektúrach x86 aj x64. Na spustenie je potrebný framework. NET 4.7.2.

V každom prípade budete musieť nainštalovať RivaTuner. Nájdete ho tu ako samostatnú aplikáciu alebo si môžete nainštalovať Msi Afterburner, ktorý by mal obsahovať server RTServer.

Krok 5: Konečná implementácia hardvéru

Odporúča: