아두이노 프로젝트 4. 족저압 검사 깔창

아두위키 : Arduwiki
ArduWiki (토론 | 기여)님의 2024년 6월 1일 (토) 12:33 판


개요

족저압 검사 깔창

압력 센서가 부착된 깔창에 올라서서 발바닥의 무게 중심을 확인하고 데이터를 수집하는 장치입니다.

고려사항

  • 압력센서 8개를 깔창에 부착하고, 각각의 데이터를 수집합니다.
  • 깔창 위에 가만히 올라서있는 정적 검사, 깔창 위에서 자연스럽게 걸어서 검사하는 동적 검사, 무게 중심을 확인하는 평발 검사 모드를 구현합니다.
  • 유저 인터페이스를 통해 실시간으로 압력 센서가 눌리는 세기를 보여줍니다.

사용 하드웨어


회로 구성

나노 파트 (같은 회로를 2개 구성해야 합니다.)

메가 파트

기능 구현

나노 파트

/*
시리얼 이름 : BTSerial
baudrate : 115200 -> (AT+BAUD4)

왼발 연결 블루투스 모듈
모듈 이름 : S_LEFT
핀번호 : 123456

오른발 연결 블루투스 모듈
모듈 이름 : S_RIGHT
핀번호 : 111111
*/
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3);                      //2(tx), 3(rx)
int Sensor[] = { A0, A1, A2, A3, A4, A5, A6, A7 };  //순서대로 1 ~ 8번 센서 사용 핀번호

unsigned char ValueSensor[9];
unsigned long ScanningTime = 30000;  //단위 [ms]
int dly = 100;                       //단위 [ms]

void sensing_func_inner(int dy) {
  for (int i = 0; i < 8; i++)
    ValueSensor[i] = map(analogRead(Sensor[i]), 0, 1024, 0, 254);
  BTSerial.write(ValueSensor, 9);
  delay(dy);
}

void setup() {
  Serial.begin(9600);
  BTSerial.begin(9600);
  Serial.println("Serial start");
  ValueSensor[8] = 255;
}

void loop() {
  sensing_func_inner(dly);
}

void value_check(){
  for(int i=0;i<8;i++){
    Serial.print(ValueSensor[i]);
    Serial.print("\t");
  }
  Serial.println();
}

void sensing_func(unsigned long ScanTime, int dy) {
  unsigned long StartTime = millis();
  unsigned long EndTime = millis();
  while ((EndTime - StartTime) < ScanTime) {
    sensing_func_inner(dy);
    EndTime = millis();
  }
}

메가 파트

/*
공통사항
baudrate : 115200 -> (AT+BAUD4)

왼발 연결 블루투스 모듈
시리얼 번호 : Serial1
모듈 이름 : M_LEFT
핀번호 : 123456

오른발 연결 블루투스 모듈
시리얼 번호 : Serial2
모듈 이름 : M_RIGHT
핀번호 : 111111
*/

void setup() {
  Serial.begin(9600);     //pc 시리얼
  Serial1.begin(9600);  //블루투스 시리얼(왼발)
  Serial2.begin(9600);  //블루투스 시리얼(오른발)
  Serial.println("Serial start");
}

char idx1 = 0;
char idx2 = 0;

int left_val[100];
int right_val[100];
unsigned char t1; 
unsigned char t2;

void loop() {
  if (Serial1.available() > 0) {
    t1 = Serial1.read();
    if (t1 == 255) {
      idx1 = 0;
      for (int i = 0; i < 8; i++) {
        Serial.print(left_val[i]);
        Serial.print("\t");
      }
      Serial.println("0");
    } else {
      left_val[idx1] = t1;
      idx1++;
    }
  }

  if (Serial2.available() > 0) {
    t2 = Serial2.read();
    if (t2 == 255) {
      idx2 = 0;
      for (int i = 0; i < 8; i++) {
        Serial.print(right_val[i]);
        Serial.print("\t");
      }
      Serial.println("1");
    } else {
      right_val[idx2] = t2;
      idx2++;
    }
  }
}

압력센서 값 측정

초음파 센서(HC-SR04)를 상단과 하단에 각각 하나씩 부착하여 장애물 감지 거리 구간에 따라 부착된 소형 진동 모터의 세기를 조절합니다.

소형 진동 모터의 경우 진동 세기가 잘 체감될 수 있도록 지팡이의 손잡이에 부착합니다.

주변 밝기 확인 및 네오픽셀 점등

조도 센서(CDS)를 활용해 주변의 밝기를 확인한 후 주변 사람들이 인지할 수 있도록 지팡이에 부착한 네오픽셀이 점등됩니다.

이를 통해 시야 불명에 의한 충돌 사고를 대비합니다.

안드로이드 앱을 통한 문자 전송

HC-06 블루투스 모듈을 활용해 스마트폰의 앱에 연결합니다.

지팡이에는 3개의 택트 스위치가 부착되어 있으며 각각 "목적지로 출발", "목적지에 도착", "현재 위치" 신호의 역할을 합니다.

앱에서 택트 스위치 신호를 수신했다면 미리 설정된 전화번호로 문자를 송신합니다.

결과

사진

Comment

완성된 지팡이의 모습입니다.

불을 끈 어두운 환경에서는 지팡이에 길에 부착된 네오픽셀이 점등한 모습을 확인할 수 있습니다.

상단, 하단에 초음파 센서가 하나씩 부착되어 장애물을 감지하며 작은 동그란 소형 진동 모터가 손잡이 끝에 부착되어 진동합니다.

택트 스위치는 손잡이에 부착되어 사용자가 쉽게 누르고, 누르면 문자가 발송됩니다.

추신

공집사의 아두이노 프로젝트 결과물은 판매되는 제품이 아니며, 프로젝트 수준에서 간단하게 진행되었습니다.

문의 및 의뢰는 크몽 공집사로 연락주시면 감사하겠습니다.