본문 바로가기

DIY

자전거 후방 감지기 DIY - LD2410 센서 이용

요즘에는 자전거 후방 감지기가 제품으로 나와 있어서 굳이 만들 필요가 없겠지만서도... 추억을 되살릴 겸 DIY로 한번 만들어 보았습니다. 

 

2016년에 아래와 같이 초음파를 이용하여 뒤쪽에 따라오는 자전거를 탐지하고자 했으나 그다지 쓸만하지 않았습니다. 인식했다가 못했다가... 

 

2016년에 만들었던 것들. 우측은 초음파 센서를 좌우로 회전시키는 기능까지 추가했으나 결과는...

 

이번에는 LD2410 24GHz Human presence sensing module을 이용하여 만들어 보았습니다. 24GHz는 파장이 길어서 mmWave(밀리미터파)는 아니지만 일반적으로 mmWave라고 통칭하는 것 같습니다.    

 

  • LD2410 센서는 정지한 물체에 대한 거리와 이동하는 물체에 대한 거리를 계산해 줍니다. 
  • 자전거는 이동 중일테니 이동하는 물체의 거리에 따라 다른 음의 부저 소리를 울려 줍니다(예: 4미터 이상 500Hz, 1미터 이하 1700Hz). 다가오면 소리가 고주파로 변하게 되겠죠?  
  • LD2410센서는 좌우로 120도나 커버가 되기 때문에 반대쪽 자전거도 알려줄 확률이 높습니다. 하지만 소리를 들어보면 멀어지는지 가까워지는지 알 수 있겠지요... 

Seeed studio의 XIAO ESP32-C3보드, TM1637 세븐 세그먼트 LED
수동 Buzzer
LD2410 24GHz Human presence sensor module
LD2410 데이터 시트에 있는 설치 방법

위 그림처럼 감지하기 때문에 자세히 보시면 LD2410을 약간 기울여서 붙여 놓은 것을 알 수 있습니다. 사실은 설치할 때 상하가 뒤집혀야 되는데, 상하 판단이 필요 없기도 해서 편의상 사진과 같이 놓았습니다(WiGig글자가 뒤집어져 있도록 설치해야 함). 

 

설치 방법과 작동 범위

 

그냥 일반 저가형 아두이노 보드를 써도 되는데, 안드로이드 앱에 연동을 할 수도 있어서 블루투스가 가능한 XIAO ESP32-C3 보드를 선택했습니다.  

 

알리익스프레스에서 구입하면 2달러 선에 구입할 수 있는데, 입력 전압이 5V이하이면 작동이 안되고 부품에서 열이 좀 나는 편입니다. 소비전류도 200mA로 적지 않습니다. 5V x 200mA이면 1A나 됩니다.

 

 

개발은 Arduino IDE로 복사 붙여넣기로 하면 되고, 몇 시간 만에 만들어 놓고 테스트하다보니까 방이나 사무실에 두고 누가 뒤에서 다가 오는 지 확인하는 용도로 쓸 수도 있을 것 같습니다. 

 

실제 자전거도로에서 실험을 해 본 후 내용은 계속 추가하겠습니다. 

 

[2023-06-27 1차 테스트] 

 

처음으로 도로에 나가 보았습니다만... 엉덩이를 인식해서(?) 잘 안되었습니다. 

엉덩이와 너무 가까워서 실패한 설치

 
 
 
 

좀 더 낮은 위치에 설치해야할 것 같아요... 

 

수직으로 설치하려고 배치를 변경

XIAO ESP32-C3의 BLE는 안테나가 없이는 신호가 꽤 약합니다. 더구나 24GHz 송수신 장치가 붙어 있어서... 기본 제공된 Bluetooth 안테나를 설치하고, 금속판으로 약간의 실드도 해줄까 생각 중입니다. 

 

왜 갑자기 블루투스를 언급하냐 하면, 스마트폰에서 거리 값을 모니터링을 하려고 해서 입니다. 만능기판 공간이 좁아져서 7 세그먼트 표시 장치를 떼어 버렸기 때문에 밖에서 잘 작동하는 지 확인하는 방법으로 BLE통신을 이용하려고 합니다. 

 

[2023-06-28 XIAO보드의 BLE 통신 추가]

XIAO에서 제공하는 BLE 서버 예제 설명에서는 안드로이드 측에서는 LightBlue라는 앱을 사용하라고 하는데, 그 앱은 Read버튼을 눌러야 값이 나와서 자전거 타고 테스트하기에 부적절합니다. 

 

그리고, BLE 서버 예제에서는 값을 보내는 기능이 안보이는데, 출처 기록을 안했지만 아래 코드를 추가해 주면 LD2410으로 측정한 이동 물체에 대한 거리를 실시간 전송할 수 있습니다. 

BLECharacteristic* pCharacteristic = NULL; 
bool deviceConnected = false;

class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
    };

    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};

// 실제로 보내는 코드 필요한 위치에서... 
if (deviceConnected) {
  String s = String(distance); 
  pCharacteristic->setValue(s.c_str()); 
  pCharacteristic->notify(); 
}

 

이제 거리 값 수신을 위하여 7년만에 Android Studio를 켜고 BluetoothLeGatt예제도 있겠다 금방 되겠지...는 오해였고 한참 골탕을 먹었습니다. SDK 28 기반의 소스라서 최신 버전에서는 블루투스 스캔 기능이 작동이 안됩니다. 아래 두 링크를 보고 소스 수정하고 권한 수동 설정해주고 등등 오류 튕기지만 결국 됩니다. 

안드로이드에서 제공하는 예제 BluetoothLeGatt를 이용하고 글자 크기만 키움

위 그림과 같이 스마트폰에 45cm(이동 물체만 표시)라고 값이 뜨므로 자전거 타고 테스트를 다시 해야 하겠습니다. 

 

[2023-07-13 LD2410 케이스 및 센서 상하좌우 몸 인식 방지용 동테이프 처리] 

지난번 테스트 했을 때 안장 밑에 센서를 설치했더니 엉덩이와 다리를 인식했습니다. 각도가 거의 90도에 가까운데도 인식이 되는 것은 제품 스펙이 아닌데 의아합니다. 

 

센서가 거리에 따라 8개의 게이트를 지원하고 감도를 조절할 수 있는데 가까운 엉덩이 인식은 감도 100%라서 소프트웨어로 필터링이 안될 것 같아서 하드웨어적으로 구리 테이프(GND에 연결은 안함)로 막아 보았습니다. 

 

기존 테스트하던 LD2410은 고장나서 cm앞의 것만 인식이되어 새로 주문한 LD2410B(BLE기능)로 사용 중이고, 사진에는 잘 안보이지만 3D 프린터로 인쇄한 케이스에 넣은 상태입니다. 

 

이제는 센서 위에 손을 대도 인식이 안됩니다. 

상하좌우의 가까운 물체를 인식하지 못하도록 동테이핑 처리

 

 

[2023-08-05 동테이핑 후 주행테스트 1차] 

결론부터 말하자면 LD2410은 이 용도에 맞지 않는 것 같습니다. 

  • 동테이프를 사용하여 엉덩이 및 다리 움직임 인식 = 해결 완료 
  • 좌우에 펜스가 있는 교량(다리) 인도를 지날 때 좌우 펜스 인식 = 여전히 소리가 남 
  • 뒤에서 추월하는 자전거 인식 = 거의 안되는 편  

이게 3~4m까지 인식한다고 하지만 사용한 구형 5000mA 충전기 출력 전압이 낮아서인지 3미터 이하로만 인식되었습니다. 그러다보니 더 안된 듯하네요. 

 

7~8미터까지 인식이 가능한 모델로 변경해야하겠습니다. 하지만 모양이 바뀌어서 3D 프린트부터 다시 해야겠네요.