[IoT] IoT 쌩초보 ESP32 - FSR 연결(실습)

Jihyeon Yun·2023년 2월 12일
0

IoT 도전기

목록 보기
3/7

해당 포스트는 https://esp32io.com/tutorials/esp32-force-sensor 를 참고하여 작성하였습니다.

FSR 센서 테스트

이제 실제로 FSR과 ESP32를 연결할 차례이다.
생각보다 예시코드는 찾아보면 많다.
딱 원하는 방식으로 나와있지는 않지만 참고해서 코드를 작성하면 원하는 값을 얻어낼 수 있다.

Board Image


해당 그림을 참고해서 첫 번째로 센서 동작 여부를 체크할 수 있다.
보드에 대해서는 잘 모르는데 예시가 친절해서 문제없이 테스트 할 수 있었다.

Code

/*
 * This ESP32 code is created by esp32io.com
 *
 * This ESP32 code is released in the public domain
 *
 * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-force-sensor
 */

#define FORCE_SENSOR_PIN 36 // 센서 핀의 경우 ADC핀을 사용하면 될 것 같다. 굳이 GIOP36번일 필요는 없다.
// ESP32 pin GIOP36 (ADC0): the FSR and 10K pulldown are connected to A0

void setup() {
  Serial.begin(9600);		// 이 부분은 맞춰서 변경하면 된다.
}

void loop() {
  int analogReading = analogRead(FORCE_SENSOR_PIN);

  Serial.print("The force sensor value = ");
  Serial.print(analogReading); // print the raw analog reading

  if (analogReading < 10)       // from 0 to 9
    Serial.println(" -> no pressure");
  else if (analogReading < 200) // from 10 to 199
    Serial.println(" -> light touch");
  else if (analogReading < 500) // from 200 to 499
    Serial.println(" -> light squeeze");
  else if (analogReading < 800) // from 500 to 799
    Serial.println(" -> medium squeeze");
  else // from 800 to 1023
    Serial.println(" -> big squeeze");

  delay(1000);
}

Result

센서를 누르면 다음과 같은 값이 출력된다. 각 단계의 Threshold는 내가 직접 코드에서 설정할 수 있다. 0 ~ 10까지는 no pressure로 측정 되는데 아무래도 튀는 값들 처리 때문에 그렇게 설정한 듯 하다.

여러 개의 센서 연결

여기서 문제가 하나 있다. 우리는 발 전체에 대해 압력을 받아와야 하므로 최소 4개 이상의 FSR 센서의 값을 받아들여야 한다. 아직 이 부분에 대해서는 자료를 좀 더 찾아봐야 겠지만 일단 if-else가 아니라 if문만을 사용해서 센서가 눌리는 족족 압력값을 읽어오도록 하였다.
바로 납땜을 할 수는 없어서(FSR 센서는 납땜에 아주 취약하다) 점퍼선과 Breadboard를 이용해서 연결하였다. 깔창에 센서를 고정하는 것은 팀원이 테이프로 붙여주었다.

선이 연결되다 보니까 약간 복잡해 보이지만 실제로는 그렇게 어려운 연결은 아니다. 빵판에서 핀이 자꾸 빠져서 그렇지...

Code

#define FORCE_SENSOR_PIN1 36
#define FORCE_SENSOR_PIN2 39
#define FORCE_SENSOR_PIN3 34
#define FORCE_SENSOR_PIN4 35
// 이번 프로젝트에서는 4개의 FSR 센서를 사용하므로 각각 ADC핀과 연결해준다.


void setup() {
  Serial.begin(115200);		// 후에 다른 센서를 연결할 것을 고려하여 Baud를 IMU센서와 맞춰주었다.
}

void loop() {
  int analogReading1 = analogRead(FORCE_SENSOR_PIN1);
  int analogReading2 = analogRead(FORCE_SENSOR_PIN2);
  int analogReading3 = analogRead(FORCE_SENSOR_PIN3);
  int analogReading4 = analogRead(FORCE_SENSOR_PIN4);  

  // 각각의 핀이 눌리면 해당 하는 번호와 입력값을 Serial에 출력하도록하였다
  if (analogReading1 > 10)       
    Serial.printf(" 1st FSR is pressed : %i\n", analogReading1);
  else if (analogReading2 > 10) 
    Serial.printf(" 2nd FSR is pressed : %i\n", analogReading2);
  else if (analogReading3 > 10) 
    Serial.printf(" 3rd FSR is pressed : %i\n", analogReading3);
  else if (analogReading4 > 10) 
    Serial.printf(" 4th FSR is pressed : %i\n", analogReading4);
  
  delay(100);		//delay를 100ms로 낮춰주었다.
}

문제점

이렇게 연결하고 나서 직접 테스트를 해보니 걸을 때에는 발바닥이 순차적으로 눌리다 보니 그닥 겹치는 것 없이 값이 들어왔다. 하지만 동시에 눌렀을 때에는 둘 중 하나만 나타난다는 단점이 있다. 이 부분에 대해서는 쓰레드로 만들어서 받든지.. 다른 대안을 찾아보든지 해야 할 것 같다.
앞으로의 과제로 남기고 싶지만 이번주의 내가 해결해야 할 것 같다.

다음글은 드디어 데이터 전송이다. ThingBoard로 입력값을 전달하고 대시보드를 사용해서 읽어볼 예정.

0개의 댓글