Un sistema de detección de caídas basado en Arduino, Windows y Azure
Componentes y suministros
| × | 1 | ||||
| ||||||
| ||||||
| ||||||
|
Acerca de este proyecto
Introducción :
Las caídas que provocan lesiones mortales se han convertido en un gran desafío que no se puede descuidar para las personas mayores. En los últimos años, se han propuesto diferentes tipos de enfoques en el área de detección de caídas, que se pueden explicar y categorizar en tres tipos:basados en dispositivos portátiles, basados en sensores ambientales y basados en visión [1]. En primer lugar, los dispositivos portátiles suelen aprovechar los sensores integrados para detectar el movimiento y la ubicación del cuerpo, como el acelerómetro, el magnetómetro y el giroscopio [2, 3]. Y el costo del enfoque basado en dispositivos portátiles es bastante bajo, así como la instalación y operación no es complicada para los ancianos. En segundo lugar, el enfoque basado en el ambiente siempre usa sensores de presión para detectar y rastrear el cuerpo. Esta solución también es rentable y fácil de implementar [4, 5]. Sin embargo, la posibilidad de detectar objetos que no sean cuerpos humanos representa un desafío notable para la precisión de detección de este enfoque. Por último, pero no menos importante, la solución basada en la visión hace un uso completo de las cámaras desplegadas para monitorear todos los objetos dentro del rango, incluidos los cuerpos humanos [6, 7]. Hay menos intrusión en la vida diaria de las personas que los dos enfoques anteriores, mientras que el espacio de observación es limitado y no se puede lograr un monitoreo ubicuo.
En este proyecto se propone un sistema de vigilancia basado en Arduino, Windows 10 y Microsoft Azure para la detección de caídas en tiempo real. Los datos brutos del acelerómetro tridimensional los proporciona Arduino con ADXL345. El dispositivo Windows 10 hace uso de esta información para obtener la orientación del sujeto mediante la fusión de datos eficiente y algoritmos de detección de caídas. Los servicios de Microsoft Azure y la aplicación móvil / PC también están diseñados para lograr un procesamiento, análisis, almacenamiento y adquisición de datos sin problemas en cualquier momento desde cualquier lugar, siempre que tengan acceso a Internet. La arquitectura del sistema se muestra en la Fig. 1 de la siguiente manera.
Referencias
[1] L. Jian y T. E. Lockhart, "Desarrollo y evaluación de un algoritmo de detección de eventos de caída antes del impacto", Ingeniería biomédica, IEEE Transactions on, vol. 61, págs. 2135-2140, 2014.
[2] P. Pierleoni, A. Belli, L. Palma, M. Pellegrini, L. Pernini y S. Valenti, "Un dispositivo portátil de alta confiabilidad para la detección de caídas en ancianos", Sensors Journal, IEEE, vol. 15, págs. 4544-4553, 2015.
[3] R. Freitas, M. Terroso, M. Marques, J. Gabriel, A. Torres Marques y R. Simoes, "Redes de sensores portátiles compatibles con dispositivos móviles para la detección de caídas", en SENSORS, 2014 IEEE, 2014, págs. 2246-2249.
[4] Z. Xiaodan, H. Jing, G. Potamianos y M. Hasegawa-Johnson, "Detección acústica de caídas utilizando modelos de mezcla gaussiana y supervectores GMM", en Acústica, habla y procesamiento de señales, 2009. ICASSP 2009. IEEE International Conferencia sobre, 2009, págs. 69-72.
[5] L. Yun, K. C. Ho y M. Popescu, "Algoritmos eficientes de separación de fuentes para la detección acústica de caídas utilizando un Kinect de Microsoft", Ingeniería biomédica, IEEE Transactions on, vol. 61, págs. 745-755, 2014.
[6] M. Yu, S. M. Naqvi, A. Rhuma y J. Chambers, "Clasificadores de método de límite de una clase para su aplicación en un sistema de detección de caídas basado en video", Computer Vision, IET, vol. 6, págs. 90-100, 2012.
[7] E. E. Stone y M. Skubic, "Detección de caídas en hogares de adultos mayores utilizando Microsoft Kinect", Informática biomédica y de la salud, IEEE Journal of, vol. 19, págs. 290-301, 2015.
Principio de detección de caídas con reconocimiento de postura
En este proyecto, el algoritmo de detección de caídas está diseñado de acuerdo con la detección de caídas en Android de Bharadwaj Sreenivasan. Hay dos módulos en el algoritmo, el reconocimiento de postura y la detección de caídas. En primer lugar, leemos los valores x, y y z del acelerómetro. Luego calculamos la norma L2 de x, y y z. Esto es utilizado por el módulo de detección de caídas y reconocimiento de postura.
En el módulo de Reconocimiento de Posturas, las posturas del usuario se clasifican en tres posturas básicas:sentado, de pie y caminando. A los valores de “y” se le aplica un umbral para conocer la orientación. Usando la tasa de variación de la aceleración media de la norma L2 w.r.t debido a la gravedad (9.8) clasificamos los datos en caminar o simplemente transición entre estados.
El módulo de detección de caídas busca un patrón particular en la señal. La figura 2 representa un patrón típico en la norma L2 durante un evento de caída.
Si la diferencia entre mínimos y máximos consecutivos es mayor a 2g, la salida se decide como caída. La decisión final en caso de caída se basa en la salida tanto del módulo de reconocimiento de postura como del módulo de decisión de caída. Cuando se detecta una caída, la decisión del módulo de reconocimiento de postura nos dice si se trata de una falsa alarma. Si el estado todavía está caminando, la decisión del evento de caída puede descartarse. La Tabla 1 resume la decisión final.
Requisitos previos
En este proyecto, para el dispositivo Arduino, la comunicación Bluetooth se logra mediante HC-06, que es un módulo compacto y económico. Para el dispositivo con Windows 10, si usa Surface Pro y Lumia 1520, no necesitará el módulo Bluetooth. Sin embargo, si usa Raspberry Pi o MBM como dispositivos Windows 10 IoT, necesitará un dongle Bluetooth. Consulte el Bluetooth serial genérico de nuestro MVP David Jones con Win 10 IoT-Core RPI2 para configurar el entorno.
Nota:Llevará de 2 a 3 horas completar los requisitos previos si no tiene Windows 10 y Visual Studio 2015 ya configurados, pero la mayor parte de ese tiempo está desatendido.
Qué necesitará
Partes:
1. Arduino Uno y cable USB A / B estándar
2. Módulo Bluetooth HC-06
3. Módulo acelerómetro ADXL345
4. Cables de puente macho-macho y macho-hembra
5. Mini tablero
6. Lumia 1520 u otro dispositivo compatible con Windows Phone 10
7. Módulo Bluetooth ORICO
Instrucciones del proyecto
Paso 1:conecta el módulo acelerómetro ADXL345 al Arduino
Hora :5 minutos
Piezas :Arduino Uno R3, ADXL345, cables de puente, mini placa de pruebas
Herramientas :N / A
El ADXL345 es un acelerómetro MEMS de 3 ejes pequeño, delgado y de baja potencia con medición de alta resolución (13 bits) de hasta + -16 g. Los datos de salida digital están formateados como complemento de 16 bits a dos y se puede acceder a ellos a través de una interfaz digital SPI (3 o 4 cables) o I2C.
El ADXL345 admite tanto SPI como I2C, solo vamos a hablar de I2C aquí en este proyecto. I2C es una conexión en serie de 2 cables, por lo que necesitamos conectar las líneas SDA (Datos) y SCL (Reloj) a Arduino UNO para la comunicación. En Arduino UNO, SDA está en el pin analógico 4 y SCL está en el pin analógico 5. Asegúrese de que los pines VCC y CS del sensor estén conectados a 3.3v. Conectamos CS a 3.3V para decirle al sensor que lo usaremos como un dispositivo I2C, y no como un dispositivo SPI.
Paso 2:conecte el módulo Bluetooth
Hora :5 minutos
Piezas :Módulo Bluetooth, cables de puente
Herramientas :N / A
En este proyecto, usamos HC-06 como módulo Bluetooth; es mucho más económico que el módulo BlueSMiRF Silver de SparkFun. Además, el HC-05 tiene el firmware "completo", muchos comandos AT y puede ser un módulo maestro y esclavo. El firmware HC-06, por otro lado, solo puede ser un dispositivo esclavo, con comandos AT muy limitados. La siguiente tabla muestra todos los comandos de firmware del HC-06 con la respuesta:
En primer lugar, conecte el módulo Bluetooth a la placa de pruebas para facilitar las conexiones. Para alimentar el módulo, ejecute un puente desde el riel de alimentación de 5 V de Arduino al pin Vcc del módulo. Y ejecute un puente macho-macho desde el pin GND del módulo a cualquiera de los pines GND en el Arduino. Para establecer las comunicaciones en serie, conecte un puente macho-macho desde el pin TX del módulo Bluetooth al pin RX del Arduino (pin digital 0) y otro desde el pin RX del módulo al pin TX de Arduino (pin digital 1).
Nota:No podrá cargar bocetos desde el IDE de Arduino al Arduino cuando tenga los pines TX y RX de Bluetooth conectados al Arduino. Desconectelos cuando necesite cargar un boceto y vuelva a conectarlos una vez que el boceto se haya cargado correctamente. En el esquema a continuación, se muestra que se utiliza HC-05. En realidad, como se explicó anteriormente, tanto el HC-05 como el HC-06 están bien.
Después de la conexión de Bluetooth y acelerómetro, la cosa real se muestra así:
Paso 3:vinculación del módulo Bluetooth con el dispositivo Windows 10
Hora :5 minutos
Piezas :Módulo Bluetooth, dispositivo Windows 10, módulo Bluetooth ORICO (opcional)
Herramientas :N / A
El módulo Bluetooth ejecuta el protocolo SPP (Serial Protocol over Bluetooth). Por lo tanto, cualquier dispositivo que admita SPP puede conectarse a él. En un dispositivo con Windows 10, parece un puerto COM virtual. Antes de conectar, asegúrese de que el módulo esté encendido y listo para emparejarse. El LED rojo en el módulo indica el estado:parpadeando significa "listo para emparejar", mientras que encendido fijo significa "emparejado".
En Windows 10 para PC, simplemente vaya a Configuración-> Dispositivos-> Bluetooth, abra Bluetooth y luego se mostrará el módulo “HC-06” en la pantalla. Toca para emparejar el dispositivo e ingresa el código de emparejamiento del dispositivo. Recuerde que el código de emparejamiento predeterminado es 1234 y la velocidad del puerto serie predeterminado es 9600 baudios. Luego, la página de Bluetooth se muestra así:
Para Windows 10 para dispositivos móviles, vaya a Configuración-> Dispositivos-> Bluetooth y siga los mismos pasos descritos en la sección anterior. Y la página del dispositivo emparejado se muestra así:
Para el dispositivo Windows 10 IoT Core, por ejemplo Raspberry Pi 2, MBM y Dragon Board 410c, el proceso de emparejamiento es muy diferente. En primer lugar, para Raspberry Pi 2 y MBM que no tienen un módulo Bluetooth integrado, debemos comprar una llave USB Bluetooth y conectarla. Simplemente consulte la Lista de compatibilidad de hardware y elija una llave USB Bluetooth verificada.
En este proyecto, elegimos un módulo ORICO BTA-403.
Si prueba este proyecto en Dragon Board 410c, entonces no necesita un dongle Bluetooth porque Dragon Board 410c tiene un módulo Bluetooth integrado.
Conecte el dongle USB Bluetooth ORICO BTA-403 en la interfaz USB de Raspberry Pi 2 de la siguiente manera.
Una vez que la llave USB ORICO BTA-403 Bluetooth esté conectada, mostrará mensajes en la pantalla de la aplicación predeterminada del dispositivo Windows 10 IoT Core.
Para el emparejamiento de Bluetooth en un dispositivo Windows 10 IoT Core, consulte la página Emparejamiento de un dispositivo BLE y la herramienta de volcado de tabla de atributos GATT y siga el “Paso 1 - Paso 6” descrito en la sección “Emparejamiento de Sensortag”. Aquí deberíamos usar SSH para conectarnos a Windows IoT Core y ejecutar la herramienta de línea de comandos para configurar el dispositivo.
Nota:recuerde que el modo BR debe elegirse en el menú principal. Y el código de emparejamiento predeterminado es 1234.
Después de un emparejamiento exitoso, la página de Bluetooth del dispositivo se muestra así:
Paso 4:cree la cuenta de Azure Storage
Hora :10 minutos
Piezas :N / A
Herramientas :Cuenta de Azure
En este proyecto, necesitaremos Azure Storage Table para almacenar los datos del dispositivo Windows 10 IoT Core. Entonces, podemos crearlo de la siguiente manera.
(1) En el Portal de administración de Azure (https://manage.windowsazure.com), haga clic en el icono "ALMACENAMIENTO" a la izquierda para ver sus cuentas de almacenamiento existentes (si las hay), luego haga clic en el botón "+ NUEVO" en la esquina inferior izquierda.
(2) En el panel "NUEVO", seleccione "SERVICIOS DE DATOS" | "ALMACENAMIENTO" | "CREACIÓN RÁPIDA". Complete los campos de "URL, ubicación / grupo de afinidad y replicación", luego haga clic en el botón "CREAR CUENTA DE ALMACENAMIENTO".
(3) Espere a que el estado de la nueva cuenta de almacenamiento se muestre como "En línea".
(4) Seleccione la cuenta de almacenamiento recién creada y luego haga clic en ADMINISTRAR LLAVES DE ACCESO en la parte inferior de la página. Copie el nombre de la cuenta de almacenamiento y una de las claves de acceso.
Paso 5:cree una tabla de almacenamiento de Azure
Usamos Azure Storage Explorer (es una herramienta de código abierto de terceros disponible en codeplex:https://azurestorageexplorer.codeplex.com) para crear la tabla de almacenamiento de Azure.
(1) Vaya a agregar cuenta y complete el nombre de la cuenta y la clave de acceso. Una vez establecida la cuenta, puede acceder al almacenamiento que muestra contenedores de blobs, colas y tablas.
(2) Seleccione la tabla y haga clic en el botón nuevo y cree una nueva tabla llamada "Tabla de acelerómetro" de la siguiente manera.
Paso 5:descargue e implemente el código
Hora :10 minutos
Piezas :N / A
Herramientas :N / A
En primer lugar, ahora que tenemos todo cableado para Arduino, descargue el proyecto “ADXL345_HC06.ino” de (proporcionado en la sección de código a continuación) y cárguelo en el IDE de Arduino en su PC. Asegúrese de desconectar los cables de puente TX / RX del módulo HC-06 y luego cargue el boceto. Vuelva a conectar los cables de puente TX / RX a los pines digital 0 y digital 1 del Arduino. Enchufe la alimentación y la aplicación se ejecutará en Arduino Uno.
En segundo lugar, descargue el proyecto "GenericBluetoothSerialUWApp" de github. Utilice Visual Studio 2015 con la Actualización 1 para cargar "GenericBluetoothSerialUWApp". Esta aplicación está diseñada con la ayuda del Bluetooth serial genérico de nuestro MVP David Jones con Win 10 IoT-Core RPI2. Si desea que esta aplicación para UWP se ejecute en la PC, elija x86 o x64 con depuración del dispositivo local. Si desea que esta aplicación para UWP se ejecute en Windows 10 Mobile, elija ARM con depuración de dispositivos. Si desea que esta aplicación para UWP se ejecute en un dispositivo con Windows 10 IoT, por ejemplo, Raspberry Pi 2, asegúrese de establecer el punto "Depuración remota" en su dispositivo.
A continuación, abra MainPage.xaml.cs en el Explorador de soluciones y busque "dataTransferTick". Agregue el nombre de su cuenta de almacenamiento y la clave de acceso que guardó en la sección 4.
Después de emparejar el HC-06 con su dispositivo Windows 10, presione F5 desde Visual Studio para iniciar la aplicación Plataforma universal de Windows.
Toque dos veces el símbolo "HC-06", encontrará la pantalla de identificación y nombre en la parte superior de la aplicación de la siguiente manera.
Pronto, podrá ver que el estado del LED en el HC-06 cambiará de parpadeante a fijo. Y el botón "Start Rev" se habilita tan pronto como se establece el canal de comunicación del módulo Bluetooth.
Haga clic en Iniciar Recv para habilitar la recepción de datos. Luego verá que los botones Detener Recv, Procesar datos y Cargar datos están habilitados. Simplemente haga clic en el botón Procesar datos para ejecutar el algoritmo de detección de caídas. Verá los datos en Recvd TextBlock y el estado de la persona que lleva el dispositivo.
Aún puede encontrar que los datos se mostrarán en las ventanas de depuración de Visual Studio de la siguiente manera.
Luego, haga clic en el botón Cargar para cargar los datos en Azure. Los datos se transmitirán cada 3 segundos. Si desea cambiar el intervalo de tiempo, puede modificar el código en "AzureButton_Click" de la siguiente manera.
private void AzureButton_Click (remitente del objeto, RoutedEventArgs e) {
timerDataTransfer =ThreadPoolTimer.CreatePeriodicTimer (dataTransferTick, TimeSpan.FromMilliseconds (Convert.ToInt32 ( 3000 )));
}
Pronto, podrá ver los datos en AccelerometerTable de la siguiente manera
En tercer lugar, descargue el "FallDetectionClient" de github. Use Visual Studio 2015 con la Actualización 1 para cargar este proyecto. Esta aplicación está construida con Windows Universal Temple, por lo que puede ejecutarla en Windows 10 PC / Mobile, así como en el dispositivo Windows 10 IoT Core. A continuación, abra StorageSensor.cs en el Explorador de soluciones y busque "_accountName" y "_key". Agregue el nombre de su cuenta de almacenamiento y la clave de acceso que guardó en la sección 4.
Ahora debería poder presionar F5 desde Visual Studio:la aplicación se implementará e iniciará, y debería ver esto en la salida del dispositivo.
Código
- Arduino Sketch (ADXL345_HC06.ino)
Arduino Sketch (ADXL345_HC06.ino) Arduino
ADXL345 Accelrometer + HC-06 Módulo Bluetooth#include#include #define Register_ID 0 # define Register_2D 0x2D # define Register_X0 0x32 # define Register_X1 0x33 # define Register_Y0 0x34 # define Register_Y1 0x35 # define Register_Z0 0x36 # define Register_Z1 0x37int ADXAddress =0xA7>> 1; int lectura =0; int val =0; int X0, X1, X_out; int Y0, Y1, Y_out; int Z1, Z0, Z_out; doble Xg, Yg, Zg; void setup () {Serial.begin (9600); Wire.begin (); retraso (100); Wire.beginTransmission (ADXAddress); Wire.write (Register_2D); Wire.write (8); Wire.endTransmission ();} bucle vacío () {doble tempx =0; char strx [5]; doble tempy =0; carbón [5]; doble tempz =0; char strz [5]; Cuerda gy; Wire.beginTransmission (ADXAddress); Wire.write (Register_X0); Wire.write (Register_X1); Wire.endTransmission (); Wire.requestFrom (ADXAddress, 2); si (Cable disponible () <=2); {X0 =Wire.read (); X1 =Wire.read (); X1 =X1 <<8; X_out =X0 + X1; } Wire.beginTransmission (ADXAddress); Wire.write (Register_Y0); Wire.write (Register_Y1); Wire.endTransmission (); Wire.requestFrom (ADXAddress, 2); si (Cable disponible () <=2); {Y0 =Wire.read (); Y1 =Wire.read (); Y1 =Y1 <<8; Y_out =Y0 + Y1; } Wire.beginTransmission (ADXAddress); Wire.write (Register_Z0); Wire.write (Register_Z1); Wire.endTransmission (); Wire.requestFrom (ADXAddress, 2); si (Cable disponible () <=2); {Z0 =Wire.read (); Z1 =Wire.read (); Z1 =Z1 <<8; Z_out =Z0 + Z1; } Xg =X_out / 256.00; Yg =Y_out / 256,00; Zg =Z_out / 256,00; si (Xg> 0) {gy =String ("") + "x =+" + Xg; } else {gy =String ("") + "x =" + Xg; } if (Yg> 0) {gy + =String ("") + "y =+" + Yg; } else {gy + =String ("") + "y =" + Yg; } if (Zg> 0) {gy + =String ("") + "z =+" + Zg + ","; } else {gy + =String ("") + "z =" + Zg + ","; } Serial.print (gy);}
Aplicación serie Bluetooth
Se comunica con Arduino a través de HC-06 bluetooth y envía datos ADXL345 a Azure https://github.com/shijiong/FallDetection/tree/master/GenericBluetoothSerialUWAppFallDetectionClient
Aplicación cliente para UWP para Fall Detection https://github.com/shijiong/FallDetection/tree/master/FallDetectionClientEsquemas
ADXL345 + HC-06 Complete% 20Schematic.fzzSketch para la conexión ADXL345 ADXL345.fzzSketch para la conexión del módulo Bluetooth hc-06.fzzProceso de manufactura
- Sistema de asistencia que usa Arduino y RFID con Python
- Sistema de robótica de detección humana con Arduino Uno
- Un diseño de detector PM2.5 y PM 10 para la aplicación Windows 10 UWP
- Sistema de monitoreo y detección de incendios forestales (con alertas por SMS)
- Módulo GPS u-blox LEA-6H 02 con Arduino y Python
- Autómatas celulares basados en Arduino y OLED
- eDOT - Reloj de precisión y estación meteorológica basados en Arduino
- Sistema de asistencia basado en Arduino y hoja de cálculo de Google
- Sistema de advertencia de detección de colisiones basado en Arduino
- Control de coche con Arduino Uno y Bluetooth
- Cerradura de puerta protegida con contraseña basada en Arduino y Android