Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Moniteur PC Arduino

Composants et fournitures

Arduino Leonardo
ou autre appareil Arduino ou même Atmega avec convertisseur UART
× 1
LCD 16x2
× 1
Câbles de raccordement (générique)
× 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#
utilisation de System;utilisation de System.Collections.Generic;utilisation de System.ComponentModel;utilisation de System.Data;utilisation de System.Drawing;utilisation de System.Linq;utilisation de System.Text;utilisation de System.Threading.Tasks;utilisation de System.Windows. Formulaires;utilisation de System.IO.Ports;utilisation d'OpenHardwareMonitor.Hardware;espace de noms Arduino_Controll{ public partial class Form1 :Form { static string data; Ordinateur c =nouvel ordinateur() { GPUEnabled =vrai, CPUEnabled =vrai } ; valeur flottante1, valeur2 ; port SerialPort privé =nouveau SerialPort(); public Form1() { InitializeComponent(); Init(); } 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); } } private void button3_Click(object sender, EventArgs e) { try { 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 ="" ; } private void button5_Click(object sender, EventArgs e) { 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); } } private void timer1_Tick(objet expéditeur, EventArgs e) { Status(); } private void Form1_Load (expéditeur d'objet, EventArgs e) { c.Open(); } privé void Form1_Resize (expéditeur d'objet, EventArgs e) { if (FormWindowState.Minimized ==this.WindowState) { notifyIcon1.Visible =true; essayez { notifyIcon1.ShowBalloonTip (500, "Arduino", toolStripStatusLabel1.Text, ToolTipIcon.Info); }catch(Exception ex) { } this.Hide(); } } private void notifyIcon1_DoubleClick(object sender, EventArgs e) { this.Show(); this.WindowState =FormWindowState.Normal; notifierIcon1.Visible =faux ; } 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..."; } } }}

Schémas


Processus de fabrication

  1. Panneau LCD avec Arduino pour Flight Simulator
  2. Créer un moniteur Ambilight à l'aide d'Arduino
  3. Animation LCD et jeux
  4. Moniteur de fréquence cardiaque utilisant l'IoT
  5. Moniteur de tension du thermocouple du chauffe-eau
  6. Afficher une image sur un écran LCD TFT avec Arduino UNO !
  7. Oscilloscope DIY 10Hz-50kHz sur écran LCD 128x64
  8. Moniteur de fréquence cardiaque MAX 30102 sur écran LCD 16x2
  9. Réveil simple avec DS1302 RTC