Sadržaj:

Hardverski monitor računara: 6 koraka (sa slikama)
Hardverski monitor računara: 6 koraka (sa slikama)

Video: Hardverski monitor računara: 6 koraka (sa slikama)

Video: Hardverski monitor računara: 6 koraka (sa slikama)
Video: НЕ ВЗДУМАЙ снимать аккумулятор с машины. Делай это ПРАВИЛЬНО ! 2024, Novembar
Anonim
PC hardverski monitor
PC hardverski monitor
PC hardverski monitor
PC hardverski monitor
PC hardverski monitor
PC hardverski monitor

Zdravo svima. Ovaj projekat sam započeo iz dva razloga: nedavno sam na svom računaru izgradio petlju za hlađenje vodom i trebalo mi je nešto da vizuelno popuni malo prostora u kućištu, a hteo sam da mogu brzo da proverim temperaturu i drugu statistiku bez da OSD shenanigani ispune ugao ekrana. Naravno da za to postoje gotova rješenja, ali većina njih jednostavno ne bi pristajala mom feng shuiju. Dakle, umjesto da u svoj kućište stavim HDMI 7 -inčni ekran s kablom koji viri iz kućišta i uvijek uključenom trakom sa zadacima programa Windows, odlučio sam izgraditi svoju igračku.

Kako nisam inženjer ni programer, već samo tip s lemilicom i nekim samoukim znanjem, ovo neće biti samo uputstva korak po korak, također ću se pokušati usredotočiti na problem aspekti rješavanja i istraživanja koji su me doveli do ove izgradnje.

ODRICANJE ODGOVORNOSTI: SVI MOJ RAD JE PODELJEN KAO KREATIVNO ZAJEDNIČKO ZASLUŽIVANJE-SHAREALIKE 4.0. UZIMAO SAM INSPIRACIJU OD MNOGIH PRIMJERA NA INTERNETU, AKO PRIZNATE NEKI DIO OVOG RADA KAO VAŠ, MOLIMO VAS DA ME OBRASITE ZA PRILIKU. NEMA NAMJENE KRŠENJA, BIĆU SREĆAN DA ISPRAVIM BILO KAKVU GREŠKU. HVALA TI

DRUGO ODRICANJE ODGOVORNOSTI: MOJ POSAO SE DIJELI KAO I. NISAM ODGOVORAN ZA BILO KAKVU ŠTETU PROVEDENU KORIŠTENJEM BILO KOG KODA ILI UPUTSTVA

Supplies

  • Arduino Nano (ili UNO ako želite)
  • TFT ekran. U mom slučaju radi se o displeju kompatibilnom sa ILI9486 / ILI9488L 3.5 ".
  • Temperatura Senso. U tom slučaju analogni senzor temperature TMP36.
  • Kablovi, žice, dupont konektori (o tome kasnije)
  • (opcionalno) Matična ploča za testiranje
  • (opcionalno, ali preporučljivo) mala ploča

Korak 1: Studija izvodljivosti (vrsta)

Kao što sam rekao, nisam htio, a HDMI zaslon zaglavio se u kućištu računara pa sam, zaogrnut vlastitom domišljatošću, počeo tražiti slične ideje na internetu. I ovo je savjet broj jedan: Google je vaš prijatelj (pa, svaka pristojna tražilica …). Živimo u svijetu u kojem više ništa nije originalno, ali umjesto da na ovu frazu gledamo s negativnim značenjem, ovo bismo mogli iskoristiti u svoju korist: što god želite stvoriti, vjerojatno je netko negdje već učinio nešto slično, pa ako ste ne znam kako implementirati ideju, velike su šanse da ćete tamo pronaći korisne informacije. Prilikom pretraživanja interneta često je korisno imati na umu dva pravila:

  1. ne trudite se potražiti stranicu 3 ili 4 bilo koje pretrage, to je gotovo uvijek gubljenje vremena. Umjesto toga
  2. promijenite pojmove za pretraživanje, samo preformulirajte pitanje s drugog gledišta (npr.: "arduino senzor temperature" -> "očitavanje temperature s arduinom").

Zapravo, tamo je puno dobrih projekata i priznajem da sam prve dane proveo proučavajući većinu tih projekata. Ali niko od njih nije bio spreman za mene, jer sam želio nešto što bi odgovaralo mojim potrebama.

Kako sam morao napraviti nešto prilagođeno, odlučio sam se usredotočiti na pravi hardver za korištenje i ostaviti softversku stranu za kasnije, jer se softver uvijek može kreirati i prilagoditi potrebama, s druge strane hardverska strana vezana sam za dostupnost i karakteristike.

Htio sam nešto zasnovano na Arduinu, jer sam to već imao, dobro je dokumentirano i zajednica cvjeta. Ovdje nema problema, kao što sam rekao prije mnogo podataka.

Želeo sam ekran dovoljno velik da se jasno vidi sa par metara udaljenosti i koji bi odgovarao izgledu moje građe, isključujući bilo koji ekran sa likom Nokia i LCD ekrana. OLED takođe ne dolaze u obzir, jer su mali. Odlučio sam se za TFT ekran u boji. Nema potrebe za ekranom osetljivim na dodir, jer će se nalaziti unutar računara. Našao sam 3.5 , već dizajniran za Arduino, ~ 15 € na Amazonu. Dovoljno dobro.

Sada, nakon što je hardver određen, fokusirao sam se na softver.

Gotovo svi projekti, sa Arduino strane, prilično su slični. Samo moram prilagoditi kôd za prikaz i za komunikacijski protokol za prikupljanje podataka iz aplikacije poslužitelja. Što se računara tiče, većina projekata je zasnovana na C, C ++, C#, python, a većina projekata nudi samo CLI interfejs ili server sličan Windows servisu. Umesto toga, želeo sam grafički interfejs. Nikada nisam koristio nijedan jezik sličan C u Windowsima, ostavimo na miru zgradu GUI-ja. Ali naučio sam neki Visual Basic prije 15 godina, pa sam pokušao i preuzeo besplatnu verziju Visual Studio od Microsofta.

Nakon što sam proučio mnogo sličnih projekata, odlučio sam se koristiti OpenHardwareMonitor kako bih dobio sve informacije o hardveru i RivaTuner za FPS, jer su oni besplatni i dovoljno dokumentirani.

Korak 2: Testiranje hardvera

Testiranje hardvera
Testiranje hardvera
Testiranje hardvera
Testiranje hardvera
Testiranje hardvera
Testiranje hardvera

Prije nego što uključite lemilicu i zauvijek učvrstite bilo koju elektroničku komponentu u vremenu i prostoru, dobra je praksa izgraditi testni prototip (savjet broj dva). Srećom, nije više 1995. godina. Danas je prilično lako složiti prilično složene prototipe čak i na malim pločama. U mom slučaju, TFT ekran je imao pad u ispisu za Arduino Uno, pa sam ga ispustio na svoj Arduino uno i počeo se igrati s bibliotekama primjera i čitati referentne priručnike kako bih razumio njegove principe rada i ograničenja.

U ovom trenutku sam smislio kako crtati linije i bitmape i pisati tekst, pa sam počeo petljati po softverskom kodiranju, ostavljajući sve sekundarne stvari za kasnije, ali ću ovdje uključiti senzor temperature.

U nekom trenutku niz liniju, imao sam prazno mjesto na ekranu, ali nijedan podatak sa senzora za PC nije bio zaista koristan, pa sam odlučio staviti senzor temperature u kućište radi temperature okoline. Zaslon pojede gotovo sve Arduino pinove, srećom analogni pin A5 se ne koristi pa sam vezao TMP36. Čak sam testirao i DHT22, ali je previše za ovu aplikaciju.

Ima dosta primjera za TMP36, upravo sam kopirao jedan od njih u funkciju. TMP35 ima 3 pina, Vin ide na 5V, GND ide na masu, a Out ide na pin A5. Postavio sam 0,1uF keramički kondenzator između Vin i GND. Kažu da je potrebno. Vjerojatno je u ovom slučaju beskorisno, ali … čak sam i namjestio Arduino analogni referentni napon na pin 3.3v radi boljeg očitanja temperature. U ovom slučaju još uvijek beskorisno, ali …

Korak 3: Arduino kod

Preuzmite i otvorite uključeni Arduino kôd da biste slijedili objašnjenje u ovom koraku. Pokušao sam ostaviti dovoljno komentara u kodu da budu jasni, a da ga ne preplave.

Definitivno će vam trebati MCUFRIEND_kbv i Adafruit GFX biblioteke. Obje se lako instaliraju iz Arduino IDE -a.

Program se može podijeliti u sljedeće odjeljke:

  1. definirati i deklarirati sve globalne varijable i druge potrebne stvari
  2. inicijalizirati zaslon, postaviti vanjsku referencu i nacrtati korisničko sučelje (sve to sadržano je u funkciji setup (), jer se mora pokrenuti samo jednom)
  3. čita podatke iz serijske veze i dodjeljuje ih u nizu (funkcija loop ())
  4. čitanje podataka vanjskog osjetnika temperature (funkcija readExtTemp ())
  5. ispis podataka na ekranu (funkcija printData ())
  6. nazad na petlju

POGLAVLJE 1: Deklaracije i definicije

U početnom odjeljku koda koristio sam mnogo pokazivača i nizova, pa sam uspio iscijediti mnogo redova koda koji se ponavljaju u kraćim ciklusima za pisanje FOR ciklusa. Da, lijen sam. Kao što vidite, deklarirao sam niz pokazivača i popunio ga svim slikama iz datoteke pics.h. Ovo je omogućilo trik ciklusa FOR za crtanje svih ikona.

POGLAVLJE 2: setup (), uglavnom crtanje korisničkog interfejsa

Odlučio sam se sa zadanim fontom jer nema prozirnu pozadinu, pa omogućava pisanje novog reda teksta preko starog bez brisanja. Korištenje drugog fonta značilo bi iscrtati crni kvadrat iznad starog teksta prije pisanja novog retka, što bi dovelo do neugodnog efekta treperenja.

Nakon nekog testiranja, došao sam do dobrog kompromisa između čitljivosti i prikazanih informacija. Prikaz sam podijelio u dvije kolone i 5 redova. U lijevoj koloni nalaze se podaci o CPU -u i matičnoj ploči, uključujući naziv CPU -a, temperaturu, opterećenje, potrošnju RAM -a i temperaturu matične ploče od vrha do dna. Desni je posvećen GPU -u i uključuje naziv GPU -a, temperaturu, opterećenje, brojač kadrova u sekundi i vanjski senzor temperature.

Kao što možete vidjeti u kodu, odlučio sam izbjeći korištenje slika na SD kartici jer se jako sporo učitava. Odlučio sam uključiti sve ikone u memoriju PROGMEM -a i iscrtati linije namjenskom naredbom drawLine (). ovo je također korisno za male korekcije korisničkog sučelja.

U slabom pokušaju da korisničkom sučelju dam privid dubine, nacrtao sam dvije stvari (linije, pravokutnici, slike) različitim bojama i s malim pomakom. Nažalost, nisam se nadao rezultatu, ali će uspjeti.

Posljednji redovi ove funkcije služe za ispisivanje rezerviranih mjesta na TFT -u, sve dok Arduino ne primi podatke.

POGLAVLJE 3: glavna petlja (), dohvaćanje podataka i oblikovanje

Ovdje se događa čarolija: podaci se primaju serijski, dodjeljuju se ispravnoj varijabli, a zatim se ispisuju. Da bih sve to postigao u najmanjem broju redova, koristio sam naredbu switch case i ciklus for.

Komunikacijski protokol s kojim sam došao podijeljen je u dva dijela: početno izvršavanje nakon rukovanja i stvarni dio podataka.

Rukovanje je potrebno za implementaciju funkcije automatskog povezivanja pri pokretanju računarskog programa. To ide ovako:

  • PC šalje niz rukovanja (u ovom slučaju samo "*****;")
  • Arduino šalje odgovor

Lako peasy.

Dio podataka izgleda ovako: "i: xxx, yyy, zzz, aaa,;" značenje je:

"i" je indeks, nazvao sam ga componentSelector u kodu. "i" vrijednosti su:

  • i = 0 - IMENA. Sljedeće vrijednosti su imena prikazana u prvom redu na ekranu. Ovo će se poslati i odštampati na ekranu samo jednom, jer je danas prilično teško zamijeniti CPU i GPU …
  • i = 1 - PODACI 1. KOLONE - sljedeće vrijednosti prikazane su u lijevoj polovini ekrana odozgo prema dolje. U mom slučaju: temp. Procesora, opterećenje procesora, upotreba RAM -a, temp. Matične ploče.
  • i = 2 - 2. KOLONSKI PODACI - kao gore, ali za desnu polovinu ekrana
  • i = 3 - KOMANDA ZA ŠTAMPANJE. U ovom slučaju sirovi serijski niz bit će samo "3:;" jer drugi podaci nisu potrebni.

"xxx, yyy, zzz, aaa" su stvarne vrijednosti. arduino ih čita kao nizove, a cijelo oblikovanje vrši PC program. Za i = 0 ove vrijednosti imaju po 14 znakova za nazive hardvera. Za i = 1 ili 2 to će biti samo tri znaka svaki, dovoljan za prikaz temperature i sličica u sekundi. Naravno ":", "," i ";" znakovi su zabranjeni u ovim poljima.

":" Je separator između componentSelector i vrijednosti, "," je separator vrijednosti i ";" je kraj linije

Prilikom primanja podataka, Arduino će ih spremiti kao niz do ";" simbol je primljen, tada će tražiti simbol ":" i upotrijebit će ga da dobije vrijednost componentSelecor. Ovo će se koristiti za funkciju prekidača za odabir ispravne procedure koju treba slijediti. Također se koristi za odabir ispravnog indeksa u nizu allData.

Nakon toga Arduino će potražiti simbol "," i nastavit će stavljati vrijednosti u niz allData.

Ako je componentSelector 0, zastavica printName bit će postavljena na true. Ako je componentSelector 3, pozivaju se funkcije readExtTemp () i printData ().

Odeljak 4: funkcija readExtTemp ()

Ovdje nema puno toga za reći, čita 32 puta sa pina A5 i daje vrijednost temperature kao niz. Ja sam s pobunjenicima, pa koristim Celzijus. Sve što je više od 100 ° C nije točno pa će se na zaslonu prikazati kao "---". Za sve manje od 100 ° C bit će oblikovano tako da ima dovoljno razmaka za pokrivanje prostora od 3 znaka na ekranu. Moguće je ukloniti i ponovo umetnuti senzor i neće se prikazati čudna vrijednost.

Odeljak 5: funkcija printData ()

Kao i uvek, koristio sam cikluse za sekvencijalno štampanje stvari na ekranu. Ako je zastavica printNames istinita, ispisat će imena, postaviti zastavicu na false i nastaviti.

Odeljak 6: nazad na petlju

Dovoljno sam objašnjavajući, rekao bih…

pics.h datoteku

Ovdje sam pohranio sve ikone za korisničko sučelje. Moguće je koristiti čitač SD kartica uključen u ekran, ali meni je ostalo dovoljno memorije u Arduinu za crno -bijele ikone.

Dizajnirao sam ih pomoću programa Junior Icon Editor jer je besplatan i prilično dobar za slikanje malih ikona pikselima. Morao sam pretvoriti datoteke ikona (spremljene kao PNG) pomoću internetskog alata SKAARHOJ.

Korak 4: Visual Basic kod

Visual Basic Code
Visual Basic Code

Evo VB koda

OBAVIJEST: ovo je prvi put da dijelim projekat Visual Studio. Upravo sam kopirao fascikle projekta i zipnuo ih. Ako ovo ne uspije, javite mi bolji način dijeljenja ovakvih projekata. Hvala ti

Kao što sam već rekao, ne mogu stvoriti GUI na C# ili drugim jezicima, ali sam već odavno imao iskustva u Visual Basicu. Preuzeo sam izdanje Visual Studio Community (besplatno je, naravno) sa okruženjem Visual Basic. Pa, morao sam shvatiti mnogo toga, jer sam zadnji put koristio VB verziju 2005. ili tako nešto … Ali internet je, kao i obično, pun dobrih natuknica.

Nakon što smo shvatili neke stvari o sučelju, novija verzija je zapravo lakša i fleksibilnija od stare.

Za ovaj program želio sam nešto s Windows obrascem, ali potpuno upravljivo sa ikone u sistemskoj paleti. Zapravo sam obrazac koristio gotovo samo u svrhu otklanjanja grešaka, jer volim staviti tekstualne okvire i liste za čitanje izlaznih vrijednosti funkcija i neke komandne tipke za njihovo testiranje.

"Završni" program je samo ikona u ladici s skočnim izbornikom koji prikazuje različite kontrole i glavni obrazac s dva okvira s popisima koji prikazuju podatke poslane na Arduino.

Implementirao sam funkciju automatskog povezivanja i funkciju "pokreni pri pokretanju". O tome kasnije.

Glavni program je samo adaptacija različitih primjera i isječaka koda pomoću biblioteke OpenHardwareMonitor i biblioteke zajedničke memorije RivaTuner.

Program ide ovako:

  • nabavite podatke iz biblioteka OpenHardwareMonitor i RTSSSm
  • pripremiti i formatirati sve podatke za komunikacijski protokol
  • pošaljite podatke na Arduino
  • isperite i ponovite

naravno da se nazivi hardvera čitaju na početku i šalju samo jednom.

FPS brojač se aktivira samo kada se koristi kompatibilna aplikacija (npr. Igra, program za 3D modeliranje itd.), U suprotnom će se rezervirano mjesto "---" poslati na ekran.

Neću detaljno objašnjavati kako dobiti vrijednosti iz biblioteka, jer je to dobro dokumentirano na internetu i donekle razumljivo iz koda. Samo želim reći o problemima pri postizanju temperature matične ploče kroz OpenHardwareMonitor (od sada OHMonitor, jer je život prekratak). Imam Asus Maximus VIII Gene MoBo, koji je opremljen sa senzorima temperature ** temperature na matičnoj ploči, ali OHMonitor ih imenuje kao Senzor temperature #1, #2… #n I nigdje nije navedena lokacija temperature. Tako da sam morao instalirati užasan softver za Asus AI Suite, gdje senzori imaju najmanje NAMES i uspoređuju različite temperature između dva programa. Izgleda da je generički senzor temperature moje matične ploče #2 za OHMonitor, pa kao što vidite u podmeniju Timer1_tick ispod MoBo stvari, morao sam potražiti naziv senzora koji sadrži niz " #2" da bih dobio ispravno očitanje.

TL; DR: sami ćete se morati pobrinuti za ispravne senzore temperature matične ploče. Ostatak je vjerovatno dobar.

Međutim, ovo je samo verzija 1, planiram instalirati ovaj gadget na svoj drugi računar, pa ću vjerojatno implementirati način odabira senzora i možda čak i redizajnirati sučelje na Arduinu u pokretu.

Funkcija automatskog povezivanja

Ova je funkcija zapravo jednostavna: ako računalo nije povezano s Arduinom, svakih x milisekundi (na temelju Timer1) ova se funkcija poziva. Pokušava se povezati sa svakim COM portom na računaru, ako uspije, šalje niz za rukovanje "*****;". Ako je odgovor "R", tada je priključen ispravan uređaj i slijedi se uobičajena procedura. Inače, pokušava sljedeći COM port.

Kao što vidite, u ovoj funkciji postoji mnogo izuzetaka. To je zato što sam htio potpuno plug and play, bez greške. Rukujući iznimkama, uspio sam zanemariti potpuno odsustvo vanjskog uređaja, a čak mogu i vruće uključiti i hotunplug uređaj kad god želim, bez generiranja greške u prekidu programa.

Funkcija Start at Boot

Htio sam da se program pokrene pri pokretanju. Prilično lako, kažete. Recite, stavite vezu u odgovarajući folder. Ali ne. Zbog biblioteka OHMonitor i RTSS, potreban nam je nivo izvršenja administratora za prikupljanje informacija. To znači krajnje dosadan UAC ekran svaki put kada se ova aplikacija pokrene. Nema šanse. Zato sam prilagodio skriptu koju je napravio Matthew Wai (link ovdje) kako bih postigao tihi početak pri pokretanju. Upravo sam kopirao skriptu u datoteku Resources1, podijeljenu na nekoliko dijelova, a zatim implementirao potprogram koji stvara (ili uklanja) datoteku sa zadacima Windows, prilagođenu trenutnoj izvršnoj lokaciji programa i slično.

Ikona sistemske ladice

Zahvaljujući objektima NotifyIcon i ContextMenu, uspio sam implementirati jednostavan i mastan način za kontrolu aplikacije. Desnim klikom na ikonu u ladici i pojavit će se izbornik. Postoje ova mišljenja:

  • Počni pri pokretanju: možete ga označiti i poništiti da biste omogućili ili onemogućili funkciju pokretanja pri pokretanju
  • Automatsko povezivanje: isto kao gore, ali upravlja funkcijom automatskog povezivanja
  • Connect/Disconnect: povezuje vezu. Ne radi s omogućenim automatskim povezivanjem
  • Refresh time: daje padajući podmeni, možete izabrati vreme osvežavanja od 1 do deset sekundi
  • Uvećaj: otvara glavni prozor. Isto kao dvostruki klik na ikonu
  • Izlaz: samo po sebi razumljivo

Sastavljanje softvera

Za kompajliranje softvera vjerovatno ćete morati preuzeti i dodati referencu na biblioteke koje nisu uključene u kôd.

Biblioteku OpenHardwareMonitor možete pronaći ovdje. Morate preuzeti softver, otvoriti zip datoteku i kopirati datoteku OpenHardwareMonitorLib. DLL u fasciklu projekta.

Evo veze za biblioteku RTSSharedMemoryNET, koju morate preuzeti i kompajlirati za svoju arhitekturu, a zatim kopirati RTSS [TL; DR] moryNET. DLL u fasciklu vašeg projekta.

Sada morate dodati referencu u svoj kôd, upute ovdje

Samo obavezno sastavite i RTSS [TL; DR] moryNET i PCHwMon poslužiteljske projekte za istu arhitekturu.

Uključio sam gotov program za postavljanje, tako da možete instalirati cijelu stvar bez petljanja po Visual Basicu. Kompiliran je za x86, radit će i na x86 i na x64 arhitekturi. Zahtijeva da se. NET framework 4.7.2 pokrene.

U svakom slučaju morate instalirati RivaTuner. Ovdje ga možete pronaći kao samostalnu aplikaciju ili možete instalirati Msi Afterburner, koji bi trebao uključivati RTServer.

Korak 5: Konačna implementacija hardvera

Preporučuje se: