Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino pc-monitor

Componenten en benodigdheden

Arduino Leonardo
of ander Arduino-apparaat of zelfs Atmega met UART-converter
× 1
LCD 16x2
× 1
Jumperdraden (algemeen)
× 1

Over dit project

Inleiding

Het idee voor dit project is eigenlijk ontstaan ​​uit de behoefte aan plezier en kennis. Dit project is eenvoudig te maken en kent vele toepassingen. We kunnen het bijvoorbeeld gebruiken om bepaalde hardwarevariabelen te controleren, op te slaan en weer te geven.

Laten we beginnen

Allereerst moeten we ons LCD-scherm aansluiten (ik gebruikte een I2C-converter):

Als we dit hebben gedaan, kunnen we naar het volgende deel gaan...

Laten we wat code schrijven...

Set 16x2 LCD met adres 0x3F - adres van I2C-busapparaat kan worden gevonden door te scannen via een eenvoudige schets die beschikbaar is op Arduino Playground.

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

Nu moeten we een String declare declareren variabele om onze seriële invoer op te slaan en de rest van de dingen in te stellen.

String inData; void setup() { lcd.init(); Serieel.begin(9600); lcd.achtergrondverlichting(); }  

Als we gegevens rechtstreeks via een tekenreeksvariabele willen verzenden, kan dit problematisch zijn, vanwege een latentie van ongeveer één seconde op basis van de tekenreeksgrootte. Gebruik char . om dit te voorkomen variabele en voeg deze toe aan onze inData .

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

Ok, alles is in orde, maar wanneer het ontvangen van gegevens niet meer komt? Er is een oplossing:

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

Wanneer de laatste van char zal zijn * Arduino weet wanneer het volgende deel moet doorgaan, nu moeten we ons bericht afhandelen. We moeten van deze * afkomen char zo:

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

En tot slot:

lcd.setCursor(0,0); lcd.print(inData); inData =""; // Wis buffer  

Maar... We hebben de tweede regel ongebruikt... Hier is de oplossing

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

Wanneer de laatste char # zal zijn, zal Arduino de tweede regel van ons LCD-scherm instellen en andere gegevens afdrukken.

Configuratie

Waarom C#, niet C of C++? C# is gemakkelijk en snel (snel... ik bedoel schriftelijk)

Allereerst moeten we een extra bibliotheek downloaden voor gemakkelijke toegang tot onze hardwarevariabelen.

Hardwaremonitor openen

Na het uitpakken hebben we onze bibliotheek:OpenHardwareMonitorLib.dll

Nieuw project maken -> Windows Forms-toepassing -> Klik met de rechtermuisknop op Referenties in Solution Explorer -> Bladeren -> OpenHardwareMonitorLib.dll en vergeet niet om het aan te vinken.

Uiterlijk

Bereid ons formulier voor:

Codeer nu...

Enkele richtlijnen...

met behulp van System.IO.Ports; met behulp van OpenHardwareMonitor.Hardware;  

En verklaringen...

SerialPort-poort =nieuwe SerialPort();Computer c =nieuwe Computer() { GPUEnabled =true, CPUEnabled =true }; vlotterwaarde1, waarde2;  

c is Open Hardware Monitor-object. We moeten CPU en GPU inschakelen. Zet in Form Load-gebeurtenis dit:

 c.Open();  

In formulierconstructor:

public Form1()  

toevoegen:

Init();  

en dan, waar dan ook:

private void Init() { probeer {informIcon1.Visible =false; poort.Pariteit =Pariteit.Geen; port.StopBits =StopBits.One; poort.DataBits =8; port.Handshake =Handshake.Geen; poort.RtsEnable =waar; string [] poorten =SerialPort.GetPortNames(); foreach (stringpoort in poorten) { comboBox1.Items.Add (poort); } poort. BaudRate =9600; } catch (uitzondering ex) { MessageBox.Show (ex.Message); } }  

Eenvoudig... Initialiseer gedeclareerde variabelen, scan naar open poorten en voeg deze toe aan de comboBox1

Nu belangrijke functie om variabelen op te slaan en te verzenden:

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(); } } } probeer { port.Write(value1 + "*" + value2 + "#"); }catch(Uitzondering ex) { timer1.Stop(); MessageBox.Show (ex.Message); toolStripStatusLabel1.Text ="Arduino reageert niet..."; }  

Vergeet niet Status() . toe te voegen functie naar timer tick event.

Nu verbindingsknop:

probeer { if (!port.IsOpen) { port.PortName =comboBox1.Text; poort.Open(); timer1.Interval =Convert.ToInt32(comboBox2.Text); timer1.Ingeschakeld =waar; toolStripStatusLabel1.Text ="Gegevens worden verzonden..."; label2.Text ="Verbonden"; } } catch (uitzondering ex) { MessageBox.Show (ex.Message); }  

We controleren of er al een poort open is, zo niet het timer-interval instellen vanuit comboBox2 en start alles op!

Ontkoppelknop:

probeer { port.Write("DIS*"); poort.Sluiten(); } catch (uitzondering ex) { MessageBox.Show (ex.Message); } label2.Text ="Verbinding verbroken"; timer1.Ingeschakeld =onwaar; toolStripStatusLabel1.Text ="Verbind met Arduino..."; gegevens ="";  

Schrijf de laatste gegevens naar Arduino om te zeggen dat we klaar zijn.

U kunt enkele functies toevoegen, zoals voor b.v. verbergen in lade enz. (Volledige code hieronder)

Het programma moet worden uitgevoerd met beheerdersrechten!

Code

  • Arduino-code
  • C#-toepassing
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 ontvangen =Serial.read(); inData +=ontvangen; if (ontvangen =='*') { 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("Verbinding verbroken!"); } } if (ontvangen =='#') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,1); lcd.print("CPU Temp.:" + inData + char(223)+"C "); inData =""; } }}
C#-toepassingC#
System gebruiken;System.Collections.Generic gebruiken;System.ComponentModel gebruiken;System.Data gebruiken;System.Drawing gebruiken;System.Linq gebruiken;System.Text gebruiken;System.Threading.Tasks gebruiken;System.Windows gebruiken. Formulieren;met behulp van System.IO.Ports;met behulp van OpenHardwareMonitor.Hardware;naamruimte Arduino_Controll{ openbare gedeeltelijke klasse Form1:Form {statische stringgegevens; Computer c =nieuwe Computer() { GPUEnabled =true, CPUEnabled =true}; vlotterwaarde1, waarde2; private SerialPort-poort =nieuwe SerialPort(); public Form1() { InitializeComponent(); In het(); } private void Init() { probeer {informIcon1.Visible =false; poort.Pariteit =Pariteit.Geen; port.StopBits =StopBits.One; poort.DataBits =8; port.Handshake =Handshake.Geen; poort.RtsEnable =waar; string [] poorten =SerialPort.GetPortNames(); foreach (stringpoort in poorten) { comboBox1.Items.Add (poort); } poort. BaudRate =9600; } catch (uitzondering ex) { MessageBox.Show (ex.Message); } } private void button3_Click (object afzender, EventArgs e) { probeer { port.Write("DIS*"); poort.Sluiten(); } catch (uitzondering ex) { MessageBox.Show (ex.Message); } label2.Text ="Verbinding verbroken"; timer1.Ingeschakeld =onwaar; toolStripStatusLabel1.Text ="Verbind met Arduino..."; gegevens =""; } private void button5_Click (object afzender, EventArgs e) { probeer { if (!port.IsOpen) { port.PortName =comboBox1.Text; poort.Open(); timer1.Interval =Convert.ToInt32(comboBox2.Text); timer1.Ingeschakeld =waar; toolStripStatusLabel1.Text ="Gegevens worden verzonden..."; label2.Text ="Verbonden"; } } catch (uitzondering ex) { MessageBox.Show (ex.Message); } } private void timer1_Tick (object afzender, EventArgs e) { Status (); } private void Form1_Load (object afzender, EventArgs e) { c.Open(); } private void Form1_Resize (object afzender, EventArgs e) {if (FormWindowState.Minimized ==this.WindowState) {informIcon1.Visible =true; probeer {notifyIcon1.ShowBalloonTip(500, "Arduino", toolStripStatusLabel1.Text, ToolTipIcon.Info); }catch(Uitzondering ex) { } this.Hide(); } } private void notifyIcon1_DoubleClick (object afzender, EventArgs e) { this.Show(); this.WindowState =FormWindowState.Normaal; notifyIcon1.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(); } } } probeer { port.Write(value1 + "*" + value2 + "#"); }catch (uitzondering ex) { timer1.Stop(); MessageBox.Show (ex.Message); toolStripStatusLabel1.Text ="Arduino reageert niet..."; } } }} 

Schema's


Productieproces

  1. LCD-paneel met Arduino voor Flight Simulator
  2. Maak Monitor Ambilight met Arduino
  3. LCD-animatie en gaming
  4. Hartslagmeter met IoT
  5. Warmwaterverwarmer Thermokoppel Spanningsmonitor
  6. Een afbeelding weergeven op een LCD TFT-scherm met Arduino UNO!
  7. DIY 10Hz-50kHz Oscilloscoop op 128x64 LCD-scherm
  8. MAX 30102 hartslagmeter op 16x2 LCD
  9. Thuismonitor
  10. Arduino-weerstation
  11. Eenvoudige wekker met DS1302 RTC