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

Arduino, Windows 및 Azure를 기반으로 하는 추락 감지 시스템

구성품 및 소모품

Arduino UNO
× 1
Microsoft Windows 10 IoT Core
Microsoft Azure
Microsoft Visual Studio 2015
Arduino IDE

이 프로젝트 정보

소개 :

치명적인 부상으로 이어지는 낙상은 노인들에게 무시할 수 없는 큰 도전이 되었습니다. 지난 몇 년 동안 낙상 감지 영역에서 다양한 접근 방식이 제안되었으며 설명할 수 있고 웨어러블 장치 기반, 주변 센서 기반 및 비전 기반의 세 가지 유형으로 분류할 수 있습니다[1]. 먼저, 웨어러블 디바이스는 일반적으로 가속도계, 자력계, 자이로스코프와 같은 임베디드 센서를 활용하여 신체의 움직임과 위치를 감지합니다[2, 3]. 그리고 웨어러블 디바이스 기반 접근 방식의 비용이 상당히 낮을 뿐만 아니라 설치 및 운영이 노인들에게 복잡하지 않습니다. 둘째, 앰비언스 기반 접근 방식은 항상 압력 센서를 사용하여 신체를 감지하고 추적합니다. 이 솔루션은 비용 효율적이고 쉽게 배포할 수 있습니다[4, 5]. 그러나 인체 이외의 물체를 감지할 가능성은 이러한 접근 방식의 감지 정확도에 상당한 문제를 야기합니다. 마지막으로 비전 기반 솔루션은 배치된 카메라를 최대한 활용하여 인체를 포함한 범위 내의 모든 물체를 모니터링합니다[6, 7]. 위의 두 가지 접근 방식보다 사람들의 일상 생활에 대한 침입이 적고 관찰 공간이 협소하고 유비쿼터스 모니터링이 불가능합니다.

이 프로젝트에서는 실시간 낙상 감지를 위해 Arduino, Windows 10 및 Microsoft Azure를 기반으로 하는 감시 시스템을 제안합니다. 3차원 가속도계의 원시 데이터는 ADXL345와 함께 Arduino에서 제공합니다. Windows 10 장치는 이 정보를 사용하여 효율적인 데이터 융합 및 추락 감지 알고리즘을 통해 피사체의 방향을 파악합니다. Microsoft Azure 서비스 및 Mobile/PC 응용 프로그램은 또한 인터넷에 액세스할 수 있는 한 언제 어디서나 원활한 데이터 처리, 분석, 저장 및 획득을 달성하도록 설계되었습니다. 시스템 아키텍처는 다음과 같이 그림 1에 나와 있습니다.

참조

[1] L. Jian 및 T. E. Lockhart, "영향 전 추락 사고 감지 알고리즘의 개발 및 평가," Biomedical Engineering, IEEE Transactions on, vol. 61, pp. 2135-2140, 2014.

[2] P. Pierleoni, A. Belli, L. Palma, M. Pellegrini, L. Pernini 및 S. Valenti, "노인 낙상 감지를 위한 고신뢰성 웨어러블 장치", Sensors Journal, IEEE, vol. 15, pp. 4544-4553, 2015.

[3] R. Freitas, M. Terroso, M. Marques, J. Gabriel, A. Torres Marques 및 R. Simoes, "낙상 감지를 위해 모바일 장치에서 지원하는 웨어러블 센서 네트워크", SENSORS, 2014 IEEE, 2014, 페이지 2246-2249.

[4] Z. Xiaodan, H. Jing, G. Potamianos 및 M. Hasegawa-Johnson, "가우스 혼합 모델 및 GMM 슈퍼벡터를 사용한 음향 낙하 감지", 음향, 음성 및 신호 처리, 2009. ICASSP 2009. IEEE 국제 2009년 회의, pp. 69-72.

[5] L. Yun, K. C. Ho, M. Popescu, "Microsoft Kinect를 사용한 음향 낙하 감지를 위한 효율적인 소스 분리 알고리즘," Biomedical Engineering, IEEE Transactions on, vol. 61, pp. 745-755, 2014.

[6] M. Yu, S. M. Naqvi, A. Rhuma, J. Chambers, "비디오 기반 추락 감지 시스템에 적용하기 위한 하나의 클래스 경계 방법 분류기", Computer Vision, IET, vol. 6, pp. 90-100, 2012.

[7] E. E. Stone 및 M. Skubic, "Microsoft Kinect를 사용한 노인 가정의 낙상 감지", 생물 의학 및 건강 정보학, IEEE Journal of, vol. 19, pp. 290-301, 2015.

자세 인식을 통한 낙상 감지 원리

이 프로젝트에서 낙상 감지 알고리즘은 Bharadwaj Sreenivasan의 Android 낙상 감지에 따라 설계되었습니다. 알고리즘에는 자세 인식과 넘어짐 감지의 두 가지 모듈이 있습니다. 먼저 가속도계에서 x, y 및 z 값을 읽습니다. 그런 다음 x, y 및 z의 L2 노름을 계산합니다. 이는 자세 인식 및 낙상 감지 모듈에서 사용됩니다.

자세 인식 모듈에서 사용자의 자세는 앉기, 서기, 걷기의 세 가지 기본 자세로 분류됩니다. "y" 값은 방향을 찾기 위해 임계값을 적용합니다. 중력(9.8)으로 인한 평균 가속도에 따른 L2 표준의 변동률을 사용하여 데이터를 걷기 또는 상태 간 전환으로 분류합니다.

추락 감지 모듈은 신호에서 특정 패턴을 검색합니다. 그림 2는 낙상 이벤트 중 L2 표준의 일반적인 패턴을 나타냅니다.

연속된 최소값과 최대값의 차이가 2g보다 크면 출력이 떨어지는 것으로 결정됩니다. 낙상 이벤트에 대한 최종 결정은 자세 인식 및 낙상 결정 모듈의 출력을 기반으로 합니다. 낙상이 감지되면 자세 인식 모듈에서 판단하여 오경보 여부를 알려줍니다. 상태가 여전히 걷고 있는 경우 가을 이벤트 결정을 취소할 수 있습니다. 표 1은 최종 결정을 요약한 것입니다.

전제조건

이번 프로젝트에서는 아두이노 기기의 블루투스 통신을 저렴한 소형 패키지 모듈인 HC-06으로 구현했다. Windows 10 장치의 경우 Surface Pro 및 Lumia 1520을 사용하는 경우 Bluetooth 모듈이 필요하지 않습니다. 그러나 Windows 10 IoT 장치로 Raspberry Pi 또는 MBM을 사용하는 경우 Bluetooth 동글이 필요합니다. MVP David Jones의 Win 10 IoT-Core RPI2가 포함된 일반 직렬 Bluetooth를 참조하여 환경을 설정하십시오.

참고:Windows 10 및 Visual Studio 2015가 아직 설정되어 있지 않은 경우 전제 조건을 완료하는 데 2-3시간이 소요되지만 대부분의 시간은 무인 상태입니다.

필요한 것

부품:

1. Arduino Uno 및 표준 A/B USB 케이블

2. HC-06 블루투스 모듈

3. ADXL345 가속도계 모듈

4. 남성 - 남성 및 남성 - 여성 점퍼 와이어

5. 미니 브레드보드

6. Lumia 1520 또는 기타 Windows Phone 10 호환 장치

7. ORICO 블루투스 모듈

프로젝트 지침

1단계:가속도계 모듈 ADXL345를 Arduino에 연결

시간 :5분

부품 :Arduino Uno R3, ADXL345, 점퍼선, 미니 브레드보드

도구 :해당 없음

ADXL345는 최대 +-16g에서 고해상도(13비트) 측정이 가능한 작고 얇은 저전력 3축 MEMS 가속도계입니다. 디지털 출력 데이터는 16비트 2의 보수 형식으로 지정되며 SPI(3선 또는 4선) 또는 I2C 디지털 인터페이스를 통해 액세스할 수 있습니다.

ADXL345는 SPI와 I2C를 모두 지원합니다. 이 프로젝트에서는 I2C에 대해 이야기하겠습니다. I2C는 2-wire 직렬 연결이므로 통신을 위해 SDA(Data) 및 SCL(Clock) 라인을 Arduino UNO에 연결해야 합니다. Arduino UNO에서 SDA는 아날로그 핀 4에 있고 SCL은 아날로그 핀 5에 있습니다. 센서의 VCC와 CS 핀이 모두 3.3v에 연결되어 있는지 확인하십시오. CS를 3.3V에 연결하여 센서에 SPI 장치가 아닌 I2C 장치로 사용할 것임을 알립니다.

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

시간 :5분

부품 :블루투스 모듈, 점퍼선

도구 :해당 없음

이 프로젝트에서는 HC-06을 Bluetooth 모듈로 사용합니다. SparkFun의 BlueSMiRF Silver 모듈보다 훨씬 저렴합니다. 또한 HC-05에는 '전체' 펌웨어, 많은 AT 명령이 있으며 마스터 및 슬레이브 모듈이 될 수 있습니다. 반면에 HC-06 펌웨어는 AT 명령이 매우 제한된 슬레이브 장치만 될 수 있습니다. 아래 표는 응답이 있는 모든 HC-06 펌웨어 명령을 보여줍니다.

먼저 Bluetooth 모듈을 브레드보드에 연결하여 쉽게 연결할 수 있습니다. 모듈에 전원을 공급하려면 Arduino의 5V 전원 레일에서 모듈의 Vcc 핀으로 점퍼를 실행하십시오. 그리고 모듈의 GND 핀에서 Arduino의 GND 핀으로 남성-수 점퍼를 실행합니다. 직렬 통신을 설정하려면 Bluetooth 모듈의 TX 핀에서 Arduino의 RX 핀(디지털 핀 0)에 수-수 점퍼를 연결하고 모듈의 RX 핀에서 Arduino의 TX 핀(디지털 핀 1)으로 다른 점퍼를 연결합니다.

참고:Bluetooth의 TX 및 RX 핀이 Arduino에 연결된 경우 Arduino IDE에서 Arduino로 스케치를 업로드할 수 없습니다. 스케치를 업로드해야 할 때 연결을 끊고 스케치가 성공적으로 업로드되면 다시 연결하십시오. 아래 스케치에서는 HC-05를 사용하고 있음을 보여줍니다. 사실 위에서 설명한 것처럼 HC-05와 HC-06 모두 OK입니다.

Bluetooth와 가속도계 연결 후 실제는 다음과 같이 표시됩니다.

3단계:Bluetooth 모듈을 Windows 10 기기와 페어링

시간 :5분

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

도구 :해당 없음

Bluetooth 모듈은 SPP(Bluetooth를 통한 직렬 프로토콜) 프로토콜을 실행합니다. 따라서 SPP를 지원하는 모든 장치에 연결할 수 있습니다. Windows 10 장치에서 이것은 가상 COM 포트처럼 보입니다. 연결하기 전에 모듈에 전원이 공급되고 페어링할 준비가 되었는지 확인하십시오. 모듈의 빨간색 LED는 상태를 나타냅니다. 깜박이면 "페어링 준비"를 의미하고 계속 켜져 있으면 "페어링됨"을 의미합니다.

PC용 Windows 10에서 설정->장치->Bluetooth로 이동하여 Bluetooth를 열면 화면에 "HC-06" 모듈이 표시됩니다. 을 눌러 장치를 페어링하고 장치의 페어링 코드를 입력하세요. 기본 페어링 코드는 1234이고 기본 직렬 포트 속도는 9600 Baud입니다. 그러면 다음과 같이 Bluetooth 페이지가 표시됩니다.

모바일용 Windows 10의 경우 설정->장치->Bluetooth로 이동하고 위 섹션에서 설명한 것과 동일한 단계를 수행합니다. 페어링된 기기 페이지는 다음과 같이 표시됩니다.

Windows 10 IoT Core 장치(예:Raspberry Pi 2, MBM 및 Dragon Board 410c)의 경우 페어링 프로세스가 많이 다릅니다. 먼저, 온보드 Bluetooth 모듈이 없는 Raspberry Pi 2 및 MBM의 경우 Bluetooth USB 동글을 구입하여 연결해야 합니다. 하드웨어 호환성 목록을 참조하고 검증된 Bluetooth USB 동글을 선택하기만 하면 됩니다.

이 프로젝트에서는 ORICO BTA-403 모듈을 선택합니다.

Dragon Board 410c에서 이 프로젝트를 시도하면 Dragon Board 410c에 온보드 Bluetooth 모듈이 있기 때문에 Bluetooth 동글이 필요하지 않습니다.

ORICO BTA-403 Bluetooth USB 동글을 Raspberry Pi 2의 USB 인터페이스에 다음과 같이 연결합니다.

ORICO BTA-403 Bluetooth USB 동글이 연결되면 Windows 10 IoT Core 장치의 기본 앱 화면에 메시지가 표시됩니다.

Windows 10 IoT Core 장치의 Bluetooth 페어링은 BLE 장치 및 GATT 속성 테이블 덤프 도구 페어링 페이지를 참조하고 "센서 태그 페어링" 섹션에 설명된 "1단계 – 6단계"를 따르십시오. 여기서 SSH를 사용하여 Windows IoT Core에 연결하고 명령줄 도구를 실행하여 장치를 구성해야 합니다.

참고:메인 메뉴에서 BR 모드를 선택해야 한다는 것을 기억하십시오. 그리고 기본 페어링 코드는 1234입니다.

성공적으로 페어링되면 장치의 Bluetooth 페이지가 다음과 같이 표시됩니다.

4단계:Azure Storage 계정 만들기

시간 :10분

부품 :해당 없음

도구 :Azure 계정

이 프로젝트에서는 Windows 10 IoT Core 장치의 데이터를 저장하기 위해 Azure Storage Table이 필요합니다. 따라서 다음과 같이 만들 수 있습니다.

(1) Azure 관리 포털(https://manage.windowsazure.com)에서 왼쪽에 있는 "STORAGE" 아이콘을 클릭하여 기존 스토리지 계정(있는 경우)을 확인한 다음 "+NEW" 버튼을 클릭합니다. 왼쪽 하단 모서리에 있습니다.

(2) "NEW" 패널에서 "DATA SERVICES" | "저장" | "빠른 만들기". "URL, Location/Affinity Group and Replication" 필드를 완성한 다음 "CREATE STORAGE ACCOUNT" 버튼을 클릭하십시오.

(3) 새 스토리지 계정의 상태가 "온라인"으로 표시될 때까지 기다립니다.

(4) 새로 생성된 Storage 계정을 선택한 다음 페이지 하단의 MANAGE ACCESS KEYS를 클릭합니다. 스토리지 계정 이름과 액세스 키 중 하나를 복사합니다.

5단계:Azure Storage 테이블 만들기

Azure Storage Explorer(codeplex:https://azuretorageexplorer.codeplex.com에서 사용 가능한 타사 오픈 소스 도구)를 사용하여 Azure Storage 테이블을 만듭니다.

(1) 계정 추가로 이동하여 계정 이름과 액세스 키를 입력합니다. 계정이 설정되면 Blob 컨테이너, 큐 및 테이블을 표시하는 저장소에 액세스할 수 있습니다.

(2) 테이블을 선택하고 새 버튼을 클릭하고 다음과 같이 "Accelerometer Table"이라는 새 테이블을 만듭니다.

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

시간 :10분

부품 :해당 없음

도구 :해당 없음

우선 Arduino용으로 모든 것이 연결되었으므로 (아래 코드 섹션에서 제공) "ADXL345_HC06.ino" 프로젝트를 다운로드하고 PC의 Arduino IDE에 로드합니다. HC-06 모듈의 TX/RX 점퍼 와이어를 뽑은 다음 스케치를 업로드해야 합니다. TX/RX 점퍼 와이어를 Arduino의 디지털 0 및 디지털 1 핀에 다시 연결합니다. 전원을 연결하면 Arduino Uno에서 애플리케이션이 실행됩니다.

둘째, github에서 "GenericBluetoothSerialUWApp" 프로젝트를 다운로드합니다. 업데이트 1과 함께 Visual Studio 2015를 사용하여 "GenericBluetoothSerialUWApp"을 로드합니다. 이 앱은 MVP David Jones의 Win 10 IoT-Core RPI2가 포함된 일반 직렬 Bluetooth의 도움으로 설계되었습니다. 이 UWP 앱을 PC에서 실행하려면 로컬 장치 디버깅을 사용하여 x86 또는 x64를 선택하세요. Windows 10 Mobile에서 이 UWP 앱을 실행하려면 ARM with Device debugging을 선택하십시오. 이 UWP 앱을 Windows 10 IoT 장치(예:Raspberry Pi 2)에서 실행하려면 "원격 디버깅" 지점을 장치로 설정해야 합니다.

그런 다음 솔루션 탐색기에서 MainPage.xaml.cs를 열고 "dataTransferTick"을 찾습니다. 섹션 4에서 저장한 스토리지 계정 이름과 액세스 키를 추가합니다.

HC-06을 Windows 10 장치와 페어링한 후 Visual Studio에서 F5 키를 눌러 유니버설 Windows 플랫폼 앱을 시작합니다.

"HC-06" 기호를 두 번 탭하면 다음과 같이 응용 프로그램 맨 위에 ID와 이름이 표시됩니다.

곧 HC-06의 LED 상태가 깜박임에서 고정으로 변경되는 것을 볼 수 있습니다. 그리고 "Start Rev" 버튼은 블루투스 모듈의 통신 채널이 설정되는 즉시 활성화됩니다.

데이터 수신을 활성화하려면 수신 시작을 클릭합니다. 그러면 Stop Recv, Process Data 및 Upload Data 버튼이 활성화된 것을 볼 수 있습니다. 데이터 처리 버튼을 클릭하면 추락 감지 알고리즘이 실행됩니다. Recvd TextBlock의 데이터와 장치를 운반하는 사람의 상태를 볼 수 있습니다.

다음과 같이 Visual Studio의 디버그 창에 데이터가 표시되는 것을 여전히 확인할 수 있습니다.

그런 다음 업로드 버튼을 클릭하여 Azure에 데이터를 업로드합니다. 데이터는 3초마다 전송됩니다. 시간 간격을 변경하려면 다음과 같이 "AzureButton_Click"에서 코드를 수정하면 됩니다.

비공개 무효 AzureButton_Click(객체 발신자, RoutedEventArgs e) {

timerDataTransfer =ThreadPoolTimer.CreatePeriodicTimer(dataTransferTick, TimeSpan.FromMilliseconds(Convert.ToInt32(3000) )));

}

곧 AccelerometerTable에서 다음과 같이 데이터를 볼 수 있습니다.

셋째, github에서 "FallDetectionClient"를 다운로드합니다. 업데이트 1과 함께 Visual Studio 2015를 사용하여 이 프로젝트를 로드하세요. 이 응용 프로그램은 Windows Universal Temple로 구축되었으므로 Windows 10 PC/Mobile 및 Windows 10 IoT Core 장치에서 실행할 수 있습니다. 그런 다음 솔루션 탐색기에서 StorageSensor.cs를 열고 "_accountName" 및 "_key"를 찾습니다. 섹션 4에서 저장한 스토리지 계정 이름과 액세스 키를 추가합니다.

이제 Visual Studio에서 F5 키를 누를 수 있어야 합니다. 앱이 배포되고 시작되고 장치 출력에 이 내용이 표시되어야 합니다.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • Arduino 스케치(ADXL345_HC06.ino)
  • Arduino 스케치(ADXL345_HC06.ino)Arduino
    ADXL345 가속도계 + HC-06 블루투스 모듈
    #include  #include  #define Register_ID 0#define Register_2D 0x2D#define Register_X0 0x32#define Register_X1 0x33#define Register_Y0 0x34#define Register_5#1 정의 Register_Z0 0x36#define Register_Z1 0x37int ADXAddress =0xA7>> 1; 정수 읽기 =0, 정수 val =0, 정수 X0, X1, X_out, 정수 Y0, Y1, Y_out, 정수 Z1, Z0, Z_out, 이중 Xg, Yg, Zg, 무효 설정(){ Serial.begin(9600); Wire.begin(); 지연(100); Wire.beginTransmission(ADXAddress); Wire.write(Register_2D); Wire.write(8); Wire.endTransmission();} 무효 루프() { 이중 tempx =0; 문자 strx[5]; 이중 임시 =0; 문자 시도[5]; 이중 온도 =0; 문자 strz[5]; 문자열 gy; Wire.beginTransmission(ADXAddress); Wire.write(Register_X0); Wire.write(Register_X1); Wire.endTransmission(); Wire.requestFrom(ADX주소, 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(ADX주소, 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(ADX주소, 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 =문자열("")+ "x=+"+Xg; } else { gy =문자열("")+ "x="+Xg; } if(Yg>0) { gy +=문자열("")+ "y=+"+Yg; } else { gy +=문자열("")+ "y="+Yg; } if(Zg>0) { gy +=문자열("")+ "z=+"+Zg+","; } else { gy +=문자열("")+ "z="+Zg+","; } Serial.print(gy);}
    블루투스 직렬 앱
    HC-06 블루투스를 통해 Arduino와 통신하고 ADXL345 데이터를 Azure로 보냅니다.https://github.com/shijiong/FallDetection/tree/master/GenericBluetoothSerialUWApp
    FallDetection 클라이언트
    낙상 감지용 UWP 클라이언트 앱https://github.com/shijiong/FallDetection/tree/master/FallDetectionClient

    회로도

    ADXL345 + HC-06 ADXL345 연결을 위한 %20Schematic.fzzSketch 완료 블루투스 모듈 연결을 위한 ADXL345.fzzSketch hc-06.fzz

    제조공정

    1. Python과 함께 Arduino 및 RFID를 사용한 출석 시스템
    2. Arduino Uno를 사용한 인간 감지 로봇 시스템
    3. Windows 10 UWP 앱용 PM2.5 및 PM 10 감지기 설계
    4. 산불 모니터링 및 감지 시스템(SMS 경보 포함)
    5. U-blox LEA-6H 02 GPS 모듈(Arduino 및 Python 포함)
    6. Arduino 및 OLED 기반 Cellular Automata
    7. eDOT - Arduino 기반 정밀 시계 및 기상 관측소
    8. Arduino 및 Google 스프레드시트 기반 출석 시스템
    9. Arduino 기반 충돌 감지 경고 시스템
    10. Arduino Uno 및 Bluetooth로 차량 제어