Gestion thermique automatique de PC

Medium f9w3edcncf4qemim299w

Difficulté:

Gérer automatiquement la température de son ordinateur avec affichage des paramètres du système sur un écran TFT 800×480 couleur

 


 


Bienvenue à tous !
Dans ce tutoriel, vous allez, je l’espère, apprendre beaucoup de choses et notamment comprendre comment réaliser un affichage graphique design des informations de votre PC. Mais ce n’est pas tout, ce dispositif communément appelé rhéobus, permettra également de contrôler de manière automatique la vitesse des ventilateurs de votre machine afin de soulager vos oreilles (oui sur certains ordinateurs, les ventilateurs font du bruit, beaucoup de bruit). Enfin, ce dispositif vous permettra de contrôler minutieusement sa température de manière optimale.
Vous êtes prêts? Alors c’est parti! Armez-vous simplement de patience, et du matériel indiqué ci-dessous


 

Matériel

Medium moysw0gls70t3vcwbrct

Budget:

140 €

 

Il vous faudra principalement pour réaliser ce projet:
– Une carte Arduino MEGA 2560 (REV3) (environ 50€)
– Un ecran TFT 5 pouces (tactile ou non) avec une interface 40 pins (boutique Adafruit ou Digi-key) (environ 50€)
– Un controleur pour votre écran RA8875 (environ 30€)
– un lot de câbles pour platines d’essais (environ 5€)
– Des mains et un cerveau (normalement vous en êtes tous équipés)

 

Etape 1 : Budget: 140€

 

Etape 2 : Un peu de théorie

Medium owe3ttbe37nwatcghlnn

 

Avant de vous lancer dans ce projet, il faut déjà prendre connaissance du principe de fonctionnement qui repose derrière. Veillez à lire attentivement cette étape!
Nous souhaitons réaliser un affichage qui transmet à l’utilisateur les informations importantes de son système dans une interface claire. Il faut d’ores et déjà séparer la partie graphique, qui réalise l’interface entre l’ordinateur et l’humain, de la partie traitement qui se charge de récupérer les informations utiles, de les analyser et d’agir en conséquence. Notre partie graphique ici, ce sera simplement l’affichage des informations système tel que vous pouvez le voir sur l’image de présentation. Vous comprendrez rapidement que cette partie ne constitue pas en soi un challenge important : il s’agit simplement d’une exploitation cohérente du driver RA8875. Parlons-en d’ailleurs de ce composant que peu de personnes doivent connaître mais qui est pourtant indispensable lorsque l’on souhaite piloter un écran de 800×480 avec une carte Arduino. Il permet simplement de rendre rapide l’affichage de formes simples pour soulager l’arduino qui elle se charge simplement de lui transmettre des instructions du type “dessine un rectangle bleu”,… Cette communication entre l’Arduino et le RA8875 s’effectue par une liaison SPI qui sera détaillée plus loin dans la réalisation de ce projet.

Comment récupérer les informations du système sur la carte Arduino?
Pour cela on va utiliser une passerelle qui prendra la forme d’un programme en python qui s’exécutera en arrière plan et qui permettra de réaliser la liaison entre, d’une part, le logiciel CoreTemp (téléchargeable à l’adresse suivante: http://www.alcpu.com/CoreTemp/) qui permet de récupérer les données de votre système, et d’autre part, la carte Arduino avec laquelle on communiquera via le port série. L’intervalle de rafraîchissement maximum de CoreTemp est de 1 seconde ce qui permet d’acutaliser fréquemment les données de votre ordinateur.

Comment contrôler la vitesse des ventilateurs?
Pour cela, rien de plus simple, on utilise simplement les ports PWM de notre carte Arduino. Il faudra au préalable s’assurer que vos ventilateurs sont PWM, c’est-à-dire que leur vitesse de rotation peut-être contrôlée via des impulsions électriques. Pour cela, rien de plus simple, il vous suffit d’ouvrir votre boitier et de repérer la fiche de chaque ventilateur connecté sur votre carte mère. Si elle dispose de 4 pins, c’est bon ! Sinon, si ce sont des ventilateurs à 3 ou 2 pins, je suis désolé mais ils ne pourront pas être contrôlés. Mais cela n’empêchera pas d’avoir simplement un affichage des infos de votre ordinateur !! La commande des ventilateurs est optionnelle.

Bon je pense avoir éclairci pas mal de points maintenant passons à la réalisation !

 

Etape 3 : Configuration du PC

Commencez par télécharger et installer CoreTemp. Ouvrez le logiciel, dans le menu “Tools”, cochez “Loggin On” puis dans le menu “Options”, ouvrez la fenêtre “Settings” et dans l’onglet “General” cochez “enable logging on startup” et “Start Core Temp with Windows” de manière à ce qu’il se lance automatiquement au démarrage de votre OS. Dans l’onglet “Display”, cochez “Start Core Temp minimized”. Fermez en enregistrant les modifications. Maintenant, rendez-vous à l’emplacement où a été installé CoreTemp et cherchez le fichier “CoreTemp.ini”. Ouvrez le et à la ligne “LogInt=” indiquez un “1” à la place du chiffre déjà présent de manière à forcer la fréquence d’actualisation à 1 seconde. Enregistrez les modifications et redémarrez votre ordinateur. Rendez vous de nouveau dans le dossier d’installation. Vous devriez voir un fichier en .csv qui contient, lorsque vous l’ouvrez, pleins de chiffres semblable à celui présenté dans l’image ci-dessus.
Maintenant, il faut préparer l’environnement Python: téléchargez et installez Python 2.7.x si vous ne l’avez pas encore à l’adresse suivante : https://www.python.org/
Il nous faut également une librairie permettant la communication serial. Il s’agit de PySerial téléchargeable à l’adresse suivante : https://pypi.python.org/pypi/pyserial
Telechargez à présent le fichier “Rheobus.py” joint dans cette étape et ouvrez le pour le modifier. Vous avez deux choses à modifier, ne touchez pas au reste du script : Modifiez la variable “SERIAL_PORT” de manière à renseigner le port sur lequel est connecté votre carte Arduino au PC (visible depuis l’IDE Arduino) et la ligne listFile = glob.glob(“x”) en remplacant le x par le chemin d’accès absolu du répertoire dans lequel est installé CoreTemp. Enregistrez et fermez le fichier.
Pour vérifier que tout fonctionne bien, exécutez le programme python: vous devriez obtenir quelque chose qui ressemble à l’image 2 ci-dessus. Si vous rencontrez un problème, n’hésitez pas à le signaler dans les commentaires de manière à trouver une solution (notez que pour que le script fonctionne, votre carte Arduino doit être connecté au PC au port spécifié dans le script).

http://blog.ouiaremakers.com/wp-content/uploads/formidable/Rheobus-1.py

Etape 4 : Préparation de la carte Arduino

Pour cette étape, nous avons besoin des principaux éléments requis !
Commencez tout d’abord à relier votre afficheur graphique 40-pin au port 40-pin présent sur le RA8875. Pour cela, allez-y avec précaution car la nappe 40pin est assez fragile et difficile à faire rentrer. Pour ma part, je me suis aidé d’une pince de manière à attraper fermement la nappe et ainsi forcer légèrement sans pour autant la déformer. Veillez à ce qu’elle soit parfaitement reliée. En théorie, les deux éléments sont maintenant solidaires et il est déconseillé de les séparer.
Intéressons-nous maintenant aux branchements à réaliser entre la carte Arduino et le RA8875. Ils sont illustrés sur le schéma ci-dessus. Veillez simplement à relier le +5Vin du RA8875 non pas la borne +5V de l’Arduino mais directement à une prise interne de l’alimentation du PC telle qu’une prise pour périphériques internes 4-pin. ATTENTION !! Reliez le fil à un fil rouge de la prise et pas aux jaunes ! En effet, ces derniers débitent non pas du 5V mais du 12V autant dire que vous risquez de griller votre RA8875 instantanément ! Pour être sûr de vous, vérifiez avec un voltmètre en série qu’il s’agit bel et bien de 5V. Vous trouverez une illustration sur la photo 2.

OPTIONNEL:
Enfin, pour relier les ventilateurs, identifiez quel type de connecteur vous avez (en fonction des couleurs), repérables sur la photo 2 et reliez la sortie +12V et GND respectivement au fil jaune de la prise d’alimentation du PC et au fil noir. Enfin, reliez le dernier pin indiqué “PWM” a une des bornes libres PWM de votre carte Arduino. Le PIN Tach permet éventuellement de récupérer la vitesse de rotation du ventilateur. Il s’agit d’ailleurs d’un futur projet qui vous sera présenté lorsqu’il sera finalisé.

 

Etape 5 : Harmonisation de l’ensemble

Voici enfin la dernière étape ! Vous êtes prêt? Alors c’est parti!
Voici avant tout un petit check-up pour être sûr que tout est bien réalisé:
– Vous avez installé, configuré et lancé CoreTemp
– Vous avez préparé le script Python et modifié les 2 paramètres propres à votre système
– Vous avez relié la carte Arduino à votre PC via le port USB
– Vous avez correctement réalisé les branchements entre la carte Arduino et le RA8875
– Vous avez relié le RA8875 à votre écran TFT via le port 40pin
– Vous avez alimenté la carte Arduino et le RA8875 via les connexions de votre alimentation de PC
– Votre carte Arduino est reconnue dans l’IDE d’Arduino

Tout est validé? Eh bien il est temps de passer à l’Etape finale ! Pour que le script Arduino joint ci-dessous fonctionne, il faut au préalable installer la librairie suivante dans l’IDE d’Arduino: https://github.com/sumotoy/RA8875. Procédez à son installation de manière traditionnelle puis redémarrez l’IDE. Là, ouvrez le fichier joint “LCD_Rheobus_RA8875.ino” et téléversez-le directement dans votre carte Arduino. Vous pouvez par ailleurs, si vous vous en sentez capable, le modifier pour l’adapter à votre guise. Une fois le fichier téléversé, votre Arduino va redémarrer et devrait afficher l’écran que vous observez en image 1. Il ne vous reste plus qu’à lancer le script python et observer le résultat: Les informations de votre PC sont affichés en temps réel !! Il ne vous reste plus qu’à intégrer ce dispositif de manière élégante dans votre ordinateur. Pour ma part, j’ai intégré la carte Arduino dans une baie de disques durs comme vous pouvez l’observer sur la photo 3 😉

OPTIONNEL:
Notez que vous pouvez modifier les bornes de contrôle de ventilateurs dans le script tout en haut par rapport au nombre et aux branchements que vous avez réalisés. Le comportement de ces derniers en fonction de la température relevée peut être également modifié dans la fonction “updateVentilo()”.

UN PEU DE THÉORIE:
Comment s’effectue la récupération des données envoyés par le script python?
La carte Arduino lis en permanence le buffer du port serial. Dès qu’un message a été transmis elle décode caractère par caractère et les met bouts à bouts pour former le nombre. Un caractère autre qu’un chiffre est lu comme une commande (par exemple, le “a” signifie fin de la lecture du nombre correspondant à la puissance du CPU). Elle sait alors qu’elle doit le stocker dans la variable adéquate et recommence pour les autres chiffres. Le caractère “&” indique que c’est la fin du message et que l’arduino peut sortir de la boucle. Un petit exemple vaut milles paroles:
“20a4139b5c25&” indique:
– Puissance (W) = 20
– Vitesse (Mhz) = 4139
– Charge (%) = 5
– Température (°C) = 25
Vous constatez donc que la fréquence de rafraîchissement de l’écran est commandée indirectement par le script python qui envoie ses informations toutes les 1 secondes.

Comment est généré le graphique avec le dégradé?
La librairie RA8875 ne disposant pas de fonctions de dessin avancées, il faut réfléchir à l’envers et se demander comment on peut faire pour afficher un tel graphique. La réponse est simple: on trace d’abord la bande de dégradé intégralement puis on coupe avec un rectangle et un triangle noir (dont la pente de l’arrête correspond à la pente de la courbe) cette bande de façon à masquer la partie indésirable. Il suffit après d’y ajouter une ligne blanche correspond aux deux extrémités pour parfaire l’affichage. (vous pouvez voir ce processus dans la photo 4).

REMARQUE:
Vous pouvez sans doute remarquer que la police d’écriture utilisé pour le titre de l’écran et les informations affichés n’est pas la même et c’est tout à fait normal: celle du titre est statique et plus belle mais est, par conséquent, lente à afficher car de bien meilleure résolution. La police utilisé pour afficher les informations, amenés à changer toutes les 1 secondes, est la police par défaut accéléré graphiquement pour un affichage instantané : il n’y a donc pas apparition de phénomène de coupure lors du passage entre deux valeurs qui est, pour avoir testé, assez dérangeant visuellement. Nous observons ici une limite de la carte Arduino relativement lente à envoyer ses instructions via la liaison SPI au driver RA8875.

http://blog.ouiaremakers.com/wp-content/uploads/formidable/LCD_Rheobus_RA8875-2.ino

Etape 6 : FAQ

– Mon écran affiche des choses étranges ou/et est décalé:
Pas de panique ! Il s’agit simplement d’un problème de timing propre à chaque écran TFT. Pour le résoudre, munissez-vous de la référence de votre écran et cherchez son datasheet sur google. Une fois ouvert, identifiez les tableaux correspondants aux timings de votre écran, et relevez les valeurs. Rendez-vous ensuite dans le répertoire dans lequel a été installé la librairie RA8875 pour l’IDE Arduino et allez dans le dossier _settings. Là, ouvrez avec un éditeur RA8875Registers.h et repérez la ligne correspondant à votre écran de la variable initStrings (tout au début normalement). Là, convertissez les valeurs requises en hexadécimal et inscrivez les à la place de celles présentes par défaut. Par exemple, pour mon écran 800×480, j’ai du remplacer la ligne existante par la ligne de données suivante: {0x07,0x03,0x81,0x63,0x00,0x03,0x03,0x06,0xDF,0x01,0x22,0x00,0x08,0x00,0x03}

– Le programme python ne fonctionne pas:
Vérifiez que vous avez installé correctement la libraire PySerial, que le port série spécifié est le bon et que le répertoire où sont stockés les log de CoreTemp est bien renseigné

– Le taux de rafraîchissement est de 10 secondes:
Recommencez l’étape de la partie 2 de modification du fichier .ini et redémarrez votre ordinateur. Pensez à ne pas ré-ouvrir la fenêtre “Settings” du logiciel CoreTemp pour ne pas remettre à 10 cette valeur.

 

Etape 7 : Possibilitées

Votre dispositif fonctionne parfaitement? Ne vous réjouissez pas trop vite ! Il reste encore de nombreuses choses à réaliser ! Voici une liste non exhaustive :
– Intégrer l’affichage dans votre boitier de PC
– Fluidifier les mises a jour de l’écran (évolution linéaire pendant 1 seconde et non pas affichage brutal de la nouvelle valeur)
– Amélioration de l’affichage avec récupération de la vitesse de rotation des ventilateurs via le pin TACH
– Gestion d’un watercooling avec vitesse de la pompe (un de mes futurs projets d’ailleurs)
– Intégration d’une interface tactile (oui, cet écran a la possibilité d’être tactile) afin de modifier en temps réel certains réglages
– Gérer un éclairage dynamique de votre PC : par exemple quand la température devient élevé, allumer des LED rouges disposées préalablement dans votre boitier et/ou en façade

Comme vous le voyez, ce dispositif ne manque pas d’applications si vous avez un peu d’imagination !

Merci beaucoup d’avoir lu ce tutoriel en espérant vous avoir donné envie de réaliser votre propre rhéobus !

 

Vous aimez ce tutoriel ?


Corentin Potron

07 juil. 2016 à 10:36

Je certifie avoir pris connaissance des règles du jeu

Ipxav

07 juil. 2016 à 10:36

Merci pour le partage ! Super tuto et bien détaillé 🙂 tu as sourcé où tes composants ?

Corentin Potron

07 juil. 2016 à 10:36

J'ai eu l'idée en me baladant sur le site Adafruit et en tombant par hasard sur les écrans TFT. Après quelques recherches j'ai vu qu'il existait un driver spécialement conçu pour faire fonctionner ce type d'écrans et pilotable via SPI donc compatible Arduino ! Après la librairie utilisée est l'une des premières que l'on trouve en cherchant sur google et est d'ailleurs la meilleure, celle proposé par Adafruit étant trop limité pour l'usage que je souhaitais en faire ! 😉

furious.builder

07 juil. 2016 à 10:36

Ca gère mec, bon boulot !

Corentin Potron

07 juil. 2016 à 10:36

Merci ! 🙂

davidomo

07 juil. 2016 à 10:37

Bonjour,


vraiment cool ce projet très belle interface graphique mais la librairie dois être gourmande en ressource

connais tu les écran nextion https://www.itead.cc/display/nextion/nextion-nx8048t050.html

écran lcd tactile IHM (Interface Homme Machine) j'ai suivi leur projet de financement participatif à l'époque et sa a vraiment booster mes projets

Corentin Potron

07 juil. 2016 à 10:37

Merci beaucoup pour l'idée ! 🙂 Le projet une fois compilé ne prend pas tellement de ressources pour l'Arduino MEGA 2560 (13% de l'espace de stockage et 10% de la mémoire dynamique). Autant dire que vous pouvez encore rajouter pas mal d'algorithmes annexes de gestion d'éclairage ect. De plus, le rafraîchissement des informations est instantané visuellement et cela est dû au driver RA8875 qui prend en charge le dessin complet de l'écran. Finalement votre Arduino reste plus longtemps à ne rien faire qu'à afficher quelque chose ! 😉 Je connais les écrans nextion (j'ai d'ailleurs beaucoup hésité avant de me décider quel type d'écran j'allais choisir :p). Finalement je suis partis sur mon écran TFT 40pin car il présentait plus de “challenge” et je savais que l'on pourrait aboutir au même résultat au final (car mon écran est aussi tactile et peut être géré par l'Arduino). J'aime bien partir du moins possible pour mes projets pour ne pas être limité par la suite par des contraintes imposées par des dispositifs “haut niveau” pour lesquels tout est pris en charge. C'est un peu comme les langages de programmation 😉

Proteus

07 juil. 2016 à 10:37

Très beau travail. Bravo Corentin.

Corentin Potron

07 juil. 2016 à 10:37

Merci beaucoup ! 🙂

Proteus

07 juil. 2016 à 10:37

Tu devrai faire une version qui ne nécessite pas d'avoir un écran en montant une application directement (sous Windows) pour afficher tes informations. Tu ferai tomber le prix. (P.S. J'adore vraiment le design que tu as fait mais j'ai 8 serveurs tu imagines le tarif :p)

Corentin Potron

07 juil. 2016 à 10:37

C'est une très bonne idée et c'est tout à fait possible en sois ! En effet, tout est déjà prêt pour réaliser une application graphique sous Windows : mon script python chargé de récupérer les informations du système stock les variables avant de les envoyer à l'Arduino 😉 il suffit juste de créer une GUI dans ce programme au lieu du simple affichage en console et le tour est joué ! 😉 Je me pencherais sûrement dessus dans quelques temps et ferais une update de ce post 😉

Et effectivement pour 8 serveurs le tarif est tout de suite assez élevé mais on peut quand même faire quelques économies : si ils sont tous côte à côte, on peut théoriquement utiliser qu'une seule Arduino car le bus SPI est adressable : on peut donc avoir plusieurs RA8875 sur la même ligne ! Je dis bien théoriquement car il y a quand même la contrainte de la capacité de calcul de l'Arduino qui peinerait à recevoir et actualiser simultanément les informations pour 8 serveurs ! Après rien n'empêche d'opter pour des écrans plus petits et moins chères tel que celui-ci : https://www.adafruit.com/products/1591 ou encore des écrans LCD ou OLED de 16*2.. Tout dépend de votre motivation ! 😉

Proteus

07 juil. 2016 à 10:37

Attends je te montre a quoi ca ressemble 🙂

Proteus

07 juil. 2016 à 10:37

[decom_attached_image_1455460051370]

Corentin Potron

07 juil. 2016 à 10:37

Effectivement il y a du beau matériel ! 😮 Sinon il y aurait une autre solution qui consisterait à récupérer les informations des différents serveurs (considérés comme des “clients”) et à les centraliser (via protocol TCP/IP) de manière à les récupérer dans un seul programme qui jouerait le rôle de “serveur”, et qui lui se chargerait de les envoyer à l'Arduino. Il y aurait juste à modifier l'affichage, voire opter pour un écran plus grand, et ainsi les afficher toutes simultanément sur un seul écran ! 😉 Vous auriez le même système pour pas trop plus chère que ça.

Privat

07 juil. 2016 à 10:38

Bravo !!!

Corentin Potron

07 juil. 2016 à 10:38

Merci 🙂

davidomo

07 juil. 2016 à 10:38

en effet ce n'est pas gourmand

je ne connaissais pas le module RA8875 et en effet il a l'air intéressent


“J'aime bien partir du moins possible pour mes projets pour ne pas être limité par la suite par des contraintes imposées par des dispositifs “haut niveau” pour lesquels tout est pris en charge”

je suis dans la même philosophie partir de rien faire travailler ses neurones afin d'arriver à ce que l'on avait imaginé

je ne sais pas si tu connais la mini mega2560 core, une méga 3 fois plus petite

parfait pour des projets professionnel un petit bijoux

visible ici : http://www.inhaos.com/product_info.php?products_id=118

je pense que cela devrais te plaire

Corentin Potron

07 juil. 2016 à 10:39

Oui j'aime bien cette philosophie là aussi 😉 Moins de contraintes, plus de liberté donc plus de difficultés mais au final on obtient exactement ce que l'on souhaitait !

Ah non je ne connaissais pas cette petite bête elle a l'air pas mal du tout ! 😮 Merci de l'info je vais regarder ça de plus près 😉


Recevez une fois par mois les meilleurs tutoriels Technologie dans votre boîte mail




Champion

Gagnant du Concours Concours DIY Arduino


Oh ça buzz

+ de 1 000 vues pour Gestion thermique automatique de PC



Gotronic

Voir l'espace DIY gotronic


S'inscrire:



En cliquant sur s'inscire, vous acceptez de respecter les conditions générales d'utilisation de Oui Are Makers.

  • Vues: 2053
  • J'aime: 25