Show me the 띵s : 헬스케어 (Healthcare)
콘테스트 프로젝트완료

머신러닝 도우미

Show me the 띵s : 헬스케어 (Healthcare)
T
2022.04.27에 시작
3
좋아요
1.9K
조회
0
댓글
머신러닝 도우미
Show me the 띵s : 헬스케어 (Healthcare)완료
콘테스트 프로젝트 진행 상황

각 Quest를 단계적으로 완성하는 프로젝트입니다.

Quest 1
Quest 2
Quest 3
Quest 4
4 / 4 완료
Quest 1: [헬스케어미션] 러닝머신 상태도우미
2022.05.09
완료

주제 선택 이유:

가속도 센서를 이용한 만보계를 만들 생각을 했으나 너무 일반적인 내용이고 이미 App으로 많이 나와 있어서

러닝머신과 관련된 동작 인식을 하면 좋을것 같다는 생각을 함.

 

개요

생활이 윤택해지고 삶의 질이 높아짐에 따라 개개인의 건강에 대한 관심이 높이지고 있는 
현실을 반영한 이번 헬스케어 미션을 진행하기 위해 러닝머신 상태도우미를 만들려고 합니다.
개발될 장치는 가속도 센서를 이용한 운동 동작 인식 기능을 구현하고 운동의 진행 상태를 
사용자에게 주기적으로 알려줄 수 있는 LCD출력 기능을 가지고 있습니다. 
팔이나 다리에 착용 후 사용하면 움직이고 있는 동작들에 대한 실시간 인식 및 미리 정해놓은 동작 대한 
가중치를 합산하여 운동 진행 상태를 lcd화면에 표출하여 사용자가 운동하는 상태를 알려주어 사용자가 
현재 운동 상태를 파악케 하며 규칙적인 운동 습관에 도움을 줄 수 있도록 도움을 주는 장치를 만드는 것을 최종 목표로 합니다..
구현하려는 동작 인식 기능의 목표 동작들로는 걷기, 달리기, 멈추기 3가지 기본 동작이다.
그 외 추가적인 동작에 대한 인식 및 기능 추가들도 구현 가능할 것이라 생각이 됩니다.

HW 구성( 전체구조를 표현하는 블록다이어그램과 유사하여 아래 HW블록도 하나만 표현합니다)

이벤트에서 신청한 센서보드와 제가 가진 LCD가 있는 보드를 Uart로 서로 연결할 계획입니다.

센서보드에는 여러가지 센서들중 가속도 센서가 있을 것이고 이 센서 값을 이용하여 운동 상태를 판단할 것입니다.

LCD보드에서는 LCD로 센싱결과를 알려줍니다.

 

SW 구조

두 보드의 SW 구조 또한 매운 간결하게 구성할 계획입니다.

초기화 과정 이후 반복적인 센싱 작업을 수행하며 로깅된 가속도센싱 값들을 이용하여 운동상태를 인식합니다.

인식과정은 아직 미정입니다,

LCD보드측 SW는 센서보드에서 주기적으로 보내주는 운동상태값을 대기하고 있다가 수신되는대로 LCD로 표현하는 구조입니다.

 

이상입니다.

Quest 2: Quest2 하드웨어 자료 준비 및 설명
2022.06.10
완료

1.사용 부품 목록

- STM32H7B3 Discovery Board – 1EA

- SensorTileBox – 1EA

- ST-Link-III Debugger – 1EA

- Portable Battery: 1-EA

- 기타 Cable류 : USB케이블(2개), Wire

 

2.부품 사양/특징

- STM32H7B3 Discovery Board :

  MCU : STM32H7B3LIH6QU (2 Mbyte Flash/ 1.4 Mbyte RAM) BGA225 pkg

  LCD : 4.3" (480x272 pixels) TFT LCD

  Wi?Fi® module : 802.11 b/g/n

  512-Mbit Octo-SPI Flash/128-Mbit SDRAM / 2 LEDs// Etc Buttons

- SensorTileBox

  Mcu : STM32L4R9ZI (120MHz/ 2MB Flash)

  Temp sensor : STTS751

  6xDOF IMU: LSM6DSOX

  Acc Sensor: LIS3DHH, LIS2DW12

  Magnetometer: LIS2MDL

  Altimeter / pressure sensor : LPS22HH

  Audio Sensor: MP23ABS1

  Humidity sensor: HTS221

- ST-Link-III Debugger – 1EA

- Portable Battery: 1-EA

- 기타 Cable류 : USB케이블(2개), Wire 3가닥

 

3. 사용할 센서에 대한 설명

LSM6DSOX (3D acc & 3D gyro sensor)

 - acc sensor : +/-2/4/8/16g 로 조절 가능

 - gyro sensor: +/-125/250/500/2000 dsp 로 변경 가능

 - I/F : spi/i3c

 

4. HW 연결

  STM32H7B3 Discovery Board  와  SensroTileBox 는 Uart로 연결.

  전원으로는 휴대용 배터리를 이용하여 USB cable로 두 보드에 공급.

 

5.HW 제작 일정 : 6.12~6/14

 

Quest 3: 머신러닝 도우미
2022.06.26
완료

퀘스트3 내용 작성.

작성자: Tiel ( 2022.06.25 )

개발 툴 목록
 - compiler: IAR ewarm 8.40, CubeIDE 1.80
 - Stlink
 - 개발보드 2장(SensorTileBox, Stm32H7B3I-DK)
 - Battery
   
소프트웨어 설명


FW1. 인체 동작 감지 FW ( 제공받은 보드 사용)
   ->인체 동작 3 가지(멈춤, 걷기, 조깅)를 감지하는 FW.
   ->raw data에 대한 cnn처리를 적용하여 classification 처리함.
   ->수집된 raw data를 아래 학습 코드를 이용하여 사전 훈련을 하여 cnn모델을 학습한다.
   ->학습된 모델을 이용하여 mcu ai 코드에 적용함
   ->행동감지 결과는 0(No motion),1(걷기), 2(조깅) 세 가지이며 결과는 uart2를 통해 Display보드로 전송.

   (FW 흐름)
   read acc.x/y/z  ( from 6dof sensor)
   gather raw data -> save to buffer
   if buffer is full, run action_detection code
   send action result to display bard via uart.

 

  (모델학습코드)
1초에 30번조검으로 각 모션별로 가속도센서 3축에 대한 센서 데이타를 수집한 후 다음과 같은
학습 코드로 학습후 modle.h5저장하였다.

model = tf.keras.models.Sequential([
  tf.keras.layers.Conv1D(filters=16, kernel_size=3, activation='relu', input_shape=(30, 3)),
  tf.keras.layers.Conv1D(filters=8, kernel_size=3, activation='relu'),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dense(3, activation='softmax')
])
model.compile(optimizer='adam',
              loss='spars_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=30)
test_loss, test_acc = model.evaluate(x_test,  y_test, verbose=2)
 

FW2. Display 표현 및 운동량 측정을 위한 FW ( 보유 중인 보드 사용)
   -> touch gfx gui를 이용하여 각 행동별 운동시간 표시, 현재 운동 강도, 소비 열량을 계산하여 표시
   
   (FW흐름 - 위 그림에서 H7B3I_DK SW흐름도 참조)
   Wait information data
   Receive action_result from sensor board via uart4
   accumulate each action's info, calories and exercise-intensity, etc.
   update action information to display-process.

화면사진

 

동작구현 상태

-> FW1 : 100% 구현(완료)

->FW2 : 화면 구성(100%), Uart 통신코드(50%), 기타코드(30%)

   -> 아직 수신이 제대로 되지 않는 상태이다보니 좀 지연된 상태임.(HW 문제일듯한 한데 아직 원인을 찾는중이나 측정장비가 없어서 해결에 시간이 걸리고 있음)

   -> 계속 통신에 문제가 있을경우 다른 시뮬레이션으로 대체할 가능성도 있음.

 

첨부소스파일: default_...7z 파일: FW1코드,  Quest_june_har_tiel.7z: FW2코드  를 압축해서 1개로 첨부함

Quest 4: 머신러닝 도우미
2022.07.03
완료

 

  • 소개 -

생활이 윤택해지고 삶의 질이 높아짐에 따라 개개인의 건강에 대한 관심이 높이지고 있는 
현실을 반영한 이번 헬스케어 미션을 진행하기 위해 러닝머신 상태도우미를 만들어 보려고 시도해 보았습니다.
개발 장치는 가속도 센서를 이용한 운동 동작 인식 기능을 구현하고 운동의 진행 상태를 
사용자에게 주기적으로 알려줄 수 있는 LCD출력 기능을 가지고 있는 것으로 초기에 목표로 설정하였으나 최종적으로는 
LCD제어부를 연결하지 못하는 사정이 생겨 시뮬레이션으로 대체하였습니다. 센서 부착은 팔
이나 다리에 착용 후 사용하면 움직이고 있는 동작들에 대한 실시간 인식 및 미리 정해놓은 동작 대한 가중치를 합산하여 운동 진행 상태를 lcd화면에 표출하여 사용자가 운동하는 상태를 알려주어 사용자가 현재 운동 상태를 파악케 하며 규칙적인 운동 습관에 도움을 줄 수 있도록 도움을 주는 장치를 만드는 것을 최종 목표로 하였으나 이또한 목표를 변경하여 아래 결과물처럼 대체합니다..
구현한 동작 인식 기능의 목표 동작들로는 걷기, 달리기, 멈추기 3가지 기본 동작입니다.(더 추가하고 싶었으나 못했습니다) 그 외 추가적인 동작에 대한 인식 및 기능 추가들도 구현 가능할 것이라 생각이 됩니다.

초기 HW 구성도

이벤트에서 신청한 센서보드와 제가 가진 LCD가 있는 보드를 Uart로 연결. 

센서보드에는 여러가지 센서들중 가속도 센서가 있을 것이고 이 센서 값을 이용하여 운동 상태를 판단 후 LCD보드에서는 LCD로 센싱결과를 출력.

최종결과물 HW 구성도

 

1.준비한 부품 목록

- STM32H7B3 Discovery Board – 1EA -> 최종적으로 사용 못함

- SensorTileBox – 1EA

- ST-Link-III Debugger – 1EA

- Portable Battery: 1-EA

- 기타 Cable류 : USB케이블(2개), Wire

 

2.부품 사양/특징

- STM32H7B3 Discovery Board :

  MCU : STM32H7B3LIH6QU (2 Mbyte Flash/ 1.4 Mbyte RAM) BGA225 pkg

  LCD : 4.3" (480x272 pixels) TFT LCD

  Wi?Fi® module : 802.11 b/g/n

  512-Mbit Octo-SPI Flash/128-Mbit SDRAM / 2 LEDs// Etc Buttons

- SensorTileBox

  Mcu : STM32L4R9ZI (120MHz/ 2MB Flash)

  Temp sensor : STTS751

  6xDOF IMU: LSM6DSOX

  Acc Sensor: LIS3DHH, LIS2DW12

  Magnetometer: LIS2MDL

  Altimeter / pressure sensor : LPS22HH

  Audio Sensor: MP23ABS1

  Humidity sensor: HTS221

- ST-Link-III Debugger – 1EA

- Portable Battery: 1-EA

- 기타 Cable류 : USB케이블(2개), Wire 3가닥

 

3. 사용할 센서에 대한 설명

LSM6DSOX (3D acc & 3D gyro sensor)

 - acc sensor : +/-2/4/8/16g 로 조절 가능

 - gyro sensor: +/-125/250/500/2000 dsp 로 변경 가능

 - I/F : spi/i3c

 

4개발 툴 목록
 - compiler: IAR ewarm 8.40, CubeIDE 1.80
 - Stlink
   
6소프트웨어 설명

FW1. 인체 동작 감지 FW ( 제공받은 보드 사용)
   ->인체 동작 3 가지(멈춤, 걷기, 조깅)를 감지하는 FW.
   ->raw data에 대한 cnn처리를 적용하여 classification 처리함.
   ->수집된 raw data를 아래 학습 코드를 이용하여 사전 훈련을 하여 cnn모델을 학습한다.
   ->학습된 모델을 이용하여 mcu ai 코드에 적용함
   ->행동감지 결과는 0(No motion),1(걷기), 2(조깅) 세 가지이며 결과는 uart2를 통해 Display보드로 전송.

   (FW1의 동작 흐름)
   read acc.x/y/z  ( from 6dof sensor)
   gather raw data -> save to buffer
   if buffer is full, run action_detection code
   send action result to display bard via uart.

 

  (FW1에 사용된 모델에 대한 학습코드)
1초에 30번조검으로 각 모션별로 가속도센서 3축에 대한 센서 데이타를 수집한 후 다음과 같은 학습 코드로 학습후 modle.h5저장하였고 이를 FW1에 이식함.

model = tf.keras.models.Sequential([
  tf.keras.layers.Conv1D(filters=16, kernel_size=3, activation='relu', input_shape=(30, 3)),
  tf.keras.layers.Conv1D(filters=8, kernel_size=3, activation='relu'),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dense(3, activation='softmax')
])
model.compile(optimizer='adam',
              loss='spars_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=30)
test_loss, test_acc = model.evaluate(x_test,  y_test, verbose=2)
 

FW2. Display 표현 및 운동량 측정을 위한 FW ( H7B3I-DK 보드 사용)
   -> touch gfx gui를 이용하여 각 행동별 운동시간 표시, 현재 운동 강도, 소비 열량을 계산하여 표시 처리

   -> UART 동작에 문제가 생겼지만 해결을 못해 최종적으로 GUI보드로써 사용을 못함
   
   (FW2의 동작 흐름 - 위 그림에서 H7B3I_DK SW흐름도 참조)
   Wait information data
   Receive action_result from sensor board via uart4
   accumulate each action's info, calories and exercise-intensity, etc.
   update action information to display-process.

GUI화면사진

 

동작구현 상태

-> FW1 : 100% 구현(완료)

->FW2 : 화면 구성(100%), 기타코드(50%)

   -> Uart 라인에 문제가 있는 것은 확인하였으나 수정이 시간내에 수정이 불가하다고 판단하여 시뮬레이션으로 대체하기로 결정하고 아래 영상과 같이 보여드립니다. 최초 목표치에는 도달하지 못했으나 제 나름대로 새로운 공부도 되었던 좋은 계기였습니다. 앞으로도 좋은 기회 많이 제공 부탁드립니다.

 

결과 영상:

프로젝트 자료실

프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.

등록된 자료가 없습니다.

프로젝트 소개

아직 등록된 프로젝트 소개가 없습니다.

코드 & 회로도

등록된 코드/회로 자료가 없습니다.

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨보세요!