Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Arduino PC Monitor

Componentes e suprimentos

Arduino Leonardo
ou outro dispositivo Arduino ou até mesmo Atmega com conversor UART
× 1
LCD 16x2
× 1
Fios de jumpers (genérico)
× 1

Sobre este projeto





Introdução


A ideia deste projeto nasceu realmente da necessidade de diversão e conhecimento. Este projeto é fácil de fazer e tem muitas aplicações. Podemos usá-lo, por exemplo, para controlar, armazenar e exibir algumas variáveis ​​de hardware.





Vamos começar


Em primeiro lugar, precisamos conectar nosso LCD (eu estava usando o conversor I2C):

Quando fizermos isso, podemos passar para a próxima parte ...





Vamos escrever algum código ...


Configure o LCD 16x2 com o endereço 0x3F - o endereço do dispositivo de barramento I2C pode ser encontrado na digitalização por meio de um esboço simples disponível no Arduino Playground.
  #include  #include  LiquidCrystal_I2C lcd (0x3F, 16,2);  

Agora temos que declarar uma String variável para armazenar nossa entrada serial e configurar o resto das coisas.
  String inData; void setup () {lcd.init (); Serial.begin (9600); lcd.backlight (); }  

Se quisermos enviar dados diretamente por uma variável de string, isso pode ser problemático, por causa da latência de cerca de um segundo com base no tamanho da string. Para evitar isso, use char variável e adicione-a ao nosso inData .
  char recebido =Serial.read (); inData + =recebido;  

Ok, está tudo bem, mas ao receber dados para de vir? Existe solução:
  if (recebido =='*') {...}  

Quando o último char for * Arduino saberá quando prosseguir na próxima parte, agora temos que lidar com nossa mensagem. Precisamos nos livrar deste * char assim:
  inData.remove (inData.length () - 1, 1);  

E finalmente:
  lcd.setCursor (0,0); lcd.print (inData); inData =""; // Limpar buffer  

Mas ... Temos segunda linha não utilizada ... Aqui está a solução
  if (recebido =='#') {inData.remove (inData.length () - 1, 1); lcd.setCursor (0,1); lcd.print (inData); inData =""; }}  

Quando o último de char for # o Arduino configurará a segunda linha de nosso LCD e imprimirá outros dados.





Configuração


Por que C #, não C ou C ++? C # é fácil e rápido (rápido ... quero dizer, por escrito)

Em primeiro lugar, precisamos baixar uma biblioteca adicional para facilitar o acesso às nossas variáveis ​​de hardware.

Abra o Monitor de Hardware

Após a descompactação, temos nossa biblioteca:OpenHardwareMonitorLib.dll

Crie um novo projeto -> Windows Forms Application -> Clique com o botão direito em References no Solution Explorer -> Browse -> OpenHardwareMonitorLib.dll e não se esqueça de verificar.





Aparência


Prepare nosso formulário:






Agora codifique ...


Algumas diretivas ...
  using System.IO.Ports; usando OpenHardwareMonitor.Hardware;  

E declarações ...
  Porta SerialPort =novo SerialPort (); Computador c =novo Computador () {GPUEnabled =true, CPUEnabled =true}; float valor1, valor2;  

c é o objeto Open Hardware Monitor. Temos que habilitar CPU e GPU. No evento Form Load coloque o seguinte:
  c.Open ();  

No construtor de formulário:
  Form1 public ()  

adicionar:
  Init ();  

e então, em qualquer lugar:
  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 [] portas =SerialPort.GetPortNames (); foreach (porta de string em portas) {comboBox1.Items.Add (porta); } port.BaudRate =9600; } catch (Exceção ex) {MessageBox.Show (ex.Message); }}  

Simples ... Inicialize as variáveis ​​declaradas, procure portas abertas e adicione-as ao comboBox1

Agora a função principal para armazenar e enviar variáveis:
  private void Status () {foreach (var hardwadre em c.Hardware) {if (hardwadre.HardwareType ==HardwareType.GpuNvidia) {hardwadre.Update (); foreach (sensor var em hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value1 =sensor.Value.GetValueOrDefault (); }} if (hardwadre.HardwareType ==HardwareType.CPU) {hardwadre.Update (); foreach (sensor var em hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value2 =sensor.Value.GetValueOrDefault (); }}} tente {port.Write (value1 + "*" + value2 + "#"); } catch (exceção ex) {timer1.Stop (); MessageBox.Show (ex.Message); toolStripStatusLabel1.Text ="O Arduino não está respondendo ..."; }  

Não se esqueça de adicionar Status () função para evento de marcação do temporizador.

Agora, botão de conexão:
  try {if (! port.IsOpen) {port.PortName =comboBox1.Text; port.Open (); timer1.Interval =Convert.ToInt32 (comboBox2.Text); timer1.Enabled =true; toolStripStatusLabel1.Text ="Enviando dados ..."; label2.Text ="Conectado"; }} catch (Exceção ex) {MessageBox.Show (ex.Message); }  

Estamos verificando se a porta já está aberta, senão configurando o intervalo do temporizador do comboBox2 e rodando tudo!

Botão Desconectar:
  try {port.Write ("DIS *"); porta.Fechar (); } catch (Exceção ex) {MessageBox.Show (ex.Message); } label2.Text ="Desconectado"; timer1.Enabled =false; toolStripStatusLabel1.Text ="Conectar ao Arduino ..."; dados ="";  

Grave os últimos dados no Arduino para avisar que terminamos.

Você pode adicionar algumas funções como, por exemplo, esconder na bandeja etc. (código completo abaixo)

O programa deve ser executado com privilégios de administrador!

Código

  • Código Arduino
  • Aplicativo C #
Código 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 recebido =Serial.read (); inData + =recebido; if (recebido =='*') {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 ("Desconectado!"); }} if (recebido =='#') {inData.remove (inData.length () - 1, 1); lcd.setCursor (0,1); lcd.print ("CPU Temp .:" + inData + char (223) + "C"); inData =""; }}} 
Aplicativo C # C #
 usando System; usando System.Collections.Generic; usando System.ComponentModel; usando System.Data; usando System.Drawing; usando System.Linq; usando System.Text; usando System.Threading.Tasks; usando System.Windows. Formulários; usando System.IO.Ports; usando OpenHardwareMonitor.Hardware; namespace Arduino_Controll {classe pública parcial Form1:Form {dados de string estáticos; Computador c =novo Computador () {GPUEnabled =true, CPUEnabled =true}; float valor1, valor2; porta SerialPort privada =novo SerialPort (); Formulário1 público () {InitializeComponent (); Iniciar(); } 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 [] portas =SerialPort.GetPortNames (); foreach (porta de string em portas) {comboBox1.Items.Add (porta); } port.BaudRate =9600; } catch (Exceção ex) {MessageBox.Show (ex.Message); }} private void button3_Click (objeto remetente, EventArgs e) {try {port.Write ("DIS *"); porta.Fechar (); } catch (Exceção ex) {MessageBox.Show (ex.Message); } label2.Text ="Desconectado"; timer1.Enabled =false; toolStripStatusLabel1.Text ="Conectar ao Arduino ..."; dados =""; } private void button5_Click (objeto remetente, EventArgs e) {try {if (! port.IsOpen) {port.PortName =comboBox1.Text; port.Open (); timer1.Interval =Convert.ToInt32 (comboBox2.Text); timer1.Enabled =true; toolStripStatusLabel1.Text ="Enviando dados ..."; label2.Text ="Conectado"; }} catch (Exceção ex) {MessageBox.Show (ex.Message); }} private void timer1_Tick (objeto remetente, EventArgs e) {Status (); } private void Form1_Load (objeto remetente, EventArgs e) {c.Open (); } private void Form1_Resize (objeto remetente, EventArgs e) {if (FormWindowState.Minimized ==this.WindowState) {notIcon1.Visible =true; tente {notIcon1.ShowBalloonTip (500, "Arduino", toolStripStatusLabel1.Text, ToolTipIcon.Info); } catch (Exceção ex) {} this.Hide (); }} private void notificationIcon1_DoubleClick (objeto remetente, EventArgs e) {this.Show (); this.WindowState =FormWindowState.Normal; notificarIcon1.Visível =falso; } private void Status () {foreach (var hardwadre em c.Hardware) {if (hardwadre.HardwareType ==HardwareType.GpuNvidia) {hardwadre.Update (); foreach (sensor var em hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value1 =sensor.Value.GetValueOrDefault (); }} if (hardwadre.HardwareType ==HardwareType.CPU) {hardwadre.Update (); foreach (sensor var em hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value2 =sensor.Value.GetValueOrDefault (); }}} tente {port.Write (value1 + "*" + value2 + "#"); } catch (exceção ex) {timer1.Stop (); MessageBox.Show (ex.Message); toolStripStatusLabel1.Text ="O Arduino não está respondendo ..."; }}}} 

Esquemas


Processo de manufatura

  1. Painel LCD com Arduino para o simulador de vôo
  2. Faça Monitor Ambilight usando Arduino
  3. Animação de LCD e jogos
  4. Monitor de freqüência cardíaca usando IoT
  5. Monitor de Tensão do Termopar do Aquecedor de Água Quente
  6. Exibindo uma imagem em uma tela LCD TFT com o Arduino UNO!
  7. Osciloscópio DIY 10Hz-50kHz em tela LCD 128x64
  8. Monitor de freqüência cardíaca MAX 30102 em LCD 16x2
  9. Monitor doméstico
  10. Despertador simples com DS1302 RTC