Sisukord:

Arvuti riistvaramonitor: 6 sammu (piltidega)
Arvuti riistvaramonitor: 6 sammu (piltidega)

Video: Arvuti riistvaramonitor: 6 sammu (piltidega)

Video: Arvuti riistvaramonitor: 6 sammu (piltidega)
Video: Arvuti ehitamise juhend 2024, Juuli
Anonim
PC riistvara monitor
PC riistvara monitor
PC riistvara monitor
PC riistvara monitor
PC riistvara monitor
PC riistvara monitor

Tere kõigile. Alustasin selle projektiga kahel põhjusel: ehitasin hiljuti oma arvutisse vesijahutusahela ja vajasin midagi, mis visuaalselt ruumi korpuses täidaks JA tahtsin, et temperatuuri ja muud statistikat kontrollitaks kiire pilguga, ilma et OSD -d tuleks täita ekraani nurgas. Loomulikult on selleks valmis lahendusi, kuid enamik neist lihtsalt ei sobiks minu feng shui -ga. Niisiis, selle asemel, et panna oma korpusesse HDMI 7 -tolline ekraan koos juhtmega, mis jääb korpusest välja ja Windowsi tegumiriba on alati sisse lülitatud, otsustasin ma oma mänguasja ehitada.

Kuna ma ei ole insener ega programmeerija, vaid lihtsalt jootekolbi ja mõne iseõppinud teadmisega mees, pole see lihtsalt samm-sammult õpetatav, proovin ka probleemile keskenduda lahendamise ja uurimise aspektid, mis viisid selle ehitamiseni.

LAHTIÜTLUSTUS: KÕIKI TÖÖD JAGATAKSE LOOVALT ÜHISELT OSALEMISEKS-SHAREALIKE 4.0. MA VÕTSIN INSPIRATSIOONI PALJUDE NÄITETE JUURDE INTERNETIS, KUI TE TUNNETATE MIDAGI OSA SELLEST TÖÖST OMA SINA, PALUN VÕTKE MIND VÕTTA KOHTA. RIKKUMIST EI OLE KAVANDATUD, mul on hea meel IGA VIGA PARANDADA. AITÄH

TEINE VASTUTUS: Minu tööd jagatakse sellisena, nagu see on. MA EI VASTUTA MISI KOODI VÕI JUHISTE KASUTAMISEST TAGATUD KAHJUDE KOHTA

Tarvikud

  • Arduino Nano (või soovi korral UNO)
  • TFT ekraan. Minu puhul on see ILI9486 / ILI9488L ühilduv 3,5 -tolline ekraan.
  • Temperatuur Senso. Sel juhul analoog TMP36 temperatuuriandur.
  • Kaablid, juhtmed, dupont -pistikud (sellest lähemalt hiljem)
  • (valikuline) Leivaplaat testimiseks
  • (valikuline, kuid soovitatav) väike perfboard

1. samm: teostatavusuuring (sorta Of)

Nagu ma ütlesin, ma ei tahtnud ja HDMI -kuvar jäi arvuti korpusesse kinni, nii et hakkasin oma leidlikkusega varjatult otsima sarnaseid ideid Internetist. Ja see on näpunäide number üks: Google on teie sõber (noh, iga korralik otsingumootor …). Me elame maailmas, kus miski pole tegelikult enam originaalne, kuid selle negatiivse tähendusega fraasi vaatamise asemel võiksime seda kasutada oma huvides: mida iganes soovite luua, on ilmselt keegi kuskil juba midagi sarnast teinud, nii et kui ei tea, kuidas ideed ellu viia, suure tõenäosusega leiate sealt kasulikku teavet. Internetist otsides on sageli kasulik meeles pidada kahte reeglit:

  1. ärge viitsige otsingu 3. või 4. leheküljele järele minna, see on peaaegu alati ajaraiskamine. Selle asemel
  2. muutke otsingutermineid, sõnastage küsimus lihtsalt teisest vaatenurgast (st: "arduino temperatuuriandur" -> "lugege temperatuuri arduino abil").

Tegelikult on see seal häid projekte täis ja ma tunnistan, et veetsin esimesed päevad enamikku neist projektidest õppides. Kuid ükski neist ei olnud valmis minu eest minema, sest ma tahtsin midagi, mis sobiks minu vajadustega.

Kuna ma pidin midagi kohandama, otsustasin keskenduda õigele riistvarale, mida kasutada, ja jätta tarkvara poole hilisemaks, sest tarkvara saab alati luua ja vastavalt vajadustele kohandada, teisest küljest olen riistvara poolelt seotud kättesaadavusega. ja funktsioone.

Ma tahtsin midagi Arduino põhjal, sest mul oli see juba olemas, see on hästi dokumenteeritud ja selle kogukond õitseb. Siin pole probleemi, nagu ma ütlesin enne rikkalikku teavet.

Tahtsin, et ekraan oleks piisavalt suur, et seda paari meetri kauguselt selgelt näha oleks ja see sobiks minu ehituse välimusega, see välistas igasuguse nokia ja LCD -tähemärgi ekraani. Ka OLED on välistatud, kuna need on väikesed. Nii et ma valisin värvilise TFT -ekraani. Puuteekraani pole vaja, kuna see asub arvuti sees. Leidsin 3,5 -tollise, juba Arduino jaoks mõeldud, Amazonist ~ 15 €. Piisavalt hea.

Nüüd, pärast riistvara täpsustamist, keskendusin tarkvarale.

Peaaegu kõik projektid, Arduino pool, on üsna sarnased. Pean lihtsalt kohandama ekraani koodi ja suhtlusprotokolli, et serverirakendusest andmeid koguda. Arvuti poolel põhines enamik projekte C, C ++, C#, pythonil ja enamik projekte pakkus ainult CLI-liidest või Windowsi teenusesarnast serverit. Tahtsin hoopis graafilist kasutajaliidest. Ma ei kasutanud Windowsis kunagi ühtegi C-tüüpi keelt, jätke GUI hoone rahule. Kuid ma õppisin Visual Basicu 15 aastat tagasi, seega proovisin seda ja laadisin Microsofti tasuta Visual Studio versiooni alla.

Pärast paljude sarnaste projektide uurimist otsustasin kasutada OpenHardwareMonitorit, et hankida kogu riistvarainfo ja RivaTuner FPS -i jaoks, kuna need on tasuta ja piisavalt dokumenteeritud.

2. samm: riistvara testimine

Riistvara testimine
Riistvara testimine
Riistvara testimine
Riistvara testimine
Riistvara testimine
Riistvara testimine

Enne jootekolbi sisselülitamist ja iga elektroonilise komponendi ajas ja ruumis igaveseks kinnitamist on hea tava luua katseprototüüp (näpunäide number kaks). Õnneks pole enam aasta 1995. Tänapäeval on üsna lihtne korraldada üsna keerukaid prototüüpe isegi väikestel leivaplaatidel. Minu puhul oli TFT -ekraanil Arduino Uno pistikupesa langus, nii et ma lasin selle oma Arduino uno peale ja hakkasin näiteteekidega mängima ning lugesin kasutusjuhendeid, et mõista selle tööpõhimõtteid ja piiranguid.

Siinkohal mõtlesin välja, kuidas joonistada jooni ja bitikaarte ning kirjutada teksti, nii et hakkasin rabelema tarkvara kodeerimisega, jättes kõik sekundaarsed asjad hilisemaks, kuid lisan siia temperatuurianduri.

Mingil hetkel oli mul ekraanil tühi koht, kuid ükski arvuti andurite andmetest ei olnud tõesti kasulik, nii et otsustasin ümbritseva õhu temperatuuri jaoks korpuse sisse panna temperatuurianduri. Ekraan sööb peaaegu kõik Arduino nööpnõelad ära, õnneks analoogpistik A5 on kasutamata, seega sidusin TMP36 kinni. Ma isegi testisin DHT22, kuid see on selle rakenduse jaoks liiga suur.

TMP36 kohta on palju näiteid, ma lihtsalt kopeerisin ühe neist funktsioonist. TMP35 -l on 3 tihvti, Vin läheb 5V, GND maandub ja Out läheb pin A5. Asetasin Vini ja GND vahele 0,1 uF keraamilise kondensaatori. Nad ütlevad, et seda on vaja. Tõenäoliselt on see sel juhul kasutu, kuid… ma seadsin isegi parema temperatuuri lugemiseks Arduino analoog -võrdluspinge 3,3 v pinile. Sel juhul on see kasutu, kuid…

Samm: Arduino kood

Palun laadige alla ja avage kaasasolev Arduino kood, et järgida selle sammu selgitusi. Püüdsin koodi jätta piisavalt kommentaare, et see oleks selge ilma seda üleujutamata.

Teil on kindlasti vaja raamatukogusid MCUFRIEND_kbv ja Adafruit GFX. Mõlemad on kergesti paigaldatavad Arduino IDE -st.

Programmi saab jagada järgmisteks osadeks:

  1. määratleda ja deklareerida kõik globaalsed muutujad ja muu vajalik
  2. lähtestage kuva, määrake väline viide ja joonistage kasutajaliides (kõik see sisaldub funktsioonis setup (), kuna see peab toimima ainult üks kord)
  3. lugeda jadaühendusest andmeid ja eraldada need massiivis (funktsioon (loop ())
  4. väliste temp -andurite andmete lugemine (funktsioon readExtTemp ())
  5. andmete printimine ekraanile (printData () funktsioon)
  6. tagasi silmuse juurde

1. JAGU: Deklaratsioonid ja mõisted

Koodi algses osas kasutasin palju viiteid ja massiive, nii et olen suutnud tsüklite FOR kirjutamiseks palju korduvaid koodiridu lühemaks pigistada. Jah, ma olen laisk. Nagu näete, kuulutasin kursorimassiivi ja täitsin selle kõigi piltidega failist pics.h. See võimaldas teha tsüklit FOR kõigi ikoonide joonistamiseks.

2. OSA: seadistamine (), enamasti kasutajaliidese joonis

Ma otsustasin vaikimisi fondiga, kuna sellel pole läbipaistvat tausta, nii et see võimaldab kirjutada uue tekstirida vana kohale, ilma et oleks vaja seda kustutada. Teise fondi kasutamine tähendanuks enne uue rea kirjutamist vana teksti kohale musta ruudu joonistamist, mis oleks toonud kaasa ebameeldiva värelusefekti.

Pärast mõningaid katsetusi jõudsin hea kompromissini loetavuse ja kuvatava teabe vahel. Jagasin ekraani kaheks veeruks ja 5 reaks. Vasak veerg hõlmab CPU ja emaplaadi andmeid, sealhulgas ülevalt alla CPU nimi, temperatuur, koormus, RAM -i kasutamine ja emaplaadi temperatuur. Õige, mis on pühendatud GPU -le ja sisaldab GPU nime, temperatuuri, koormust, kaadreid sekundis ja välist temperatuuriandurit.

Nagu koodist näha, otsustasin vältida piltide kasutamist SD -kaardil, kuna selle laadimine on tõesti aeglane. Otsustasin lisada kõik ikoonid PROGMEM mällu ja joonistada jooned spetsiaalse drawLine () käsuga. see on kasulik ka väikeste kasutajaliidese paranduste jaoks.

Nõrgas katses anda kasutajaliidesele sügavust meenutav joonistus joonistasin kaks kõike (jooned, ristkülikud, pildid) erinevate värvidega ja väikese nihkega. Kahjuks pole see tulemus, mida ma lootsin, kuid see teeb asja ära.

Selle funktsiooni viimased read on mõeldud kohatäidete printimiseks TFT -le, kuni Arduino andmed kätte saab.

3. OSA: põhisilmus (), andmete toomine ja vormindamine

Siin juhtub võlu: andmed võetakse vastu jada kaudu, määratakse õigele muutujale ja seejärel trükitakse. Selle kõige väikseima arvu ridade saavutamiseks kasutasin lülituskorpuse käsku ja tsüklit.

Kommunikatsiooniprotokoll, millega kaasa tulin, on jagatud kaheks osaks: esialgne käepigistus ja tegelik andmeosa.

Käepigistus on vajalik automaatühenduse funktsiooni rakendamiseks arvutiprogrammi käivitamisel. See käib nii:

  • PC saadab käepigistusstringi (antud juhul on see lihtsalt "*****;")
  • Arduino saadab vastuse tagasi

Lihtne.

Andmete osa näeb välja selline: "i: xxx, yyy, zzz, aaa,;" tähendus on:

"i" on indeks, nimetasin seda koodis komponendivalijaks. "i" väärtused on järgmised:

  • i = 0 - NIMED. Järgmised väärtused on nimed, mis on näidatud kuvari esimesel real. See saadetakse ja prinditakse ekraanile ainult üks kord, tänase seisuga on protsessori ja GPU vahetamine üsna keeruline …
  • i = 1 - 1. VEERGUANDMED - järgmised väärtused kuvatakse ekraani vasakus pooles ülevalt alla. Minu puhul: CPU temp, CPU koormus, RAM kasutamine, emaplaadi temp.
  • i = 2 - 2. VEERGI ANDMED - nagu eespool, kuid ekraani parema poole jaoks
  • i = 3 - PRINTA KÄSK. Sel juhul on toores jadastring lihtsalt "3:;" kuna muid andmeid pole vaja.

"xxx, yyy, zzz, aaa" on tegelikud väärtused. arduino loeb neid stringidena ja kogu vorminduse teeb arvutiprogramm. Kui i = 0, on need väärtused riistvaranimede jaoks 14 tähemärki. Kui i = 1 või 2, on need vaid kolm tähemärki, millest piisab temperatuuride ja kaadrite näitamiseks sekundis. Muidugi ":", "," ja ";" märgid on nendel väljadel keelatud.

":" On eraldaja komponendi valija ja väärtuste vahel, "," on väärtuste eraldaja ja ";" on rea lõpp

Andmete vastuvõtmisel salvestab Arduino need stringina kuni ";" sümbol võetakse tagasi, siis otsib see sümbolit ":" ja kasutab seda komponendiSelecor väärtuse saamiseks. Seda kasutatakse lülitusümbrise funktsiooni jaoks, et valida õige toiming. Seda kasutatakse ka allData massiivi õige indeksi valimiseks.

Pärast seda otsib Arduino sümbolit "," ja lisab väärtused massiivi allData.

Kui komponentSelector on 0, määratakse lipu printName väärtuseks tõene. Kui komponentSelector on 3, kutsutakse funktsioonid readExtTemp () ja printData ().

4. jagu: funktsioon readExtTemp ()

Siin pole palju öelda, see loeb tihvtist A5 32 korda ja väljastab temperatuuri väärtuse stringina. Olen koos mässulistega, seega kasutan Celsiust. Kõik, mis ületab 100 ° C, on vale, nii et see kuvatakse ekraanil "---". Alla 100 ° C jaoks vormindatakse nii, et ekraanil oleks piisavalt ruumi, et katta 3 tähemärki. Andurit on võimalik eemaldada ja uuesti sisestada ning mingit imelikku väärtust ei kuvata.

5. jagu: funktsioon printData ()

Nagu alati, kasutasin tsüklit, et printida ekraanile asju järjest. Kui lipp printNames on tõene, prindib see nimed, määrab lipu väärtuseks Väär ja jätkab.

6. jagu: tagasi silmuse juurde

Ise piisavalt seletav, ma ütleks …

pics.h fail

Siin salvestasin kõik kasutajaliidese ikoonid. Võimalik on kasutada ekraanile lisatud SD -kaardilugejat, kuid mul oli Arduinos oma mustvalgete ikoonide jaoks piisavalt mälu.

Kujundasin need Junior Icon Editoriga, kuna see on tasuta ja väikeste ikoonide pikslite maalimiseks üsna hea. Pidin ikoonifailid (salvestatud-p.webp

Samm 4: Visual Basic Code

Visuaalne põhikood
Visuaalne põhikood

Siin on VB kood

MÄRKUS: see on esimene kord, kui jagan Visual Studio projekti. Ma lihtsalt kopeerisin projekti kaustad ja tõmbasin need kokku. Kui see ei tööta, andke mulle teada, kuidas sedalaadi projekte jagada. Aitäh

Nagu ma varem ütlesin, ei saa ma luua GUI -d C# või teistes keeltes, kuid mul oli Visual Basicuga kogemusi juba ammu. Laadisin Visual Studio Community väljaande (see on muidugi tasuta) koos Visual Basicu keskkonnaga. Noh, ma pidin palju asju välja mõtlema, kuna viimati kasutasin VB -d versioonis 2005 või nii… Kuid Internet on häid näpunäiteid täis, nagu tavaliselt.

Pärast mõningate liideseainete välja selgitamist on uuem versioon tegelikult lihtsam ja paindlikum kui vana.

Selle programmi jaoks tahtsin midagi Windowsi vormiga, kuid süsteemisalve ikoonilt täielikult hallatavat. Ma tegelikult kasutasin seda vormi peaaegu ainult silumiseks, kuna mulle meeldib panna tekstikaste ja loendeid funktsioonide väljundväärtuste lugemiseks ning mõningaid käsunuppe nende testimiseks.

"Viimane" programm on lihtsalt salveikoon, millel on hüpikmenüü, mis näitab erinevaid juhtelemente, ja põhivorm koos kahe loendiboksiga, mis näitavad Arduinole saadetud andmeid.

Rakendasin automaatse ühendamise funktsiooni ja käivitamise alguse funktsiooni. Sellest pikemalt hiljem.

Põhiprogramm on lihtsalt kohandatud erinevatest näidetest ja koodilõikudest, kasutades teeki OpenHardwareMonitor ja teeki RivaTuner.

Programm käib nii:

  • saada andmeid OpenHardwareMonitor ja RTSSSm raamatukogudest
  • valmistada ette ja vormindada kõik andmed sideprotokolli jaoks
  • saatke andmed Arduinole
  • loputage ja korrake

muidugi loetakse riistvara nimed alguses ja saadetakse ainult üks kord.

FPS-loendur aktiveerub ainult ühilduva rakenduse kasutamisel (nt mäng, 3D-modelleerimisprogramm jne), vastasel juhul saadetakse ekraanile kohatäide "---".

Ma ei hakka põhjalikult selgitama, kuidas raamatukogudest väärtusi saada, kuna see on Internetis hästi dokumenteeritud ja koodist mõnevõrra arusaadav. Tahan lihtsalt rääkida probleemidest, mis tekivad emaplaadi temperatuuri näitamisel OpenHardwareMonitor (nüüdsest OHMonitor, sest elu on liiga lühike) raamatukogu kaudu. Mul on Asus Maximus VIII Gene MoBo, mis on emaplaadil varustatud fu ** ton temperatuurianduritega, kuid OHMonitor nimetab neid temperatuurianduriks #1, #2… #n JA kusagil pole täpsustatud temperatuuri asukohta. Nii et ma pidin installima kohutava Asus AI suite tarkvara, kus anduritel on vähemalt NAMES ja võrreldakse kahe programmi erinevaid temperatuure. Tundub, et minu emaplaadi üldine temperatuuriandur on OHMonitori jaoks nr 2, nii et nagu näete MoBo kraami all asuvas alamosas Timer1_tick, pidin õige lugemise saamiseks otsima anduri nime, mis sisaldab stringi " #2".

TL; DR: peate hoolitsema õigete emaplaadi temperatuuriandurite eest. Ülejäänud on ilmselt hea minna.

Kuid see on alles versioon 1, kavatsen selle vidina oma teise arvutisse installida, nii et tõenäoliselt rakendan andurite valimise viisi ja võib -olla isegi Arduino liidese liikvel olles.

Automaatühenduse funktsioon

See funktsioon on tegelikult lihtne: kui arvuti pole Arduinoga ühendatud, nimetatakse seda funktsiooni iga x millisekundi järel (taimer1 põhjal). See proovib ühenduse luua iga arvuti COM -pordiga, kui see õnnestub, saadab käepigistusstringi "*****;". Kui vastus on "R", ühendatakse õige seade ja järgitakse tavalist protseduuri. Muidu proovib see järgmist COM -porti.

Nagu näete, on selle funktsiooni puhul palju erandeid. Selle põhjuseks on asjaolu, et tahtsin seda täielikult ühendada ja mängida ilma veaväljundita. Eranditega tegeledes olen suutnud panna selle ignoreerima välise seadme täielikku puudumist ning võin isegi seadme kuumalt ja kuumalt lahti ühendada, kui tahan, ilma et see tekitaks programmile tõrkeid.

Funktsioon Start At Boot

Tahtsin, et programm algaks alglaadimisel. Üsna lihtne, ütlete. Pange link vastavasse kausta, ütlete. Kuid mitte. OHMonitori ja RTSS raamatukogude tõttu vajame teabe kogumiseks administraatori täitmistaset. See tähendab iga kord, kui see rakendus käivitatakse, täiesti tüütu UAC -ekraan. Pole võimalik. Nii et kohandasin Matthew Wai tehtud stsenaariumi (link siin), et saavutada käivitamisel vaikne algus. Ma lihtsalt kopeerisin skripti ressursside1 faili, jagatuna mitmeks osaks, seejärel rakendasin alamprogrammi, mis loob (või eemaldab) Windowsi ülesandefaili, kohandades selle praeguse programmi käivitatava asukoha ja muude asjadega.

Süsteemisalve ikoon

Tänu NotifyIcon ja ContextMenu objektidele olen suutnud rakenduse juhtimiseks rakendada lihtsat ja rasvast viisi. Lihtsalt paremklõpsake salveikooni ja ilmub menüü. Seal on need valikud:

  • Alusta käivitamisel: saate selle käivitamisel käivitamise lubamiseks või keelamiseks kontrollida ja tühjendada
  • Automaatne ühendamine: sama nagu eespool, kuid tegeleb automaatse ühendamise funktsiooniga
  • Ühenda/katkesta: see tegeleb ühenduse loomisega. Ei tööta, kui automaatne ühendus on lubatud
  • Värskendusaeg: annab rippmenüü alammenüü, saate valida värskendamisaja 1 kuni 10 sekundit
  • Maksimeeri: avab peaakna. Sama, mis topeltklõps ikoonil
  • Väljumine: iseenesestmõistetav

Tarkvara koostamine

Tarkvara kompileerimiseks peate tõenäoliselt alla laadima ja lisama viite raamatukogudele, mida kood ei sisalda.

Teeki OpenHardwareMonitor leiate siit. Peate tarkvara alla laadima, avama zip -faili ja kopeerima projekti kausta faili OpenHardwareMonitorLib. DLL.

Siin on raamatukogu RTSSharedMemoryNET link, peate oma arhitektuuri jaoks alla laadima ja kompileerima, seejärel kopeerige oma projekti kausta RTSS [TL; DR] moryNET. DLL.

Nüüd peate oma koodi lisama viite, juhised siin

Kompileerige kindlasti sama arhitektuuri jaoks nii RTSS [TL; DR] moryNET kui ka PCHwMon serveriprojektid.

Kaasasin valmis häälestusprogrammi, nii et saate kogu selle installida ilma Visual Basicuga näpistamata. See on koostatud x86 jaoks, töötab nii x86 kui ka x64 arhitektuuriga. See nõuab. NET -i raamistiku 4.7.2 käivitamist.

Igal juhul peate installima RivaTuneri. Selle leiate siit iseseisva rakendusena või saate installida Msi Afterburneri, mis peaks sisaldama RTServerit.

5. samm: riistvara lõplik juurutamine

Soovitan: