Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Монитор ПК Arduino

Компоненты и расходные материалы

Ардуино Леонардо
или другое устройство Arduino или даже Atmega с конвертером UART
× 1
ЖК-дисплей 16x2
× 1
Перемычки (общие)
× 1

Об этом проекте

Введение

Идея этого проекта родилась из потребности в развлечениях и знаниях. Этот проект прост в исполнении и имеет множество приложений. Мы можем использовать его, например, для управления, хранения и отображения некоторых аппаратных переменных.

Приступим

Прежде всего, нам нужно подключить наш ЖК-дисплей (я использовал конвертер I2C):

Когда мы это сделали, мы можем перейти к следующей части ...

Напишем код ...

Установите ЖК-дисплей 16x2 с адресом 0x3F - адрес устройства шины I2C можно найти при сканировании с помощью простого скетча, доступного на Arduino Playground.

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

Теперь нам нужно объявить String переменная для хранения нашего последовательного ввода и настройки остальных вещей.

  Строка inData; пустая настройка () {lcd.init (); Serial.begin (9600); lcd.backlight (); }  

Если мы хотим отправлять данные напрямую с помощью строковой переменной, это может быть проблематично из-за задержки примерно в одну секунду в зависимости от размера строки. Чтобы избежать этого, используйте char переменную и добавьте ее в наш inData .

  полученный символ =Serial.read (); inData + =получено;  

Ладно, все нормально а при приеме данные перестают приходить? Решение есть:

  if (получено =='*') {...}  

Когда последний символ будет * Arduino будет знать, когда перейти к следующей части. Теперь мы должны обработать наше сообщение. Нам нужно избавиться от этого * символ так:

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

И напоследок:

  lcd.setCursor (0,0); lcd.print (inData); inData =""; // Очистить буфер  

Но ... У нас вторая строка не используется ... Вот решение

  if (получено =='#') {inData.remove (inData.length () - 1, 1); lcd.setCursor (0,1); lcd.print (inData); inData =""; }}  

Когда последний символ будет #, Arduino установит вторую строку нашего ЖК-дисплея и распечатает другие данные.

Конфигурация

Почему C #, а не C или C ++? C # - это просто и быстро (быстро ... я имею в виду письменно)

Прежде всего, нам нужно загрузить дополнительную библиотеку для легкого доступа к нашим аппаратным переменным.

Открыть аппаратный монитор

После распаковки у нас есть наша библиотека:OpenHardwareMonitorLib.dll

Создайте новый проект -> Приложение Windows Forms -> Щелкните правой кнопкой мыши ссылку в обозревателе решений -> Обзор -> OpenHardwareMonitorLib.dll и не забудьте проверить его.

Внешний вид

Подготовьте нашу форму:

Теперь код ...

Некоторые директивы ...

  с использованием System.IO.Ports; с использованием OpenHardwareMonitor.Hardware;  

И декларации ...

  порт SerialPort =новый SerialPort (); компьютер c =новый компьютер () {GPUEnabled =true, CPUEnabled =true}; значение с плавающей запятой1, значение2;  

c - это объект Open Hardware Monitor. Мы должны включить CPU и GPU. В событии загрузки формы укажите следующее:

  c.Open ();  

В конструкторе форм:

  общедоступная форма Form1 ()  

добавить:

  Init ();  

а затем в любом месте:

  private void Init () {try {notifyIcon1.Visible =false; port.Parity =Parity.None; port.StopBits =StopBits.One; port.DataBits =8; port.Handshake =Рукопожатие.Нет; port.RtsEnable =true; строка [] ports =SerialPort.GetPortNames (); foreach (строка порта в портах) {comboBox1.Items.Add (порт); } port.BaudRate =9600; } catch (Exception ex) {MessageBox.Show (ex.Message); }}  

Просто ... Инициализируйте объявленные переменные, просканируйте открытые порты и добавьте их в comboBox1

Теперь основная функция для хранения и отправки переменных:

  private void Status () {foreach (var hardwadre в c.Hardware) {if (hardwadre.HardwareType ==HardwareType.GpuNvidia) {hardwadre.Update (); foreach (датчик var в hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value1 =sensor.Value.GetValueOrDefault (); }} если (hardwadre.HardwareType ==HardwareType.CPU) {hardwadre.Update (); foreach (датчик var в hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {значение2 =sensor.Value.GetValueOrDefault (); }}} попробуйте {port.Write (value1 + "*" + value2 + "#"); } catch (Exception ex) {timer1.Stop (); MessageBox.Show (например, сообщение); toolStripStatusLabel1.Text ="Ардуино не отвечает ..."; }  

Не забудьте добавить Status () функция таймера события тика.

Теперь кнопка подключения:

  попробуйте {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, и запускаем все!

Кнопка отключения:

  попробуйте {port.Write ("DIS *"); port.Close (); } catch (Exception ex) {MessageBox.Show (ex.Message); } label2.Text ="Отключено"; timer1.Enabled =false; toolStripStatusLabel1.Text ="Подключиться к Arduino ..."; данные ="";  

Запишите последние данные в 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 получено =Serial.read (); inData + =получено; если (получено =='*') {inData.remove (inData.length () - 1, 1); lcd.setCursor (0,0); lcd.print ("GPU Temp .:" + inData + char (223) + "C"); inData =""; если (inData =="DIS") {lcd.clear (); lcd.setCursor (0,0); lcd.print («Отключен!»); }} если (получено =='#') {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; using System.Windows. Forms; использование System.IO.Ports; использование OpenHardwareMonitor.Hardware; пространство имен Arduino_Controll {общедоступный частичный класс Form1:Form {статические строковые данные; Компьютер c =новый компьютер () {GPUEnabled =true, CPUEnabled =true}; значение с плавающей запятой1, значение2; частный порт SerialPort =новый SerialPort (); общедоступная Form1 () {InitializeComponent (); В этом(); } private void Init () {попробуйте {notifyIcon1.Visible =false; port.Parity =Parity.None; port.StopBits =StopBits.One; port.DataBits =8; port.Handshake =Рукопожатие.Нет; port.RtsEnable =true; строка [] ports =SerialPort.GetPortNames (); foreach (строка порта в портах) {comboBox1.Items.Add (порт); } port.BaudRate =9600; } catch (Exception ex) {MessageBox.Show (ex.Message); }} private void button3_Click (отправитель объекта, EventArgs e) {попробуйте {port.Write ("DIS *"); port.Close (); } catch (Exception ex) {MessageBox.Show (ex.Message); } label2.Text ="Отключено"; timer1.Enabled =false; toolStripStatusLabel1.Text ="Подключиться к Arduino ..."; данные =""; } private void button5_Click (отправитель объекта, EventArgs e) {попробуйте {если (! 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); }} приватный void timer1_Tick (отправитель объекта, EventArgs e) {Status (); } private void Form1_Load (отправитель объекта, EventArgs e) {c.Open (); } private void Form1_Resize (отправитель объекта, 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 (отправитель объекта, EventArgs e) {this.Show (); this.WindowState =FormWindowState.Normal; notifyIcon1.Visible =false; } частный статус void () {foreach (var hardwadre в c.Hardware) {if (hardwadre.HardwareType ==HardwareType.GpuNvidia) {hardwadre.Update (); foreach (датчик var в hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value1 =sensor.Value.GetValueOrDefault (); }} если (hardwadre.HardwareType ==HardwareType.CPU) {hardwadre.Update (); foreach (датчик var в hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {значение2 =sensor.Value.GetValueOrDefault (); }}} попробуйте {port.Write (value1 + "*" + value2 + "#"); } catch (Exception ex) {timer1.Stop (); MessageBox.Show (например, сообщение); toolStripStatusLabel1.Text ="Arduino не отвечает ..."; }}}} 

Схема


Производственный процесс

  1. ЖК-панель с Arduino для симулятора полета
  2. Создание монитора Ambilight с помощью Arduino
  3. ЖК-анимация и игры
  4. Монитор сердечного ритма с использованием Интернета вещей
  5. Монитор напряжения термопары водонагревателя
  6. Отображение изображения на ЖК-экране TFT с помощью Arduino UNO!
  7. Осциллограф 10 Гц-50 кГц для самостоятельного изготовления на ЖК-дисплее 128x64
  8. Монитор сердечного ритма MAX 30102 на ЖК-дисплее 16x2
  9. Домашний монитор
  10. Простой будильник с DS1302 RTC