Daftar Isi:

Monitor Perangkat Keras PC: 6 Langkah (dengan Gambar)
Monitor Perangkat Keras PC: 6 Langkah (dengan Gambar)

Video: Monitor Perangkat Keras PC: 6 Langkah (dengan Gambar)

Video: Monitor Perangkat Keras PC: 6 Langkah (dengan Gambar)
Video: Mengenal Perangkat Keras dan Perangkat Lunak Komputer | Materi TIK SMP 2024, Juli
Anonim
Monitor Perangkat Keras PC
Monitor Perangkat Keras PC
Monitor Perangkat Keras PC
Monitor Perangkat Keras PC
Monitor Perangkat Keras PC
Monitor Perangkat Keras PC

Halo semuanya. Saya memulai proyek ini karena dua alasan: Saya membuat loop pendingin air di pc saya baru-baru ini dan membutuhkan sesuatu untuk secara visual mengisi beberapa ruang dalam kasing DAN saya ingin dapat memeriksa suhu dan statistik lainnya dengan mengintip cepat tanpa gangguan OSD mengisi sudut layar. Tentu saja ada solusi siap pakai untuk itu, tetapi kebanyakan dari mereka tidak cocok dengan feng shui saya. Jadi, alih-alih meletakkan layar HDMI 7 di kasing saya dengan kabel mencuat kasing dan bilah tugas jendela selalu menyala, saya memutuskan untuk membuat mainan sendiri.

Karena saya bukan seorang insinyur atau programmer, tetapi hanya seorang pria dengan besi solder dan beberapa pengetahuan otodidak, ini tidak akan hanya instruksi langkah-demi-langkah, saya juga akan mencoba untuk fokus pada masalah aspek pemecahan dan penelitian yang membawa saya ke bangunan ini.

DISCLAIMER: SEMUA PEKERJAAN SAYA DIBAGIKAN SEBAGAI CREATIVE COMMON ATTRIBUTION-SHAREALIKE 4.0. SAYA MENGAMBIL INSPIRASI DARI BANYAK CONTOH DI SELURUH INTERNET, JIKA ANDA MENGENALI BEBERAPA BAGIAN DARI PEKERJAAN INI SEBAGAI MILIK ANDA, SILAHKAN HUBUNGI SAYA UNTUK ATRIBUSI. TIDAK ADA PELANGGARAN YANG DIMAKSUDKAN, SAYA AKAN SENANG UNTUK MEMPERBAIKI KESALAHAN APAPUN. TERIMA KASIH

PENOLAKAN KEDUA: PEKERJAAN SAYA DIBAGIKAN SEBAGAIMANA ADANYA. SAYA TIDAK BERTANGGUNG JAWAB ATAS KERUSAKAN YANG BERASAL DARI PENGGUNAAN KODE ATAU INSTRUKSI SAYA

Perlengkapan

  • Arduino Nano (atau UNO jika Anda mau)
  • Tampilan TFT. Dalam kasus saya ini adalah layar 3,5" yang kompatibel dengan ILI9486 / ILI9488L.
  • Sensor Suhu. Dalam kasus mu sensor suhu TMP36 analog.
  • Kabel, kabel, konektor dupont (lebih lanjut tentang itu nanti)
  • (opsional) Papan tempat memotong roti untuk pengujian
  • (opsional tetapi disarankan) perfboard kecil

Langkah 1: Studi Kelayakan (semacam)

Seperti yang saya katakan, saya tidak ingin dan tampilan HDMI macet di casing PC saya, jadi, terselubung kecerdikan saya sendiri, saya mulai mencari ide serupa di internet. Dan ini adalah tip nomor satu: Google adalah teman Anda (yah, mesin pencari apa pun yang layak…). Kita hidup di dunia di mana tidak ada lagi yang benar-benar orisinal, tetapi alih-alih melihat frasa ini dengan makna negatif, kita dapat menggunakan ini untuk keuntungan kita: apa pun yang ingin Anda buat, mungkin seseorang di suatu tempat telah melakukan hal serupa, jadi jika Anda tidak tahu bagaimana menerapkan ide, kemungkinan besar Anda akan menemukan informasi yang berguna di luar sana. Saat mencari di internet, seringkali berguna untuk mengingat dua aturan:

  1. jangan repot-repot pergi setelah halaman 3 atau 4 dari pencarian apa pun, itu hampir selalu membuang-buang waktu. Sebagai gantinya
  2. ubah istilah pencarian, cukup ulangi pertanyaan dari sudut pandang lain (yaitu: "sensor suhu arduino" -> "baca suhu dengan arduino").

Sebenarnya itu penuh dengan proyek bagus di luar sana, dan saya akui saya menghabiskan hari-hari pertama mempelajari sebagian besar proyek ini. Tetapi tidak satu pun dari mereka yang siap untuk saya, karena saya menginginkan sesuatu yang sesuai dengan kebutuhan saya.

Karena saya harus membuat sesuatu yang khusus, saya memutuskan untuk fokus pada perangkat keras yang tepat untuk digunakan dan meninggalkan sisi perangkat lunak untuk nanti, karena perangkat lunak selalu dapat dibuat dan disesuaikan dengan kebutuhan, di sisi lain sisi perangkat keras saya terikat pada ketersediaan dan fitur.

Saya menginginkan sesuatu berdasarkan Arduino, karena saya sudah memilikinya, didokumentasikan dengan baik dan komunitasnya berkembang. Tidak ada masalah di sini, seperti yang saya katakan sebelumnya banyak informasi.

Saya ingin tampilan yang cukup besar untuk dilihat dengan jelas dari jarak beberapa meter dan itu akan sesuai dengan tampilan bangunan saya, ini tidak termasuk tampilan karakter nokia dan LCD. OLED juga tidak diragukan lagi, karena ukurannya kecil. Jadi saya memilih layar warna TFT. Tidak perlu layar sentuh, karena akan ada di dalam PC. Saya menemukan yang 3,5 , sudah dirancang untuk Arduino, ~15€ di Amazon. Cukup bagus.

Sekarang, setelah perangkat keras ditentukan, saya fokus pada perangkat lunak.

Hampir semua proyek, sisi Arduino, sangat mirip. Saya hanya perlu menyesuaikan kode untuk tampilan dan protokol komunikasi untuk mengumpulkan data dari aplikasi server. Sisi komputer, sebagian besar proyek didasarkan pada C, C++, C#, python dan sebagian besar proyek hanya menawarkan antarmuka CLI atau server seperti layanan Windows. Saya ingin GUI, sebagai gantinya. Saya tidak pernah menggunakan bahasa seperti C di Windows, biarkan saja bangunan GUI. Tetapi saya mempelajari beberapa Visual Basic 15 tahun yang lalu, jadi saya mencobanya dan mengunduh versi Visual Studio gratis dari Microsoft.

Setelah mempelajari banyak proyek serupa, saya memutuskan untuk menggunakan OpenHardwareMonitor untuk mendapatkan semua info perangkat keras dan RivaTuner untuk FPS, karena ini gratis dan cukup didokumentasikan.

Langkah 2: Pengujian Perangkat Keras

Pengujian Perangkat Keras
Pengujian Perangkat Keras
Pengujian Perangkat Keras
Pengujian Perangkat Keras
Pengujian Perangkat Keras
Pengujian Perangkat Keras

Sebelum menyalakan besi solder dan memperbaiki selamanya dalam ruang dan waktu komponen elektronik apa pun, adalah praktik yang baik untuk membangun prototipe uji (tip nomor dua). Untungnya, sekarang bukan tahun 1995 lagi. Saat ini cukup mudah untuk mengatur prototipe yang cukup kompleks bahkan pada papan tempat memotong roti kecil. Dalam kasus saya, tampilan TFT mengalami penurunan pinout untuk Arduino Uno, jadi saya menjatuhkannya di Arduino uno saya dan mulai bermain dengan perpustakaan contoh dan membaca manual referensi untuk memahami prinsip dan batasan pengoperasiannya.

Pada titik ini saya menemukan cara menggambar garis dan bitmap dan menulis teks, jadi saya mulai mengutak-atik pengkodean perangkat lunak, meninggalkan semua hal sekunder untuk nanti, tetapi saya akan menyertakan sensor suhu di sini.

Pada titik tertentu, saya memiliki tempat kosong di layar tetapi tidak ada data dari sensor PC yang benar-benar berguna, jadi saya memutuskan untuk meletakkan sensor suhu di dalam casing untuk suhu sekitar. Layar memakan hampir semua pin Arduino, untungnya pin analog A5 tidak digunakan, jadi saya mengikat TMP36. Saya bahkan menguji DHT22 tetapi itu terlalu berlebihan untuk aplikasi ini.

Ada banyak contoh untuk TMP36, saya baru saja menyalin salah satunya dalam sebuah fungsi. TMP35 memiliki 3 pin, Vin masuk ke 5V, GND ke ground dan Out ke pin A5. Saya menempatkan kapasitor keramik 0.1uF antara Vin dan GND. Mereka bilang itu dibutuhkan. Mungkin tidak ada gunanya dalam kasus ini, tapi… Saya bahkan mengatur tegangan referensi analog Arduino ke pin 3.3v untuk pembacaan suhu yang lebih baik. Masih tidak berguna dalam hal ini, tapi …

Langkah 3: Kode Arduino

Silakan unduh dan buka kode Arduino yang disertakan untuk mengikuti penjelasan di langkah ini. Saya mencoba meninggalkan cukup komentar dalam kode agar jelas tanpa membanjirinya.

Anda pasti akan membutuhkan MCUFRIEND_kbv dan perpustakaan Adafruit GFX. Keduanya mudah diinstal dari Arduino IDE.

Program ini dapat dibagi menjadi beberapa bagian seperti ini:

  1. mendefinisikan dan mendeklarasikan semua variabel global dan hal-hal lain yang diperlukan
  2. inisialisasi tampilan, atur referensi eksternal dan gambar UI (semua ini terdapat dalam fungsi setup(), karena harus dijalankan hanya sekali)
  3. membaca data dari koneksi serial dan mengalokasikannya dalam array (fungsi loop())
  4. membaca data sensor suhu eksternal (fungsi readExtTemp())
  5. mencetak data pada tampilan (fungsi printData())
  6. kembali ke lingkaran

BAGIAN 1: Deklarasi dan definisi

Di bagian awal kode, saya menggunakan banyak pointer dan array, jadi saya bisa menekan banyak baris kode berulang lebih pendek untuk menulis siklus FOR. Ya, saya malas. Seperti yang Anda lihat, saya mendeklarasikan array pointer dan mengisinya dengan semua gambar dari file pics.h. Ini memungkinkan untuk melakukan trik siklus FOR untuk menggambar semua ikon.

BAGIAN 2: setup(), kebanyakan gambar UI

Saya memilih font default karena tidak memiliki latar belakang transparan, sehingga memungkinkan untuk menulis baris teks baru di atas yang lama tanpa perlu menghapusnya. Menggunakan font lain akan berarti menggambar kotak hitam di atas teks lama sebelum menulis baris baru, yang mengarah ke efek kedipan yang tidak menyenangkan.

Setelah beberapa pengujian, saya mendapatkan kompromi yang baik antara keterbacaan dan informasi yang ditampilkan. Saya membagi tampilan menjadi dua kolom dan 5 baris. Kolom kiri digunakan untuk data CPU dan motherboard, termasuk dari atas ke bawah nama CPU, suhu, beban, penggunaan RAM, dan suhu motherboard. Yang tepat didedikasikan untuk GPU dan termasuk nama GPU, suhu, beban, penghitung Frames Per Second dan sensor suhu eksternal.

Seperti yang Anda lihat dalam kode, saya memutuskan untuk menghindari penggunaan gambar pada kartu SD, karena sangat lambat untuk memuat. Saya memutuskan untuk memasukkan semua ikon dalam memori PROGMEM dan menggambar garis dengan perintah drawLine() khusus. ini juga berguna untuk koreksi UI kecil.

Dalam upaya lemah untuk memberikan UI kemiripan kedalaman, saya menggambar dua dari semuanya (garis, persegi panjang, gambar) dengan warna berbeda dan dengan offset kecil. Sayangnya itu bukan hasil yang saya harapkan, tetapi itu akan berhasil.

Baris terakhir dari fungsi ini adalah untuk mencetak placeholder pada TFT, hingga Arduino akan menerima datanya.

BAGIAN 3: loop utama (), pengambilan dan pemformatan data

Di sini keajaiban terjadi: data diterima melalui serial, ditetapkan ke variabel yang benar dan kemudian dicetak. Untuk mencapai semua ini dalam jumlah baris paling sedikit, saya menggunakan perintah switch case dan for cycle.

Protokol komunikasi yang saya bawa dibagi menjadi dua bagian: eksekusi awal sekali jabat tangan dan bagian data aktual.

Jabat tangan diperlukan untuk mengimplementasikan fitur koneksi otomatis saat program PC dimulai. Ini berjalan seperti ini:

  • PC mengirimkan string jabat tangan (dalam hal ini hanya "******;")
  • Arduino mengirimkan kembali tanggapan

Mudah.

Bagian data terlihat seperti ini: "i:xxx, yyy, zzz, aaa,;" artinya adalah:

"i" adalah indeks, saya menyebutnya componentSelector dalam kode. nilai "i" adalah:

  • i=0 - NAMA. Nilai berikut adalah nama yang ditampilkan pada baris pertama pada tampilan. Ini akan dikirim dan dicetak di layar hanya sekali, mulai hari ini cukup sulit untuk melakukan hotswap CPU dan GPU…
  • i=1 - DATA KOLOM 1 - nilai berikut ditampilkan di bagian kiri layar dari atas ke bawah. Dalam kasus saya: suhu CPU, beban CPU, penggunaan RAM, suhu Motherboard.
  • i=2 - DATA KOLOM ke-2 - seperti di atas, tetapi untuk bagian kanan tampilan
  • i=3 - PERINTAH CETAK. Dalam hal ini string serial mentah hanya akan menjadi "3:;" karena data lain tidak diperlukan.

"xxx, yyy, zzz, aaa" adalah nilai sebenarnya. itu dibaca sebagai string oleh arduino dan seluruh pemformatan dibuat oleh program PC. Untuk i=0 nilai ini masing-masing 14 karakter untuk nama perangkat keras. Untuk i=1 atau 2 masing-masing hanya tiga karakter, cukup untuk menunjukkan suhu dan bingkai per detik. Tentu saja ":", ", " dan ";" karakter dilarang di bidang ini.

":" adalah pemisah antara componentSelector dan nilai, "," adalah pemisah nilai dan ";" adalah akhir baris

Saat menerima data, Arduino akan menyimpannya sebagai string hingga ";" simbol diterima, maka akan mencari simbol ":" dan akan menggunakannya untuk mendapatkan nilai componentSelecor. Ini akan digunakan untuk fungsi switch case untuk memilih prosedur yang benar untuk diikuti. Ini juga digunakan untuk memilih indeks yang benar dalam array allData.

Setelah ini Arduino akan mencari simbol "," dan akan melanjutkan untuk memasukkan nilai ke dalam array allData.

Jika componentSelector adalah 0, flag printName akan disetel ke true. Jika componentSelector adalah 3, fungsi readExtTemp() dan printData() dipanggil.

Bagian 4: fungsi readExtTemp()

Tidak banyak yang bisa dikatakan di sini, ia membaca 32 kali dari pin A5 dan mengeluarkan nilai suhu sebagai string. Saya dengan Pemberontak, jadi saya menggunakan Celcius. Lebih dari 100 °C tidak benar sehingga akan ditampilkan sebagai "---" di layar. Untuk apa pun yang kurang dari 100 °C akan diformat agar memiliki ruang yang cukup untuk menutupi ruang 3 karakter pada tampilan. Dimungkinkan untuk melepas dan memasukkan kembali sensor dan tidak ada nilai aneh yang akan ditampilkan.

Bagian 5: fungsi printData()

Seperti biasa saya menggunakan siklus untuk mencetak barang secara berurutan di layar. Jika flag printNames benar, itu akan mencetak nama, menyetel flag ke false, dan melanjutkan.

Bagian 6: kembali ke loop

Cukup menjelaskan diri, saya akan mengatakan …

file pics.h

Di sini saya menyimpan semua ikon untuk UI. Dimungkinkan untuk menggunakan pembaca kartu SD yang disertakan dalam layar, tetapi saya memiliki cukup memori yang tersisa di Arduino untuk ikon hitam putih saya.

Saya mendesainnya dengan Junior Icon Editor karena gratis dan cukup bagus untuk mengecat piksel ikon kecil. Saya harus mengonversi file ikon (disimpan sebagai PNG) dengan alat online SKAARHOJ.

Langkah 4: Kode Visual Basic

Kode Visual Basic
Kode Visual Basic

Berikut adalah kode VB

PEMBERITAHUAN: ini pertama kalinya saya membagikan proyek Visual Studio. Saya baru saja menyalin folder proyek dan zip mereka. Jika ini tidak berhasil, beri tahu saya cara yang lebih baik untuk membagikan proyek semacam ini. Terima kasih

Seperti yang saya katakan sebelumnya, saya tidak dapat membuat GUI dalam C# atau bahasa lain, tetapi saya memiliki beberapa pengalaman dalam Visual Basic sejak lama. Saya mengunduh edisi Komunitas Visual Studio (tentu saja gratis) dengan lingkungan Visual Basic. Yah, saya harus memikirkan banyak hal, karena terakhir kali saya menggunakan VB adalah versi 2005 atau semacamnya… Tapi internet penuh dengan petunjuk bagus, seperti biasa.

Setelah mengetahui beberapa hal antarmuka, versi yang lebih baru sebenarnya lebih mudah dan lebih fleksibel daripada yang lama.

Untuk program ini saya menginginkan sesuatu dengan bentuk windows tetapi dapat dikelola sepenuhnya dari ikon baki sistem. Saya sebenarnya menggunakan formulir hampir hanya untuk keperluan debugging, karena saya suka meletakkan kotak teks dan daftar untuk membaca nilai keluaran dari fungsi dan beberapa tombol perintah untuk mengujinya.

Program "final" hanyalah ikon baki dengan menu popup yang menunjukkan berbagai kontrol dan formulir utama dengan dua kotak daftar yang menunjukkan data yang dikirim ke Arduino.

Saya menerapkan fungsi koneksi otomatis dan fungsi "mulai saat boot". Lebih lanjut tentang itu nanti.

Program utama hanyalah adaptasi dari berbagai contoh dan potongan kode menggunakan perpustakaan OpenHardwareMonitor dan perpustakaan Memori Bersama RivaTuner.

Programnya seperti ini:

  • dapatkan data dari perpustakaan OpenHardwareMonitor dan RTSSSm
  • menyiapkan dan memformat semua data untuk protokol komunikasi
  • kirim datanya ke Arduino
  • bilas dan ulangi

tentu saja nama perangkat keras dibaca di awal dan dikirim hanya sekali.

Penghitung FPS hanya aktif bila aplikasi yang kompatibel digunakan (misalnya game, program pemodelan 3D, dan sebagainya), jika tidak, placeholder "---" akan dikirim ke layar.

saya tidak akan menjelaskan lebih dalam bagaimana mendapatkan nilai dari perpustakaan, karena didokumentasikan dengan baik di internet dan agak dapat dipahami dari kode. Hanya ingin memberi tahu tentang masalah mendapatkan suhu motherboard untuk ditampilkan melalui perpustakaan OpenHardwareMonitor (mulai sekarang OHMonitor, karena hidup terlalu singkat). Saya memiliki Asus Maximus VIII Gene MoBo, yang dilengkapi dengan sensor suhu fu**ton pada motherboard, tetapi OHMonitor menamakannya sebagai Sensor suhu #1, #2 … #n DAN tidak ada lokasi suhu yang ditentukan. Jadi saya harus menginstal perangkat lunak Asus AI suite yang mengerikan, di mana sensor memiliki setidaknya NAMA dan membandingkan berbagai suhu antara kedua program. Sepertinya sensor suhu generik motherboard saya adalah #2 untuk OHMonitor, jadi seperti yang Anda lihat di sub Timer1_tick di bawah barang MoBo, saya harus mencari nama sensor yang berisi string "#2" untuk mendapatkan pembacaan yang benar.

TL;DR: Anda harus menjaga sendiri sensor suhu motherboard yang benar. Sisanya mungkin baik untuk pergi.

Namun ini hanya Versi 1, saya berencana untuk menginstal gadget ini di PC saya yang lain, jadi saya mungkin akan menerapkan cara untuk memilih sensor dan bahkan mungkin mendesain ulang antarmuka di Arduino saat bepergian.

Fungsi Sambungan Otomatis

Fungsi ini sebenarnya sederhana: jika PC tidak terhubung dengan Arduino, setiap x milidetik (berdasarkan Timer1) fungsi ini dipanggil. Ia mencoba untuk terhubung dengan setiap port COM di PC, jika berhasil ia mengirimkan string jabat tangan "******;". Jika jawabannya adalah "R", maka perangkat yang benar terhubung dan prosedur normal diikuti. Lain, ia mencoba port COM berikutnya.

Seperti yang Anda lihat, ada banyak pengecualian dalam fungsi ini. Ini karena saya menginginkannya sepenuhnya plug and play, tanpa output kesalahan. Menangani pengecualian, saya dapat membuatnya mengabaikan ketidakhadiran perangkat eksternal sepenuhnya dan saya bahkan dapat menyambungkan dan mencabut perangkat kapan pun saya mau, tanpa menghasilkan kesalahan pemutusan untuk program.

Fungsi Mulai Saat Boot

Saya ingin program dimulai saat boot. Cukup mudah, katamu. Letakkan tautan di folder yang sesuai, kata Anda. Tapi tidak. Karena perpustakaan OHMonitor dan RTSS, kami membutuhkan tingkat eksekusi administrator untuk mengumpulkan informasi. Ini berarti layar UAC yang sangat mengganggu setiap kali aplikasi ini diluncurkan. Tidak mungkin. Jadi saya mengadaptasi skrip yang dibuat oleh Matthew Wai (tautan di sini) untuk mencapai start diam saat boot. Saya baru saja menyalin skrip di file Resources1, dipecah menjadi beberapa bagian, kemudian menerapkan subrutin yang membuat (atau menghapus) file tugas windows, disesuaikan dengan lokasi eksekusi program saat ini dan hal-hal semacam itu.

Ikon Baki Sistem

Berkat objek NotifyIcon dan ContextMenu, saya dapat menerapkan cara yang mudah dan cepat untuk mengontrol aplikasi. Cukup klik kanan pada ikon baki dan menu muncul. Ada opion ini:

  • Mulai saat boot: Anda dapat mencentang dan menghapus centang untuk mengaktifkan atau menonaktifkan fungsi mulai saat boot
  • Autoconnect: sama seperti di atas, tetapi menangani fungsi autoconnect
  • Connect/Disconnect: menangani koneksi. Tidak berfungsi dengan Koneksi Otomatis diaktifkan
  • Waktu penyegaran: memberikan submenu tarik-turun, Anda dapat memilih waktu penyegaran dari 1 hingga sepuluh detik
  • Maksimalkan: membuka jendela utama. Sama seperti mengklik dua kali pada ikon
  • Keluar: cukup jelas

Mengkompilasi perangkat lunak

Untuk mengkompilasi perangkat lunak, Anda mungkin perlu mengunduh dan menambahkan referensi ke pustaka yang tidak disertakan dalam kode.

Anda dapat menemukan perpustakaan OpenHardwareMonitor di sini. Anda harus mengunduh perangkat lunak, membuka file zip dan menyalin file OpenHardwareMonitorLib. DLL di folder proyek.

Berikut ini tautan untuk perpustakaan RTSSharedMemoryNET, Anda harus mengunduh dan mengkompilasi untuk arsitektur Anda, lalu salin RTSS[TL;DR]moryNET. DLL di folder proyek Anda.

Sekarang Anda perlu menambahkan referensi dalam kode Anda, instruksi di sini

Pastikan untuk mengkompilasi proyek server RTSS[TL;DR]moryNET dan PCHwMon untuk arsitektur yang sama.

Saya menyertakan program pengaturan yang sudah jadi, sehingga Anda dapat menginstal semuanya tanpa mengutak-atik Visual Basic. Ini dikompilasi untuk x86, akan bekerja pada arsitektur x86 dan x64. Ini membutuhkan. NET framework 4.7.2 untuk dijalankan.

Bagaimanapun, Anda harus menginstal RivaTuner. Anda dapat menemukannya di sini sebagai aplikasi mandiri atau Anda dapat menginstal Msi Afterburner, yang harus menyertakan RTServer.

Langkah 5: Implementasi Perangkat Keras Terakhir

Direkomendasikan: