Obsah:

Hardwarový monitor PC: 6 kroků (s obrázky)
Hardwarový monitor PC: 6 kroků (s obrázky)

Video: Hardwarový monitor PC: 6 kroků (s obrázky)

Video: Hardwarový monitor PC: 6 kroků (s obrázky)
Video: #6 TechTalk - Taktování PC, kolik monitorů lze připojit k PC [I] 2024, Listopad
Anonim
Monitor hardwaru počítače
Monitor hardwaru počítače
Monitor hardwaru počítače
Monitor hardwaru počítače
Monitor hardwaru počítače
Monitor hardwaru počítače

Ahoj všichni. Zahájil jsem tento projekt ze dvou důvodů: Nedávno jsem v počítači postavil smyčku na vodní chlazení a potřeboval jsem něco, co by vizuálně vyplnilo nějaký prostor v pouzdru A chtěl jsem mít možnost zkontrolovat teploty a další statistiky rychlým pohledem, aniž by OSD shenanigans vyplňovaly rohu obrazovky. K tomu samozřejmě existují hotová řešení, ale většina z nich by se na můj feng shui prostě nehodila. Takže místo toho, abych do svého pouzdra vložil 7palcový displej HDMI s kabelem vyčnívajícím z pouzdra a hlavním panelem systému Windows vždy zapnutým, rozhodl jsem se postavit vlastní hračku.

Protože nejsem inženýr ani programátor, ale jen chlap s páječkou a některými znalostmi samouků, nebude to jen instrukce krok za krokem, pokusím se také soustředit na problém aspekty řešení a výzkumu, které mě k této stavbě přivedly.

UPOZORNĚNÍ: VŠECHNY MOJE PRÁCE JSOU SDÍLeny jako KREATIVNÍ SPOLEČNÁ ATTRIBUČNÍ SHAREALIKE 4.0. INSPIRACI JSEM SI POUŽÍVAL Z MNOHÝCH PŘÍKLADŮ PO CELÉM INTERNETU, POKUD UZNÁTE NĚKTEROU ČÁST TÉTO PRÁCE JAKO VAŠE, PROSÍM KONTAKTUJTE MĚ PRO PŘIHLÁŠENÍ. NENÍ URČENO ŽÁDNÉ PORUŠENÍ, BUDU RADÝ OPRAVIT JAKOUKOLI CHYBU. DĚKUJI

DRUHÉ ODMÍTNUTÍ: MOJE PRÁCE SE SDÍLÍ TAK, JAK JE. NEJSEM ZODPOVĚDNOST ZA JAKÉKOLI ŠKODY ZÍSKANÉ Z POUŽITÍ JAKÉHOKOLI MÉHO KÓDU NEBO POKYNŮ

Zásoby

  • Arduino Nano (nebo UNO, pokud chcete)
  • TFT displej. V mém případě se jedná o 3,5 "displej kompatibilní s ILI9486 / ILI9488L.
  • Teplota Senso. V případě analogový snímač teploty TMP36.
  • Kabely, vodiče, konektory dupont (více o tom později)
  • (volitelně) Breadboard pro testování
  • (volitelně, ale doporučeno) malá perfboard

Krok 1: Studie proveditelnosti (zhruba)

Jak jsem řekl, nechtěl jsem a HDMI displej uvízl v mém PC pouzdře, takže jsem se zahalen ve své vlastní vynalézavosti začal hledat podobné nápady na internetu. A toto je tip číslo jedna: Google je váš přítel (každý slušný vyhledávač…). Žijeme ve světě, kde už není nic opravdu originálního, ale místo toho, abychom se na tuto frázi dívali s negativním významem, bychom ji mohli použít pro naši výhodu: ať už chcete vytvořit cokoli, pravděpodobně někdo něco podobného již udělal, takže pokud nevíte, jak nápad implementovat, je velká šance, že tam najdete užitečné informace. Při hledání na internetu je často užitečné mít na paměti dvě pravidla:

  1. neobtěžujte se jít po stránce 3 nebo 4 jakéhokoli vyhledávání, je to téměř vždy ztráta času. Namísto
  2. změnit hledané výrazy, stačí otázku přeformulovat z jiného úhlu pohledu (tj.: „teplotní čidlo arduino“-> „odečíst teplotu s arduino“).

Ve skutečnosti je venku spousta dobrých projektů a přiznávám, že jsem první dny strávil studiem většiny těchto projektů. Ale nikdo z nich nebyl připraven jít pro mě, protože jsem chtěl něco, co by vyhovovalo mým potřebám.

Protože jsem musel udělat něco na míru, rozhodl jsem se zaměřit na správný hardware, který použiji, a softwarovou stránku jsem nechal na později, protože software lze vždy vytvářet a přizpůsobovat potřebám, na druhé straně hardwarová stránka je vázána na dostupnost a funkce.

Chtěl jsem něco na základě Arduina, protože už jsem to měl, je to dobře zdokumentované a jeho komunita vzkvétá. Tady není žádný problém, jak jsem řekl dříve, spousta informací.

Chtěl jsem dostatečně velký displej, aby byl jasně viditelný z několika metrů, a který by odpovídal vzhledu mé stavby, což vylučovalo jakékoli zobrazení znaků Nokia a LCD. Také OLED nepřichází v úvahu, protože jsou malé. Rozhodl jsem se tedy pro barevný displej TFT. Není potřeba dotykový displej, protože bude uvnitř počítače. Našel jsem 3,5 , již navržený pro Arduino, ~ 15 € na Amazonu. Dost dobrý.

Nyní, po určení hardwaru, jsem se zaměřil na software.

Téměř všechny projekty, na straně Arduina, jsou si docela podobné. Jen potřebuji upravit kód pro displej a pro komunikační protokol pro sběr dat ze serverové aplikace. Na straně počítače byla většina projektů založena na jazycích C, C ++, C#, python a většina projektů nabízela pouze rozhraní CLI nebo server podobný službě Windows. Místo toho jsem chtěl GUI. Ve Windows jsem nikdy nepoužíval žádný jazyk podobný C, budovu GUI nechám být. Ale před 15 lety jsem se naučil nějaký jazyk Visual Basic, tak jsem to zkusil a stáhl si bezplatnou verzi Visual Studio od Microsoftu.

Po prostudování mnoha podobných projektů jsem se rozhodl pro použití OpenHardwareMonitor k získání všech informací o hardwaru a RivaTuner pro FPS, protože ty jsou zdarma a dostatečně zdokumentované.

Krok 2: Testování hardwaru

Testování hardwaru
Testování hardwaru
Testování hardwaru
Testování hardwaru
Testování hardwaru
Testování hardwaru

Před zapnutím páječky a navždy fixováním v čase a prostoru jakékoli elektronické součástky je dobré sestavit testovací prototyp (tip číslo dvě). Naštěstí už není rok 1995. V dnešní době je docela snadné uspořádat poměrně složité prototypy i na malých prkénkách. V mém případě měl displej TFT pokles pinoutu pro Arduino Uno, tak jsem ho pustil na Arduino uno a začal si hrát s ukázkovými knihovnami a číst referenční příručky, abych pochopil jeho provozní principy a omezení.

V tomto bodě jsem přišel na to, jak kreslit čáry a bitmapy a psát text, a tak jsem začal hrát se softwarovým kódováním, všechny vedlejší věci jsem si nechal na později, ale zahrnu zde teplotní čidlo.

V určitém okamžiku v řadě jsem měl na displeji prázdné místo, ale žádné z dat ze senzorů počítače nebylo opravdu užitečné, a tak jsem se rozhodl umístit teplotní senzor do pouzdra pro okolní teplotu. Displej pohltí téměř všechny piny Arduino, naštěstí analogový pin A5 je nepoužívaný, takže jsem svázal TMP36. Dokonce jsem testoval DHT22, ale je to pro tuto aplikaci přehnané.

Existuje mnoho příkladů pro TMP36, právě jsem jeden zkopíroval do funkce. TMP35 má 3 piny, Vin jde na 5V, GND jde na zem a Out jde na pin A5. Mezi Vin a GND jsem umístil 0,1uF keramický kondenzátor. Prý je to potřeba. V tomto případě je to asi k ničemu, ale … Dokonce jsem pro lepší odečet teploty nastavil analogové referenční napětí Arduino na pin 3,3V. V tomto případě stále zbytečné, ale…

Krok 3: Arduino kód

Stáhněte si a otevřete přiložený kód Arduino a postupujte podle vysvětlení v tomto kroku. Pokusil jsem se v kódu ponechat dostatek komentářů, aby byl jasný, aniž by jej zaplavil.

Definitivně budete potřebovat knihovny MCUFRIEND_kbv a Adafruit GFX. Oba lze snadno nainstalovat z Arduino IDE.

Program lze rozdělit na následující sekce:

  1. definujte a deklarujte všechny globální proměnné a další potřebné věci
  2. inicializujte zobrazení, nastavte externí referenci a nakreslete uživatelské rozhraní (to vše je obsaženo ve funkci setup (), protože musí běžet pouze jednou)
  3. číst data ze sériového připojení a přidělit je ve funkci array (loop ())
  4. číst data ze snímače venkovní teploty (funkce readExtTemp ())
  5. tisková data na displeji (funkce printData ())
  6. zpět do smyčky

ODDÍL 1: Prohlášení a definice

V počáteční části kódu jsem použil spoustu ukazatelů a polí, takže jsem byl schopen zmáčknout spoustu opakujících se řádků kódu za kratší dobu pro psaní cyklů FOR. Ano, jsem líný. Jak vidíte, deklaroval jsem pole ukazatelů a naplnil ho všemi obrázky ze souboru pics.h. To umožnilo provést trik cyklu FOR k nakreslení všech ikon.

ODDÍL 2: setup (), většinou kresba uživatelského rozhraní

Vypořádal jsem se s výchozím písmem, protože nemá průhledné pozadí, takže umožňuje psát nový řádek textu přes starý, aniž by bylo nutné jej mazat. Použití jiného písma by znamenalo nakreslit černý čtverec nad starý text před napsáním nového řádku, což by vedlo k nepříjemnému efektu blikání.

Po nějakém testování jsem se dostal k dobrému kompromisu mezi čitelností a zobrazenými informacemi. Displej jsem rozdělil na dva sloupce a 5 řádků. V levém sloupci jsou data CPU a základní desky, včetně shora dolů název CPU, teplota, zátěž, využití RAM a teplota základní desky. Ten pravý věnovaný GPU a obsahuje název GPU, teplotu, zátěž, čítač snímků za sekundu a externí teplotní senzor.

Jak vidíte v kódu, rozhodl jsem se vyhnout používání obrázků na SD kartě, protože načítání je opravdu pomalé. Rozhodl jsem se zahrnout všechny ikony do paměti PROGMEM a nakreslit čáry vyhrazeným příkazem drawLine (). to je také užitečné pro malé opravy uživatelského rozhraní.

Při chabém pokusu dát UI zdání hloubky jsem nakreslil dva od všeho (čáry, obdélníky, obrázky) s různými barvami as malým odsazením. Bohužel to není výsledek, ve který jsem doufal, ale bude to stačit.

Poslední řádky této funkce jsou pro tisk zástupných symbolů na TFT, dokud Arduino data neobdrží.

ODDÍL 3: hlavní smyčka (), načítání dat a formátování

Zde nastává kouzlo: data jsou přijímána prostřednictvím sériového čísla, přiřazena ke správné proměnné a poté vytištěna. Abych toho všeho dosáhl v co nejmenším počtu řádků, použil jsem příkaz switch case a cyklus for.

Komunikační protokol, se kterým jsem přišel, je rozdělen na dvě části: počáteční spuštění po podání ruky a skutečná datová část.

Podání ruky je nutné k implementaci funkce automatického připojení při spuštění programu pro PC. Probíhá to takto:

  • PC odešle řetězec handshake (v tomto případě je to jen „*****;“)
  • Arduino odešle zpět odpověď

Snadno peasy.

Datová část vypadá takto: "i: xxx, yyy, zzz, aaa,;" význam je:

„i“je index, v kódu jsem jej nazval componentSelector. Hodnoty „i“jsou:

  • i = 0 - JMÉNA. Následující hodnoty jsou názvy zobrazené v prvním řádku na displeji. To bude odesláno a vytištěno na displeji pouze jednou, protože dnes je docela obtížné vyměnit CPU a GPU…
  • i = 1 - 1. COLUMN DATA - následující hodnoty jsou zobrazeny v levé polovině displeje shora dolů. V mém případě: teplota CPU, zatížení CPU, využití RAM, teplota základní desky.
  • i = 2 - 2. COLUMN DATA - jako výše, ale pro pravou polovinu displeje
  • i = 3 - TISK PŘÍKAZU. V tomto případě bude nezpracovaný sériový řetězec pouze „3:;“protože další údaje nejsou potřeba.

„xxx, yyy, zzz, aaa“jsou skutečné hodnoty. arduino je čte jako řetězce a celé formátování provádí počítačový program. Pro i = 0 jsou tyto hodnoty pro názvy hardwaru po 14 znacích. Pro i = 1 nebo 2 to budou pouze tři znaky, což stačí k zobrazení teplot a snímků za sekundu. Samozřejmě „:“, „,“a „;“znaky jsou v těchto polích zakázány.

":" Je oddělovač mezi componentSelector a hodnotami, "," je oddělovač hodnot a ";" je konec řádku

Při příjmu dat je Arduino uloží jako řetězec do „;“zobrazí se symbol, poté vyhledá symbol ":" a použije jej k získání hodnoty componentSelecor. To bude použito pro funkci přepínače k výběru správného postupu, který je třeba dodržet. Používá se také k výběru správného indexu v poli allData.

Poté Arduino vyhledá symbol „,“a pokračuje v vkládání hodnot do pole allData.

Pokud je componentSelector 0, příznak printName bude nastaven na true. Pokud je componentSelector 3, jsou volány funkce readExtTemp () a printData ().

Část 4: Funkce readExtTemp ()

Tady není moc co říct, čte to 32krát z pinu A5 a vydává hodnotu teploty jako řetězec. Jsem u Rebelů, takže používám Celsia. Cokoli více než 100 ° C je nesprávné, zobrazí se na displeji jako „---“. Pro cokoli, co je nižší než 100 ° C, bude formátováno tak, aby měl dostatek mezer na pokrytí mezery 3 znaky na displeji. Senzor je možné vyjmout a znovu vložit a nezobrazí se žádná podivná hodnota.

Oddíl 5: Funkce printData ()

Jako vždy jsem používal cykly k postupnému tisku věcí na displej. Pokud je příznak printNames pravdivý, vytiskne názvy, nastaví příznak na hodnotu false a bude pokračovat.

Část 6: zpět do smyčky

Samo vysvětlující, řekl bych…

soubor pics.h

Zde jsem uložil všechny ikony pro uživatelské rozhraní. Je možné použít čtečku karet SD, která je součástí displeje, ale v Arduinu mi zbylo dost paměti pro mé černobílé ikony.

Navrhl jsem je pomocí Junior Icon Editoru, protože je zdarma a docela dobrý pro pixelové malování malých ikon. Soubory ikon (uložené jako PNG) jsem musel převést pomocí online nástroje SKAARHOJ.

Krok 4: Kód jazyka

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

Zde je kód VB

UPOZORNĚNÍ: Toto je poprvé, co sdílím projekt Visual Studio. Právě jsem zkopíroval složky projektu a zazipoval je. Pokud to nefunguje, dejte mi prosím vědět, jak lépe tento druh projektů sdílet. Děkuji

Jak jsem již řekl, nejsem schopen vytvořit GUI v C# nebo v jiných jazycích, ale nějaké zkušenosti s Visual Basic jsem měl už dávno. Stáhl jsem si edici Visual Studio Community (je samozřejmě zdarma) s prostředím Visual Basic. No, musel jsem přijít na spoustu věcí, protože když jsem naposledy používal VB, byla to verze 2005 nebo taková … Ale internet je plný dobrých rad, jako obvykle.

Po zjištění některých věcí z rozhraní je novější verze ve skutečnosti jednodušší a flexibilnější než ta stará.

Pro tento program jsem chtěl něco s formulářem Windows, ale plně zvládnutelným z ikony na hlavním panelu. Vlastně jsem formulář používal téměř pouze pro účely ladění, protože rád vkládám textová pole a seznamy pro čtení výstupních hodnot funkcí a některá příkazová tlačítka k jejich testování.

„Konečný“program je pouze ikona zásobníku s vyskakovací nabídkou, která zobrazuje různé ovládací prvky a hlavní formulář se dvěma seznamy, které zobrazují data odeslaná do Arduina.

Implementoval jsem funkci automatického připojení a funkci „spustit při spuštění“. Více o tom později.

Hlavní program je jen adaptací různých příkladů a úryvků kódu pomocí knihovny OpenHardwareMonitor a knihovny RivaTuner Shared Memory.

Program probíhá takto:

  • získejte data z knihoven OpenHardwareMonitor a RTSSSm
  • připravit a naformátovat všechna data pro komunikační protokol
  • odešlete data do Arduina
  • opláchněte a opakujte

názvy hardwaru jsou samozřejmě načteny na začátku a odeslány pouze jednou.

Počitadlo FPS se aktivuje pouze v případě, že je použita kompatibilní aplikace (např. Hra, program pro 3D modelování atd.), Jinak bude na displej odeslán zástupný znak „---“.

Nebudu hlouběji vysvětlovat, jak získat hodnoty z knihoven, protože je to dobře zdokumentováno na internetu a poněkud srozumitelné z kódu. Jen chci říci o problémech se zobrazováním teploty základní desky prostřednictvím knihovny OpenHardwareMonitor (od nynějška OHMonitor, protože život je příliš krátký). Mám Asus Maximus VIII Gene MoBo, který je vybaven fu ** tonovými teplotními senzory na základní desce, ale OHMonitor je pojmenovává jako teplotní senzor #1, #2… #n A nikde není uvedeno teplotní umístění. Musel jsem tedy nainstalovat hrozný software Asus AI suite, kde senzory mají alespoň NÁZVY a porovnávat různé teploty mezi těmito dvěma programy. Vypadá to, že můj obecný teplotní senzor na základní desce je č. 2 pro OHMonitor, takže jak vidíte v podsekci Timer1_tick pod věcmi MoBo, musel jsem hledat název snímače obsahující řetězec „ #2“, abych získal správné čtení.

TL; DR: o správná čidla teploty základní desky se budete muset postarat sami. Zbytek je pravděpodobně dobré jít.

Nicméně toto je jen verze 1, plánuji nainstalovat tento gadget na svůj druhý počítač, takže pravděpodobně implementuji způsob výběru senzorů a možná i přepracování rozhraní na Arduinu na cestách.

Funkce Autoconnect

Tato funkce je ve skutečnosti jednoduchá: pokud není počítač připojen k Arduinu, nazývá se tato funkce každých x milisekund (na základě časovače1). Pokouší se spojit s každým COM portem na PC, v případě úspěchu odešle řetězec handshake „*****;“. Pokud je odpověď „R“, je připojeno správné zařízení a je dodržen normální postup. Jinak to zkusí další port COM.

Jak vidíte, v této funkci existuje mnoho výjimek. Důvodem je, že jsem to chtěl plně připojit a hrát, bez chybového výstupu. Zpracováním výjimek jsem byl schopen přimět to, aby ignoroval úplnou absenci externího zařízení, a dokonce mohu zařízení připojit a odpojit za provozu kdykoli chci, aniž by to generovalo chybu přerušení programu.

Funkce Start At Boot

Chtěl jsem, aby se program spustil při spuštění. Docela snadné, říkáte si. Řekněte, vložte odkaz do příslušné složky. Ale ne. Kvůli knihovnám OHMonitor a RTSS potřebujeme pro shromažďování informací úroveň spuštění správce. To znamená naprosto otravnou obrazovku UAC při každém spuštění této aplikace. V žádném případě. Proto jsem upravil skript vytvořený Matthewem Wai (odkaz zde), abych dosáhl tichého startu při spuštění. Právě jsem zkopíroval skript do souboru Resources1, rozdělil ho na několik částí a poté implementoval podprogram, který vytvoří (nebo odstraní) soubor úloh systému Windows, přizpůsobený aktuálnímu umístění spustitelného programu a podobné věci.

Ikona na hlavním panelu

Díky objektům NotifyIcon a ContextMenu jsem mohl implementovat snadný a přehledný způsob ovládání aplikace. Stačí kliknout pravým tlačítkem na ikonu zásobníku a zobrazí se nabídka. Existují tyto možnosti:

  • Spustit při spuštění: můžete zaškrtnutím a zrušením zaškrtnutí povolit nebo zakázat funkci spuštění při spuštění
  • Automatické připojení: stejné jako výše, ale zpracovává funkci automatického připojení
  • Připojit/Odpojit: zvládne připojení. Nefunguje s povoleným automatickým připojením
  • Čas obnovení: nabízí rozbalovací podnabídku, můžete si vybrat dobu obnovení od 1 do deseti sekund
  • Maximalizovat: otevře hlavní okno. Stejné jako dvojité kliknutí na ikonu
  • Konec: samovysvětlující

Kompilace softwaru

Ke kompilaci softwaru budete pravděpodobně muset stáhnout a přidat odkaz na knihovny, které nejsou zahrnuty v kódu.

Knihovnu OpenHardwareMonitor najdete zde. Musíte stáhnout software, otevřít soubor zip a zkopírovat soubor OpenHardwareMonitorLib. DLL do složky projektu.

Zde je odkaz na knihovnu RTSSharedMemoryNET, kterou musíte stáhnout a zkompilovat pro svou architekturu, a poté zkopírovat RTSS [TL; DR] moryNET. DLL do složky projektu yout.

Nyní musíte do kódu přidat odkaz, pokyny zde

Nezapomeňte zkompilovat serverové projekty RTSS [TL; DR] moryNET a PCHwMon pro stejnou architekturu.

Zahrnul jsem připravený instalační program, takže můžete celou věc nainstalovat, aniž byste museli hrát s Visual Basic. Je kompilován pro x86, bude fungovat na architekturách x86 i x64. Ke spuštění vyžaduje rozhraní. NET Framework 4.7.2.

V každém případě budete muset nainstalovat RivaTuner. Najdete ji zde jako samostatnou aplikaci nebo si můžete nainstalovat Msi Afterburner, který by měl obsahovat RTServer.

Krok 5: Konečná implementace hardwaru

Doporučuje: