산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

필요한 부품 및 소모품

부품명 수량 비고
아두이노 우노 1
HC-06 블루투스 모듈 1
아다프루트 ADXL345 가속도계 모듈 1
수-수, 수-암 점퍼 와이어 1
미니 브레드보드 1
루미아 1520 또는 윈도우 폰 10 호환 기기 1
ORICO 블루투스 모듈 1

소프트웨어 및 온라인 서비스

프로젝트 개요

소개

치명적인 부상으로 이어지는 낙상 사고는 노인들에게 간과할 수 없는 큰 과제가 되었습니다. 최근 몇 년간 낙상 감지 분야에서 다양한 접근법이 제안되었는데, 크게 세 유형으로 분류됩니다: 웨어러블 디바이스 기반, 앰비언트 센서 기반, 비전 기반 [1].

첫째, 웨어러블 디바이스는 내장 센서로 신체 움직임과 위치를 감지합니다(가속도계, 자력계, 자이로스코프 등) [2, 3]. 웨어러블 기반 접근법은 비용이 저렴하고 노인에게 설치와 조작이 복잡하지 않습니다. 둘째, 앰비언트 기반은 압력 센서로 신체를 감지하고 추적합니다. 이 솔루션도 비용 효율적이고 배포가 쉽습니다 [4, 5]. 하지만 사람 외 물체도 감지할 수 있어 감지 정확도에 큰 도전이 됩니다. 셋째, 비전 기반은 설치된 카메라로 범위 내 모든 객체(사람 포함)를 모니터링합니다 [6, 7]. 위 두 방식보다 일상생활 침입이 적지만 관찰 공간이 제한적이고 보편적 모니터링은 불가능합니다.

이 프로젝트에서는 아두이노, 윈도우 10, 마이크로소프트 애저를 기반으로 한 실시간 낙상 감지 감시 시스템을 제안합니다. ADXL345와 아두이노로 3차원 가속도계 원시 데이터를 제공합니다. 윈도우 10 기기는 효율적인 데이터 융합과 낙상 감지 알고리즘으로 대상자 자세를 파악합니다. 마이크로소프트 애저 서비스와 모바일/PC 앱도 설계해 인터넷 접속 가능한 어디서든 언제든 데이터 처리, 분석, 저장, 조회가 가능하게 했습니다. 시스템 아키텍처는 Fig. 1과 같습니다.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

참고문헌

[1] L. Jian and T. E. Lockhart, "Development and Evaluation of a Prior-to-Impact Fall Event Detection Algorithm," Biomedical Engineering, IEEE Transactions on, vol. 61, pp. 2135-2140, 2014.

[2] P. Pierleoni et al., "A High Reliability Wearable Device for Elderly Fall Detection," Sensors Journal, IEEE, vol. 15, pp. 4544-4553, 2015.

[3] R. Freitas et al., "Wearable sensor networks supported by mobile devices for fall detection," in SENSORS, 2014 IEEE, 2014, pp. 2246-2249.

[4] Z. Xiaodan et al., "Acoustic fall detection using Gaussian mixture models and GMM supervectors," in ICASSP 2009, 2009, pp. 69-72.

[5] L. Yun et al., "Efficient Source Separation Algorithms for Acoustic Fall Detection Using a Microsoft Kinect," Biomedical Engineering, IEEE Transactions on, vol. 61, pp. 745-755, 2014.

[6] M. Yu et al., "One class boundary method classifiers for application in a video-based fall detection system," Computer Vision, IET, vol. 6, pp. 90-100, 2012.

[7] E. E. Stone and M. Skubic, "Fall Detection in Homes of Older Adults Using the Microsoft Kinect," Biomedical and Health Informatics, IEEE Journal of, vol. 19, pp. 290-301, 2015.

자세 인식 기반 낙상 감지 원리

이 프로젝트의 낙상 감지 알고리즘은 Bharadwaj Sreenivasan의 'Fall-detection-in-Android'를 참고해 설계했습니다. 알고리즘엔 자세 인식과 낙상 감지 두 모듈이 있습니다. 먼저 가속도계에서 x, y, z 값을 읽습니다. 그런 다음 x, y, z의 L2 노름을 계산합니다. 이는 자세 인식과 낙상 감지 모듈에서 사용됩니다.

자세 인식 모듈에서 사용자 자세를 앉기, 서기, 걷기 세 기본 자세로 분류합니다. "y" 값에 임계값을 적용해 방향을 파악합니다. L2 노름의 평균 중력가속도(9.8) 대비 변화율을 사용해 걷기 상태인지 단순 상태 전이인지 분류합니다.

낙상 감지 모듈은 신호에서 특정 패턴을 찾습니다. Fig. 2는 낙상 이벤트 중 L2 노름의 전형적 패턴을 보여줍니다.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

연속된 최솟값과 최댓값 차이가 2g보다 크면 낙상으로 판정합니다. 최종 낙상 이벤트 결정은 자세 인식 모듈과 낙상 판단 모듈 출력을 종합합니다. 낙상 감지 시 자세 인식 모듈 결정으로 오경보 여부 판단: 상태가 여전히 걷기라면 낙상 이벤트 결정을 폐기합니다. Table 1이 최종 결정을 요약합니다.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

사전 준비사항

이 프로젝트에서 아두이노 장치의 블루투스 통신은 저렴하고 소형인 HC-06 모듈로 구현합니다. 윈도우 10 기기로 서피스 프로와 루미아 1520을 쓰면 블루투스 모듈 불필요. 하지만 라즈베리 파이나 MBM을 윈도우 10 IoT 기기로 쓰면 블루투스 동글 필요. 우리 MVP 데이비드 존스의 'Generic Serial Bluetooth with Win 10 IoT-Core RPI2' 참고해 환경 설정하세요.

참고: 윈도우 10과 비주얼 스튜디오 2015가 이미 세팅 안 되어 있다면 2-3시간 걸리지만 대부분 무인 시간입니다.

필요한 것들

부품:

  1. 아두이노 우노 R3와 표준 A/B USB 케이블
  2. HC-06 블루투스 모듈
  3. ADXL345 가속도계 모듈
  4. 수-수, 수-암 점퍼 와이어
  5. 미니 브레드보드
  6. 루미아 1520 또는 다른 윈도우 폰 10 호환 기기
  7. ORICO 블루투스 모듈

프로젝트 지침

1단계: ADXL345 가속도계 모듈을 아두이노에 연결

시간: 5분

부품: 아두이노 우노 R3, ADXL345, 점퍼 와이어, 미니 브레드보드

도구: 없음

ADXL345는 작고 얇은 저전력 3축 MEMS 가속도계로 최대 ±16g에서 고해상도(13비트) 측정 가능. 디지털 출력은 16비트 2의 보수 형식으로 SPI(3선 또는 4선) 또는 I2C 디지털 인터페이스로 접근 가능.

ADXL345는 SPI와 I2C 모두 지원하지만 여기선 I2C만 다룹니다. I2C는 2선 시리얼 연결이므로 SDA(데이터)와 SCL(클럭) 라인을 아두이노 우노에 연결해 통신합니다. 아두이노 우노에서 SDA는 아날로그 핀 4, SCL은 아날로그 핀 5입니다. VCC와 센서의 CS 핀 모두 3.3V에 연결해야 합니다. CS를 3.3V에 연결해 I2C 디바이스로 사용함을 알리고, SPI 디바이스로 쓰지 않음을 명시합니다.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

2단계: 블루투스 모듈 연결

시간: 5분

부품: 블루투스 모듈, 점퍼 와이어

도구: 없음

이 프로젝트에선 HC-06을 블루투스 모듈로 사용합니다. 스파크펀의 BlueSMiRF Silver보다 훨씬 저렴합니다. HC-05는 '풀' 펌웨어로 많은 AT 명령 지원, 마스터/슬레이브 둘 다 가능. HC-06 펌웨어는 슬레이브만 가능, 제한된 AT 명령만 지원. 아래 표는 HC-06 펌웨어 모든 명령과 응답:

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

먼저 블루투스 모듈을 브레드보드에 꽂아 연결 쉽게 만드세요. 모듈 전원용으로 아두이노 5V 레일에서 모듈 Vcc 핀으로 점퍼 연결. 모듈 GND 핀을 아두이노 아무 GND 핀에 연결. 시리얼 통신용으로 블루투스 모듈 TX 핀을 아두이노 RX 핀(디지털 0)에, 모듈 RX 핀을 아두이노 TX 핀(디지털 1)에 연결.

참고: 블루투스 TX/RX 핀이 아두이노에 연결돼 있으면 아두이노 IDE에서 스케치 업로드 불가. 스케치 업로드 시 분리했다가 성공 후 다시 연결하세요. 아래 스케치에 HC-05라 나와 있지만, 위 설명대로 HC-05와 HC-06 둘 다 괜찮습니다.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

블루투스와 가속도계 연결 후 실제 모습:

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템
아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

3단계: 블루투스 모듈과 윈도우 10 기기 페어링

시간: 5분

부품: 블루투스 모듈, 윈도우 10 기기, ORICO 블루투스 모듈(선택)

도구: 없음

블루투스 모듈은 SPP(블루투스 직렬 프로토콜) 프로토콜 실행. SPP 지원 기기면 모두 연결 가능. 윈도우 10 기기에선 가상 COM 포트처럼 보임. 연결 전 모듈 전원 켜져 있고 페어링 준비됐는지 확인. 모듈 빨간 LED로 상태 표시: 깜빡임 = "페어링 준비", 계속 켜짐 = "페어링됨".

윈도우 10 PC: 설정 → 장치 → 블루투스, 블루투스 켜기, "HC-06" 모듈 화면 표시. 탭해 페어링, 기기 페어링 코드 입력. 기본 페어링 코드 1234, 기본 시리얼 포트 속도 9600 보드. 블루투스 페이지 모습:

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

윈도우 10 모바일: 설정 → 장치 → 블루투스, 위와 동일 단계. 페어링된 기기 페이지:

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

윈도우 10 IoT 코어 기기(라즈베리 파이 2, MBM, 드래곤보드 410c): 페어링 과정이 꽤 다름. 먼저 라즈베리 파이 2와 MBM은 온보드 블루투스 없으니 블루투스 USB 동글 구매해 꽂으세요. 하드웨어 호환성 목록 참고해 검증된 동글 선택.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

이 프로젝트에선 ORICO BTA-403 모듈 선택.

드래곤보드 410c면 온보드 블루투스 있어 동글 불필요.

ORICO BTA-403 블루투스 USB 동글을 라즈베리 파이 2 USB 포트에 꽂으세요.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

동글 꽂으면 윈도우 10 IoT 코어 기기 기본 앱 화면에 메시지 표시.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

윈도우 10 IoT 코어 기기 블루투스 페어링은 'Pairing a BLE Device and GATT Attribute Table Dump Tool' 페이지 참고해 'Pairing the Sensortag' 섹션의 'Step 1-Step 6' 따라하세요. 여기선 SSH로 윈도우 IoT 코어 연결해 명령줄 도구로 기기 설정.

참고: 메인 메뉴에서 BR 모드 선택해야 함. 기본 페어링 코드 1234.

성공적 페어링 후 기기 블루투스 페이지:

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

4단계: 애저 스토리지 계정 생성

시간: 10분

부품: 없음

도구: 애저 계정

이 프로젝트에선 윈도우 10 IoT 코어 기기 데이터 저장을 위해 애저 스토리지 테이블 필요. 생성 방법:

  1. 애저 관리 포털(https://manage.windowsazure.com)에서 왼쪽 'STORAGE' 아이콘 클릭해 기존 스토리지 계정 확인, 왼쪽 아래 '+NEW' 버튼 클릭.
  2. 'NEW' 패널에서 'DATA SERVICES' | 'STORAGE' | 'QUICK CREATE' 선택. "URL, Location/Affinity Group and Replication" 필드 채우고 'CREATE STORAGE ACCOUNT' 클릭.
  3. 새 스토리지 계정 상태가 'Online' 될 때까지 대기.
아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템
  1. 새로 만든 스토리지 계정 선택, 페이지 아래 'MANAGE ACCESS KEYS' 클릭. 스토리지 계정 이름과 액세스 키 중 하나 복사.
아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

5단계: 애저 스토리지 테이블 생성

애저 스토리지 익스플로러(코드플렉스 오픈소스 서드파티 툴: https://azurestorageexplorer.codeplex.com)로 애저 스토리지 테이블 생성.

  1. 계정 추가에서 계정 이름과 액세스 키 입력. 계정 연결되면 블롭 컨테이너, 큐, 테이블 접근 가능.
  2. 테이블 선택, 새 버튼 클릭해 'Accelerometer Table'이라는 새 테이블 생성.
아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

6단계: 코드 다운로드 및 배포

시간: 10분

부품: 없음

도구: 없음

첫째, 아두이노용 배선 다 했으면 아래 코드 섹션에 제공된 'ADXL345_HC06.ino' 프로젝트 다운로드해 PC 아두이노 IDE에 로드. HC-06 모듈 TX/RX 점퍼 와이어 뽑고 스케치 업로드. 업로드 성공 후 TX/RX 점퍼 와이어를 아두이노 디지털 0, 1 핀에 다시 연결. 전원 연결하면 아두이노 우노에서 애플리케이션 실행.

둘째, GitHub에서 'GenericBluetoothSerialUWApp' 프로젝트 다운로드. 비주얼 스튜디오 2015 업데이트 1로 'GenericBluetoothSerialUWApp' 로드. 이 앱은 우리 MVP 데이비드 존스의 'Generic Serial Bluetooth with Win 10 IoT-Core RPI2' 도움으로 설계. PC에서 이 UWP 앱 돌리려면 x86 또는 x64에 로컬 디바이스 디버깅. 윈도우 10 모바일에서 돌리려면 ARM에 디바이스 디버깅. 윈도우 10 IoT 기기(예: 라즈베리 파이 2)에서 돌리려면 'Remote Debugging' 포인트를 본인 기기로 설정.

다음, 솔루션 탐색기에서 MainPage.xaml.cs 열고 'dataTransferTick' 위치 찾기. 4단계에서 저장한 스토리지 계정 이름과 액세스 키 추가.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

HC-06을 윈도우 10 기기와 페어링한 후 비주얼 스튜디오에서 F5 눌러 유니버설 윈도우 플랫폼 앱 실행.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

'HC-06' 심볼 더블 탭하면 Id와 Name이 앱 최상단에 표시.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

곧 HC-06 LED 상태가 깜빡임에서 계속 켜짐으로 바뀜. 블루투스 모듈 통신 채널 확립되면 'Start Rev' 버튼 활성화.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

'Start Recv' 클릭해 데이터 수신 활성화. 그러면 'Stop Recv', 'Process Data', 'Upload Data' 버튼 활성화. 'Process data' 버튼 클릭해 낙상 감지 알고리즘 실행. Recvd TextBlock에 데이터와 디바이스 착용자 상태 표시.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

비주얼 스튜디오 디버그 창에도 데이터 표시.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

'Upload' 버튼 클릭해 데이터 애저 업로드. 데이터 3초마다 전송. 간격 변경하려면 'AzureButton_Click' 코드 수정:

private void AzureButton_Click(object sender, RoutedEventArgs e) {
  timerDataTransfer = ThreadPoolTimer.CreatePeriodicTimer(dataTransferTick, TimeSpan.FromMilliseconds(Convert.ToInt32(3000)));
}

곧 AccelerometerTable에 데이터 표시.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

셋째, GitHub에서 'FallDetectionClient' 다운로드. 비주얼 스튜디오 2015 업데이트 1로 로드. 이 앱은 윈도우 유니버설 템플릿으로 빌드돼 윈도우 10 PC/모바일, 윈도우 10 IoT 코어 기기에서 실행 가능. 솔루션 탐색기에서 StorageSensor.cs 열고 '_accountName'과 '_key' 위치 찾아 4단계에서 저장한 스토리지 계정 이름과 액세스 키 추가.

이제 비주얼 스튜디오에서 F5 누르면: 앱 배포 및 시작, 기기 출력에 아래 화면 표시.

아두이노, 윈도우 IoT, 애저 클라우드 기반 고급 낙상 감지 시스템

코드

아두이노 스케치 (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; 
int 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; 
  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; 
  } 
  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; 
  } 
  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); 
}

블루투스 시리얼 앱

HC-06 블루투스로 아두이노와 통신하고 ADXL345 데이터를 애저로 전송: GitHub

FallDetectionClient

낙상 감지용 UWP 클라이언트 앱: GitHub

회로도

제조공정

  1. 파이썬 연동 아두이노 RFID 출석 관리 시스템 구축하기
  2. 아두이노 우노 기반 인간 감지 로봇: 센서 통합 단계별 가이드
  3. 윈도우 10 UWP용 PM2.5 & PM10 공기질 감지기 앱 설계하기
  4. 실시간 산불 감시 시스템 - SMS 알림 기능 포함
  5. u-blox LEA-6H GPS 모듈: 아두이노 & 파이썬 연동 가이드
  6. 아두이노 나노 + 128x64 OLED로 실시간 셀룰러 오토마타 (생명 게임) 구현
  7. eDOT: 내장 IR 리모컨·자동 밝기 조절 갖춘 정밀 아두이노 시계·기상 관측소
  8. 아두이노와 구글 시트로 구현하는 실시간 RFID 출석 시스템
  9. 아두이노 기반 충돌 경고 시스템 – 시각/청각 알림으로 차량 안전 강화
  10. 아두이노 우노와 블루투스로 RC카 원격 제어하기: 단계별 가이드