Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino PC-Monitor

Komponenten und Verbrauchsmaterialien

Arduino Leonardo
oder ein anderes Arduino-Gerät oder sogar Atmega mit UART-Konverter
× 1
LCD 16x2
× 1
Jumper (generisch)
× 1

Über dieses Projekt

Einführung

Die Idee zu diesem Projekt entstand eigentlich aus dem Bedürfnis nach Spaß und Wissen. Dieses Projekt ist einfach zu machen und hat viele Anwendungen. Wir können es zum Beispiel verwenden, um einige Hardware-Variablen zu steuern, zu speichern und anzuzeigen.

Fangen wir an

Zuerst müssen wir unser LCD anschließen (ich habe einen I2C-Konverter verwendet):

Wenn wir dies getan haben, können wir zum nächsten Teil übergehen ...

Lass uns etwas Code schreiben...

Stellen Sie das 16x2-LCD mit der Adresse 0x3F ein - die Adresse des I2C-Busgeräts kann durch Scannen über eine einfache Skizze gefunden werden, die auf Arduino Playground verfügbar ist.

#include  #include  LiquidCrystal_I2C lcd(0x3F,16,2);  

Jetzt müssen wir einen String deklarieren Variable zum Speichern unserer seriellen Eingabe und zum Einrichten des Rests.

String inData; Void setup () {lcd.init (); Serial.begin (9600); LCD-Rücklicht(); }  

Wenn wir Daten direkt über eine String-Variable senden möchten, könnte dies aufgrund der Latenz von etwa einer Sekunde basierend auf der String-Größe problematisch sein. Um dies zu vermeiden, verwenden Sie char Variable und fügen Sie sie zu unserem inData hinzu .

char empfangen =Serial.read(); inData +=empfangen;  

Ok, alles ist in Ordnung, aber wenn keine Daten mehr empfangen werden? Es gibt eine Lösung:

if (erhalten =='*') { ... } 

Wenn das letzte Zeichen * sein wird, weiß Arduino, wann der nächste Teil fortgesetzt werden soll. Jetzt müssen wir unsere Nachricht verarbeiten. Wir müssen diesen * loswerden Zeichen so:

inData.remove(inData.length() - 1, 1);  

Und schließlich:

lcd.setCursor(0,0); lcd.print (inDaten); inData =""; // Puffer löschen  

Aber... Wir haben die zweite Leitung ungenutzt... Hier ist die Lösung

if (erhalten =='#') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,1); lcd.print (inDaten); inData =""; } }  

Wenn das letzte Zeichen # ist, wird Arduino die zweite Zeile unseres LCD einstellen und andere Daten drucken.

Konfiguration

Warum C#, nicht C oder C++? C# ist einfach und schnell (schnell ... ich meine schriftlich)

Zuallererst müssen wir zusätzliche Bibliotheken herunterladen, um einen einfachen Zugriff auf unsere Hardware-Variablen zu haben.

Hardwaremonitor öffnen

Nach dem Entpacken haben wir unsere Bibliothek:OpenHardwareMonitorLib.dll

Neues Projekt erstellen -> Windows Forms-Anwendung -> Rechtsklick auf Referenzen im Projektmappen-Explorer -> Durchsuchen -> OpenHardwareMonitorLib.dll und vergessen Sie nicht, es zu überprüfen.

Aussehen

Bereiten Sie unser Formular vor:

Jetzt codieren...

Einige Richtlinien...

mit System.IO.Ports; Verwenden von OpenHardwareMonitor.Hardware;  

Und Erklärungen...

SerialPort port =new SerialPort();Computer c =new Computer() { GPUEnabled =true, CPUEnabled =true }; Gleitkommawert1, Wert2;  

c ist Open Hardware Monitor-Objekt. Wir müssen CPU und GPU aktivieren. Geben Sie in das Form Load-Ereignis Folgendes ein:

 c.Open();  

Im Formularkonstruktor:

öffentliches Formular1()  

hinzufügen:

Init();  

und dann überall:

privat void Init() { try { noticeIcon1.Visible =false; port.Parity =Parity.None; port.StopBits =StopBits.One; port.DataBits =8; port.Handshake =Handshake.None; port.RtsEnable =true; string[] ports =SerialPort.GetPortNames(); foreach (String-Port in Ports) {comboBox1.Items.Add (Port); } port.BaudRate =9600; } catch (Ausnahme ex) { MessageBox.Show (ex.Message); } }  

Einfach... Deklarierte Variablen initialisieren, nach offenen Ports suchen und zur comboBox1 hinzufügen

Jetzt Hauptfunktion zum Speichern und Senden von Variablen:

privat void Status() { foreach (var hardwadre in c.Hardware) { if (hardwadre.HardwareType ==HardwareType.GpuNvidia) { hardwadre.Update(); foreach (var sensor in hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value1 =sensor.Value.GetValueOrDefault(); } } if (hardwadre.HardwareType ==HardwareType.CPU) { hardwadre.Update(); foreach (var sensor in hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value2 =sensor.Value.GetValueOrDefault(); } } } try { port.Write (Wert1 + "*" + Wert2 + "#"); }catch(Ausnahme ex) { timer1.Stop(); MessageBox.Show(ex.Message); toolStripStatusLabel1.Text ="Arduino antwortet nicht..."; }  

Vergessen Sie nicht, Status() . hinzuzufügen Funktion zum Timer-Tick-Ereignis.

Jetzt verbinden-Taste:

try { if (!port.IsOpen) { port.PortName =comboBox1.Text; port.Open(); timer1.Interval =Convert.ToInt32(comboBox2.Text); Timer1.Enabled =true; toolStripStatusLabel1.Text ="Daten werden gesendet..."; label2.Text ="Verbunden"; } } catch (Ausnahme ex) { MessageBox.Show (ex.Message); }  

Wir prüfen, ob ein Port bereits geöffnet ist, setzen das Timer-Intervall von ComboBox2 aus und starten alles!

Schaltfläche Trennen:

try { port.Write("DIS*"); port.Close(); } catch (Ausnahme ex) { MessageBox.Show (ex.Message); } label2.Text ="Getrennt"; Timer1.Enabled =false; toolStripStatusLabel1.Text ="Mit Arduino verbinden..."; Daten ="";  

Schreiben Sie die letzten Daten an Arduino, um zu sagen, dass wir fertig sind.

Sie können einige Funktionen wie z.B. in Ablage verstecken usw. (Vollständiger Code unten)

Programm muss mit Administratorrechten ausgeführt werden!

Code

  • Arduino-Code
  • C#-Anwendung
Arduino-CodeArduino
#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 recieved =Serial.read(); inData +=empfangen; if (erhalten =='*') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,0); lcd.print("GPU Temp.:" + inData + char(223)+"C"); inData =""; if(inData =="DIS") {lcd.clear(); lcd.setCursor(0,0); lcd.print("Getrennt!"); } } if (erhalten =='#') { inData.remove (inData.length() - 1, 1); lcd.setCursor(0,1); lcd.print("CPU Temp.:" + inData + char(223)+"C"); inData =""; } }}
C#-AnwendungC#
System verwenden;System.Collections.Generic verwenden;System.ComponentModel verwenden;System.Data verwenden;System.Drawing verwenden;System.Linq verwenden;System.Text verwenden;System.Threading.Tasks verwenden;System.Windows verwenden. Formulare;mit System.IO.Ports;mit OpenHardwareMonitor.Hardware;Namespace Arduino_Controll{ öffentliche Teilklasse Form1:Form { statische Zeichenfolgendaten; Computer c =neuer Computer () { GPUEnabled =true, CPUEnabled =true }; Gleitkommawert1, Wert2; privater SerialPort-Port =neuer SerialPort(); public Form1() { InitializeComponent(); Drin(); } private void Init() { try {notifyIcon1.Visible =false; port.Parity =Parity.None; port.StopBits =StopBits.One; port.DataBits =8; port.Handshake =Handshake.None; port.RtsEnable =true; string[] ports =SerialPort.GetPortNames(); foreach (String-Port in Ports) {comboBox1.Items.Add (Port); } port.BaudRate =9600; } catch (Ausnahme ex) { MessageBox.Show (ex.Message); } } private void button3_Click(object sender, EventArgs e) { try { port.Write("DIS*"); port.Close(); } catch (Ausnahme ex) { MessageBox.Show (ex.Message); } label2.Text ="Getrennt"; Timer1.Enabled =false; toolStripStatusLabel1.Text ="Mit Arduino verbinden..."; Daten =""; } 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 =true; toolStripStatusLabel1.Text ="Daten werden gesendet..."; label2.Text ="Verbunden"; } } catch (Ausnahme ex) { MessageBox.Show (ex.Message); } } privat void timer1_Tick (Objektsender, EventArgs e) { Status(); } private void Form1_Load (Objektsender, EventArgs e) { c.Open(); } private void Form1_Resize(object sender, EventArgs e) { if (FormWindowState.Minimized ==this.WindowState) { noticeIcon1.Visible =true; try {notifyIcon1.ShowBalloonTip(500, "Arduino", toolStripStatusLabel1.Text, ToolTipIcon.Info); }catch(Ausnahme ex) {} this.Hide(); } } privat void noticeIcon1_DoubleClick(Objektsender, EventArgs e) { this.Show(); this.WindowState =FormWindowState.Normal; notificationIcon1.Visible =false; } private void Status() { foreach (var hardwadre in c.Hardware) { if (hardwadre.HardwareType ==HardwareType.GpuNvidia) { hardwadre.Update(); foreach (var sensor in hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value1 =sensor.Value.GetValueOrDefault(); } } if (hardwadre.HardwareType ==HardwareType.CPU) { hardwadre.Update(); foreach (var sensor in hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value2 =sensor.Value.GetValueOrDefault(); } } } try { port.Write (Wert1 + "*" + Wert2 + "#"); }catch(Ausnahme ex) { timer1.Stop(); MessageBox.Show(ex.Message); toolStripStatusLabel1.Text ="Arduino antwortet nicht..."; } } }} 

Schaltpläne


Herstellungsprozess

  1. LCD-Panel mit Arduino für Flugsimulator
  2. Erstellen von Monitor-Ambilight mit Arduino
  3. LCD-Animation und -Spiele
  4. Herzfrequenzmesser mit IoT
  5. Thermoelement-Spannungswächter für Warmwasserbereiter
  6. Anzeige eines Bildes auf einem LCD-TFT-Bildschirm mit Arduino UNO!
  7. DIY 10Hz-50kHz Oszilloskop auf 128x64 LCD-Display
  8. MAX 30102 Herzfrequenzmesser auf 16x2-LCD
  9. Heimmonitor
  10. Einfacher Wecker mit DS1302 RTC