Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Monitor de PC Arduino

Componentes y suministros

Arduino Leonardo
u otro dispositivo Arduino o incluso Atmega con convertidor UART
× 1
LCD 16x2
× 1
Cables de puente (genéricos)
× 1

Acerca de este proyecto

Introducción

La idea de este proyecto nació en realidad de la necesidad de diversión y conocimiento. Este proyecto es fácil de realizar y tiene muchas aplicaciones. Podemos utilizarlo, por ejemplo, para controlar, almacenar y visualizar algunas variables de hardware.

Empecemos

En primer lugar, debemos conectar nuestra pantalla LCD (estaba usando un convertidor I2C):

Cuando hicimos esto, podemos pasar a la siguiente parte ...

Escribamos un código ...

Establecer LCD 16x2 con dirección 0x3F:la dirección del dispositivo de bus I2C se puede encontrar escaneando a través de un boceto simple disponible en Arduino Playground.

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

Ahora tenemos que declarar un String variable para almacenar nuestra entrada serial y configurar el resto de cosas.

  String inData; configuración vacía () {lcd.init (); Serial.begin (9600); LCD luz de fondo(); }  

Si quisiéramos enviar datos directamente mediante una variable de cadena, podría ser problemático, debido a una latencia de aproximadamente un segundo basada en el tamaño de la cadena. Para evitar esto, use char variable y agregarla a nuestro inData .

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

Ok, todo está bien, pero ¿cuándo dejar de recibir datos? Hay solución:

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

Cuando el último de los caracteres sea * Arduino sabrá cuándo proceder con la siguiente parte, ahora tenemos que manejar nuestro mensaje. Necesitamos deshacernos de este * char así:

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

Y finalmente:

  lcd.setCursor (0,0); lcd.print (inData); inData =""; // Limpiar búfer  

Pero ... Tenemos la segunda línea sin usar ... Aquí está la solución

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

Cuando el último de los caracteres sea # Arduino establecerá la segunda línea de nuestra pantalla LCD e imprimirá otros datos.

Configuración

¿Por qué C #, no C o C ++? C # es fácil y rápido (rápido ... quiero decir por escrito)

En primer lugar, necesitamos descargar una biblioteca adicional para acceder fácilmente a nuestras variables de hardware.

Monitor de hardware abierto

Después de desempaquetar, tenemos nuestra biblioteca:OpenHardwareMonitorLib.dll

Cree un nuevo proyecto -> Aplicación Windows Forms -> Haga clic con el botón derecho en Referencias en el Explorador de soluciones -> Examinar -> OpenHardwareMonitorLib.dll y no olvide marcarlo.

Apariencia

Prepara nuestro formulario:

Ahora codifique ...

Algunas directivas ...

  usando System.IO.Ports; utilizando OpenHardwareMonitor.Hardware;  

Y declaraciones ...

  SerialPort port =new SerialPort (); Computadora c =new Computer () {GPUEnabled =true, CPUEnabled =true}; valor flotante1, valor2;  

c es el objeto Open Hardware Monitor. Tenemos que habilitar CPU y GPU. En el evento Form Load ponga esto:

  c.Open ();  

En el constructor de formularios:

  public Form1 ()  

añadir:

  Init ();  

y luego, en cualquier 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 [] ports =SerialPort.GetPortNames (); foreach (puerto de cadena en puertos) {comboBox1.Items.Add (puerto); } port.BaudRate =9600; } catch (Exception ex) {MessageBox.Show (ex.Message); }}  

Simple ... Inicialice las variables declaradas, busque puertos abiertos y agréguelo al comboBox1

Ahora función principal para almacenar y enviar variables:

  estado vacío privado () {foreach (var hardwadre en c.Hardware) {if (hardwadre.HardwareType ==HardwareType.GpuNvidia) {hardwadre.Update (); foreach (var sensor en hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value1 =sensor.Value.GetValueOrDefault (); }} if (hardwadre.HardwareType ==HardwareType.CPU) {hardwadre.Update (); foreach (var sensor en hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value2 =sensor.Value.GetValueOrDefault (); }}} prueba {puerto.Escribir (valor1 + "*" + valor2 + "#"); } catch (Exception ex) {timer1.Stop (); MessageBox.Show (por ejemplo, mensaje); toolStripStatusLabel1.Text ="Arduino no responde ..."; }  

No olvide agregar Status () función para marcar el evento del temporizador.

Ahora botón de conexión:

  try {if (! port.IsOpen) {port.PortName =comboBox1.Text; puerto.Open (); timer1.Interval =Convert.ToInt32 (comboBox2.Text); timer1.Enabled =true; toolStripStatusLabel1.Text ="Enviando datos ..."; label2.Text ="Conectado"; }} catch (Exception ex) {MessageBox.Show (ex.Message); }  

¡Estamos verificando si un puerto ya está abierto, si no configuramos el intervalo del temporizador desde comboBox2 y ejecutamos todo!

Botón de desconexión:

  try {port.Write ("DIS *"); port.Close (); } catch (Exception ex) {MessageBox.Show (ex.Message); } label2.Text ="Desconectado"; timer1.Enabled =falso; toolStripStatusLabel1.Text ="Conectarse a Arduino ..."; datos ="";  

Escribe los últimos datos en Arduino para decir que hemos terminado.

Puede agregar algunas funciones como, por ejemplo, ocultar en la bandeja, etc. (código completo a continuación)

¡El programa debe ejecutarse con privilegios de administrador!

Código

  • Código Arduino
  • Aplicación C #
Código Arduino Arduino
 #include  #include  LiquidCrystal_I2C lcd (0x3F, 16,2); String inData; void setup () {Serial.begin (9600); lcd.init (); lcd.backlight ();} bucle vacío () {while (Serial.available ()> 0) {char recibido =Serial.read (); inData + =recibido; if (recibido =='*') {inData.remove (inData.length () - 1, 1); lcd.setCursor (0,0); lcd.print ("Temp. GPU:" + inData + char (223) + "C"); inData =""; if (inData =="DIS") {lcd.clear (); lcd.setCursor (0,0); lcd.print ("¡Desconectado!"); }} if (recibido =='#') {inData.remove (inData.length () - 1, 1); lcd.setCursor (0,1); lcd.print ("CPU Temp .:" + inData + char (223) + "C"); inData =""; }}} 
Aplicación 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. Formularios, uso de System.IO.Ports, uso de OpenHardwareMonitor.Hardware, espacio de nombres Arduino_Controll {clase pública parcial Form1:Form {datos de cadena estática; Computadora c =nueva Computadora () {GPUEnabled =true, CPUEnabled =true}; valor flotante1, valor2; puerto SerialPort privado =nuevo SerialPort (); Public Form1 () {InitializeComponent (); En eso(); } private void Init () {prueba {notificarIcon1.Visible =falso; port.Parity =Parity.None; port.StopBits =StopBits.One; port.DataBits =8; port.Handshake =Handshake.None; port.RtsEnable =true; string [] ports =SerialPort.GetPortNames (); foreach (puerto de cadena en puertos) {comboBox1.Items.Add (puerto); } port.BaudRate =9600; } catch (Exception ex) {MessageBox.Show (ex.Message); }} private void button3_Click (remitente del objeto, EventArgs e) {try {port.Write ("DIS *"); port.Close (); } catch (Exception ex) {MessageBox.Show (ex.Message); } label2.Text ="Desconectado"; timer1.Enabled =falso; toolStripStatusLabel1.Text ="Conectarse a Arduino ..."; datos =""; } private void button5_Click (remitente del objeto, EventArgs e) {try {if (! port.IsOpen) {port.PortName =comboBox1.Text; puerto.Open (); timer1.Interval =Convert.ToInt32 (comboBox2.Text); timer1.Enabled =true; toolStripStatusLabel1.Text ="Enviando datos ..."; label2.Text ="Conectado"; }} catch (Exception ex) {MessageBox.Show (ex.Message); }} private void timer1_Tick (remitente del objeto, EventArgs e) {Status (); } Form1_Load vacío privado (remitente del objeto, EventArgs e) {c.Open (); } Form1_Resize vacío privado (remitente del objeto, EventArgs e) {if (FormWindowState.Minimized ==this.WindowState) {notifyIcon1.Visible =true; intente {notificarIcon1.ShowBalloonTip (500, "Arduino", toolStripStatusLabel1.Text, ToolTipIcon.Info); } catch (Exception ex) {} this.Hide (); }} private void notifyIcon1_DoubleClick (remitente del objeto, EventArgs e) {this.Show (); this.WindowState =FormWindowState.Normal; notificarIcon1.Visible =falso; } Estado vacío privado () {foreach (var hardwadre en c.Hardware) {if (hardwadre.HardwareType ==HardwareType.GpuNvidia) {hardwadre.Update (); foreach (var sensor en hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value1 =sensor.Value.GetValueOrDefault (); }} if (hardwadre.HardwareType ==HardwareType.CPU) {hardwadre.Update (); foreach (var sensor en hardwadre.Sensors) if (sensor.SensorType ==SensorType.Temperature) {value2 =sensor.Value.GetValueOrDefault (); }}} prueba {puerto.Escribir (valor1 + "*" + valor2 + "#"); } catch (Exception ex) {timer1.Stop (); MessageBox.Show (por ejemplo, mensaje); toolStripStatusLabel1.Text ="Arduino no responde ..."; }}}} 

Esquemas


Proceso de manufactura

  1. Panel LCD con Arduino para Flight Simulator
  2. Hacer Monitor Ambilight usando Arduino
  3. Animación LCD y juegos
  4. Monitor de frecuencia cardíaca con IoT
  5. Monitor de voltaje del termopar del calentador de agua caliente
  6. ¡Visualización de una imagen en una pantalla LCD TFT con Arduino UNO!
  7. Osciloscopio DIY de 10Hz-50kHz en pantalla LCD de 128x64
  8. Monitor de frecuencia cardíaca MAX 30102 en LCD 16x2
  9. Monitor de casa
  10. Estación meteorológica Arduino
  11. Reloj despertador simple con DS1302 RTC