본문 바로가기
아두이노 프로젝트

나쁜 자세 타파! SitSense DIY 프로젝트

by 다이올 2024. 11. 29.
반응형

안녕하세요, 여러분! 오늘은 여러분께 좋은 자세를 유지하도록 도와줄 혁신적인 디바이스, SitSense를 소개하려고 합니다. 책상에 구부정하게 앉아 기술에 정통한 거북이처럼 목을 앞으로 숙이고 있는 자신을 발견한 적 있나요? 그게 바로 나쁜 자세의 전형적인 모습이죠. 하지만 이제 투덜거리기만 하지 말고, SitSense로 문제를 해결해보세요!

 

SitSense 작동 방식

SitSense는 ESP32-S3, IMU 센서(MPU6050), 그리고 몇 가지 영리한 프로그래밍을 사용하여 여러분의 앉아 있는 자세를 모니터링합니다. 자세가 나빠지면 부저가 울리면서 정중하게 잔소리를 해주고, 10초 이상 수정하지 않으면 PC가 잠겨버립니다. 잠금을 해제하려면? 똑바로 앉아서 생산성의 왕좌를 되찾으세요!

두 가지 버전의 SitSense

  1. 간단한 버전: 자세를 미리 정의된 기준선과 비교하는 빠르고 쉬운 프로그램입니다. 효과적이지만 기본적인 기능을 제공합니다.
  2. 고급 버전: 맞춤형 EdgeImpulse 훈련 모델을 사용하여 훨씬 더 정확하게 자세를 조정하고 감지할 수 있는 진정한 자세 경찰입니다.

세련된 하드웨어 디자인

SitSense는 카메라 모듈이 있는 ESP32-S3를 사용하여 다양한 가능성을 열어줍니다. 제스처 인식, 얼굴 추적, AI 기반 피트니스 코칭 등 여러 응용 프로그램을 상상해보세요! 또한, 마그네틱 클립 디자인의 세련된 3D 프린팅 케이스에 담겨 있어 신체, 벽, 또는 거의 모든 곳에 부착할 수 있습니다.

제작 과정

  1. 부품 준비: 필요한 부품들을 준비합니다. ESP32-S3와 IMU 센서(MPU6050)를 포함합니다.
  2. 프로그래밍: 간단한 버전과 고급 버전의 프로그램을 작성합니다. 고급 버전은 EdgeImpulse를 사용하여 훈련된 모델을 적용합니다.
  3. 하드웨어 조립: 마그네틱 클립 디자인의 3D 프린팅 케이스에 부품들을 조립합니다.

SitSense의 장점

  • 인체공학적 설계: 향상된 인체공학적 디자인으로 편리하게 착용할 수 있습니다.
  • 자세 모니터링: 실시간으로 자세를 모니터링하여 올바른 자세를 유지하도록 도와줍니다.
  • 생산성 향상: 나쁜 자세로 인한 불편함을 줄여주어 생산성을 높여줍니다.

공급

구성 요소:

FireBeetle 2 보드 ESP32-S3 1개(카메라 포함) 또는 FireBeetle 2 보드 ESP32 S3

1x MPU6050

1x 미니 로커 스위치

1x 부저

1x 18650 배터리

8x 5mm 자석

필요에 맞는 FireBeetle 2 보드 ESP32-S3 선택

SitSense를 구축할 때 올바른 마이크로 컨트롤러를 선택하는 것은 이 프로젝트뿐만 아니라 미래의 노력을 위해 매우 중요합니다. 여기에서는 제가 고려한 두 가지 옵션인 FireBeetle 2 Board ESP32-S3(카메라 포함)와 FireBeetle 2 Board ESP32-S3 및 카메라 버전을 선택한 이유를 안내해 드리겠습니다.

FireBeetle Board S3 AI 기능과 내장 배터리 관리 기능이 뛰어나 휴대용, 효율성 및 AI 기반 프로젝트에 이상적입니다.

  1. 옵션 1 : FireBeetle 2 보드 ESP32-S3 (표준 버전), 왜 이것을 선택합니까?
  2. 시각적 입력이 필요하지 않은 IoT 프로젝트에만 집중하는 경우 이는 훌륭하고 비용 효율적인 옵션입니다. 강력하고 컴팩트하며 자세 감지, 자동화 시스템 및 데이터 모니터링과 같은 광범위한 응용 분야에 사용할 수 있습니다.
  3. 옵션 2 : FireBeetle 2 보드 ESP32-S3 (카메라 포함), 왜 이것을 선택합니까?
  4. 이 보드는 OV2640 카메라를 사용하여 이미지 또는 비디오 스트림을 캡처하는 추가 기능과 함께 제공됩니다. 따라서 얼굴 인식, 물체 감지 및 이미지 기반 IoT 애플리케이션과 같은 향후 프로젝트에 적합합니다. 이 프로젝트에서 카메라를 완전히 활용하지는 못했지만, 카메라를 사용하면 혁신을 위한 무한한 가능성이 열립니다.

다재다능함을 위해 카메라 버전을 선택하든 단순함을 위해 표준 버전을 선택하든 카메라 버전을 선택하면 두 보드 모두 SitSense 프로젝트에서 원활하게 작동하며 두 보드 모두에 맞는 3D 프린팅 케이스를 설계했습니다. 귀하의 필요와 예산에 맞는 것을 선택하십시오!

도구:

  1. 내 3D 프린터
  2. 내 스크루 드라이버 키트

 

후원: NextPCB

이 프로젝트는 NextPCB의 지원 덕분에 가능했습니다., 15년 이상 PCB 제조 업계에서 신뢰할 수 있는 리더. 그들의 엔지니어들은 최고 품질 표준을 충족하는 내구성 있는 고성능 PCB를 생산하기 위해 부지런히 일합니다. 저렴한 가격에 최고 수준의 PCB를 찾고 있다면, NextPCB를 놓치지 마세요!

NextPCB의 HQDFM 소프트웨어 서비스는 설계를 개선하여 원활한 생산 프로세스를 보장하는 데 도움이 됩니다. 개인적으로 저는 DFM 보고서를 기다리는 지연을 피하는 것을 선호하며, HQDFM은 계속 진행하기 전에 설계를 자체 점검하는 가장 빠르고 좋은 방법입니다.

즉각적인 설계 검증을 위해 DFM 무료 온라인 PCB Gerber 뷰어를 살펴보십시오.

다음PCB 무료 온라인 Gerber 뷰어

1단계: CAD 설계 및 3D 프린팅

이 프로젝트를 위해 FireBeetle 2 Board ESP32-S3를 수용하고 자세 감지 시스템에 쉽게 장착, 클립 및 사용할 수 있는 맞춤형 케이스를 설계했습니다. 설계 프로세스에 Fusion 360을 사용하여 ESP32-S3 보드 및 액세서리에 완벽하게 맞는 세련되고 기능적인 케이스를 확보했습니다.

3D 모델 & 파일:

브라우저에서 SitSense 3D 모델을 직접 볼 수 있으며 Fusion 360에서 필요에 맞게 설계를 수정할 수 있습니다. 또는 원하는 경우 직접 STL 파일을 다운로드하여 케이스를 직접 3D 프린팅할 수 있습니다.

인쇄해야 하는 내용은 다음과 같습니다.

  1. 1x 하우징
  2. 1x 커버 또는 카메라 구멍이 있는 커버
  3. 2x 버튼
  4. 1x 클립 플레이트

또한 필요에 따라 수정할 수 있는 마그네틱 마운트 플레이트를 만들었습니다. 이 마운트를 사용하면 벽, 책상 또는 자세를 추적하거나 추가 센서를 장착하려는 기타 위치와 같은 다양한 표면에 케이스를 부착할 수 있습니다.

3D 프린팅 공정:

Bambu Lab P1S에 회색과 주황색 PLA 필라멘트를 사용하여 케이스를 인쇄했습니다. 표지의 경우 필라멘트 변경 기술을 사용하여 투톤 색상 효과를 얻었습니다. 이는 케이스의 기능적 무결성을 유지하면서 디자인에 독특한 터치를 추가합니다.

ESP32 시즌 3

2단계: 회로 연결

 

회로 연결 1: MPU6050 및 부저가 있는 ESP32-S3

  1. MPU6050(가속도계)에서 ESP32-S3으로:
  2. VCC(MPU6050) → Vcc(ESP32-S3): MPU6050 센서에 전원을 공급합니다.
  3. GND(MPU6050) → GND(ESP32-S3): 두 구성 요소에 대한 공통 기반을 설정합니다.
  4. SCL(MPU6050) → SCL(ESP32-S3): 통신을 위해 I2C 클럭 신호를 연결합니다.
  5. SDA(MPU6050) → SDA(ESP32-S3): 통신을 위해 I2C 데이터 신호를 연결합니다.
  6. 부저에서 ESP32-S3로:
  7. 부저의 양극(+) → A2(핀 6)(ESP32-S3): PWM 또는 디지털 신호를 통해 부저를 제어하는 데 사용됩니다.
  8. 부저 → GND(ESP32-S3)의 음수(-): 부저의 접지 경로를 제공합니다.

회로 연결 2: 배터리가 있는 FireBeetle 보드

  1. FireBeetle 보드에 대한 배터리 모듈:
  2. 배터리 양극(+) → +Ve(FireBeetle): 배터리에서 FireBeetle 보드에 전원을 공급합니다.
  3. 배터리 음극(-) → -Ve(FireBeetle)(미니 스위치를 통해): 배터리의 접지(-Ve)를 FireBeetle 보드에 연결합니다.

테스트와 집합:

납땜하기 전에 먼저 브레드 보드에서 이 회로를 테스트하여 모든 연결이 올바르고 시스템이 예상대로 작동하는지 확인했습니다. 브레드보드를 사용하면 배선 또는 로직 문제를 빠르게 식별하고 해결할 수 있었습니다.

회로가 성공적으로 테스트되면 영구 조립을 위해 전선과 납땜 인두를 사용하여 구성 요소를 연결했습니다.

이 FireBeetle 보드 및 배터리 설정은 휴대용 전원 솔루션을 제공하여 직접 USB 또는 외부 전원 공급 장치 없이 프로젝트를 실행할 수 있습니다.

참고 : 이 단계에서 스위치를 납땜하지 마십시오.

첨부 파일

3단계: 전원 조립

 
  1. 회로용으로 설계된 3D 프린팅 하우징을 미니 스위치로 하우징의 지정된 슬롯에 조심스럽게 끼웁니다.
  2. 미니 스위치를 통해 배터리의 -Ve 와이어를 ESP32-S3 보드의 -Ve 핀에 납땜합니다.
  3. 열수축 튜브 또는 전기 테이프를 사용하여 모든 납땜 연결부를 절연하십시오. 이는 우발적인 단락을 방지하고 어셈블리의 내구성을 향상시킵니다.
  4. 하우징에 제공된 구멍에 부저를 넣습니다. 제대로 장착되었는지 확인하십시오.
  5. 배터리를 하우징에 삽입합니다. 사용 중 움직임이나 분리를 방지하기 위해 제자리에 단단히 고정되어 있는지 확인하십시오. 루즈핏인 경우 양면 테이프를 사용할 수 있습니다.

4단계: ESP32 S3 조립

  1. 두 개의 3D 프린팅 버튼을 하우징의 해당 슬롯에 삽입합니다.
  2. 마스킹 테이프를 사용하여 버튼을 임시로 제자리에 고정합니다. 이렇게 하면 조립 과정에서 정렬된 상태로 유지되고 다른 구성 요소를 배치하는 동안 떨어지지 않습니다.
  3. 엉킴이나 간섭을 피하기 위해 전선을 조심스럽게 안내 및 정리하고 ESP32-S3 보드를 하우징에 배치하고 USB Type-C 포트를 외부 액세스를 위해 하우징의 지정된 슬롯에 맞춥니다.

5단계: MPU 어셈블리

  1. 3D 버튼을 임시로 제자리에 고정하는 데 사용되는 마스킹 테이프를 제거합니다.
  2. 이제 버튼이 자유롭게 움직이고 ESP32-S3 보드의 해당 트리거와 올바르게 정렬되었는지 확인합니다.
  3. MPU6050 센서를 하우징에 있는 두 개의 사전 설계된 구멍에 맞춥니다.
  4. 두 개의 M2 나사를 사용하여 MPU 센서를 하우징에 단단히 부착합니다. 센서가 손상되지 않도록 나사를 부드럽게 조입니다.

6단계: 커버 어셈블리

  1. 3D 프린팅 커버와 카메라 모듈을 가져와서 카메라 모듈을 커버의 지정된 구멍에 놓습니다.
  2. 카메라 모듈의 가장자리 주위에 소량의 초강력 접착제를 바르고 제자리에 고정합니다. 접착제가 카메라 렌즈에 닿거나 시야를 가리지 않도록 주의하십시오.

7단계: 최종 조립

  1. 하우징 어셈블리와 커버 어셈블리를 잡고 카메라 모듈 케이블을 ESP32 S3 보드의 해당 커넥터에 조심스럽게 맞춥니다. 연결이 안전한지 확인하되 쉽게 맞지 않는 경우 강제로 연결하지 마십시오.
  2. 딸깍 소리가 나면서 제자리에 고정될 때까지 하우징과 덮개 어셈블리를 함께 누릅니다. 이렇게 하면 단단히 고정되고 사용하는 동안 어셈블리가 손상되지 않은 상태로 유지됩니다.
  3. 스냅 핏이 꽉 끼지 않거나 느슨한 느낌이 들면 하우징과 커버가 만나는 가장자리를 따라 소량의 슈퍼 글루를 바릅니다.

8 단계 : 자석 붙이기

이 단계에서는 하우징과 마운팅 플레이트 모두에 자석을 추가하여 안전하고 유연한 마운팅 시스템을 위해 서로 쉽게 부착할 수 있도록 합니다.

  1. 하우징(케이스 본체)과 마운팅 플레이트(클립) 모두에 8개의 자석이 필요합니다.
  2. 자석의 극성을 올바르게 유지하는 것이 중요합니다. 하우징과 클립 플레이트의 자석이 극성이 반대인지 확인하여 서로 끌어당기도록 합니다.
  3. 자석을 부착할 계획인 하우징과 장착 플레이트에 소량의 빠른 접착제를 바릅니다. 핀셋을 사용하여 자석을 각 부분의 접착제에 조심스럽게 넣습니다. 같은 높이에 있는지 확인하십시오.
  4. 접착제가 마르면 하우징과 장착 플레이트를 서로 가깝게 가져옵니다. 그들은 서로를 단단히 끌어당기고 붙어있어야 합니다. 자석은 부품을 함께 고정해야 하지만 필요할 때 쉽게 분리할 수 있어야 합니다. 자석이 정렬되지 않았거나 부품이 달라붙지 않으면 자석을 제거하고 올바른 극성과 정렬로 다시 시도하십시오.

자석이 단단히 고정되면 이제 케이스를 SitSense 자세 시스템과 함께 사용할 준비가 되었습니다.

다른 프로젝트 사용을 위해 이 추가 블랙 마운트를 3D 프린팅했습니다.

9단계: 코드 업로드

9 이미지 더 보기

1. 코드 다운로드

  1. GitHub 리포지토리: 전체 리포지토리 다운로드
  2. 파일의 압축을 풀고 프로젝트 폴더에서 Simple_SitSense.ino 파일을 찾습니다.
  3. 컴퓨터에서 아두이노 IDE를 엽니다.
  4. 파일 > 열기로 이동하여 추출된 폴더에서 Simple_SitSense.ino 파일을 선택합니다.

2. ESP32 보드 관리자 설치

Arduino IDE에서 ESP32 환경을 아직 구성하지 않은 경우 다음 가이드를 따르세요.

  1. 방문: Arduino IDE에 ESP32 보드 설치.
  2. 기본 설정 창에 ESP32 보드 URL을 추가합니다.
  1. Tools > Board > Boards Manager를 통해 ESP32 보드 패키지를 설치합니다.

3. 필요한 라이브러리 설치

이 프로젝트에 대해 다음 라이브러리를 설치해야 합니다.

  1. ESP32_BLE_Keyboard 라이브러리
  2. Arduino IDE에서 Sketch > Include Library > Add .ZIP Library로 이동하여 다운로드한 ESP32_BLE_Keyboard.zip 파일을 선택합니다.
  3. Adafruit_MPU6050 라이브러리
  4. 라이브러리 관리자(라이브러리 관리자: 도구) > 라이브러리를 관리합니다.
  5. Adafruit MPU6050 검색하고 설치를 클릭합니다.

Tools(도구)로 이동하여 다음을 설정합니다.

  1. 보드: DFRobot FireBeetle 2 ESP32-S3(또는 정확한 보드에 따라 유사)을 선택합니다.
  2. 포트: ESP32 보드와 연결된 COM 포트를 선택합니다.

Arduino IDE에서 업로드 버튼(오른쪽 화살표)을 클릭합니다.

 

코드가 업로드되면 Simple SitSense 장치가 준비되었습니다! 시작하는 방법은 다음과 같습니다.

블루투스를 통해 연결

  1. PC에서 Bluetooth 설정을 엽니다.
  2. 사용 가능한 장치를 검색하면 SitSense가 나열됩니다(코드에 명명됨).
  3. 다른 Bluetooth 장치와 마찬가지로 페어링하십시오.

자세 교정 및 감지 시작

  1. 페어링 후 SitSense는 시작 시 초기 자세에 맞게 자동으로 보정됩니다.
  2. 보정이 완료되면 자세를 모니터링하기 시작하고 보정된 위치에서 벗어나는 것을 감지하면 경고를 제공합니다.

장치 재보정

보정이 꺼져 있거나 적절하지 않다고 생각되는 경우:

  1. SitSense 장치에서 재설정 버튼을 누릅니다.
  2. 이렇게 하면 현재 자세로 다시 보정됩니다.
  3. 재보정이 완료되면 올바르게 작동해야 합니다.

10단계: 간단한 SitSense 코드 설명

코드의 주요 기능:

시작 시 보정:

  1. 시작 시 프로그램은 현재 자세로 보정하고 "올바른 위치"로 가정하고 Bluetooth를 사용하여 PC에 연결합니다.

편차 감지:

  1. 자세가 보정된 기준선을 벗어나면 사용자에게 알리기 위해 부저가 울립니다.

지연 후 PC 잠금:

  1. 잘못된 자세가 10초(기본값) 이내에 수정되지 않으면 시스템이 PC를 잠급니다.

잠금 시간 변경:

  1. 코드의 28번째 줄에서 다음 줄을 편집하여 잠금 지연을 조정할 수 있습니다.

const 부호 없는 긴 lockDelay = 10000; 10초(밀리초)

화면 잠금 해제:

  1. 자세를 교정한 후 시스템은 BLE(Bluetooth Low Energy) 키보드 기능을 통해 사전 구성된 암호를 전송하여 PC의 잠금을 해제합니다.

암호를 구성하는 방법:

PC 잠금을 해제하는 데 사용되는 암호는 기능 AT 라인 번호 88에 정의되어 있습니다.

무효 unlockScreen()

암호 "1234"를 사용하여 잠금을 해제하는 예제 코드 조각:

무효 unlockScreen() {
if (bleKeyboard.isConnected() & isLocked) {
Serial.println("PIN으로 화면 잠금 해제...");
bleKeyboard.write(KEY_HOME); 로그인 화면을 활성화합니다.
지연(100);
 
비밀번호 자릿수를 숫자로 입력합니다.
bleKeyboard.press(KEY_NUM_1);
지연(100);
bleKeyboard.releaseAll()을 호출합니다.
 
bleKeyboard.press(KEY_NUM_2);
지연(100);
bleKeyboard.releaseAll()을 호출합니다.
 
bleKeyboard.press(KEY_NUM_3);
지연(100);
bleKeyboard.releaseAll()을 호출합니다.
 
bleKeyboard.press(KEY_NUM_4);
지연(100);
bleKeyboard.releaseAll()을 호출합니다. 잠금 해제 후 모든 키가 해제되었는지 확인하십시오.
 
isLocked = 거짓; 잠금 해제로 표시
}
}

암호가 다른 경우 KEY_NUM_1, KEY_NUM_2 등을 암호에 적합한 키로 바꿉니다.

 

HID(BLE 키보드) 이해:

HID(Human Interface Device)는 키보드, 마우스 및 게임 컨트롤러와 같은 장치가 호스트 장치(예: PC 또는 스마트폰)와 통신할 수 있도록 하는 프로토콜입니다.

이 프로젝트에서는 Bluetooth를 통해 키보드를 에뮬레이트하는 BLE(Bluetooth Low Energy) 키보드를 사용합니다. 이를 통해 ESP32-S3는 키 누름을 PC로 직접 보낼 수 있으므로 다음을 수행할 수 있습니다.

  1. 화면 잠금: Win + L 키 조합을 시뮬레이션합니다.
  2. 화면 잠금 해제: 물리적 키보드처럼 암호를 입력합니다.

T-vK의 BLE 키보드 라이브러리를 사용하고 있으며 일반 ESP32 보드를 사용하는 경우 동일한 라이브러리를 사용하고 있으며 제공된 zip 파일은 ESP32 S3에서 작동하도록 수정되었으며 ESP32 C6으로도 테스트했습니다.

 

Simple SitSense 코드는 기본 사항을 올바르게 수행하는 데 큰 역할을 하며, 초기 위치가 "Good Posture"라고 가정하고 편차를 감지하면 경고합니다. 그러나 모든 일탈을 "나쁜 자세"로 취급한다는 큰 한계가 있습니다. 기능적이기는 하지만 이 접근 방식은 여전히 약간 어리석습니다.

이제 이 장치를 다음 단계로 끌어올리고 Edge Impulse를 통합하여 스마트하게 만들어 보겠습니다! 이 AI 기반 모델을 통해 SitSense는 훨씬 더 정확하게 여러 자세, 좋은 자세와 나쁜 자세를 구별할 수 있습니다.

11단계: Edge Impulse 설치 및 설정

SitSense를 더 스마트하게 만들기 위해 기계 학습 모델을 훈련하고 배포하도록 설계된 AI 플랫폼인 Edge Impulse를 사용할 것입니다.

1. Edge Impulse CLI 설치

Edge Impulse CLI(명령줄 인터페이스)를 사용하면 SitSense 하드웨어를 Edge Impulse 플랫폼에 연결하고 상태 데이터를 수집할 수 있습니다.

공식 Edge Impulse CLI 설치 가이드에 따라 필요한 도구를 설정하십시오.

2. Edge Impulse 계정 만들기

  1. Edge Impulse를 방문하여 계정을 만드십시오.
  2. 프로젝트 대시보드에 액세스하려면 로그인하세요.
  3. 이미지와 같이 새 프로젝트를 만듭니다.

12단계: 데이터 수집

이제 Edge Impulse CLI가 설정되고 프로젝트가 준비되었으므로 스마트 SitSense 장치를 만드는 가장 중요한 부분인 데이터 수집을 시작하겠습니다. 이 단계는 AI 모델이 좋은 자세와 나쁜 자세를 정확하게 구별하도록 훈련하는 데 도움이 됩니다.

프로젝트로 이동하여 데이터 수집 패널을 엽니다.

이 시점에서 데이터 샘플의 빈 목록이 표시되고 연결된 장치가 없어야 합니다.

1. Data_Collect 코드를 SitSense에 업로드

/*
프로젝트: SitSense
저자: Mukesh Sankhla
소셜 미디어: 인스타그램 @makerbrains_official
*/
 
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <와이어.h>
 
MPU6050 센서 초기화
Adafruit_MPU6050 MPU;
 
샘플링 간격(밀리초)
부호 없는 긴 lastSampleTime = 0;
const 부호 없는 긴 sampleInterval = 50; 20 Hz에서
 
무효 설정() {
Edge Impulse CLI로 데이터 출력을 위한 시리얼 초기화
시리얼.begin(115200);
동안(! 직렬) {
지연(10); 직렬이 초기화될 때까지 기다립니다.
}
 
I2C 통신 초기화
if (!mpu.begin()) {
Serial.println("MPU6050 칩을 찾지 못했습니다. 연결을 확인하십시오.");
동안 (1) {
지연(10);
}
}
 
MPU6050 센서 구성
mpu.set가속도계범위(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
 
Serial.println ( "MPU6050 초기화되었습니다.");
Serial.println("데이터를 전달할 준비가 되었습니다. Edge Impulse CLI를 연결합니다.");
}
 
무효 루프() {
샘플링할 때인지 확인
부호 없는 긴 currentTime = millis();
if (현재 시간 - lastSampleTime >= sampleInterval) {
lastSampleTime = 현재 시간;
 
새 센서 이벤트 가져오기
sensors_event_t a, g, 온도;
mpu.getEvent(&a, &g, &temp);
 
데이터를 포맷하고 시리얼로 보내기
Serial.print(a.acceleration.x);
Serial.print(",");
Serial.print(a.acceleration.y);
Serial.print(",");
Serial.println(a.acceleration.z);
}
}
  1. Arduino IDE에서 제공된 Data_Collect.ino 파일을 엽니다.
  2. 이전 업로드와 동일한 단계에 따라 ESP32-S3 장치에 코드를 업로드합니다.

이 코드를 사용하면 SitSense가 수집을 위해 가속도계 데이터(X, Y, Z 값)를 Edge Impulse로 보낼 수 있습니다.

2. Edge Impulse Data Forwarder 사용

  1. 명령줄/터미널을 엽니다.
  2. 다음 명령을 입력합니다.
엣지 임펄스 데이터 포워더
  1. 메시지가 표시되면 Edge Impulse 계정 자격 증명을 사용하여 로그인합니다.

3. SitSense를 Edge Impulse에 연결

  1. SitSense가 USB를 통해 PC에 연결되어 있는지 확인하고 자기 클립을 사용하여 SitSense를 몸에 장착합니다.
  2. CLI에 표시된 목록에서 올바른 포트를 선택합니다.
  3. CLI는 센서 데이터 스트림의 이름을 지정하라는 메시지를 표시합니다.
  4. 가속도계 데이터의 경우 x, y, z를 입력합니다.
  5. 또한 장치 이름을 묻습니다.
  6. SitSense(또는 원하는 이름)를 입력합니다.

4. Edge Impulse에 장치 등록

  1. CLI를 계속 실행합니다.
  2. Edge Impulse 프로젝트의 데이터 수집 패널로 돌아갑니다.
  3. 이제 장치(SitSense)가 나열되고 데이터를 수집할 준비가 된 것을 볼 수 있습니다.

5. 데이터 수집 시작

  1. 데이터 수집 패널에서 샘플링 길이를 1000 ms (1 초)로 설정합니다.
  2. 샘플링 시작을 클릭합니다.
  3. SitSense는 이제 가속도계 데이터를 Edge Impulse로 전달하기 시작합니다.

7. 데이터에 레이블 지정

  1. Good Posture(좋은 자세)와 Bad Posture(나쁜 자세) 모두에 대한 데이터 기록:
  2. 바른 자세: 등을 곧게 펴고 어깨를 일직선으로 펴고 앉습니다.
  3. 나쁜 자세: 구부정하거나 구부정한 자세.
  4. 그에 따라 Data Acquisition 패널에서 각 샘플에 Good 또는 Bad로 레이블을 지정합니다.

8. 충분한 샘플 수집

  1. 좋은 자세와 나쁜 자세 모두에 대한 100+ 데이터 샘플을 수집하는 것을 목표로 합니다.
  2. 모델의 정확도를 향상시키기 위해 자세의 가변성을 보장합니다.
  3. 예: 머리를 약간 기울이거나, 약간 앞으로 기울이거나, "나쁜" 자세 샘플을 위해 더 깊게 구부립니다.
  4. 데이터를 다음과 같이 분할합니다.
  5. 훈련 세트: 데이터의 80%.
  6. 테스트 세트: 데이터의 20%입니다.

9. 더 나은 정확도를 위해 더 많은 데이터 추가

더 많은 데이터를 수집할수록 모델의 성능이 향상됩니다. 다양한 자세 데이터를 수집하는 데 더 많은 시간을 할애하여 SitSense를 강력하고 안정적으로 만드십시오.

데이터 수집이 완료되면 AI 모델 학습으로 이동할 준비가 된 것입니다.

 

참고 : 의심 사항이나 문제가 있는 경우 Edge Impulse 공식 문서를 사용하십시오.

 

13단계: 임펄스 및 원시 데이터 기능 만들기

이 단계에서는 Impulse라고 하는 기계 학습 파이프라인을 정의하고 수집된 데이터에서 기능을 생성합니다.

1. 임펄스 만들기

  1. Edge Impulse에서 "Create Impulse" 패널을 엽니다.
  2. 처리 블록을 "원시 데이터"로 추가합니다.
  3. 학습 블록을 "분류"로 추가합니다.
  4. 충동을 저장하십시오.

Impulse는 기본적으로 원시 상태에서 훈련된 기계 학습 모델로의 데이터 흐름입니다. "Raw Data"를 선택하면 모델이 추가 전처리 없이 가속도계 데이터를 직접 사용할 수 있습니다. "분류" 블록은 Good 자세와 Bad 자세의 두 가지 클래스를 구별하는 데 사용됩니다.

2. 피처 생성

  1. Edge Impulse 프로젝트의 원시 데이터(Raw Data) 패널로 이동합니다.
  2. Generate Features 버튼을 클릭합니다.
  3. 시스템은 수집된 모든 데이터(양호 및 불량 자세)를 처리하고 기능 맵을 생성합니다. 이 단계에서는 입력 데이터를 기반으로 두 클래스 간의 차이를 시각화합니다.

데이터 시각화

  1. 기능 맵은 두 클래스(Good and Bad posture)가 얼마나 잘 구분되어 있는지 보여줍니다. 이 경우 Good posture points(양호한 자세 포인트)는 함께 그룹화되고(주황색) Bad posture points(나쁜 자세 포인트)는 별도의 클러스터(파란색)를 형성합니다.
  2. 명확한 구분은 모델이 분류에서 잘 수행된다는 것을 나타냅니다.

기능 생성을 확인하고 데이터를 탐색했으면 모델 학습으로 이동할 준비가 되었습니다.

14단계: 모델 분류기 및 학습

이제 임펄스를 설정하고 기능을 생성했으므로 좋은 자세와 나쁜 자세를 인식하도록 분류기를 훈련시킬 차례입니다.

1. 분류자 패널로 이동합니다.

  1. 여기에서는 수집한 데이터를 사용하여 모델이 좋은 자세와 나쁜 자세를 구별하는 방법을 학습하는 방법을 정의합니다.

2. 훈련 매개변수 설정

  1. 기능 처리: 임펄스 설정의 데이터 처리가 여기에 반영되었는지 확인합니다.
  2. 훈련 매개 변수: 기본 설정은 일반적으로 잘 작동합니다. 필요한 경우 나중에 미세 조정할 수 있습니다.
  3. 신기원 : 30
  4. 학습률: 0.005
  5. 유효성 검사 분할: 20%(모델이 보이지 않는 데이터에 대해 자체 테스트되도록 보장).

3. 모델 학습

  1. Save & Train 버튼을 클릭합니다. 이 프로세스는 데이터 양에 따라 몇 분 정도 걸릴 수 있습니다.
  2. 교육이 완료되면 성능 메트릭이 표시됩니다.
  3. 정확도: 자세 감지를 위해 95% 이상을 목표로 하는 것이 좋습니다. 우리의 경우 100% 정확도에 도달했습니다.
  4. 손실: 낮을수록 좋으며 여기서는 0.00으로 훌륭합니다.
  5. 혼동 행렬(Confusion Matrix): 모델이 학습 및 검증 데이터를 얼마나 잘 분류했는지 보여줍니다.
  6. 100% Good posture 라벨이 올바르게 표시되어 있습니다.
  7. 나쁜 자세의 100%가 올바르게 표시되었습니다.

4. 성능 지표

  1. 검증 메트릭은 가중 정밀도, 재현율 및 F1 점수 1.00을 표시하여 테스트 중에 오분류가 없음을 확인합니다.
  2. 훈련 정확도는 100%로 좋은 자세와 나쁜 자세를 완벽하게 구분합니다.

이제 모델이 학습되고 배포할 준비가 되었습니다.

15단계: 배포

모델을 훈련한 후에는 실시간 자세 감지를 위해 SitSense 장치에 배포할 차례입니다. 배포 프로세스에는 훈련된 Edge Impulse 모델에서 Arduino 호환 라이브러리를 만드는 작업이 포함됩니다.

1. 배포 파일 생성

  1. Edge Impulse 프로젝트의 [Deployment] 탭으로 이동합니다.
  2. 배포 옵션에서 Arduino 라이브러리를 선택합니다.
  3. 양자화(int8) 옵션이 선택되어 있는지 확인합니다(이렇게 하면 모델이 ESP32에 최적화됨).
  4. Build(빌드)를 클릭하여 라이브러리를 생성합니다.
  5. 빌드가 완료되면 Arduino 라이브러리에 대해 생성된 .zip 파일을 다운로드합니다.
  6. Arduino IDE에서 Sketch > Include Library > Add .ZIP Library로 이동하여 다운로드한 zip 파일을 선택합니다.

2. ei_classifier_config.h 파일 수정

  1. 추출된 라이브러리 폴더 내의 ei_classifier_config.h 파일로 이동합니다.
  2. 길:
  3. 문서\Arduino\libraries\SitSense_inferencing\src\edge-impulse-sdk\classifier\ei_classifier_config.h
  4. 텍스트 편집기(예: 메모장 또는 VS Code)에서 이 파일을 엽니다.
  5. 다음 줄을 찾습니다.
#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN 1
  1. 1에서 0으로 변경합니다.
#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN 0

왜 이렇게 바뀐 걸까요?

  1. 이 설정은 TensorFlow Lite에 대한 ESP-NN(신경망 가속)을 비활성화하며, 이는 때때로 ESP32의 특정 모델에 문제를 일으킬 수 있습니다. 비활성화하면 모델이 제대로 실행되는 데 도움이 됩니다.
  2. 이 변경을 수행한 후 파일을 저장합니다.

16단계: 코드 업로드

이제 모든 것이 준비되었으므로 코드를 업로드하고 SitSense 장치가 Edge Impulse 모델과 함께 작동하도록 하는 마지막 단계를 살펴보겠습니다.

1. 아두이노 코드를 설정합니다.

  1. Arduino IDE에서 SitSense.ino 파일을 엽니다.
  2. 이 파일에는 ESP32를 연결하고, MPU6050에서 가속도계 데이터를 수집하고, Edge Impulse 모델을 사용하여 추론을 실행하는 코드가 포함되어 있습니다.

다음은 코드의 중요한 섹션에 대한 간략한 개요입니다.

  1. 라이브러리:
  2. 이 코드는 다음 라이브러리를 사용합니다.
  3. BleKeyboard: PC를 잠그거나 잠금 해제하기 위한 키보드 입력을 시뮬레이션하는 데 사용됩니다.
  4. Adafruit_MPU6050 및 Adafruit_Sensor: MPU6050 센서에 액세스하기 위한 용도입니다.
  5. SitSense_inferencing: Edge Impulse 모델을 실행하기 위한 것입니다(사용자 지정 모델을 사용하는 경우 이를 교체해야 함).
  6. 엣지 임펄스 상수:
  7. EI_CLASSIFIER_RAW_SAMPLES_PER_FRAME: 프레임당 샘플 수(일반적으로 3축 가속도계 데이터).
  8. EI_CLASSIFIER_RAW_SAMPLE_COUNT: 추론을 실행하기 전에 수집할 샘플의 수입니다.
  9. 추론 함수:
  10. classify_posture() 함수는 가속도계 데이터를 취하고 Edge Impulse 모델을 사용하여 자세를 "양호" 또는 "나쁨"으로 분류합니다.
  11. PC 잠금 및 잠금 해제:
  12. "잘못된 자세"가 감지되면 lockScreen() 함수를 사용하여 Windows Win + L 키 누름을 전송하여 화면을 잠급니다.
  13. 자세가 수정되면 PIN을 입력하여 unlockScreen() 함수를 사용하여 PC의 잠금이 해제됩니다.

2. 코드 업데이트(사용자 지정 모델의 경우):

자체 Edge Impulse 모델을 배포하는 경우 올바른 모델이 코드에 연결되어 있는지 확인해야 합니다.

코드에서 다음 줄을 찾습니다.

#include <SitSense_inferencing.h> // 엣지 임펄스 추론 SDK

사용자 지정 모델을 사용하는 경우 모델 헤더 파일의 경로가 올바른지 확인합니다. 예를 들어 사용자 고유의 모델을 배포하고 SitSense_inferencing 폴더 아래에 있는 경우 이 줄이 Arduino 라이브러리 폴더의 올바른 경로에 해당하는지 확인합니다.

#include <Your_Custom_Model.h> // 모델에 맞게 이 줄을 업데이트하십시오.

3. 코드 업로드:

  1. Arduino IDE의 도구 메뉴에서 올바른 보드(DFRobot FireBeetle 2 ESP32-S3)를 선택합니다.
  2. 장치에 맞는 포트를 선택하십시오.
  3. 업로드를 클릭하여 코드를 ESP32에 플래시합니다.

4. 장치를 테스트합니다.

코드가 업로드되면 다음을 수행합니다.

  1. SitSense 장치는 이제 Edge Impulse 모델을 사용하여 가속도계 데이터를 수집하고 자세를 분류합니다.
  2. 자세가 "나쁨"인 경우 장치에서 비프음(부저 사용)이 울리고 PC가 잠길 수 있습니다.
  3. 상태가 "양호"하면 장치가 부저를 멈추고 이전에 잠겨 있던 PC의 잠금을 해제합니다.

17 단계 : 결론

 

그리고 그게 다야! SitSense는 단순히 재미있는 프로젝트가 아니라 전자 제품, IoT, HID(Human Interface Devices)  Edge Impulse에 대한 귀중한 교훈을 가르쳐 주는 기술과 혁신의 놀라운 융합입니다. 이 프로젝트를 통해 AI 모델을 실제 애플리케이션에 통합하여 자세 개선 및 생산성 향상과 같은 실질적인 문제를 해결하는 방법을 탐구했습니다.

그러나 SitSense를 돋보이게 하는 것은 단순함의 힘입니다. 우리는 다재다능한 ESP32-S3를 사용하여 휴대성이 뛰어난 무선 자세 감지 시스템을 만들었습니다. Bluetooth 연결 및 소형 폼 팩터를 포함한 강력한 기능 덕분에 SitSense는 편리하면서도 효과적입니다. 장치의 마그네틱 설계로 복잡한 장착 시스템에 대한 걱정 없이 어디에나 쉽게 부착할 수 있으며 배터리 휴대성으로 인해 이동 중에도 장기간 사용할 수 있습니다.

ESP32-S3의 경량 설계  효율성과 결합된 무선의 자유는 미래 프로젝트에 무한한 가능성을 제공합니다. SitSense의 고급 버전을 만들든 다른 IoT 및 AI 기반 솔루션으로 모험을 떠나든 이 장치의 다재다능함은 혁신의 전체 세계로 가는 관문입니다.

엣지 임펄스(Edge Impulse), 강력한 AI 모델, ESP32-S3의 최첨단 기능을 통해 새로운 지평을 열면서 만들고 공유할 수 있는 프로젝트가 무수히 많습니다. 이 프로젝트에서 공유된 코드, 3D 디자인  아이디어를 사용하여 달성할 수 있는 것의 한계를 넓히시기 바랍니다.

이 여정에 함께해 주셔서 감사합니다. 이 프로젝트가 마음에 들었다면 "I Made It" 섹션에서 좋아요를 누르고, 댓글을 달고, 자신의 경험을 공유하는 것을 잊지 마세요. 미래는 무한한 잠재력으로 가득 차 있으며, 이 놀라운 기술로 어떤 놀라운 프로젝트를 만들게 될지 기대됩니다.

마무리

DIY 애호가든, 자세 때문에 고민하는 사람이든, SitSense는 여러분의 척추와 생산성을 보호하기 위해 여기에 있습니다. 똑바로 앉아 SitSense와 함께 건강하고 생산적인 생활을 시작해보세요! 함께 멋진 것을 만들어 봅시다! 😊

이 글이 여러분께 도움이 되길 바라며, 여러분의 건강하고 편안한 자세를 유지하는 데 작은 영감이 되었으면 좋겠습니다!

 

반응형