Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Arduino PC Monitor

Komponen dan persediaan

Arduino Leonardo
atau perangkat Arduino lain atau bahkan Atmega dengan konverter UART
× 1
LCD 16x2
× 1
Kabel jumper (generik)
× 1

Tentang proyek ini

Pendahuluan

Ide untuk proyek ini sebenarnya lahir dari kebutuhan akan kesenangan dan pengetahuan. Proyek ini mudah dibuat dan memiliki banyak aplikasi. Kita dapat menggunakannya, misalnya, untuk mengontrol, menyimpan, dan menampilkan beberapa variabel perangkat keras.

Mari kita mulai

Pertama-tama, kita perlu menghubungkan LCD kita (saya menggunakan konverter I2C) :

Ketika kita melakukan ini, kita bisa pindah ke bagian selanjutnya...

Mari kita menulis beberapa kode...

Atur LCD 16x2 dengan alamat 0x3F - alamat perangkat bus I2C dapat ditemukan dari pemindaian melalui sketsa sederhana yang tersedia di Arduino Playground.

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

Sekarang kita harus mendeklarasikan String variabel untuk menyimpan input Serial kami dan mengatur sisa barang.

String inData; void pengaturan() { lcd.init(); Serial.begin(9600); lcd.lampu latar(); }  

Jika kami ingin mengirim data secara langsung dengan variabel string, ini bisa menjadi masalah, karena latensi sekitar satu detik berdasarkan ukuran string. Untuk menghindari ini gunakan char variabel dan menambahkannya ke inData . kami .

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

Oke, semuanya baik-baik saja tetapi ketika menerima data berhenti datang? Ada solusinya:

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

Ketika char terakhir adalah * Arduino akan tahu kapan harus melanjutkan bagian selanjutnya, Sekarang kita harus menangani pesan kita. Kita harus menyingkirkan * . ini begitulah:

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

Dan akhirnya:

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

Tapi... Kami memiliki baris kedua yang tidak terpakai... Inilah solusinya

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

Ketika char terakhir akan # Arduino akan mengatur baris kedua LCD kami dan mencetak data lainnya.

Konfigurasi

Mengapa C#, bukan C atau C++ ? C# mudah dan cepat (cepat... maksud saya secara tertulis)

Pertama-tama, kita perlu mengunduh pustaka tambahan untuk memudahkan akses ke variabel perangkat keras kita.

Buka Monitor Perangkat Keras

Setelah membongkar, kami memiliki perpustakaan kami:OpenHardwareMonitorLib.dll

Buat proyek baru -> Aplikasi Windows Forms -> Klik kanan pada Referensi di Solution Explorer -> Browse -> OpenHardwareMonitorLib.dll dan jangan lupa untuk memeriksanya.

Penampilan

Siapkan formulir kami:

Sekarang kode...

Beberapa arahan...

menggunakan System.IO.Ports; menggunakan OpenHardwareMonitor.Hardware;  

Dan deklarasi...

Port SerialPort =SerialPort baru();Komputer c =Komputer baru() { GPUEnabled =true, CPUEnabled =true }; nilai mengambang1, nilai2;  

c adalah objek Open Hardware Monitor. Kita harus mengaktifkan CPU dan GPU. Dalam acara Pemuatan Formulir, masukkan ini:

 c.Buka();  

Dalam bentuk konstruktor:

Form1 publik()  

tambahkan:

Init();  

lalu, di mana saja:

private void Init() { coba { notifyIcon1.Visible =false; port.Parity =Parity.None; port.StopBits =StopBits.One; port.DataBits =8; port.Jabat Tangan =Jabat Tangan.Tidak Ada; port.RtsEnable =benar; string[] port =SerialPort.GetPortNames(); foreach (port string di port) { comboBox1.Items.Add(port); } port.BaudRate =9600; } catch (Ex. Pengecualian) { MessageBox.Show(ex.Message); } }  

Sederhana... Inisialisasi variabel yang dideklarasikan, pindai port yang terbuka dan tambahkan ke comboBox1

Sekarang fungsi utama untuk menyimpan dan mengirim variabel:

private void Status() { foreach (var hardwadre di c.Hardware) { if (hardwadre.HardwareType ==HardwareType.GpuNvidia) { hardwadre.Update(); foreach (sensor var di hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value1 =sensor.Value.GetValueOrDefault(); } } if (hardwadre.HardwareType ==HardwareType.CPU) { hardwadre.Update(); foreach (sensor var di hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value2 =sensor.Value.GetValueOrDefault(); } } } coba { port.Write(nilai1 + "*" + nilai2 + "#"); }catch(Pengecualian ex) { timer1.Stop(); MessageBox.Show(mis.Pesan); toolStripStatusLabel1.Text ="Arduino tidak merespons..."; }  

Jangan lupa tambahkan Status() berfungsi untuk mengatur waktu acara centang.

Sekarang tombol sambungkan:

coba { if (!port.IsOpen) { port.PortName =comboBox1.Text; port.Buka(); timer1.Interval =Convert.ToInt32(comboBox2.Text); timer1.Enabled =benar; toolStripStatusLabel1.Text ="Mengirim data..."; label2.Teks ="Tersambung"; } } catch (Pengecualian ex) { MessageBox.Show(ex.Message); }  

Kami sedang memeriksa apakah port sudah terbuka, jika tidak mengatur interval timer dari comboBox2 dan menjalankan semuanya!

Tombol putuskan sambungan:

coba { port.Write("DIS*"); port.Tutup(); } catch (Ex. Pengecualian) { MessageBox.Show(ex.Message); } label2.Text ="Terputus"; timer1.Enabled =salah; toolStripStatusLabel1.Text ="Hubungkan ke Arduino..."; datanya ="";  

Tulis data terakhir ke Arduino untuk mengatakan bahwa kita sudah selesai.

Anda dapat menambahkan beberapa fungsi seperti for mis. sembunyikan ke baki dll. (Kode lengkap di bawah)

Program harus dijalankan dengan hak administrator!

Kode

  • Kode Arduino
  • Aplikasi C#
Kode 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 diterima =Serial.read(); inData +=diterima; if (diterima =='*') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,0); lcd.print("Suhu GPU:" + inData + char(223)+"C "); inData =""; if(inData =="DIS") { lcd.clear(); lcd.setCursor(0,0); lcd.print("Terputus!"); } } if (diterima =='#') { inData.remove(inData.length() - 1, 1); lcd.setCursor(0,1); lcd.print("Suhu CPU:" + inData + char(223)+"C "); inData =""; } }}
Aplikasi C#C#
menggunakan Sistem;menggunakan System.Collections.Generic;menggunakan System.ComponentModel;menggunakan System.Data;menggunakan System.Drawing;menggunakan System.Linq;menggunakan System.Text;menggunakan System.Threading.Tasks;menggunakan System.Windows. Formulir;menggunakan System.IO.Ports;menggunakan OpenHardwareMonitor.Hardware;namespace Arduino_Controll{ public partial class Form1 :Form { static string data; Komputer c =Komputer baru() { GPUEnabled =true, CPUEnabled =true }; nilai mengambang1, nilai2; port SerialPort pribadi =SerialPort baru(); publik Form1() { Inisialisasi Komponen(); init(); } private void Init() { try { notifyIcon1.Visible =false; port.Parity =Parity.None; port.StopBits =StopBits.One; port.DataBits =8; port.Jabat Tangan =Jabat Tangan.Tidak Ada; port.RtsEnable =benar; string[] port =SerialPort.GetPortNames(); foreach (port string di port) { comboBox1.Items.Add(port); } port.BaudRate =9600; } catch (Ex. Pengecualian) { MessageBox.Show(ex.Message); } } private void button3_Click(pengirim objek, EventArgs e) { coba { port.Write("DIS*"); port.Tutup(); } catch (Ex. Pengecualian) { MessageBox.Show(ex.Message); } label2.Text ="Terputus"; timer1.Enabled =salah; toolStripStatusLabel1.Text ="Hubungkan ke Arduino..."; datanya =""; } private void button5_Click(pengirim objek, EventArgs e) { coba { if (!port.IsOpen) { port.PortName =comboBox1.Text; port.Buka(); timer1.Interval =Convert.ToInt32(comboBox2.Text); timer1.Enabled =benar; toolStripStatusLabel1.Text ="Mengirim data..."; label2.Teks ="Tersambung"; } } catch (Pengecualian ex) { MessageBox.Show(ex.Message); } } private void timer1_Tick(pengirim objek, EventArgs e) { Status(); } private void Form1_Load(pengirim objek, EventArgs e) { c.Open(); } private void Form1_Resize(pengirim objek, EventArgs e) { if (FormWindowState.Minimized ==this.WindowState) { notifyIcon1.Visible =true; coba { notifyIcon1.ShowBalloonTip(500, "Arduino", toolStripStatusLabel1.Text, ToolTipIcon.Info); }catch(Pengecualian ex) { } this.Hide(); } } private void notifyIcon1_DoubleClick(pengirim objek, EventArgs e) { this.Show(); this.WindowState =FormWindowState.Normal; notifyIcon1.Visible =salah; } private void Status() { foreach (var hardwadre di c.Hardware) { if (hardwadre.HardwareType ==HardwareType.GpuNvidia) { hardwadre.Update(); foreach (sensor var di hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value1 =sensor.Value.GetValueOrDefault(); } } if (hardwadre.HardwareType ==HardwareType.CPU) { hardwadre.Update(); foreach (sensor var di hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) { value2 =sensor.Value.GetValueOrDefault(); } } } coba { port.Write(nilai1 + "*" + nilai2 + "#"); }catch(Pengecualian ex) { timer1.Stop(); MessageBox.Show(mis.Pesan); toolStripStatusLabel1.Text ="Arduino tidak merespons..."; } } }}

Skema


Proses manufaktur

  1. Panel LCD dengan Arduino untuk Simulator Penerbangan
  2. Membuat Monitor Ambilight Menggunakan Arduino
  3. Animasi dan Permainan LCD
  4. Pemantau Detak Jantung Menggunakan IoT
  5. Pemantau Tegangan Termokopel Pemanas Air Panas
  6. Menampilkan Gambar Pada Layar TFT LCD Dengan Arduino UNO!
  7. Osiloskop DIY 10Hz-50kHz pada Layar LCD 128x64
  8. MAX 30102 Monitor Detak Jantung pada LCD 16x2
  9. Monitor Rumah
  10. Jam Alarm Sederhana dengan DS1302 RTC