아두이노/아두이노 일반
거리측정센서(Time of Flight; VL53L0X) 아두이노, ESP8266, Wemos
아크리엑터
2024. 12. 22. 20:59
반응형
거리측정센서를 여러개 알아봤다. 50cm전후에서 사람이 근접하는 것을 찾으려고 했다.
초음파센서도 있었고, 적외선을 이용한 센서도 있었다. 웬지 초음파센서는 배터리를 많이 사용할 것 같아서, 적외선센서를 찾아보았는데, 샤프의 2Y0A21 센서는 너무 비싸고 크기도 많이 커서 사용하기에는 좀 버거운 느낌이 들었다.
그러다가, 찾은 센서가 아래 것인데, 가겨고 싸고 크기도 작아서 사용하기에 너무 괜찮아 보인다. 가격은 2달러 미만이다.
크기는 25mm x 11mm 정도 된다. 두께도 아주 얇아서 보드를 작게 만들때 괜찮을 것 같다.
구매는 아래의 알리익스프레스 링크를 아래에 추가하였다. 이런 모델로 구매하면 된다.
https://s.click.aliexpress.com/e/_oF7UvB9
이 모듈은 레이저를 이용하여 거리를 측정한다. 최대 2미터까지 측정가능하다고 하며 1mm단위로 측정할 수 있다. 실제 시험을 해보니, 2m까지는 안되는 것 같고 1m는 조금 넘는 것 같다. 그리고 측정값은 정확하게 보인다.
레이저를 사용하는 것이라 수명이 얼마나 갈지는 모르겠다. 만들때 부품 고장날 것을 고려해서 교체가 쉽도록 만들어야 할지도 모르겠다, .
통신은 I2C통신을 하는데, I2C 구분하는 값은 0x29로 되어있다.
핀 정보
구분 | 내용 | 비고 |
VIN | 3~5v | |
GND | GND | |
SCL | I2C Clock | |
SDA | I2C Data | |
GPIO1 | Interrupt용. | 특정 거리 내에 들어왔을 때, Digital PIN에 HIGH값을 보내어서, 아두이노를 깨우는 역할을 하게 할 수 있다. |
XSHUT | Default: HIGH | 센서를 끄는 용도로 사용 LOW 입력시, 센서가 셧다운 모드로 전환 |
보드 연결
센서 | 아두이노 | nodemcu 8266 (wemos) |
VIN | VCC | 3V3 |
GND | GND | GND |
SCL | A5 | D1 |
SDA | A4 | D2 |
GPIO1 | ||
XSHUT |
인터럽트 기능은 나중에 고민해보고, 핀 연결하고 프로그램을 돌려본다. vl53l0x 라이브러리의 예제를 사용했다.
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
Serial.println("starting");
// wait until serial port opens for native USB devices
while (! Serial) {
delay(1);
Serial.println("delay..");
}
Serial.println("Adafruit VL53L0X test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// power
Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!
if (measure.RangeStatus != 4) { // phase failures have incorrect data
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
정상적으로 실행된 결과다.
20:56:03.571 -> Reading a measurement... Distance (mm): 542
20:56:03.691 -> Reading a measurement... Distance (mm): 444
20:56:03.867 -> Reading a measurement... Distance (mm): 342
20:56:04.005 -> Reading a measurement... Distance (mm): 263
20:56:04.144 -> Reading a measurement... Distance (mm): 203
20:56:04.284 -> Reading a measurement... Distance (mm): 159
20:56:04.422 -> Reading a measurement... Distance (mm): 129
20:56:04.560 -> Reading a measurement... Distance (mm): 113
20:56:04.685 -> Reading a measurement... Distance (mm): 96
20:56:04.854 -> Reading a measurement... Distance (mm): 84
20:56:04.993 -> Reading a measurement... Distance (mm): 74
20:56:05.110 -> Reading a measurement... Distance (mm): 65
20:56:05.272 -> Reading a measurement... Distance (mm): 59
20:56:05.394 -> Reading a measurement... Distance (mm): 57
20:56:05.564 -> Reading a measurement... Distance (mm): 54
20:56:05.702 -> Reading a measurement... Distance (mm): 52
20:56:05.840 -> Reading a measurement... Distance (mm): 50
20:56:05.979 -> Reading a measurement... Distance (mm): 49
20:56:06.104 -> Reading a measurement... Distance (mm): 52
20:56:06.270 -> Reading a measurement... Distance (mm): 55
20:56:06.407 -> Reading a measurement... Distance (mm): 51
20:56:06.544 -> Reading a measurement... Distance (mm): 46
20:56:06.671 -> Reading a measurement... Distance (mm): 44
반응형