Sadržaj:

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

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

Video: Hardverski monitor računala: 6 koraka (sa slikama)
Video: ЗЛО ЕЩЕ ЗДЕСЬ ЖУТКАЯ НОЧЬ В СТРАШНОМ ДОМЕ / EVIL IS STILL HERE A TERRIBLE NIGHT IN A TERRIBLE HOUSE 2024, Studeni
Anonim
Hardverski monitor računala
Hardverski monitor računala
Hardverski monitor računala
Hardverski monitor računala
Hardverski monitor računala
Hardverski monitor računala

Pozdrav svima. Započeo sam ovaj projekt iz dva razloga: nedavno sam na svom računaru izgradio petlju za hlađenje vodom i trebalo mi je nešto da vizualno popuni malo prostora u kućištu, a želio sam moći brzo provjeriti temperature i ostale statističke podatke, a da OSD shenanigani ne ispune kut ekrana. Naravno da za to postoje gotova rješenja, ali većina njih jednostavno ne bi pristajala mom feng shuiju. Dakle, umjesto da u kućište stavim HDMI 7 -inčni zaslon s kabelom koji strši iz kućišta i uvijek uključenom trakom zadataka za 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 korak po korak instrukcije, 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 DJELI SE KAO KREATIVNA ZAJEDNIČKA ATRIBUCIJA-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, BIT ĆU SREĆAN ISPRAVITI SVAKU GREŠKU. HVALA VAM

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

Pribor

  • Arduino Nano (ili UNO ako želite)
  • TFT zaslon. U mom slučaju to je 3,5 -inčni zaslon kompatibilan s ILI9486 / ILI9488L.
  • Temperatura Senso. U tom slučaju analogni senzor temperature TMP36.
  • Kablovi, žice, dupont konektori (o tome kasnije)
  • (izborno) Oglasna ploča za testiranje
  • (izborno, ali preporučljivo) mala ploča

Korak 1: Studija izvedivosti (vrsta)

Kao što sam rekao, nisam želio, a HDMI zaslon zaglavio se u kućištu računala 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 ovaj izraz 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 provesti ideju, dobre 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, gotovo je uvijek gubljenje vremena. Umjesto toga
  2. promijenite pojmove za pretraživanje, samo preformulirajte pitanje s drugog gledišta (npr.: "arduino temperature sensor" -> "read temperature with arduino").

Zapravo, tamo je puno dobrih projekata, i priznajem da sam prve dane proveo proučavajući većinu tih projekata. Ali nitko 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 stvoriti i prilagoditi potrebama, s druge strane hardverska strana vezana sam za dostupnost i značajke.

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

Htio sam zaslon dovoljno velik da se jasno vidi s nekoliko metara udaljenosti i koji bi odgovarao izgledu moje građe, isključujući bilo koji zaslon s likom nokia i LCD -a. OLED također ne dolazi u obzir jer su mali. Stoga sam se odlučio za TFT zaslon u boji. Nema potrebe za zaslonom osjetljivim na dodir, jer će se nalaziti unutar računala. Našao sam 3.5 , već dizajniran za Arduino, ~ 15 € na Amazonu. Dovoljno dobro.

Sada, nakon što je hardver točno određen, usredotočio sam se na softver.

Gotovo svi projekti, s 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čunala tiče, većina projekata temeljila se na C, C ++, C#, python, a većina projekata nudila je samo CLI sučelje ili poslužitelj nalik usluzi Windows. Umjesto toga sam želio grafički interfejs. Nikada nisam koristio nijedan jezik sličan C u sustavu Windows, ostavite na miru zgradu grafičkog sučelja. No, ja sam prije 15 godina naučio neki Visual Basic pa sam pokušao i preuzeo besplatnu verziju Visual Studija od Microsofta.

Nakon što sam proučio mnogo sličnih projekata, odlučio sam se koristiti OpenHardwareMonitor kako bih dobio sve podatke 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 zaslon 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 njegova načela rada i ograničenja.

U ovom trenutku sam smislio kako crtati linije i bitmape te pisati tekst, pa sam se 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 računalo nije bio zaista koristan, pa sam odlučio staviti temperaturni senzor 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 i testirao DHT22, ali je previše za ovu aplikaciju.

Ima mnogo 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 namjestio i referentni napon analognog Arduina 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 kako 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 biblioteke MCUFRIEND_kbv i Adafruit GFX. 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 ostale 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 zaslonu (funkcija printData ())
  6. natrag u petlju

ODJELJAK 1: Deklaracije i definicije

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

ODJELJAK 2: setup (), uglavnom crtež korisničkog sučelja

Zadovoljio sam se zadanim fontom jer nema prozirnu pozadinu, pa omogućuje pisanje novog retka teksta preko starog bez brisanja. Korištenje drugog fonta značilo bi povući 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 dva stupca i 5 redaka. U lijevom stupcu 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, temperaturu, opterećenje GPU -a, brojač kadrova u sekundi i vanjski osjetnik 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 crtanje linija namjenskom naredbom drawLine (). ovo je također korisno za male ispravke korisničkog sučelja.

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

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

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

Ovdje se događa čarolija: podaci se primaju serijski, dodjeljuju se ispravnoj varijabli, a zatim ispisuju. Da bih sve to postigao u najmanjem broju redaka, upotrijebio 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 značajke automatskog povezivanja pri pokretanju računalnog programa. To ide ovako:

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

Lako peasy.

Podatkovni dio izgleda ovako: "i: xxx, yyy, zzz, aaa,;" značenje je:

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

  • i = 0 - IMENA. Sljedeće vrijednosti su imena prikazana u prvom redu na zaslonu. Ovo će se poslati i ispisati na zaslonu 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 polovici zaslona od vrha do dna. U mom slučaju: temp. Procesora, opterećenje procesora, upotreba RAM -a, temp. Matične ploče.
  • i = 2 - PODACI 2. KOLONE - kao gore, ali za desnu polovicu zaslona
  • i = 3 - ISPISNA ZAPOVIJEDA. 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 razdjelnik između componentSelector i vrijednosti, "," je separator vrijednosti i ";" je kraj reda

Prilikom primanja podataka, Arduino će ih spremiti kao niz do ";" simbol je primljen, tada će tražiti simbol ":" i upotrijebit će ga za dobivanje vrijednosti componentSelecor. To će se koristiti za funkciju prekidača za odabir ispravnog postupka koji treba slijediti. Također se koristi za odabir ispravnog indeksa u nizu allData.

Nakon toga Arduino će traž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 ().

Odjeljak 4: funkcija readExtTemp ()

Ovdje nema puno toga za reći, čita 32 puta s pina A5 i vrijednost temperature prikazuje 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 zaslonu. Moguće je ukloniti i ponovno umetnuti senzor i neće se prikazati čudna vrijednost.

Odjeljak 5: funkcija printData ()

Kao i uvijek, ciklusima sam sekvencijalno ispisivao stvari na zaslonu. Ako je oznaka printNames istinita, ispisat će imena, postaviti zastavicu na false i nastaviti.

Odjeljak 6: natrag u 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 zaslon, ali u Arduinu mi je ostalo dovoljno memorije 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 kod
Visual Basic kod

Evo VB koda

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

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) s okruženjem Visual Basic. Pa, morao sam shvatiti mnogo toga, jer sam zadnji put koristio VB verziju 2005. ili tako nešto … No, internet je pun dobrih natuknica, kao i obično.

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

Za ovaj program želio sam nešto s Windows obrascem, ali potpuno upravljivo iz ikone na sistemskoj traci. Zapravo sam obrazac koristio gotovo samo u svrhu ispravljanja pogrešaka jer volim stavljati okvire za tekst i popise za čitanje izlaznih vrijednosti funkcija i neke naredbene gumbe za njihovo testiranje.

"Završni" program samo je 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 "start at boot". O tome kasnije.

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

Program ide ovako:

  • nabavite podatke iz knjižnica 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 pri početku i šalju samo jednom.

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

neću duboko objašnjavati kako dobiti vrijednosti iz knjižnica, jer je dobro dokumentirano na internetu i donekle razumljivo iz koda. Samo želim reći o problemima zbog kojih se temperatura matične ploče prikazuje 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 navedeno mjesto temperature. Tako da sam morao instalirati užasan softver Asus AI Suite -a, gdje senzori imaju najmanje IMENA i uspoređuju različite temperature između dva programa. Čini se da je generički senzor temperature moje matične ploče #2 za OHMonitor, pa kao što možete vidjeti u podmeniju Timer1_tick ispod stavki MoBo, 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. Ostalo je vjerojatno dobro.

Međutim, ovo je samo verzija 1, planiram instalirati ovaj gadget na drugo računalo, 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) ta se funkcija poziva. Pokušava se povezati sa svakim COM portom na računalu, ako uspije, šalje niz za rukovanje "*****;". Ako je odgovor "R", tada je spojen 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 iznimaka. To je zato što sam htio potpuno plug and play, bez greške. Rukujući iznimkama, uspio sam zanemariti potpunu odsutnost vanjskog uređaja, a čak mogu i hotplup 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ću mapu. Ali ne. Zbog knjižnica OHMonitor i RTSS potrebna nam je razina izvršenja administratora za prikupljanje informacija. To znači krajnje neugodan UAC zaslon pri svakom pokretanju ove aplikacije. Nema šanse. Stoga sam prilagodio scenarij koji je napravio Matthew Wai (veza 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 zadataka Windows, prilagođenu trenutnom izvršnom mjestu programa i sličnim stvarima.

Ikona sistemske ladice

Zahvaljujući objektima NotifyIcon i ContextMenu, uspio sam implementirati jednostavan i mastan način za kontrolu aplikacije. Desnom tipkom miša kliknite 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
  • Vrijeme osvježavanja: daje padajući podizbornik, možete odabrati vrijeme osvježavanja od 1 do deset sekundi
  • Povećaj: otvara glavni prozor. Isto kao dvostruki klik na ikonu
  • Izlaz: samo po sebi razumljivo

Sastavljanje softvera

Za sastavljanje softvera vjerojatno ćete morati preuzeti i dodati referencu na knjižnice 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 mapu projekta.

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

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

Samo svakako sastavite i poslužiteljske projekte RTSS [TL; DR] moryNET i PCHwMon 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 na x86 i x64 arhitekturi. Zahtijeva da se. NET framework 4.7.2 pokrene.

U svakom slučaju morat ćete 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čeni: