MPU6050 센서에서 이상증상 발견

전기전도(electrical conduction)에 의한 I2C 통신장애

오늘은 아두이노 ESP32 보드에 MPU6050센서 모듈을 연결해서 진동의 크기를 측정하는 프로그램을 개발해서 테스트를 하다가 우연히 발견하게 된 I2C 통신장애 현상에 대한 포스팅입니다.

이상증상


ESP32 보드에서 연결되어 있는 MPU6050센서 모듈로부터 일정한 시간간격(5ms)으로 측정된 중력가속도 값을 가져와서 MQTT Broker로 전송해주는 프로그램을 개발했습니다. 제 책상 위에 진동센서를 올려놓고 테스트를 할때는 아무 이상이 없었습니다. 그런데 진동을 발생시키기 위해서 회사에 있는 테스트용 베어링 기계에 센서 측정부를 부착시킨 상태에서 테스트를 하면 처음에는 정상동작하던 프로그램이 금방 이상하게 동작하는 것처럼 보였습니다.

I2C통신을 이용해서 MPU6050 센서모듈로부터 가져온 중력가속도 값이 계속 동일한 현상이었습니다. 처음에는 제가 작성한 프로그램의 버그일 것이라 생각했지만, 아무리봐도 문제가 될만한 코드는 보이지 않았습니다.

아래 링크는 테스트에 사용했던 프로그램 소스코드를 확인할 수 있는 Github 저장소입니다.

프로그램 소스코드 Github 저장소

하드웨어적인 문제일까?


하드웨어팀에 자문을 구해보니 ESP32보드와 MPU6050 센서모듈을 연결하는 I2C 케이블의 길이가 너무 길어서 신호 손실이 발생하는 것 같다고 했습니다. 친절하게 케이블 길이도 줄여주고, I2C통신을 위해서 사용하는 SDA와 SCL단자에 풀업 저항도 달아줬습니다. 근데 그래도 문제는 해결되지 않았습니다.

강한 진동발생에 의한 MPU6050센서모듈의 순간 오동작은 아닐까라는 의구심이 들어서 테스트용 베어링 기계에 진동센서를 부착만 시키고, 진동은 발생시키지 않았습니다. 하지만, 그래도 결과는 동일했습니다.

정말 소프트웨어의 문제일까?


아무리 들여다봐도 제가 작성한 프로그램 소스코드에서도 특별히 문제가 될만한 부분은 보이지 않았기 때문에 I2C통신의 문제를 의심해볼 수 있었습니다. 그래서 프로그램의 소스코드를 살짝 수정해서 MPU6050센서모듈에서 중력가속도 값을 읽어오기 전에 매번 WHO_AM_I 레지스터(Register Address : 0x75)의 값을 읽어서 정상적인 값(0x68)이 반환되는지 체크하도록 했습니다.

그리고 마침내 문제 해결의 단서를 찾았습니다.

결론


우리회사에서는 MPU6050 센서모듈의 측정부를 아래 사진처럼 자석형으로 만들어서 사용하고 있습니다. 자석형으로 만들어진 센서 측정부를 철판 위에 부착시키기 위함입니다.

여러차례 실험을 반복해본 결과 책상이나 바닥에 센서 측정부를 두는 경우에는 아무런 문제가 없었습니다. 하지만, 테스트용 베어링에 자석의 힘으로 센서 측정부를 부착하면 금방 문제가 발생하는 것을 알 수 있었습니다. 즉, 다시 말하자면 테스트용 베어링 기계의 표면에 센서 측정부가 직접적으로 접촉되는 경우에만 문제가 발생하는 것이었습니다.

아래의 사진이 테스트용 베어링 기계에 자석의 힘으로 센서 측정부를 부착한 모습입니다.

그래서 아래 사진처럼 테스트용 베어링 기계의 표면과 센서 측정부가 직접 접촉하지 않도록 플라스틱 박스안에 센서 측정부를 넣고 테스트용 베어링 기계 위에 올려서 실험을 해봤습니다.

이번에는 문제 없이 잘 동작하는 것을 확인할 수 있었습니다. 그리고 결론을 내릴 수 있었습니다.

테스트용 베어링 기계의 표면에 접촉된 센서측정부를 통해서 미세한 전류가 흐르면서 MPU6050 센서모듈의 I2C통신에 문제가 발생하는 것이었습니다. 테스트용 베어링 기계의 표면이 철 소재이고, 내부에 존재하는 전기장이 영향을 주는 것 같습니다. 하드웨어팀에 물어보니 이런 현상을 전기전도(electrical conduction)이라고 한다고 합니다.

이렇게 자석형으로 된 센서 측정부를 사용해서 만들어진 센서노드 디바이스를 설치했을때 몇몇 특정설비에서 진동값 측정이 안되는 증상이 과거에도 있었다고 합니다. 그 당시에는 원인을 몰라서 대응을 제대로 못했던 것 같은데 지금이라도 원인을 찾아 다행이라 생각합니다.

참고 : 전기전도 현상

전기전도는 도체의 안에 전기장이 존재할 때 전하가 이동을 하면서 전류가 발생되는 상태를 말함. (출처 : 해시넷 위키)