수행기록퀘스트4
- 소개 -
생활이 윤택해지고 삶의 질이 높아짐에 따라 개개인의 건강에 대한 관심이 높이지고 있는
현실을 반영한 이번 헬스케어 미션을 진행하기 위해 러닝머신 상태도우미를 만들어 보려고 시도해 보았습니다.
개발 장치는 가속도 센서를 이용한 운동 동작 인식 기능을 구현하고 운동의 진행 상태를
사용자에게 주기적으로 알려줄 수 있는 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 라인에 문제가 있는 것은 확인하였으나 수정이 시간내에 수정이 불가하다고 판단하여 시뮬레이션으로 대체하기로 결정하고 아래 영상과 같이 보여드립니다. 최초 목표치에는 도달하지 못했으나 제 나름대로 새로운 공부도 되었던 좋은 계기였습니다. 앞으로도 좋은 기회 많이 제공 부탁드립니다.
결과 영상:
로그인 후
참가 상태를 확인할 수 있습니다.