Hardware | CDM324 radar 를 DIY 해보자

HB100 이라는 센서를 가지고 속도 센서를 만들어 봤습니다.

* Hardware | HB100 도플러 속도센서 DIY 해보기
  - https://e-chocoball.blogspot.com/2021/05/Hardware-HB100-doppler-speed-sensor-diy.html

동일한 제작자가 CDM324 라는 센서를 가지고 소형화 시킨 속도 센서용 breakout board 를 제작 했네요.

* Making the Electronics for a 24GHz Doppler Motion Sensor
  https://www.limpkin.fr/index.php?post/2017/02/22/Making-the-Electronics-for-a-24GHz-Doppler-Motion-Sensor

오늘은 CDM324 버전의 도플러 가속도계 제작기 입니다.


1. CDM324

동일하게 Tindie 에서 구매할 수 있도록 제작자가 올려 놨습니다.

* CDM324 Doppler Speed Sensor - Arduino Compatible
  - https://www.tindie.com/products/stephanelec/cdm324-doppler-speed-sensor-arduino-compatible/

이제 동전 크기만 하게 가속도계를 만들 수 있게 되었습니다. 그만 큼, 조그마한 PCB 에 부품이 많이 올라가 있는 상태 입니다.

완벽하게 동일한 센서가 자동문 개폐기 센서에도 사용되고 있는 것을 포착 했습니다. 고장난 자동문 수리 중인 장면을 도서관에서 목격하게 되어 사진으로 남겨 놨습니다. 사용처가 다양하군요. 영어 표현은 "Microwave Motion Sensor" 군요.


2. Components

구성품 및 PCB 파일까지 공개되어 있습니다.

* CDM324 Amplification Backpack, With Case and Simulations
  - https://github.com/limpkin/cdm324_backpack

제가 필요한 내용은 다음과 같습니다.

Bill of Material

Schematics

KiCad

* Datasheets
  - InnoSenT application note III_11_06.pdf
  - InnoSenT_applicaton_note_I_07_07.pdf
  - InnoSenT_Standard_Products_20080311.pdf
  - InnoSenT application note II_07_05.pdf

CDM324 본체를 제외하고, breakout board 를 구현하기 위한 부품은 다음과 같습니다.


----------------------------------------------------------------------------------
|           name         | value          | type                                 |
----------------------------------------------------------------------------------
| C6, C7                 | 270pF          | 50V NPO 0805 SMD                     |
| C3, C4, C1, C2, C8, C5 | 10uF           | 16V X7R 0805 SMD                     |
| C9, C11, C10           |                |                                      |
----------------------------------------------------------------------------------
| R1, R2, R3, R10, R11   | 10K Ohm        | 1/8W 1% 0805 SMD                     |
| R4, R5, R6             | 4.7K Ohm       | 1/8W 1% 0805 SMD                     |
| R7, R8                 | 590K Ohm       | 1/8W 1% 0805 SMD                     |
| R9                     | 8.2K Ohm       | 1/8W 1% 0805 SMD                     |
----------------------------------------------------------------------------------
| U1                     | OPA2365AIDR    | IC OPAmp 50MHZ Dual 8SOIC            |
| U2                     | MAX9031AUK+T   | IC Comparator Volt SGL SOT23-5       |
| D1                     | S1B-13-F       | Diode Gen Purp 100V 1A SMA           |
| Q1                     | DMP3098L-7     | MOSFET P-CH 30V 3.8A SOT23-3         |
| FB1                    | HZ0805D102R-10 | Ferrite Chip Signal 1000 Ohm SMD     |
----------------------------------------------------------------------------------
| P1                     | 1              | single row male 2.54mm pitch pinhead |
| P2                     | 1              | single row female 2.54mm Conn Header |
----------------------------------------------------------------------------------



3. Purchase

우선 가장 중요한 PCB 는 JLCPCB 에서 주문할 때, 같이 했습니다. 관련 내용은 아래 포스팅을 참조.

* Hardware | JLCPCB 에서 PCB 주문을 해보자
  - https://chocoball.tistory.com/entry/Hardware-JLCPCB-PCB-order

만족스러운 quality.

실크스텐실 및 패턴이 아주 잘 구현되어 있습니다. Through hole 도 마찬가지로 처리 잘 되어 있습니다.

CDM324 본체는 아래 링크를 통해 구입.

* CDM324 The CW microwave induction module body 24 g 24.125g radar inductive switch sensor
  - https://ko.aliexpress.com/item/CDM324-The-CW-microwave-induction-module-body-24-g-24-125g-radar-inductive-switch-senso/32661970805.html

도착과 포장은 만족스럽습니다.

2017년에 주문 했으니, 2017 이 찍혀 있습니다. 완성까지는 4여년이 걸린 셈이지요.

마이크로 웨이브를 이용한 속도계를 만들 수 있다니, 놀랍기 그지 없습니다.

Digi-Key 에서 주문한 부품 들. 가능하면 AliExpress 에서 구매하고 싶었으나, 찾을 수 없는 부품들이라 Digi-Key 에서 따로 주문했습니다.

MOSFET 입니다.

100V 를 버티는 Diode 입니다.

중국에서 제조되었겠지만, 신뢰가 가는 Digi-Key 유통 제품.

자잘한 부품은 AliExpress 에서 구매. 590K Ohm 은 잘 안팔아서, 따로 구매.

* 100pcs 0805 50V SMD Thick Film Chip Multilayer Ceramic Capacitor 0.5pF-47uF 10NF 100NF 1UF 2.2UF 4.7UF 10UF 1PF 6PF
  - https://www.aliexpress.com/item/33055902708.html

무난하게 도착.

Capacitor 중에서 270 pF 만 따로 팔지 않아서 구입.

* 1/100PCS SMD 0805 F 1% 562K 590K 604K 619K 620K 634K 649K 665K 680K 715K 732K 750K 768K 787K 806K 820K Ohm Resistance series
  - https://www.aliexpress.com/item/4001145770091.html

이것 또한 무난하게 도착.


4. 실장

우선 부품들을 위치에 알맞게 배치시켜 봅니다.

굽는 것은 한번에 해야 하므로, 빠진 부품이 없는지 최종 확인하기 위함입니다. 바로 실장할 수 있도록 방향 및 위치를 맞춰서 배열해 놓으면 편합니다. 밑에는 테이프를 뒤집어서 고정해 놓으면 어디 도망가지도 않고 편합니다.

Diagram 을 보면서, 문제 없는지 다시 확인.

이제 PCB에 플럭스 페이스트를 발라 줍니다. 좀 더 세밀하게 발라야 하는데 너무 많이 바른 듯.

방향과 위치에 맞게 SMD 부품들을 올려 줍니다.

잘 안착이 되었으면, 오븐으로 구워 줍니다.

워낙 조밀하게 부품들이 구성되어 있다 보니, 오븐에 구우면서 부품끼리 붙어버린 것들이 있네요.


5. 문제 발생

얼추 정리는 했지만, PCB가 지저분하게 되었습니다. 또한 어디에서 쇼트가 났는지 전혀 동작하지 않습니다.

플럭스를 바르고, 열풍기로 지지면서 부품 정렬을 시도합니다.

Male pin header 는 괜찮지만, Female pin header 는 열풍기로 녹아버렸네요. 

Male pin header 는 다시 달아줘야 하니, 우선 제거 했습니다.

마침 초음파 세척기를 사용할 수 있는 기회가 있어서, breakout board 통째로 넣어서 씻깁니다. 뭔가 어슴푸레 제거되는 것 같습니다.


6. 결합

3 pin female pin header 를 가지고 있지 않으니, 긴 female pin header 서 잘라내어 만들어 줍니다.

초음파 세척기로 인하여, 말끔해진 PCB.

CDM324 와 결합 합니다. 깔끔하네요.

최종 완성 모양 입니다. 4년 걸렸습니다.


7. Source

Arduino 와의 연결은 다음과 같습니다.


+-------------------------+
|  CDM324  | Arduino Nano |
+-------------------------+
|    VCC   |      5V      |
|    GND   |      GND     |
|   F OUT  |      D4      |
+-------------------------+


소스는 다음과 같습니다.


// Below: pin number for FOUT
#define PIN_NUMBER 4
// Below: number of samples for averaging
#define AVERAGE 4
// Below: define to use serial output with python script
#define PYTHON_OUTPUT
unsigned int doppler_div = 44;
unsigned int samples[AVERAGE];
unsigned int x;
 
void setup() {
  Serial.begin(115200);
  pinMode(PIN_NUMBER, INPUT);
}
 
void loop() {
  noInterrupts();
  pulseIn(PIN_NUMBER, HIGH);
  unsigned int pulse_length = 0;
  for (x = 0; x < AVERAGE; x++)
  {
    pulse_length = pulseIn(PIN_NUMBER, HIGH);
    pulse_length += pulseIn(PIN_NUMBER, LOW);   
    samples[x] =  pulse_length;
  }
  interrupts();
 
  // Check for consistency
  bool samples_ok = true;
  unsigned int nbPulsesTime = samples[0];
  for (x = 1; x < AVERAGE; x++)
  {
    nbPulsesTime += samples[x];
    if ((samples[x] > samples[0] * 2) || (samples[x] < samples[0] / 2))
    {
      samples_ok = false;
    }
  }
 
  if (samples_ok) {
    unsigned int Ttime = nbPulsesTime / AVERAGE;
    unsigned int Freq = 1000000 / Ttime;
 
    #ifdef PYTHON_OUTPUT
      Serial.write(Freq/doppler_div);
    #else
      //Serial.print(Ttime);
      Serial.print("\r\n");
      Serial.print(Freq);
      Serial.print("Hz : ");
      Serial.print(Freq/doppler_div);
      Serial.print("km/h\r\n");
    #endif
  } else {
    #ifndef PYTHON_OUTPUT
      Serial.print(".");
    #endif
  }
}


Arduino 와 통신하여 화면에 가속도를 표시하는 코드는 Python 으로 되어 있습니다. 그리하여 pip 를 이용하여 pyfiglet 과 pyserial 을 설치해 줍니다.

Python 코드에서는 Arduino 와 연동되는 COM port 를 지정해 줘야 하니, Arduino 와 연결된 port 를 확인합니다.

저의 경우는 COM7 으로 연결되어 있군요. Python 코드에 COM port 정보를 넣어 줍니다.



from pyfiglet import *
import serial
import os

ser = serial.Serial('COM7', 115200)
while True:
	speed = ord(ser.read())
	os.system('cls||clear')
	print(figlet_format(" ",font="clb8x10"))
	print(figlet_format(" ",font="clb8x10"))
	print(figlet_format(str(speed)+" km/h",font="clb8x10"))
	print(figlet_format(" ",font="clb8x10"))


위의 코드를 py 확장자로 만든 뒤, command line 에서 실행해 줍니다.

멋지게 표현이 되네요.

동영상으로 찍어 봤습니다.

드디어 완료 되었습니다.

FIN


댓글

  1. PCB 여분이 4개가 있어, 배송료만 받고 분양합니다. 필요하신 분이 계시면 메시지 남겨 주세요.

    답글삭제

댓글 쓰기