Simpatico monitor analogico per risorse di Windows

monitor analogico per windows con Arduino

Creiamo un monitor analogico per gestire le risorse del computer utilizzando nuove funzionalità di Arduino UNO R4 ed un grazioso look retrò.

Questo progetto mira a dare la possibilità di monitorare l’utilizzo dell’hardware senza la necessità di aprire il task manager.
Il concetto è davvero semplice, lo script python verrà eseguito sul nostro computer, raccoglierà i dati, li invierà all’arduino che li visualizzerà attraverso i voltmetri utilizzando PWM, via via che arrivano.
Il programma monitora 6 risorse:

  • Utilizzo della CPU in%
  • Carico del pistone in %
  • Utilizzo della GPU in%
  • Temperatura GPU, visualizzazione tra 10° e 90° C
  • Carico della memoria della GPU in%
  • Utilizzo della ventola della GPU in%

Sarà sufficiente utilizzare voltmetri analogici da 5 V CC poiché è la soluzione più semplice con il PWM. In tal modo sarà possibile misurare la tensione in uscita in percentuale, già calcolata da Arduino (ricordiamo che le uscite PWM digitali di Arduino variano tra 0V e 5V).

Setup

Per prima cosa configureremo lo script Python sul nostro PC.
Installiamo Python sul computer (se non è già presente), Aggiungiamo alcune librerie necessarie:

  • psutil
  • Pythonnet
  • pyserial

Un’altra cosa da impostare nello script Python è il percorso di openHardwareMonitorKib.dll assolutamente necessario affinché funzioni.
Anduamo sul sito web di Open Hardware Monitor e scarichiamo l’utility. Navigando nel file zip troveremo un file chiamato “OpenHardwareMonitoreLib.dll”. Posizioniamolo in una cartella qualsiasi del computer (presumibilmente quella in cui è salvato lo script Python, vedi oltre).

È quindi necessario aggiungere il percorso della libreria nello script sostituendo “C:\path\to\library.dll” nel codice Python riportato di seguito, con il percorso effettivo della libreria sul nostro computer. Ora occorre impostare la porta com corretta a cui è collegato Arduino. Ricordiamo che lIDE di Arduino la fornisce in automatico.

Per comodità, è possibile impostare lo script Python in modo che venga avviato con la tua sessione e senza una console visibile con questi passaggi:

  • Cambia l’estensione dello script Python da .py a .pyw
  • Premi Windows + r, digita “shell:startup”, premi invio e crea un collegamento al tuo script

Per Arduino basta caricare il codice e collegare i voltmetri ai pin PWM corrispondenti. Dal numero di pin più basso a quello più alto. i pin corrispondono alle seguenti metriche:

  • Utilizzo della CPU
  • Carico della RAM
  • Utilizzo della GPU
  • Ttemperature della GPU
  • Carico della memoria della GPU
  • Utilizzo della ventola della GPU

I numeri dei pin PWM per Arduino UNO R4 Minima  sono 3; 5; 6; 9; 10 e 11. E’ possibile utilizzare un differente modello di Arduino (con alimentazione a 5V) e mappare i pin PWM di conseguenza. Colleghiamo poi ciascun voltmetro a terra (gnd) sulla scheda, quindi colleghiamo l’arduino al computer.

Ora dovrebbe essere tutto a posto.

Estensioni

Possiamo stampare alcune scale personalizzate per i voltmetri, per mostrare la percentuale e non i semplici valori di tensione tensione, e dare al monitor un aspetto più professionale. Nei link utili riportiamo un file PDF creato dall’autore del progetto, che contiene le scale utilizzate. Ovviamente ogni voltmetro ha sensibilità (e potrebbe avere dimensioni) differenti, quindi anche in questo caso occorre un minimo di controllo e misura prima di applicare le modifiche sui voltmetri.

Per monitorare altri o più valori, potremo modificare i programmi. La documentazione di psutil offre alcune funzioni aggiuntive.

Di seguito una lista che elenca i diversi sensori GPU e cosa stanno monitorando per la libreria Open Hardware Monitor.

Per quanto riguarda il supporto per voltmetro, si parte da un semplice pezzo di legno, ma l’appetito vien mangiando… e già mi aspetto decine di monitor contenuti in teche di plexiglass, o stampate in 3D, o in graziosi contenitori in alluminio.

Infine, ricordiamo che il monitor lavora su una tensione variabile tra 0 e 5V: i più audaci tra voi potranno senza problemi sostituire gli strumenti analogici con una fila di LED pilotati da un integrato 74HC95 (ne parleremo in un prossimo articolo).

Codice sorgente

Il codice è abbastanza semplice. COme anticipato, abbiamo un listato in Python per il PC ed uno in C per Arduino. Vediamoli assieme.

Il codice su Arduino sei valori posti sul buffer seriale, e scrive il valore direttamente sul relativo pin PWM; come descritto nell’articolo. Le operazioni di lettura e scrittura sono temporizzate con un timer non bloccante ogni 5 secondi.

Vediamo ora il codice Python:

RIcordiamo che occorre modificare le linee che fanno riferimento alla libreria utilizzata, e alla scelta della porta COM (seriale).

Creiamo l’oggetto c di tipo Computer(), e interroghiamo attraverso il metodo psutil della nostra libreria i valori relativi alle risorse.

Ciacun elemento verrà quindi trasferito ad Arduino attraverso la porta seriale un byte alla volta

Nota: dal momento che ciascuna risorsa restituisce un valore secondo la propria scala, occorrerà eseguire una opportuna conversione per avere un risultato che sia compatibile con la scala scelta sullo strumento analogico.

 

Link utili:

Join our groups on Telegram…

… and don’t forget our social channels!

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.