Moniteur PC Arduino
Composants et fournitures
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
À propos de ce projet
Présentation
L'idée de ce projet est née en fait d'un besoin de plaisir et de connaissance. Ce projet est facile à réaliser et a de nombreuses applications. Nous pouvons l'utiliser, par exemple, pour contrôler, stocker et afficher certaines variables matérielles.
Commençons
Tout d'abord, nous devons connecter notre LCD (j'utilisais un convertisseur I2C) :
Lorsque nous avons fait cela, nous pouvons passer à la partie suivante...
Écrivons du code...
Réglez l'écran LCD 16x2 avec l'adresse 0x3F - l'adresse du périphérique de bus I2C peut être trouvée à partir de la numérisation via un simple croquis disponible sur Arduino Playground.
#include #include LiquidCrystal_I2C lcd(0x3F,16,2) ;
Maintenant, nous devons déclarer une String
variable pour stocker notre entrée série et configurer le reste des choses.
Chaîne dansData ; void setup() { lcd.init(); Serial.begin(9600); LCD rétro-éclairage(); }
Si nous souhaitons envoyer des données directement par une variable de chaîne, cela pourrait être problématique, en raison d'une latence d'environ une seconde basée sur la taille de la chaîne. Pour éviter cela, utilisez char
variable et ajoutez-la à notre inData
.
char reçu =Serial.read(); inData +=reçu ;
D'accord, tout va bien, mais quand la réception des données s'arrête-t-elle ? Il existe une solution :
if (reçu =='*') { ... }
Quand le dernier caractère sera * Arduino saura quand procéder à la prochaine partie, maintenant nous devons gérer notre message. Nous devons nous débarrasser de ce *
char donc :
inData.remove(inData.length() - 1, 1);
Et enfin :
lcd.setCursor(0,0); lcd.print(inData); dansDonnées ="" ; // Vider le tampon
Mais... Nous avons la deuxième ligne inutilisée... Voici la solution
if (reçu =='#') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,1) ; lcd.print(inData); dansDonnées ="" ; } }
Lorsque le dernier caractère sera # Arduino définira la deuxième ligne de notre écran LCD et imprimera d'autres données.
Configuration
Pourquoi C#, pas C ou C++ ? C# est simple et rapide (rapide... je veux dire par écrit)
Tout d'abord, nous devons télécharger une bibliothèque supplémentaire pour un accès facile à nos variables matérielles.
Ouvrir le moniteur matériel
Après déballage, nous avons notre bibliothèque :OpenHardwareMonitorLib.dll
Créez un nouveau projet -> Application Windows Forms -> Cliquez avec le bouton droit sur Références dans l'Explorateur de solutions -> Parcourir -> OpenHardwareMonitorLib.dll et n'oubliez pas de le vérifier.
Apparence
Préparez notre formulaire :
Maintenant, codez...
Quelques directives...
à l'aide de System.IO.Ports ; en utilisant OpenHardwareMonitor.Hardware ;
Et des déclarations...
Port SerialPort =new SerialPort();Computer c =new Computer() { GPUEnabled =true, CPUEnabled =true } ; valeur flottante1, valeur2 ;
c
est l'objet Open Hardware Monitor. Nous devons activer le CPU et le GPU. Dans l'événement Form Load, mettez ceci :
c.Open();
Dans le constructeur de formulaire :
public Form1()
ajouter :
Init();
puis, n'importe où :
private void Init() { try { notifyIcon1.Visible =false; port.Parité =Parité.Aucun; port.StopBits =StopBits.One ; port.DataBits =8; port.Handshake =Handshake.None; port.RtsEnable =vrai; string[] ports =SerialPort.GetPortNames(); foreach (chaîne de port dans les ports) { comboBox1.Items.Add(port); } port.BaudRate =9600; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Simple... Initialisez les variables déclarées, recherchez les ports ouverts et ajoutez-les à la comboBox1
Maintenant fonction principale pour stocker et envoyer des variables :
private void Status() { foreach (var hardwadre dans c.Hardware) { if (hardwadre.HardwareType ==HardwareType.GpuNvidia) { hardwadre.Update(); foreach (var capteur dans hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value1 =sensor.Value.GetValueOrDefault(); } } if (hardwadre.HardwareType ==HardwareType.CPU) { hardwadre.Update(); foreach (var capteur dans hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value2 =sensor.Value.GetValueOrDefault(); } } } essayez { port.Write(valeur1 + "*" + valeur2 + "#"); }catch(Exception ex) { timer1.Stop(); MessageBox.Show(ex.Message); toolStripStatusLabel1.Text ="Arduino ne répond pas..."; }
N'oubliez pas d'ajouter Status()
fonction à l'événement de tic de la minuterie.
Maintenant, bouton de connexion :
try { if (!port.IsOpen) { port.PortName =comboBox1.Text; port.Open(); timer1.Interval =Convert.ToInt32(comboBox2.Text); timer1.Enabled =vrai ; toolStripStatusLabel1.Text ="Envoi de données..."; label2.Text ="Connecté"; } } catch (Exception ex) { MessageBox.Show(ex.Message); }
Nous vérifions si un port est déjà ouvert, sinon définissons l'intervalle de minuterie à partir de comboBox2 et exécutons tout!
Bouton de déconnexion :
essayez { port.Write("DIS*"); port.Fermer(); } catch (Exception ex) { MessageBox.Show(ex.Message); } label2.Text ="Déconnecté"; timer1.Enabled =false; toolStripStatusLabel1.Text ="Connectez-vous à Arduino..."; données ="" ;
Écrivez les dernières données à Arduino pour dire que nous avons terminé.
Vous pouvez ajouter des fonctions comme par ex. cacher dans le bac, etc. (Code complet ci-dessous)
Le programme doit être exécuté avec des privilèges d'administrateur !
Code
- Code Arduino
- Application C#
Code ArduinoArduino
#include#include LiquidCrystal_I2C lcd(0x3F,16,2);String inData;void setup() { Serial.begin(9600); lcd.init(); lcd.backlight();}void loop() { while (Serial.available()> 0) { char reçu =Serial.read(); inData +=reçu ; if (reçu =='*') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,0); lcd.print("Température GPU :" + inData + char(223)+"C "); dansDonnées ="" ; if(inData =="DIS") { lcd.clear(); lcd.setCursor(0,0); lcd.print("Déconnecté !"); } } if (reçu =='#') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,1) ; lcd.print("Température CPU :" + inData + char(223)+"C "); dansDonnées ="" ; } }}
Application C#C#
Schémas
Processus de fabrication
- Panneau LCD avec Arduino pour Flight Simulator
- Créer un moniteur Ambilight à l'aide d'Arduino
- Animation LCD et jeux
- Moniteur de fréquence cardiaque utilisant l'IoT
- Moniteur de tension du thermocouple du chauffe-eau
- Afficher une image sur un écran LCD TFT avec Arduino UNO !
- Oscilloscope DIY 10Hz-50kHz sur écran LCD 128x64
- Moniteur de fréquence cardiaque MAX 30102 sur écran LCD 16x2
- Réveil simple avec DS1302 RTC