Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Système avancé de détection de chutes avec Arduino, Windows IoT et Azure Cloud

Composants et fournitures

Arduino UNO ×1
Module Bluetooth HC-06 ×1
Module accéléromètre Adafruit ADXL345 ×1
Fils de connexion male-male et male-female ×1
Mini plaque d'essai (breadboard) ×1
Lumia 1520 ou appareil compatible Windows Phone 10 ×1
Module Bluetooth ORICO ×1

Applications et services en ligne

À propos du projet

Introduction

Les chutes entraînant des blessures mortelles sont un défi majeur pour les personnes âgées. Ces dernières années, diverses approches ont été proposées dans la détection de chutes, classables en trois types : dispositifs portables, capteurs d'ambiance et systèmes basés sur la vision.

Ce projet propose un système de surveillance temps réel basé sur Arduino, Windows 10 et Microsoft Azure. Les données brutes de l'accéléromètre 3 axes (ADXL345) sont fournies par l'Arduino. L'appareil Windows 10 utilise ces informations pour déterminer l'orientation du sujet via des algorithmes de fusion de données et de détection de chute efficaces. Les services Azure et applications mobile/PC permettent un traitement, analyse, stockage et consultation des données en tout lieu avec accès Internet.

Principe de détection de chute avec reconnaissance de posture

L'algorithme s'inspire de Fall-detection-in-Android de Bharadwaj Sreenivasan. Deux modules : reconnaissance de posture et détection de chute.

  1. Lecture des valeurs x, y, z de l'accéléromètre.
  2. Calcul de la norme L2 de x, y, z – utilisée par les deux modules.

Module reconnaissance de posture : Classification en trois postures de base : assis, debout, marche. La valeur « y » est soumise à un seuil pour déterminer l'orientation. Le taux de variation de la norme L2 par rapport à l'accélération gravitationnelle (9,8) permet de classer les données en marche ou simple transition d'état.

Module détection de chute : Recherche d'un motif particulier dans le signal. La figure 2 montre un motif typique de la norme L2 lors d'une chute.

Si la différence entre minima et maxima consécutifs dépasse 2g, l'événement est classé comme chute. La décision finale combine les deux modules. Si l'état est encore « marche », l'alerte de chute est rejetée.

Prérequis

Pour l'Arduino, la communication Bluetooth utilise le module HC-06 (économique, compact). Pour l'appareil Windows 10 : Surface Pro et Lumia 1520 n'ont pas besoin de module Bluetooth externe. Pour Raspberry Pi ou MBM sous Windows 10 IoT, un dongle Bluetooth USB est nécessaire. Consultez le tutoriel de David Jones : Generic Serial Bluetooth with Win 10 IoT-Core RPI2.

Note : Comptez 2-3 heures pour les prérequis si Windows 10 et Visual Studio 2015 ne sont pas déjà installés (la plupart du temps est sans surveillance).

Ce dont vous aurez besoin

Pièces :

  1. Arduino Uno et câble USB standard A/B
  2. Module Bluetooth HC-06
  3. Module accéléromètre ADXL345
  4. Fils de connexion male-male et male-female
  5. Mini breadboard
  6. Lumia 1520 ou appareil Windows Phone 10 compatible
  7. Module Bluetooth ORICO

Instructions du projet

Étape 1 : Connecter l'accéléromètre ADXL345 à l'Arduino (5 min)

L'ADXL345 est un accéléromètre MEMS 3 axes, faible consommation, haute résolution (13 bits) jusqu'à ±16g. Sortie numérique 16 bits en complément à deux, accessible via SPI (3 ou 4 fils) ou I2C.

On utilise l'I2C (2 fils) : connecter SDA (Données) et SCL (Horloge) à l'Arduino UNO. Sur l'UNO, SDA = broche analogique 4, SCL = broche analogique 5. Relier VCC et CS à 3,3V (CS à 3,3V force le mode I2C).

Étape 2 : Connecter le module Bluetooth (5 min)

Utilisation du HC-06 (moins cher que le BlueSMiRF Silver). Le HC-05 a le firmware complet (commandes AT, maître/esclave). Le HC-06 ne peut être qu'esclave avec commandes AT limitées.

Brancher le module sur la breadboard. Alimentation : 5V Arduino → VCC module, GND → GND. Communication série : TX module → RX Arduino (broche 0), RX module → TX Arduino (broche 1).

Important : Débranchez TX/RX du Bluetooth avant de téléverser le sketch, rebranchez après.

Étape 3 : Appairage Bluetooth avec appareil Windows 10 (5 min)

Le module utilise le protocole SPP. Sur Windows 10 PC : Paramètres → Périphériques → Bluetooth, activer, appairer « HC-06 », code par défaut 1234, vitesse 9600 bauds. Sur Windows 10 Mobile : même procédure. Sur Windows 10 IoT Core (Raspberry Pi 2, MBM, Dragon Board 410c) : utiliser un dongle USB Bluetooth vérifié (ex: ORICO BTA-403). L'appairage se fait via SSH et outils en ligne de commande.

Étape 4 : Créer un compte de stockage Azure (10 min)

Sur le portail Azure (manage.windowsazure.com) : STORAGE → +NEW → DATA SERVICES → STORAGE → QUICK CREATE. Remplir URL, Localisation/Groupe d'affinité, Réplication. Attendre le statut « Online ». Copier le nom du compte et une clé d'accès via MANAGE ACCESS KEYS.

Étape 5 : Créer une table de stockage Azure

Utiliser Azure Storage Explorer (codeplex.com) : ajouter le compte, créer une nouvelle table nommée « Accelerometer Table ».

Étape 6 : Télécharger et déployer le code (10 min)

  1. Arduino : Télécharger « ADXL345_HC06.ino », l'ouvrir dans l'IDE Arduino. Débrancher TX/RX du HC-06, téléverser, rebrancher. Alimenter – l'application tourne sur l'Arduino.
  2. App UWP Bluetooth : Télécharger « GenericBluetoothSerialUWApp » depuis GitHub. Ouvrir avec Visual Studio 2015 Update 1. Choisir architecture : x86/x64 (PC), ARM (Mobile), ou Remote Debugging (IoT). Dans MainPage.xaml.cs, localiser « dataTransferTick » et ajouter nom de compte et clé d'accès Azure. Après appairage HC-06, lancer (F5). Double-cliquer sur « HC-06 » pour afficher ID/Nom. Cliquer « Start Recv » → « Process Data » pour lancer l'algorithme. Les données apparaissent dans Recvd TextBlock et la fenêtre de débogage. Cliquer « Upload » pour envoyer vers Azure (toutes les 3 secondes, modifiable dans AzureButton_Click).
  3. Client FallDetection : Télécharger depuis GitHub, ouvrir avec VS2015. Dans StorageSensor.cs, définir _accountName et _key. Lancer (F5) – l'app se déploie et affiche les données.

Code

Sketch Arduino (ADXL345_HC06.ino)

#include <Wire.h>
#include <String.h>
#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 0x37

int ADXAddress = 0xA7 >> 1;
int reading = 0, val = 0;
int X0, X1, X_out; int Y0, Y1, Y_out; int Z1, Z0, Z_out;
double Xg, Yg, Zg;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  delay(100);
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_2D);
  Wire.write(8);
  Wire.endTransmission();
}

void loop() {
  double tempx = 0; char strx[5];
  double tempy = 0; char stry[5];
  double tempz = 0; char strz[5];
  String gy;
  
  // Lecture X
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_X0); Wire.write(Register_X1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress, 2);
  if (Wire.available() <= 2) {
    X0 = Wire.read(); X1 = Wire.read();
    X1 = X1 << 8; X_out = X0 + X1;
  }
  
  // Lecture Y
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_Y0); Wire.write(Register_Y1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress, 2);
  if (Wire.available() <= 2) {
    Y0 = Wire.read(); Y1 = Wire.read();
    Y1 = Y1 << 8; Y_out = Y0 + Y1;
  }
  
  // Lecture Z
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_Z0); Wire.write(Register_Z1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress, 2);
  if (Wire.available() <= 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;
  
  if (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);
}

Application Bluetooth Serial

Communique avec l'Arduino via HC-06 et envoie les données ADXL345 vers Azure :
GitHub

FallDetectionClient

Application client UWP pour détection de chute :
GitHub

Schématiques

Processus de fabrication

  1. Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
  2. Robot de détection humaine basé sur Arduino Uno : Intégration capteurs étape par étape
  3. Concevoir une application de détection de qualité d'air PM2.5 et PM10 pour Windows 10 UWP
  4. Système de surveillance d'incendie forestier en temps réel avec alertes SMS
  5. Module GPS u-blox LEA‑6H 02 : guide d'intégration Arduino et Python
  6. Automates Cellulaires Temps Réel sur Arduino avec Écran OLED 128x64
  7. eDOT : Horloge Arduino précise et station météo avec télécommande IR intégrée
  8. Système de pointage RFID temps réel avec Arduino et Google Sheets
  9. Système avancé d'alerte anti-collision Arduino – Alertes visuelles et sonores pour sécurité véhicule