工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoPCモニター

コンポーネントと消耗品

>
Arduino Leonardo
または他のArduinoデバイスまたはUARTコンバーターを備えたAtmega
× 1
LCD 16x2
× 1
ジャンパー線(汎用)
× 1

このプロジェクトについて

はじめに

このプロジェクトのアイデアは、実際には楽しさと知識の必要性から生まれました。このプロジェクトは簡単に作成でき、多くのアプリケーションがあります。たとえば、いくつかのハードウェア変数を制御、保存、および表示するために使用できます。

始めましょう

まず、LCDを接続する必要があります(私はI2Cコンバーターを使用していました):

<図>

これを行ったら、次の部分に進むことができます...

コードを書いてみましょう...

アドレス0x3Fで16x2LCDを設定します-I2Cバスデバイスのアドレスは、ArduinoPlaygroundで利用可能な簡単なスケッチを介したスキャンから見つけることができます。

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

次に、 String を宣言する必要があります シリアル入力を保存し、残りのものをセットアップするための変数。

  String inData; void setup(){lcd.init(); Serial.begin(9600); lcd.backlight(); }  

文字列変数で直接データを送信する場合は、文字列サイズに基づいて約1秒の遅延が発生するため、問題が発生する可能性があります。これを回避するには、 char を使用します 変数を inData に追加します 。

  char recieved =Serial.read(); inData + =受信済み;  

さて、すべてが順調ですが、データを受信するときに来るのをやめますか?解決策があります:

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

charの最後がいつになるか* Arduinoは次の部分に進むタイミングを認識します。次に、メッセージを処理する必要があります。この * を取り除く必要があります char so:

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

そして最後に:

  lcd.setCursor(0,0); lcd.print(inData); inData =""; //バッファをクリアします 

しかし... 2行目は未使用です...解決策は次のとおりです

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

文字の最後が#になると、ArduinoはLCDの2行目を設定し、他のデータを印刷します。

構成

なぜCやC ++ではなくC#なのか? C#は簡単で高速です(高速です...つまり書面で)

まず、ハードウェア変数に簡単にアクセスできるように、追加のライブラリをダウンロードする必要があります。

ハードウェアモニターを開く

解凍すると、次のライブラリが作成されます:OpenHardwareMonitorLib.dll

新しいプロジェクトを作成する-> Windowsフォームアプリケーション->ソリューションエクスプローラーで[参照]を右クリック-> [参照]-> [OpenHardwareMonitorLib.dll]を選択し、確認することを忘れないでください。

外観

フォームを準備します:

<図>

<図>

今すぐコーディング...

いくつかのディレクティブ...

  using System.IO.Ports; OpenHardwareMonitor.Hardwareを使用します。  

そして宣言...

  SerialPort port =new SerialPort(); Computer c =new Computer(){GPUEnabled =true、CPUEnabled =true}; float value1、value2;  

c Open HardwareMonitorオブジェクトです。 CPUとGPUを有効にする必要があります。フォームの読み込みイベントに次のように入力します:

  c.Open();  

フォームコンストラクターの場合:

  public Form1() 

追加:

  Init();  

そして、どこでも:

  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 []ポート=SerialPort.GetPortNames(); foreach(ポート内の文字列ポート){comboBox1.Items.Add(port); } port.BaudRate =9600; } catch(Exception ex){MessageBox.Show(ex.Message); }}  

シンプル...宣言された変数を初期化し、開いているポートをスキャンして、 comboBox1 に追加します

変数を保存および送信するための主要な関数:

  private void Status(){foreach(var hardwadre in c.Hardware){if(hardwadre.HardwareType ==HardwareType.GpuNvidia){hardwadre.Update(); foreach(hardwadre.Sensorsのvarセンサー)if(sensor.SensorType ==SensorType.Temperature){value1 =Sensor.Value.GetValueOrDefault(); }} if(hardwadre.HardwareType ==HardwareType.CPU){hardwadre.Update(); foreach(hardwadre.Sensorsのvarセンサー)if(sensor.SensorType ==SensorType.Temperature){value2 =Sensor.Value.GetValueOrDefault(); }}} try {port.Write(value1 + "*" + value2 + "#"); } catch(Exception ex){timer1.Stop(); MessageBox.Show(ex.Message); toolStripStatusLabel1.Text ="Arduinoが応答していません..."; }  

Status()を追加することを忘れないでください ティックイベントをタイマーする機能。

次に接続ボタン:

  try {if(!port.IsOpen){port.PortName =comboBox1.Text; port.Open(); timer1.Interval =Convert.ToInt32(comboBox2.Text); timer1.Enabled =true; toolStripStatusLabel1.Text ="データを送信しています..."; label2.Text ="接続済み"; }} catch(Exception ex){MessageBox.Show(ex.Message); }  

comboBox2からタイマー間隔を設定していない場合は、ポートがすでに開いているかどうかを確認し、すべてを実行します。

切断ボタン:

  try {port.Write( "DIS *"); port.Close(); } catch(Exception ex){MessageBox.Show(ex.Message); } label2.Text ="切断されました"; timer1.Enabled =false; toolStripStatusLabel1.Text ="Arduinoに接続..."; data ="";  

Arduinoに最後のデータを書き込んで、完了したことを伝えます。

たとえば、のようないくつかの関数を追加できます。トレイなどに隠す(以下の完全なコード)

プログラムは管理者権限で実行する必要があります!

コード

  • Arduinoコード
  • C#アプリケーション
Arduinoコード Arduino
 #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 + =受信済み; if(recieved =='*'){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( "切断されました!"); }} if(recieved =='#'){inData.remove(inData.length()-1、1); lcd.setCursor(0,1); lcd.print( "CPU Temp。:" + inData + char(223)+ "C"); inData =""; }}} 
C#アプリケーション C#
 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; usingSystem.Windows。 Forms; using System.IO.Ports; using OpenHardwareMonitor.Hardware; namespace Arduino_Controll {public partial class Form1:Form {static string data;コンピューターc =new Computer(){GPUEnabled =true、CPUEnabled =true}; float value1、value2;プライベートシリアルポートポート=新しいシリアルポート(); public Form1(){InitializeComponent();初期化(); } 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 []ポート=SerialPort.GetPortNames(); foreach(ポート内の文字列ポート){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.Close(); } catch(Exception ex){MessageBox.Show(ex.Message); } label2.Text ="切断されました"; timer1.Enabled =false; toolStripStatusLabel1.Text ="Arduinoに接続..."; data =""; } 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 ="データを送信しています..."; label2.Text ="接続済み"; }} catch(Exception ex){MessageBox.Show(ex.Message); }} private void timer1_Tick(object sender、EventArgs e){Status(); } private void Form1_Load(object sender、EventArgs e){c.Open(); } private void Form1_Resize(object sender、EventArgs e){if(FormWindowState.Minimized ==this.WindowState){notifyIcon1.Visible =true; {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; notifyIcon1.Visible =false; } private void Status(){foreach(var hardwadre in c.Hardware){if(hardwadre.HardwareType ==HardwareType.GpuNvidia){hardwadre.Update(); foreach(hardwadre.Sensorsのvarセンサー)if(sensor.SensorType ==SensorType.Temperature){value1 =Sensor.Value.GetValueOrDefault(); }} if(hardwadre.HardwareType ==HardwareType.CPU){hardwadre.Update(); foreach(hardwadre.Sensorsのvarセンサー)if(sensor.SensorType ==SensorType.Temperature){value2 =Sensor.Value.GetValueOrDefault(); }}} try {port.Write(value1 + "*" + value2 + "#"); } catch(Exception ex){timer1.Stop(); MessageBox.Show(ex.Message); toolStripStatusLabel1.Text ="Arduinoが応答していません..."; }}}} 

回路図


製造プロセス

  1. フライトシミュレータ用のArduinoを備えたLCDパネル
  2. Arduinoを使用してモニターをAmbilightにする
  3. LCDアニメーションとゲーム
  4. IoTを使用した心拍数モニター
  5. 給湯器熱電対電圧モニター
  6. Arduino UNOを使用してLCDTFTスクリーンに画像を表示する!
  7. 128x64LCDディスプレイ上のDIY10Hz-50kHzオシロスコープ
  8. 16x2LCDのMAX30102心拍数モニター
  9. ホームモニター
  10. Arduino Weather Station
  11. DS1302RTCを備えたシンプルな目覚まし時計