Taula de continguts:

Monitor de maquinari per a PC: 6 passos (amb imatges)
Monitor de maquinari per a PC: 6 passos (amb imatges)

Vídeo: Monitor de maquinari per a PC: 6 passos (amb imatges)

Vídeo: Monitor de maquinari per a PC: 6 passos (amb imatges)
Vídeo: M1 iPad Pro Setup 2024, De novembre
Anonim
Monitor de maquinari de PC
Monitor de maquinari de PC
Monitor de maquinari de PC
Monitor de maquinari de PC
Monitor de maquinari de PC
Monitor de maquinari de PC

Hola a tothom. Vaig començar aquest projecte per dos motius: recentment vaig construir un bucle de refredament de l’aigua al meu ordinador i necessitava alguna cosa per omplir visualment una mica d’espai a la carcassa I volia que es poguessin revisar les temperatures i altres estadístiques amb un cop d’ull ràpid sense que els shenanigans OSD omplissin el cantonada de la pantalla. Per descomptat, hi ha solucions preparades per a això, però la majoria no s’adapten al meu feng shui. Per tant, en lloc de posar una pantalla HDMI de 7 a la meva funda amb un cable que sobresortís de la funda i la barra de tasques del Windows sempre engegada, vaig decidir construir la meva pròpia joguina.

Com que no sóc un enginyer ni un programador, sinó només un home amb un soldador i alguns coneixements autodidactes, això no serà només una instrucció pas a pas, també intentaré centrar-me en el problema aspectes de resolució i investigació que em van portar a aquesta construcció.

EXCLUSIÓ DE RESPONSABILITAT: TOT EL MEU TREBALL ES COMPARTEIX COM ATRIBUCIÓ COMUNA CREATIVA-SHAREALIKE 4.0. M’HO VAIG INSPIRAR DE MOLTS EXEMPLES DE TOTS ELS INTERNETS, SI RECONEIXEU ALGUNA PART D’AQUEST TREBALL COM A VOSA, EN CONTACTE AMB MES PER ATTRIBUCIÓ. NO ES PREVé INFRACCIÓ, ESTARÉ CONTENT DE CORREGIR ALGUN ERROR. GRÀCIES

SEGONA EXCLUSIÓ DE RESPONSABILITAT: EL MEU TREBALL ES COMPARTEIX COM ESTÀ. No sóc responsable de cap dany derivat de l'ús d'algun dels meus codis o instruccions

Subministraments

  • Arduino Nano (o UNO si voleu)
  • Pantalla TFT. En el meu cas és una pantalla de 3,5 "compatible amb ILI9486 / ILI9488L.
  • Sensor de temperatura. En el cas de Mu, un sensor de temperatura analògic TMP36.
  • Cables, cables, connectors dupont (més informació més endavant)
  • (opcional) Tauler de pa per provar
  • (opcional però recomanable) un petit perfboard

Pas 1: estudi de viabilitat (tipus de)

Com he dit, no volia i la pantalla HDMI quedava enganxada a la funda del meu PC, així que, encobert amb el meu propi enginy, vaig començar a buscar idees similars a Internet. I aquest és el consell número u: Google és el vostre amic (bé, qualsevol motor de cerca decent …). Vivim en un món on res no és realment original, però en lloc de mirar aquesta frase amb un significat negatiu, podríem utilitzar-ho per al nostre avantatge: qualsevol cosa que vulgueu crear, probablement algú en algun lloc ja hagi fet alguna cosa similar, així que si no sé com implementar una idea, és probable que hi trobeu informació útil. Quan cerqueu a Internet, sovint és útil tenir en compte dues regles:

  1. no us molesteu a anar a la pàgina 3 o 4 de cap cerca, gairebé sempre és una pèrdua de temps. En el seu lloc
  2. canvieu els termes de cerca, només cal reformular la pregunta des d’un altre punt de vista (és a dir: "sensor de temperatura arduino" -> "llegir temperatura amb arduino").

En realitat, està ple de bons projectes, i reconec que vaig passar els primers dies estudiant la majoria d’aquests projectes. Però cap d’ells estava disposat a buscar-me, ja que volia una cosa que s’ajustés a les meves necessitats.

Com que havia de fer alguna cosa personalitzada, vaig decidir centrar-me en el maquinari adequat per utilitzar-lo i deixar el costat del programari per més endavant, perquè el programari sempre es pot crear i adaptar a les necessitats, per altra banda, estic obligat a la disponibilitat i funcions.

Volia una cosa basada en Arduino, perquè ja la tenia, està ben documentada i la comunitat està florint. Aquí no hi ha cap problema, com he dit abans, amb moltes informacions.

Volia una pantalla prou gran com per veure-la amb claredat des d’un parell de metres i que s’ajustés a l’aspecte de la meva construcció, això excloia qualsevol pantalla de caràcters nokia i LCD. Els OLED també estan fora de dubte, ja que són petits. Així que vaig optar per una pantalla de color TFT. No fa falta pantalla tàctil, ja que estarà a l’interior del PC. He trobat un de 3,5 , ja dissenyat per a Arduino, ~ 15 € a Amazon. Prou bo.

Ara, després de localitzar el maquinari, em vaig centrar en el programari.

Gairebé tots els projectes, al costat d’Arduino, són força similars. Només he d’adaptar el codi per a la pantalla i per al protocol de comunicació per recollir dades de l’aplicació del servidor. Al costat de l’ordinador, la majoria de projectes es basaven en C, C ++, C #, python i la majoria de projectes només oferia una interfície CLI o un servidor similar al servei de Windows. En el seu lloc, volia una interfície gràfica d’usuari. Mai no he utilitzat cap llenguatge tipus C al Windows, deixeu en pau l’edifici de la GUI. Però vaig aprendre Visual Basic fa 15 anys, així que vaig provar-ho i vaig descarregar la versió gratuïta de Visual Studio de Microsoft.

Després d’estudiar molts projectes similars, em vaig decidir a utilitzar OpenHardwareMonitor per obtenir tota la informació de maquinari i RivaTuner per a FPS, perquè són gratuïts i estan prou documentats.

Pas 2: proves de maquinari

Proves de maquinari
Proves de maquinari
Proves de maquinari
Proves de maquinari
Proves de maquinari
Proves de maquinari

Abans d’encendre el soldador i fixar per sempre en el temps i l’espai qualsevol component electrònic, és una bona pràctica construir un prototip de prova (consell número dos). Per sort, ja no és el 1995. Avui en dia és bastant fàcil organitzar prototips bastant complexos fins i tot en taulers petits. En el meu cas, la pantalla TFT tenia una caiguda del pinout per a Arduino Uno, de manera que la vaig deixar caure al meu Arduino uno i vaig començar a jugar amb les biblioteques d’exemple i a llegir els manuals de referència per entendre els seus principis i limitacions de funcionament.

En aquest moment vaig descobrir com dibuixar línies i mapes de bits i escriure text, així que vaig començar a jugar amb la codificació de programari, deixant tot el material secundari per més endavant, però inclouré aquí el sensor de temperatura.

En algun moment de la línia, tenia un punt buit a la pantalla, però cap de les dades dels sensors del PC era realment útil, així que vaig decidir posar un sensor de temperatura dins de la caixa per a la temperatura ambient. La pantalla es consumeix gairebé tots els pins Arduino, per sort, el pin analògic A5 no està utilitzat, així que vaig lligar un TMP36. Fins i tot he provat un DHT22, però és massa excessiu per a aquesta aplicació.

Hi ha molts exemples per al TMP36, acabo de copiar-ne un en una funció. El TMP35 té 3 pins, el Vin va a 5V, el GND va a terra i Out va al pin A5. Vaig col·locar un condensador ceràmic de 0,1 uF entre Vin i GND. Diuen que cal. Probablement no serveixi de res en aquest cas, però … fins i tot he configurat el voltatge de referència analògic Arduino al pin de 3,3 v per a una millor lectura de la temperatura. Encara inútil en aquest cas, però …

Pas 3: Codi Arduino

Descarregueu i obriu el codi Arduino inclòs per seguir l'explicació d'aquest pas. He intentat deixar prou comentaris al codi per deixar-ho clar sense inundar-lo.

Necessitareu definitivament les llibreries MCUFRIEND_kbv i Adafruit GFX. Tots dos fàcilment instal·lables des de l’IDE Arduino.

El programa es pot subdividir en seccions com aquesta:

  1. definiu i declareu totes les variables globals i altres coses necessàries
  2. inicialitzeu la pantalla, configureu la referència externa i dibuixeu la IU (tot això a la funció setup (), ja que només s'ha d'executar una vegada)
  3. llegir les dades de la connexió en sèrie i assignar-les a la funció array (loop ())
  4. llegir dades del sensor de temperatura extern (funció readExtTemp ())
  5. imprimir dades a la pantalla (funció printData ())
  6. tornar al bucle

SECCIÓ 1: Declaracions i definicions

A la secció inicial del codi, he utilitzat molts punteres i matrius, de manera que he pogut esprémer moltes línies repetitives de codi en breus per escriure els cicles FOR. Sí, sóc mandrós. Com podeu veure, he declarat una matriu de punter i l'he omplert amb totes les imatges del fitxer pics.h. Això va fer possible fer el truc del cicle FOR per dibuixar totes les icones.

SECCIÓ 2: setup (), principalment dibuix de la IU

Em vaig conformar amb el tipus de lletra per defecte, ja que no té un fons transparent, de manera que permet escriure una nova línia de text sobre una antiga sense necessitat de suprimir-la. L’ús d’un altre tipus de lletra hauria significat dibuixar un quadrat negre sobre el text antic abans d’escriure una nova línia, cosa que provocaria un desagradable efecte parpelleig.

Després d'algunes proves, vaig arribar a un bon compromís entre la llegibilitat i la informació mostrada. He dividit la pantalla en dues columnes i 5 files. La columna esquerra va a les dades de la CPU i de la placa base, inclosos de dalt a baix el nom de la CPU, la temperatura, la càrrega, l’ús de RAM i la temperatura de la placa base. El correcte dedicat a la GPU i inclou el nom de la GPU, la temperatura, la càrrega, el comptador de fotogrames per segon i el sensor de temperatura extern.

Com podeu veure al codi, vaig decidir evitar l'ús d'imatges a la targeta SD, ja que és molt lent de carregar. Vaig decidir incloure totes les icones a la memòria PROGMEM i dibuixar les línies amb l'ordre dedicat drawLine (). això també és útil per a petites correccions d'interfície d'usuari.

En el feble intent de donar a la interfície d’usuari una aparença de profunditat, vaig dibuixar dos de tot (línies, rectangles, imatges) amb colors diferents i amb un petit desplaçament. Malauradament, no és el resultat que esperava, però farà el truc.

Les darreres línies d'aquesta funció són per imprimir espais reservats al TFT, fins que Arduino rebrà les dades.

SECCIÓ 3: bucle principal (), recuperació i format de dades

Aquí passa la màgia: les dades es reben mitjançant sèries, s’assignen a la variable correcta i s’imprimeixen. Per aconseguir tot això en el mínim nombre de línies, he utilitzat una ordre de canvi de cas i una de cicle.

El protocol de comunicació amb què em vaig presentar es divideix en dues parts: una execució inicial un cop de mans i la part de dades reals.

Es necessita l'aplicació de mans per implementar la funció d'autoconnexió quan s'inicia el programa de PC. Va així:

  • El PC envia la cadena d'aproximació de mans (en aquest cas només és "*****;")
  • Arduino envia una resposta

Peasy fàcil.

La part de dades té aquest aspecte: "i: xxx, yyy, zzz, aaa,;" el significat és:

"i" és l'índex, el vaig anomenar componentSelector al codi. Els valors "i" són:

  • i = 0 - NOMS. Els valors següents són els noms que es mostren a la primera fila de la pantalla. Això s'enviarà i s'imprimirà a la pantalla només una vegada, ja que avui en dia és bastant difícil canviar la CPU i la GPU …
  • i = 1 - DADES DE 1a COLUMNA: els valors següents es mostren a la meitat esquerra de la pantalla de dalt a baix. En el meu cas: temperatura de la CPU, càrrega de la CPU, ús de RAM, temperatura de la placa base.
  • i = 2 - DADES DE LA 2ª COLUMNA: com es va indicar anteriorment, però per a la meitat dreta de la pantalla
  • i = 3 - ORDRE D'IMPRESSIÓ. En aquest cas, la cadena de sèrie en brut serà només "3:;" ja que no calen altres dades.

Els valors reals són "xxx, yyy, zzz, aaa". aquestes són llegides com a cadenes per l’arduino i tot el format el fa el programa de PC. Per a i = 0, aquests valors tenen 14 caràcters cadascun per als noms de maquinari. Per a i = 1 o 2, només tindran tres caràcters cadascun, suficient per mostrar temperatures i fotogrames per segon. Per descomptat, el ":", "," i ";" els caràcters estan prohibits en aquests camps.

El ":" és el separador entre componentSelector i valors, el "," és el separador de valors i el ";" és el final de la línia

En rebre les dades, l'Arduino les desarà com una cadena fins que es mostri ";" el símbol es rep, llavors cercarà el símbol ":" i el farà servir per obtenir el valor componentSelecor. Això s'utilitzarà per a la funció de commutació de majúscules i minúscules per seleccionar el procediment correcte a seguir. També s’utilitza per seleccionar l’índex correcte a la matriu allData.

Després d'això, l'Arduino buscarà el símbol "," i procedirà a posar els valors a la matriu allData.

Si el componentSelector és 0, el senyalador printName s'establirà a true. Si componentSelector és 3, es criden les funcions readExtTemp () i printData ().

Secció 4: funció readExtTemp ()

No hi ha molt a dir aquí, es llegeix 32 vegades des del pin A5 i genera el valor de temperatura com una cadena. Estic amb els rebels, així que faig servir Celsius. Qualsevol cosa superior a 100 ° C és incorrecta, de manera que es mostrarà com a "---" a la pantalla. Per a qualsevol cosa inferior a 100 ° C, es formatarà perquè hi hagi prou espais per cobrir l'espai de 3 caràcters a la pantalla. És possible treure i tornar a inserir el sensor i no es mostrarà cap valor estrany.

Secció 5: funció printData ()

Com sempre, feia servir cicles per imprimir seqüencialment coses a la pantalla. Si la bandera printNames és certa, imprimirà els noms, establirà la bandera a false i continuarà.

Secció 6: tornar al bucle

Jo prou explicant-me, diria que …

fitxer pics.h

Aquí he emmagatzemat totes les icones de la interfície d’usuari. És possible utilitzar el lector de targetes SD inclòs a la pantalla, però em quedava prou memòria a l’Arduino per a les meves icones en blanc i negre.

Els he dissenyat amb Junior Icon Editor, ja que és gratuït i és bastant bo per pintar píxels icones petites. Vaig haver de convertir els fitxers d’icones (desats com a PNG) amb l’eina en línia SKAARHOJ.

Pas 4: Codi Visual Basic

Codi Visual Basic
Codi Visual Basic

Aquí teniu el codi VB

AVÍS: és la primera vegada que comparteixo un projecte de Visual Studio. Acabo de copiar les carpetes del projecte i les he comprimit. Si això no funciona, feu-me saber una manera millor de compartir aquest tipus de projectes. Gràcies

Com he dit anteriorment, no puc crear una interfície gràfica d’usuari en C # o en altres llenguatges, però fa temps que vaig tenir algunes experiències en Visual Basic. He descarregat l'edició de Visual Studio Community (és gratis, és clar) amb l'entorn Visual Basic. Bé, vaig haver d'esbrinar moltes coses, ja que l'última vegada que vaig fer servir VB era la versió 2005 o tal … Però Internet està ple de bons consells, com de costum.

Després d’esbrinar algunes coses de la interfície, la versió més recent és més fàcil i flexible que l’antiga.

Per a aquest programa volia alguna cosa amb un formulari de Windows però totalment manejable des de la icona de la safata del sistema. De fet, he utilitzat el formulari gairebé només amb finalitats de depuració, ja que m'agrada posar quadres de text i llistes per llegir els valors de sortida de les funcions i alguns botons d'ordres per provar-los.

El programa "final" és només una icona de safata amb un menú emergent que mostra els diversos controls i un formulari principal amb dues caixes de llista que mostren les dades enviades a l'Arduino.

Vaig implementar una funció d’autoconnexió i una funció d’inici d’arrencada. Més informació sobre això més endavant.

El programa principal és només una adaptació de diversos exemples i fragments de codi mitjançant la biblioteca OpenHardwareMonitor i la biblioteca de memòria compartida RivaTuner.

El programa funciona així:

  • obteniu les dades de les biblioteques OpenHardwareMonitor i RTSSSm
  • preparar i formatar totes les dades per al protocol de comunicació
  • envieu les dades a l’Arduino
  • esbandida i repeteix

per descomptat, els noms del maquinari es llegeixen al principi i s’envien només una vegada.

El comptador FPS només s'activa quan s'utilitza una aplicació compatible (per exemple, un joc, un programa de modelatge 3D, etc.); en cas contrari, s'enviarà el marcador de posició "---" a la pantalla.

No aprofundiré en explicar com obtenir els valors de les biblioteques, ja que està ben documentat a Internet i una mica comprensible a partir del codi. Només vull parlar dels problemes per aconseguir que la temperatura de la placa base es mostri a través de la biblioteca OpenHardwareMonitor (a partir d’ara OHMonitor, perquè la vida és massa curta). Tinc un Asus Maximus VIII Gene MoBo, que està equipat amb sensors de temperatura de fu ** ton a la placa base, però OHMonitor els nomena sensor de temperatura # 1, # 2 … #n I en cap lloc s’especifica la ubicació de la temperatura. Per tant, vaig haver d’instal·lar el terrible programari Asus AI suite, on els sensors tenen almenys NOMS i comparar les diverses temperatures entre els dos programes. Sembla que el sensor de temperatura genèric de la meva placa base és el número 2 per a OHMonitor, de manera que, com podeu veure al subtemporitzador Timer1_tick, a sota del material MoBo, vaig haver de buscar un nom de sensor que contenés la cadena "# 2" per obtenir la lectura correcta.

TL; DR: haurà de tenir cura dels sensors de temperatura de la placa base correctes. La resta probablement estarà bé.

Tanmateix, aquesta és només la versió 1, tinc previst instal·lar aquest gadget al meu altre PC, de manera que probablement implementaré una manera de seleccionar els sensors i fins i tot de redissenyar la interfície de l'Arduino on sigui.

La funció de connexió automàtica

Aquesta funció és realment senzilla: si el PC no està connectat amb un Arduino, cada x mil·lisegons (basat en el temporitzador1) es diu aquesta funció. Intenta connectar-se amb tots els ports COM del PC, si té èxit, envia la cadena d'aproximació de mans "*****;". Si la resposta és "R", es connecta el dispositiu correcte i es segueix el procediment normal. Altrament, prova el següent port COM.

Com podeu veure, hi ha moltes excepcions en aquesta funció. Això es deu al fet que el volia connectar-se i reproduir-se completament, sense sortida d’error. En manejar les excepcions, he estat capaç de fer ignorar la completa absència del dispositiu extern i fins i tot puc connectar i connectar en calent el dispositiu sempre que vulgui, sense generar cap error de ruptura per al programa.

La funció Inicia en arrencar

Volia que el programa comencés a l'arrencada. Molt fàcil, dius. Poseu un enllaç a la carpeta adequada. Però no. A causa de les biblioteques OHMonitor i RTSS, necessitem un nivell d'execució d'administrador per recopilar informació. Això significa la pantalla UAC totalment molesta cada vegada que es llança aquesta aplicació. De cap manera. Així que vaig adaptar el guió realitzat per Matthew Wai (enllaç aquí) per aconseguir un inici silenciós a l’arrencada. Acabo de copiar l'script al fitxer Resources1, dividit en diverses parts, i després he implementat una subrutina que crea (o elimina) un fitxer de tasques de Windows, personalitzat amb la ubicació executable del programa actual i aquestes coses.

La icona de la safata del sistema

Gràcies als objectes NotifyIcon i ContextMenu, he pogut implementar una manera senzilla i senzilla de controlar l’aplicació. Simplement feu clic dret a la icona de la safata i apareixerà el menú. Hi ha aquests oprions:

  • Comença a l'arrencada: podeu marcar-la i desmarcar-la per habilitar o desactivar la funció d'inici a l'arrencada
  • Connexió automàtica: igual que l'anterior, però gestiona la funció d'autoconnexió
  • Connecta / Desconnecta: gestiona la connexió. No funciona amb la connexió automàtica activada
  • Temps d’actualització: proporciona un submenú desplegable, podeu triar el temps d’actualització d’1 a deu segons
  • Maximitzar: obre la finestra principal. Igual que fer doble clic a la icona
  • Sortida: autoexplicativa

Compilació del programari

Per compilar el programari, probablement haureu de descarregar i afegir una referència a les biblioteques no incloses al codi.

Podeu trobar la biblioteca OpenHardwareMonitor aquí. Heu de descarregar el programari, obrir el fitxer zip i copiar el fitxer OpenHardwareMonitorLib. DLL a la carpeta del projecte.

Aquí teniu l’enllaç de la biblioteca RTSSharedMemoryNET, heu de descarregar i compilar per a la vostra arquitectura i, a continuació, copieu el RTSS [TL; DR] moryNET. DLL a la carpeta del vostre projecte.

Ara heu d'afegir una referència al codi, instruccions aquí

Assegureu-vos de compilar els projectes de servidor RTSS [TL; DR] moryNET i PCHwMon per a la mateixa arquitectura.

He inclòs un programa de configuració ja preparat perquè pugueu instal·lar-ho tot sense jugar amb Visual Basic. Està compilat per a x86, funcionarà tant en arquitectures x86 com x64. Cal que s’executi el. NET framework 4.7.2.

En qualsevol cas, haureu d’instal·lar RivaTuner. Podeu trobar-la aquí com a aplicació autònoma o instal·lar Msi Afterburner, que hauria d’incloure el servidor RTS.

Pas 5: Implementació final del maquinari

Recomanat: