Tartalomjegyzék:

PC hardver monitor: 6 lépés (képekkel)
PC hardver monitor: 6 lépés (képekkel)

Videó: PC hardver monitor: 6 lépés (képekkel)

Videó: PC hardver monitor: 6 lépés (képekkel)
Videó: No video signal, Easy PC fix in 10 steps Ep.268 2024, Július
Anonim
PC hardver monitor
PC hardver monitor
PC hardver monitor
PC hardver monitor
PC hardver monitor
PC hardver monitor

Sziasztok. Két okból indítottam el ezt a projektet: nemrégiben vízhűtő hurkot építettem a számítógépembe, és szükségem volt valamire, hogy vizuálisan kitöltsön egy kis helyet a házban, ÉS azt akartam, hogy a hőmérsékletet és egyéb statisztikákat gyors pillantással ellenőrizhessem, anélkül, hogy az OSD -k betöltenék a képernyő sarka. Természetesen vannak kész megoldások erre, de a legtöbbjük egyszerűen nem illik a feng shui -hoz. Így ahelyett, hogy egy 7 hüvelykes HDMI -kijelzőt tettem volna a tokomba úgy, hogy a kábel kihúzta a tokot, és a Windows tálca mindig be volt kapcsolva, úgy döntöttem, hogy saját játékot készítek.

Mivel nem vagyok mérnök és nem programozó, hanem csak egy fickó, aki forrasztópáka és némi autodidakta tudás birtokában van, ez nem lesz csak lépésről lépésre oktatható, megpróbálok a problémára is összpontosítani megoldási és kutatási szempontokat, amelyek elvezettek ehhez az építéshez.

NYILATKOZAT: MINDEN MUNKÁM MEGOSZTOTT KREATÍV KÖZÖS KÖZÖS FELADATOK-OSZTALÁS 4.0. SOK PÉLDÁBÓL VONATKOZTAM INGRÁZIÓT AZ INTERNETEN, HA FELISMERED MUNKÁNAK VALÓDI RÉSZÉT, mint a tied, KÉRJÜK KAPCSOLATBA VONNI. SEMMILYEN JOGSÉRTÉS NEM SZÁNT, BOLDOG BÁRMILYEN BÁRMILYEN HIBÁT JAVÍTANI. KÖSZÖNÖM

MÁSODIK NYILATKOZAT: A MUNKÁMAT MEGOSZTOTTUK. NEM VÁLLALOK MINDEN KÓDOM VAGY UTASÍTÁS HASZNÁLATÁBÓL VONATKOZÓ KÁRBA

Kellékek

  • Arduino Nano (vagy UNO, ha szeretné)
  • TFT kijelző. Esetemben ez egy ILI9486 / ILI9488L kompatibilis 3,5 hüvelykes kijelző.
  • Hőmérséklet Senso. Ebben az esetben analóg TMP36 hőmérséklet -érzékelő.
  • Kábelek, vezetékek, dupont csatlakozók (erről bővebben később)
  • (opcionális) Breadboard teszteléshez
  • (opcionális, de ajánlott) egy kis perfboard

1. lépés: Megvalósíthatósági tanulmány (sorta Of)

Mint mondtam, nem akartam, és a HDMI -kijelző beragadt a számítógép házába, így saját leleményességembe burkolva elkezdtem hasonló ötleteket keresni az interneten. És ez az első tipp: a Google a barátod (nos, minden tisztességes keresőmotor …). Egy olyan világban élünk, ahol már semmi sem eredeti, de ahelyett, hogy ezt a kifejezést negatív jelentéssel szemlélnénk, használhatjuk ezt a javunkra: bármit is szeretne létrehozni, valószínűleg valahol valaki már csinált hasonlót, tehát ha nem tudom, hogyan kell megvalósítani egy ötletet, jó eséllyel talál hasznos információkat. Amikor az interneten keres, gyakran hasznos két szabály betartása:

  1. ne törődjön a keresések 3. vagy 4. oldalával, szinte mindig időpocsékolás. Helyette
  2. módosítsa a keresési kifejezéseket, csak fogalmazza meg újra a kérdést egy másik nézőpontból (pl.: "arduino hőmérséklet -érzékelő" -> "olvasási hőmérséklet arduino -val").

Valójában tele van jó projektekkel odakint, és bevallom, az első napokat a legtöbb projekt tanulmányozásával töltöttem. De egyikük sem állt készen értem, mert olyasmit akartam, ami megfelel az igényeimnek.

Mivel valamit testre kellett szabnom, úgy döntöttem, hogy a megfelelő hardverre összpontosítok, és a szoftver oldalt későbbre hagyom, mert a szoftvert mindig lehet létrehozni és az igényekhez igazítani, másrészt a hardver oldalon kötődöm a rendelkezésre álláshoz és jellemzői.

Szerettem volna valamit az Arduino alapján, mert már megvolt, jól dokumentált és a közösség virágzik. Nincs itt semmi probléma, amint azt a rengeteg információ előtt mondtam.

Azt akartam, hogy egy elég nagy kijelző pár méterről tisztán lásson, és ez illeszkedne az építményem megjelenéséhez, ez kizárja a nokia és az LCD karakterek megjelenítését. Az OLED sem kérdéses, mivel kicsi. Így a TFT színes kijelző mellett döntöttem. Nincs szükség érintőképernyőre, mivel a számítógép belsejében lesz. Találtam egy 3,5 hüvelykes, már Arduino számára tervezett, ~ 15 € -ot az Amazon -on. Elég jó.

Most, a hardver pontos meghatározása után a szoftverre koncentráltam.

Szinte minden projekt, az Arduino oldalán, nagyon hasonló. Csak módosítanom kell a kódot a kijelzőhöz és ahhoz, hogy a kommunikációs protokoll adatokat gyűjtsön a szerver alkalmazásból. Számítógépes oldalon a legtöbb projekt C, C ++, C#, python alapú volt, és a legtöbb projekt csak CLI felületet vagy Windows-szerű kiszolgálót kínált. Ehelyett grafikus felületet akartam. Soha nem használtam semmilyen C-szerű nyelvet a Windows-ban, hagyjuk a GUI-épületet. De 15 évvel ezelőtt megtanultam néhány Visual Basic programot, ezért kipróbáltam és letöltöttem a Microsoft ingyenes Visual Studio verzióját.

Miután sok hasonló projektet tanulmányoztam, az OpenHardwareMonitor használatával döntöttem az összes hardverinformáció és a RivaTuner for FPS megszerzésében, mert ezek ingyenesek és kellően dokumentáltak.

2. lépés: Hardver tesztelés

Hardver tesztelés
Hardver tesztelés
Hardver tesztelés
Hardver tesztelés
Hardver tesztelés
Hardver tesztelés

Mielőtt bekapcsolná a forrasztópárat, és idővel és térben örökre rögzítene bármilyen elektronikus alkatrészt, jó gyakorlat egy tesztprototípus elkészítése (második tipp). Szerencsére már nem 1995 van. Manapság meglehetősen könnyű elrendezni meglehetősen bonyolult prototípusokat még kicsi kenyérsütő táblákon is. Az én esetemben a TFT kijelzőn az Arduino Uno pinoutja csökkent, ezért leejtettem az Arduino uno -ra, és elkezdtem játszani a példakönyvtárakkal, és elolvastam a referencia -kézikönyveket, hogy megértsem működési elveit és korlátait.

Ezen a ponton rájöttem, hogyan kell rajzolni vonalakat és bitképeket, és szöveget írni, ezért elkezdtem babrálni a szoftverkódolással, és minden másodlagos dolgot későbbre hagytam, de ide beillesztem a hőmérséklet -érzékelőt.

Valamikor a sor lefelé üres pontja volt a kijelzőn, de a PC -s érzékelőkből származó adatok egyike sem volt igazán hasznos, ezért úgy döntöttem, hogy egy hőmérséklet -érzékelőt teszek a tokba a környezeti hőmérséklethez. A kijelző megeszi szinte az összes Arduino csapot, szerencsére az A5 analóg tű nincs használatban, ezért lekötöttem egy TMP36 -ot. Még egy DHT22 -t is teszteltem, de ez túlzás ehhez az alkalmazáshoz.

Rengeteg példa van a TMP36 -ra, csak az egyiket másoltam be egy függvénybe. A TMP35 -nek 3 csapja van, Vin 5V -ra, GND a földre, Out pedig az A5 -ösre. 0,1 uF kerámia kondenzátort helyeztem Vin és GND közé. Azt mondják, szükség van rá. Valószínűleg haszontalan ebben az esetben, de… A jobb hőmérséklet -leolvasás érdekében még az Arduino analóg referenciafeszültséget is 3,3 V -os tűre állítottam. Ebben az esetben még haszontalan, de…

3. lépés: Arduino kód

Kérjük, töltse le és nyissa meg a mellékelt Arduino kódot, hogy kövesse a magyarázatot ebben a lépésben. Próbáltam annyi megjegyzést hagyni a kódban, hogy egyértelmű legyen anélkül, hogy elárasztaná.

Végre szükség lesz az MCUFRIEND_kbv és az Adafruit GFX könyvtárakra. Mindkettő könnyen telepíthető az Arduino IDE -ből.

A program a következő részekre bontható:

  1. határozza meg és deklarálja az összes globális változót és egyéb szükséges dolgokat
  2. inicializálja a kijelzőt, állítsa be a külső hivatkozást, és rajzolja le a felhasználói felületet (mindezt a setup () függvény tartalmazza, mivel csak egyszer kell futtatnia)
  3. adatokat olvasni a soros kapcsolatból, és lefoglalni a tömbben (loop () függvény)
  4. olvassa el a külső hőmérséklet érzékelő adatait (readExtTemp () függvény)
  5. adatok nyomtatása a kijelzőn (printData () funkció)
  6. vissza a hurokhoz

1. SZAKASZ: Nyilatkozatok és meghatározások

A kód kezdeti szakaszában sok mutatót és tömböt használtam, így rengeteg ismétlődő kódsorot tudtam rövidebb idő alatt kinyomni a FOR ciklusok írásához. Igen, lusta vagyok. Amint látja, deklaráltam egy mutatótömböt, és betöltöttem a pics.h fájl összes képével. Ez lehetővé tette a FOR ciklus trükkjét az összes ikon rajzolásához.

2. SZAKASZ: setup (), többnyire felhasználói felület rajz

Az alapértelmezett betűtípussal számoltam, mivel nem rendelkezik átlátszó háttérrel, így lehetővé teszi, hogy új szövegsort írjon egy régi fölé anélkül, hogy törölnie kellene. Egy másik betűtípus használata azt jelentette volna, hogy fekete négyzetet rajzolunk a régi szöveg fölé, mielőtt új sort írunk, ami kellemetlen villódzást eredményez.

Némi tesztelés után jó kompromisszumra jutottam az olvashatóság és a megjelenített információk között. A kijelzőt két oszlopra és 5 sorra osztottam. A bal oldali oszlopban a CPU és az alaplap adatai láthatók, beleértve felülről lefelé a CPU nevét, a hőmérsékletet, a terhelést, a RAM használatát és az alaplap hőmérsékletét. A megfelelő a GPU -hoz, és tartalmazza a GPU nevét, a hőmérsékletet, a terhelést, a másodpercenkénti kereteket és a külső hőmérséklet -érzékelőt.

Amint a kódban látható, úgy döntöttem, hogy kerülöm a képek használatát az SD -kártyán, mivel nagyon lassan töltődik be. Úgy döntöttem, hogy az összes ikont belefoglalom a PROGMEM memóriába, és rajzolom a vonalakat a dedikált drawLine () paranccsal. ez hasznos a kis felhasználói felület -korrekcióknál is.

A gyenge kísérletben, hogy a kezelőfelületnek látszatot adjon a mélységnek, mindenből kettőt (vonalak, téglalapok, képek) különböző színekkel és kis eltolással rajzoltam. Sajnos nem ez az eredmény, amire számítottam, de megteszi a dolgát.

Ennek a funkciónak az utolsó sorai a helyőrzők nyomtatására szolgálnak a TFT -n, amíg az Arduino meg nem kapja az adatokat.

3. SZAKASZ: főhurok (), adatok lekérése és formázása

Itt megtörténik a varázslat: az adatokat soron keresztül fogadják, hozzárendelik a megfelelő változóhoz, majd kinyomtatják. Ahhoz, hogy mindezt a lehető legkevesebb sorban elérhessem, kapcsoló tok parancsot és a for ciklust használtam.

A kommunikációs protokoll, amelyet kaptam, két részre van osztva: egy kezdeti végrehajtás egyszeri kézfogásra és a tényleges adatrész.

A kézfogásra szükség van az automatikus csatlakozás funkció megvalósításához, amikor a PC program elindul. Ez így megy:

  • A PC elküldi a kézfogási karakterláncot (ebben az esetben csak "*****;")
  • Arduino visszaküldi a választ

Könnyű peasy.

Az adatrész így néz ki: "i: xxx, yyy, zzz, aaa,;" jelentése:

"i" az index, a kódban komponensválasztónak neveztem. Az "i" értékek a következők:

  • i = 0 - NEVEK. A következő értékek a kijelző első sorában megjelenő nevek. Ezt csak egyszer kell elküldeni és kinyomtatni a kijelzőn, mivel ma a CPU és a GPU cseréje meglehetősen nehéz …
  • i = 1 - 1. OSZLOPADATOK - a következő értékek láthatók a kijelző bal felén felülről lefelé. Esetemben: CPU hőmérséklet, CPU terhelés, RAM használat, Alaplapi hőmérséklet
  • i = 2 - 2. OSZLOPADATOK - a fentiek szerint, de a kijelző jobb felén
  • i = 3 - PARANCS NYOMTATÁSA. Ebben az esetben a nyers soros karakterlánc csak "3:;" lesz mivel egyéb adatokra nincs szükség.

"xxx, yyy, zzz, aaa" a tényleges értékek. ezeket az arduino karakterláncként olvassa, és a teljes formázást a PC program végzi. I = 0 esetén ezek az értékek mindegyike 14 karakter a hardverneveknél. Ha az i = 1 vagy 2, ezek csak három karakterből állnak, elegendőek a hőmérséklet és a képkocka másodpercenkénti megjelenítéséhez. Természetesen a ":", "," és ";" a karakterek tiltottak ezeken a mezőkön.

A ":" a komponensválasztó és az értékek közötti elválasztó, a "," az értékelválasztó és a ";" a sor vége

Az adatok fogadásakor az Arduino karakterláncként menti őket, amíg a ";" szimbólum visszakapásra kerül, akkor megkeresi a ":" szimbólumot, és ezt használja a komponensSelecor értékének lekéréséhez. Ezt fogja használni a kapcsoló tok funkció a megfelelő eljárás kiválasztásához. Az allData tömb megfelelő indexének kiválasztására is használható.

Ezt követően az Arduino megkeresi a "," szimbólumot, és az értékeket az allData tömbbe helyezi.

Ha a összetevőSelector értéke 0, akkor a printName jelző értéke true lesz. Ha a komponensválasztó 3, akkor a readExtTemp () és a printData () függvényeket hívjuk meg.

4. szakasz: readExtTemp () függvény

Itt nincs sok mondanivaló, az A5 -ös érintkezőből 32 -szer olvas, és a hőmérséklet értékét karakterláncként adja ki. A lázadóknál vagyok, tehát Celsiust használok. A 100 ° C-nál magasabb értékek helytelenek, ezért "---" -ként jelennek meg a kijelzőn. A 100 ° C -nál alacsonyabb értékeknél a program úgy formázza, hogy elegendő hely legyen a kijelző 3 karakteres helyének lefedéséhez. Lehetőség van az érzékelő eltávolítására és visszahelyezésére, és nem jelenik meg furcsa érték.

5. szakasz: printData () függvény

Mint mindig, a ciklusokhoz használtam, hogy sorra nyomtassam a dolgokat a kijelzőn. Ha a printNames zászló igaz, akkor kinyomtatja a neveket, hamisra állítja a zászlót, és folytatja.

6. szakasz: vissza a hurokhoz

Eléggé megmagyaráznám, azt mondanám…

pics.h fájl

Itt tároltam a felhasználói felület összes ikonját. Lehetőség van a kijelzőn található SD -kártyaolvasó használatára is, de elegendő memóriám maradt az Arduino -ban a fekete -fehér ikonokhoz.

A Junior Icon Editor programmal terveztem őket, mivel ingyenes, és nagyon jó kis ikonok festésére. Az ikonfájlokat-p.webp

4. lépés: Visual Basic Code

Visual Basic Code
Visual Basic Code

Itt a VB kód

FIGYELMEZTETÉS: most osztom meg először a Visual Studio projektet. Csak lemásoltam a projekt mappáit, és zipeltem őket. Ha ez nem működik, kérjük, tudassa velem, hogyan lehet jobban megosztani az ilyen jellegű projekteket. Köszönöm

Ahogy korábban említettem, nem tudok GUI -t létrehozni C# vagy más nyelveken, de már régen volt néhány tapasztalatom a Visual Basicben. Letöltöttem a Visual Studio Community kiadást (természetesen ingyenes) a Visual Basic környezettel. Nos, sok mindent ki kellett találnom, mivel utoljára a VB -t használtam, vagy a 2005 -ös verzió volt … De az internet tele van jó tippekkel, mint általában.

Miután kitalált néhány felületet, az újabb verzió valójában könnyebb és rugalmasabb, mint a régi.

Ehhez a programhoz akartam valamit Windows formájú, de teljesen kezelhető a tálcaikonról. Valójában szinte csak hibakeresési célokra használtam az űrlapot, mivel szeretek szövegdobozokat és listákat elhelyezni a funkciók kimeneti értékeinek olvasásához, és néhány parancsgombot tesztelni.

A "végső" program csak egy tálcaikon, egy felugró menüvel, amely a különböző vezérlőket mutatja, és egy fő űrlap két listaládával, amelyek az Arduino -hoz küldött adatokat jelenítik meg.

Megvalósítottam egy autoconnect funkciót és egy "start at boot" funkciót. Erről majd később.

A fő program csupán a különféle példák és kódrészletek adaptációja az OpenHardwareMonitor könyvtár és a RivaTuner Shared Memory könyvtár használatával.

A program így néz ki:

  • szerezze be az adatokat az OpenHardwareMonitor és az RTSSSm könyvtárakból
  • előkészíti és formázza az összes adatot a kommunikációs protokollhoz
  • küldje el az adatokat az Arduino -nak
  • öblítse le és ismételje meg

természetesen a hardvernevek az elején olvasásra kerülnek, és csak egyszer kerülnek elküldésre.

Az FPS számláló csak akkor aktiválódik, ha kompatibilis alkalmazást használ (pl. Játék, 3D modellező program stb.), Ellenkező esetben a "---" helyőrző a kijelzőre kerül.

nem részletezem, hogyan szerezhetem be az értékeket a könyvtárakból, mivel ez jól dokumentált az interneten, és kissé érthető a kódból. Csak arról szeretnék beszélni, hogy az alaplap hőmérséklete az OpenHardwareMonitor (mostantól az OHMonitor, mert az élet túl rövid) könyvtáron keresztül jelenik meg. Van egy Asus Maximus VIII Gene MoBo készülékem, amely fu ** ton hőmérséklet -érzékelőkkel van felszerelve az alaplapon, de az OHMonitor ezeket nevezi hőmérséklet -érzékelőnek #1, #2… #n ÉS sehol nincs megadva a hőmérséklet helye. Tehát telepítenem kellett a szörnyű Asus AI suite szoftvert, ahol az érzékelők legalább NAMES -el rendelkeznek, és összehasonlítják a két program különböző hőmérsékleteit. Úgy tűnik, hogy az alaplapom általános hőérzékelője a 2. az OHMonitor számára, így ahogy a Timer1_tick aloldalon is látható a MoBo cucc alatt, a " #2" karakterláncot tartalmazó érzékelő nevét kellett keresnem a helyes leolvasás érdekében.

TL; DR: gondoskodnia kell a megfelelő alaplapi hőmérséklet -érzékelőkről. A többi valószínűleg jó lesz.

Ez azonban csak az 1. verzió, azt tervezem, hogy telepítem ezt a modult a másik számítógépemre, így valószínűleg megvalósítom az érzékelők kiválasztásának módját, és talán még az Arduino felületét is újratervezem útközben.

Az Autoconnect funkció

Ez a funkció valójában egyszerű: ha a számítógép nincs csatlakoztatva Arduino -hoz, minden x ezredmásodperc (az időzítő1 alapján) ezt a funkciót hívja meg. Megpróbál csatlakozni a számítógép minden COM portjához, ha sikeres, elküldi a "*****;" kézfogási karakterláncot. Ha a válasz "R", akkor a megfelelő készülék van csatlakoztatva, és a szokásos eljárást kell követni. Különben megpróbálja a következő COM portot.

Amint látja, sok kivétel van ebben a funkcióban. Ennek az az oka, hogy teljesen plug and play -t akartam, hiba kimenet nélkül. A kivételek kezelése során figyelmen kívül hagyhattam a külső eszköz teljes hiányát, és bármikor hotplug -olhatom és csatlakoztathatom az eszközt, amikor csak akarok, anélkül, hogy törési hibát generálnék a program számára.

Indítás indításkor funkció

Azt akartam, hogy a program indításkor induljon. Elég könnyű, mondod. Tegyen egy linket a megfelelő mappába, mondja. De nem. Az OHMonitor és az RTSS könyvtárak miatt rendszergazdai végrehajtási szintre van szükségünk az információk összegyűjtéséhez. Ez azt jelenti, hogy a bosszantó UAC képernyő minden alkalommal, amikor ezt az alkalmazást elindítják. Semmiképpen. Így adaptáltam a Matthew Wai által készített forgatókönyvet (link itt), hogy csendes indítást érhessek el a rendszerindításkor. Most bemásoltam a szkriptet a Resources1 fájlba, több részre bontva, majd megvalósítottam egy alprogramot, amely létrehoz egy (vagy eltávolít) egy Windows feladatfájlt, testreszabva az aktuális program futtatható helyével és hasonlókkal.

A rendszertálca ikonja

A NotifyIcon és a ContextMenu objektumoknak köszönhetően egy egyszerű és zsíros módszert tudtam megvalósítani az alkalmazás vezérléséhez. Csak kattintson a jobb gombbal a tálca ikonra, és megjelenik a menü. Ezek az opciók:

  • Indítás indításkor: ellenőrizheti és törölheti a jelölést, hogy engedélyezze vagy tiltsa le az indítás indításakor funkciót
  • Autoconnect: ugyanaz, mint fent, de kezeli az autoconnect funkciót
  • Csatlakozás/leválasztás: kezeli a kapcsolatot. Nem működik, ha az automatikus kapcsolat engedélyezve van
  • Frissítési idő: legördülő almenüt ad, kiválaszthatja a frissítési időt 1-10 másodperc között
  • Maximalizálás: megnyitja a főablakot. Ugyanaz, mint duplán kattintani az ikonra
  • Kilépés: magától értetődő

A szoftver összeállítása

A szoftver összeállításához valószínűleg le kell töltenie és hozzá kell adnia egy hivatkozást a kódban nem szereplő könyvtárakhoz.

Az OpenHardwareMonitor könyvtárat itt találja. Töltse le a szoftvert, nyissa meg a zip fájlt, és másolja át az OpenHardwareMonitorLib. DLL fájlt a projekt mappába.

Itt található az RTSSharedMemoryNET könyvtár linkje, amelyet le kell töltenie és le kell fordítania az architektúrájához, majd másolja az RTSS [TL; DR] moryNET. DLL fájlt a projekt mappájába.

Most hozzá kell adnia egy hivatkozást a kódjához, itt található utasításokat

Csak győződjön meg arról, hogy az RTSS [TL; DR] moryNET és a PCHwMon szerverprojekteket ugyanarra az architektúrára fordítja.

Mellékeltem egy kész telepítő programot, így az egészet telepítheti anélkül, hogy a Visual Basic programmal babrálna. X86 -ra van fordítva, x86 és x64 architektúrákon is működik. A. NET keretrendszer 4.7.2 futtatásához szükséges.

Mindenesetre telepítenie kell a RivaTunert. Itt megtalálhatja önálló alkalmazásként, vagy telepítheti az Msi Afterburner programot, amelynek tartalmaznia kell az RTServert.

5. lépés: A hardver végső megvalósítása

Ajánlott: