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

Integración IoT: Control Remoto de Arduino mediante Apps UWP Windows 10

Componentes y suministros

Arduino UNO ×1
Módem Bluetooth SparkFun BlueSMiRF Silver (usé versión Gold) ×1

Sobre el proyecto

Nota: Ver actualizaciones en comentarios al final.

Una app Windows 10 UWP construida sobre la librería Remote-Wiring permite interactuar con un Arduino ejecutando Firmata. Se desarrolla una app similar al ejemplo "Blinky" de Windows Remote Arduino, pero con funciones añadidas: GPIO (entrada Y salida) y E/S analógica. Funcionalmente igual a la versión Windows 8.1 del blog previo, pero desde contexto Universal Windows Platform (UWP). Objetivos: Windows 10 escritorio, Windows 10 Phone y Raspberry Pi 2 (Windows 10 IoT) - este último en progreso.

Detalles en mi blog: embedded101.com. Ejemplo "Blinky" original: ms-iot.github.io.

Apps Universales vs Apps Universal Windows Platform

Las Universal Apps (UA) alcanzaron madurez en Windows 8.1: mismo solution para escritorio Intel, Surface ARM y Windows Phone ARM, compartiendo código (event handlers, cómputo, datos). XAML específico por target. Se compilaban subproyectos por separado.

Con paradigma "One Windows" en Windows 10, mismo código (incluyendo XAML) para todos los targets. Un solo proyecto, recompilado para cada target. Nombre nuevo: Universal Windows Platform (UWP) apps.

Todas las plataformas Windows 10 soportan UWP. Hay SDKs de extensión por plataforma (IoT: GPIO, I2C, SPI; Mobile: telefonía, etc.). UWP proporciona capa API base garantizada.

[1] Configurar comunicación Bluetooth con Arduino

Omitir si ya hecho en actividad Win 8.1.

USB o Bluetooth para comunicación Firmata. En Windows 10 ambos; en 8.1 solo Bluetooth. Usaremos Bluetooth. Usé SparkFun Bluetooth Mate Gold (alcance 100m vs 10m Silver; handshaking por defecto distinto). Ambos tienen UART TTL para configurar modo y comunicar con puerto serie Arduino.

Configuración por defecto UART TTL:

Guarda hasta 8 emparejamientos. Documentación: rn-bluetooth-um.pdf.

Firmata usa 57600 baudios; cambiamos Firmata a 115200 (más fácil). Control de flujo hardware se maneja conectando RTS a CTS.

Monté socket para módulo Bluetooth en Proto Shield. Header 6 pines en pines UART TTL, doblados 90° para enchufar verticalmente. Cable a PIO6 (realmente PIO4) para reset de fábrica.

[2] Configurar Firmata

Omitir si ya hecho.

Importante: Pines UART 0 y 1 del Arduino Uno no disponibles al programar por USB. Desconectar módulo Bluetooth al programar.

  1. Crear nuevo sketch Standard Firmata en Arduino IDE.
  2. Buscar "57600" y reemplazar por "115200". Guardar como "Firmata_115200". Programar Uno. Listo.

[3] Configurar pila software Universal App Firmata

Ligeramente distinto a Win 8.1.

Pila de 3 capas:

  1. Remote-Wiring API: propiedades, métodos, eventos alto nivel (GPIO, etc.). Habla protocolo Firmata.
  2. Firmata: comunica hacia abajo vía protocolo serie.
  3. Serial: capas de transporte Bluetooth y USB-Serie (USB no en Win 8.1).

Fuentes:

  1. windows-remote-arduino-samples
  2. remote-wiring

Ambas contienen versiones Win 8.1 y Win 10. Usé Visual Studio 2015 RC.

  1. Clonar repositorio (no descargar ZIP): git clone --recursive https://github.com/ms-iot/windows-remote-arduino-samples.git
  2. Estructura: windows-remote-arduino-samples/remote-wiring/Microsoft.Maker.win10/source (necesario para Win 10).
  3. Abrir solution en Microsoft.Maker.win10.
  4. Compilar para Win32, ARM (y x64 si máquina 64-bit). 3 builds (3 capas).

[4] Crear app UWP HW LED

Atajo para quienes hicieron actividad Win 8.1 previo.

Versión inicial: botón software enciende LED hardware, otro lo apaga. LED en GPIO pin 5.

  1. Añadir nuevo proyecto C# Windows Blank Universal App a la solution (NOTA: solo UN proyecto UWP, mismo XAML y C# para desktop y mobile; diferencia en compilación). Nombre: wrauwp.
  2. En package.appmanifest (ver código, no GUI), añadir capacidades Bluetooth e Internet:
<Capabilities>
  <Capability Name="internetClient" />
  <DeviceCapability Name="bluetooth.rfcomm">
    <Device Id="any">
      <Function Type="name:serialPort"/>
    </Device>
  </DeviceCapability>
</Capabilities>
  1. Referenciar las 3 capas: Firmata, RemoteWiring, Serial.
  2. Atajo: Si ya hiciste Win 8.1, copiar XAML grid de ese proyecto a MainPage.xaml y saltar a pruebas.

Para los que continúan:

  1. Modificar XAML Grid UI: dos botones (On/Off) deshabilitados inicialmente.
  2. En MainPage.cs declaraciones: BluetoothSerial bluetooth; RemoteDevice arduino; const int LED_PIN = 5;
  3. En constructor: bluetooth = new BluetoothSerial("FireFly-748B"); arduino = new RemoteDevice(bluetooth); bluetooth.ConnectionEstablished += OnConnectionEstablished; (reemplazar SPP por el tuyo).
  4. Implementar OnConnectionEstablished: habilitar botones en hilo UI y arduino.pinMode(LED_PIN, PinMode.OUTPUT);
  5. Añadir handlers botones: OnButton_Click → arduino.digitalWrite(5, PinState.HIGH); OffButton_Click → arduino.digitalWrite(5, PinState.LOW);
  6. Compilar prueba en x86, x64, ARM.

[5] Desplegar y probar apps universales

Probar en escritorio

  1. Proyecto app como Startup.
  2. Target x86, Local Machine. Rebuild.
  3. Conectar LED hardware a Arduino Pin 5 (con GND, VCC, resistencia).
  4. Encender Arduino, emparejar Bluetooth con PC (clave 1234).
  5. Ejecutar app. Permitir conexión Bluetooth. Probar funcionalidad. Depurar con breakpoints.
  6. Repetir para x64.
  7. Apagar Bluetooth en PC.

Probar en Windows 10 Phone

  1. Encender teléfono, Settings/Bluetooth ON, emparejar módulo (1234).
  2. Target ARM, Device. Rebuild.
  3. Conectar teléfono por USB al PC y desplegar app.

Probar en Raspberry Pi 2 (EN PROGRESO)

  1. Remote debugger ya instalado/activo en RPI2 con Win 10 IoT.
  2. Obtener IP RPI2 (ej. Windows IoT Core Watcher).
  3. Propiedades proyecto → Debug: Target Remote Machine, No authentication, IP address.
  4. Rebuild y desplegar en RPI2.

Problema actual: Bluetooth no soportado en RPI2 aún. Dejar comentarios si tenéis ideas/éxito. Actualizaré cuando avance.

[6] Mejorar UI

Añadir botones Connect/Disconnect y ProgressRing.

  1. Modificar XAML Grid: 4 botones (Connect, Off, On, Disconnect) + ProgressRing.
  2. En OnConnectionEstablished: desactivar ProgressRing.
  3. Handlers nuevos botones: ConnectButton_Click → bluetooth.begin(115200, SerialConfig.SERIAL_8N1); mostrar ProgressRing. DisconnectButton_Click → bluetooth.end(); resetear botones.
  4. Quitar bluetooth.begin del constructor (ahora en Connect).
  5. Gestión estado botones On/Off mutuamente excluyentes.
  6. Desplegar y probar en todos los targets.

[7] Añadir entrada pulsador

Entrada GPIO en Arduino Pin 6, estado mostrado en UI. Primero polling, luego evento DigitalPinChanged.

  1. Añadir TextBox en XAML para mostrar estado pulsador.
  2. Declarar const int PB_PIN = 6;. En OnConnectionEstablished: arduino.pinMode(PB_PIN, PinMode.INPUT);
  3. Añadir DispatcherTimer polling 250ms. Handler lee pin y llama Pushbutton_Pressed.
  4. Pushbutton_Pressed actualiza TextBox solo si cambia valor.
  5. Circuito pulsador (pull-down con resistencia) o usar board de desarrollo.
  6. Añadir LED simulado en UI (Ellipse) que cambia color (rojo/gris) según estado pulsador.
  7. Mejorar con evento DigitalPinUpdated: Comentar código timer. Añadir delegado evento en OnConnectionEstablished. Handler asíncrono con Dispatcher.RunAsync para actualizar UI desde hilo evento.
  8. Compilar, desplegar, probar.

[8] Añadir entrada analógica

Barra de progreso en UI para mostrar nivel potenciómetro (pin A0 = pin 14).

  1. Añadir ProgressBar en XAML (Max 255, verde).
  2. Declarar const int ANALOG_PIN = 14;. En OnConnectionEstablished: arduino.pinMode(ANALOG_PIN, PinMode.ANALOG); (usar número pin real, no índice analógico).
  3. En timer tick: int PinValue = arduino.analogRead(ANALOG_PIN-14); analogBar.Value = PinValue; (índice analógico = pin - 14).
  4. Compilar, probar variando potenciómetro.
  5. Versión event-driven: Comentar timer. Añadir handler Arduino_AnalogPinUpdated asíncrono con Dispatcher. Actualiza ProgressBar.

[9] Añadir salida PWM

Queda como ejercicio: implementar salida analógica PWM para atenuar LED via slider.

Código

WindowsRemoteArduino_Win10.zip (C#) - Versión extendida de "Blinky": Entrada, Salida, Entrada Analógica, UI mejorada. Solo descarga.

Esquemáticos

Integración IoT: Control Remoto de Arduino mediante Apps UWP Windows 10

Proceso de manufactura

  1. Construya un Mando Universal Profesional para Raspberry Pi con LIRC
  2. Construye una Puerta con Reconocimiento Facial Segura usando Windows IoT y Raspberry Pi
  3. Monitorización Precisa de Temperatura y Humedad con SHT15 en Windows 10 IoT Core
  4. Instalación de Windows 10 IoT Core en Raspberry Pi 3 Model B+: Guía Paso a Paso
  5. Extensión de GoPiGo v2 en Windows 10 IoT Core para Raspberry Pi 3
  6. Mando universal Android con Arduino, 1Sheeld y control IR
  7. Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO
  8. Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
  9. Aplicaciones y Dispositivos Esenciales para Equipos de Cadena de Suministro Remotos
  10. Dominando el Diseño de PCB para Internet de las Cosas: Guía Completa
  11. Cisco lanza monitorización IoT gestionada en cloud para entornos IT y OT