Embedded/Arduino

초음파 센서 NT-TS601를 이용한 초음파 자(Ruler) 제작하기

변화의 물결1 2024. 2. 22. 00:05

 

 

안녕하세요.

 

  남은 초음파 부품이 이것을 어떻게 할까 하다가 이제 생활에 필요한 것도 만들어 사용하자고 생각하여 초음파 자를 만들어 보았습니다.

  완벽한 것은 아니고 값이 초음파 값 튀는 것도 잡아 주어야 하고 기구적인 것도 보완해야 좀 더 편하지 않을까 하는데요. 우선 만들어 본 것들을 공유해 보겠습니다.

  

 


 

1. 초음파 이론

 

   초음파 센서는 일정한 간격으로 높은 주파수 사운드 펄스를 통하여 짧게 소리를 발사합니다. 이러한 것들은 소리의 속도를 통하여 공기 중에 전파됩니다. 만약 그것들이 개체에 충돌한다면 센서에게 에코 신호로 반사되어 올 것이고 이러한 것은 시간-에코에 방사하고 도달하는 기간-을 통하여 목표까지의 거리를 산정하게 됩니다.

 

 

초음파 센서 설명

 

<참조 : https://www.microsonic.de/>

 

  - 음속은 대기의 온도에 영향을 받습니다. 대기의 온도(T℃)를 알고 있다면 식은

    음파 속도(V) = 331.5 + 0.60714 T [m/s]입니다.

 

  - 센서의 동작 범위의 0 ℃에서 70 ℃까지 오차는 약 11 ~ 12 %를 나타냅니다. 주위 온도에 의해서 음속이 변함으로 정밀도가 높은 거리를 측정할 경우에는 온도 보상을 필요로 합니다.

 

  - 물체와의 거리 구하는 공식은

    물체와의 거리(D) [m] = 음속(V) [m/s] x 시간(t) [s] = (331.5 + 0.60714 T) x ( t / 2)

    (Output echo pulse는 기준거리를 갔다가 되돌아오는 시간이므로, 실제 거리의 시간은 Output echo pulse의 절반입니다.)

 

 

2. 초음파 센서 NT-TS601 스펙

 

   - 초음파 센서가 오래된 제품이라 현재 구할 수는 없는 것으로 보입니다. 만약 만들게 된다면 다른 초음파 센서(HC-SR04)를 이용해서 사용해야 할 듯합니다. (펄스 만들어주는 소스 변경이 필요)

 

  - 거리 측정 범위 : 약 2 cm ~ 3.3 m

  - 측정 오차 범위 : ± 2 cm  

  - 지속적인 응답 시간 : 최소 20 ms 마다 초음파의 좁은 범위로 정밀한 거리를 측정

  - Input trigger : Positive TTL pulse / typical 5 µs

  - Output pulse : Positive TTL pulse / 최소 110 µs ~ 최대 19.0 ms

  - 하나의 I/O pin에 의해 양방향 TTL pulse 인터페이스 방식으로 5V TTL 마이크로콘트롤러와 연결

 

 

3. 초음파 자 제작 부품 구성

 

  - 아두이노 나노, 18650 충전과 승압이 되는 전원모듈, OLED 0.96 인치, 초음파 센서(NT-TS601)

  - 5가지가 핵심이고 나머지 PCB 기판, 얇은 케이블, 글루건, 절연테이프 등 사용

 

초음파 자 제작에 필요한 부품

 

 

4. 부품 배치

 

  - 충전 전원 보드에 스위치와 충전단자 위치, oled, 초음파 방향 등 손에 잡기도 편리하게 하기 위해서 배치해 보았습니다. 사실 길게 할 수밖에 없는 이유는 18650 배터리 영향이 큽니다.

 

 

부품배치

 

 

5. 조립 완료 상태

 

  - 기본적인 전원은 초음파에 5V, OLED에 3.3V 연결해 주고, 공통으로 GND를 연결해 줍니다.

  - 신호 초음파 SIG에 나노 D8 핀을,  OLED SCK은 나노 A5핀을  OLED SDA는 나노 A4핀을 연결해 줍니다.

  - 충전전원보드에서 아두이노 나노에 VIN 핀에 5V를 그리고 GND를 서로 연결해 줍니다.

 

조립과 납땜 완료 상태

 

 

6. 라이브러리 설치

 

  - 초음파센서는 특별하게 라이브러리가 필요하지 않지만 OLED 같은 경우 하나씩 제어하기가 힘들어 잘 알려진 라이브러리를 사용합니다.

  - 아두이노 IDE에서 "툴 -> 라이브러리 관리"를 선택합니다. 그리고 검색 창에 ssd라고 입력합니다. 그러면 Adafruit SSD1306이 나타나는데 이를 선택해서 Install 합니다. 현재 설치되어 있다면 Update가 나타납니다.

 

 

oled 라이브러리 검색

 

 

  - 라이브러리 설치가 완료되었다면 예제 소스를 확인할 수 있습니다. 아두이노 툴에서 확인할 수 없었고 아래의 파일 경로 이동하면 0.96인치 oled 제어 소스를 확인할 수 있습니다.

 

 

oled 예제파일 경로

 

 

  - ssd1306_128x64_i2c.ino를 불러온 후 업로드시키면 oled화면이 나올 수도 있지만 기본적으로 나타나지 않습니다. 이유는 Sample source안에  I2C Address에 있습니다. 구매한 모듈을 잘 보면 뒷면 I2C 주소 설정 저항이 있는데 초기 값이 맞지 않아서입니다.

 

  그래서 잘 작동한다면(사각형 박스들이 나타나고 사라짐) 수정할 필요가 없고 작동하지 않는다면 소스의 0x3D 부분을 0x3C로 변경해 보시길 바랍니다.

 

  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  -> 3C로 변경 필요.

 

 

7. 아두이노 프로그램 작성

 

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define sonicPin 8

long microToCm(long _micro){
  return (_micro/ 29 / 2);
}

void setup() {
  Serial.begin(9600);

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

   // Clear the buffer
  display.clearDisplay();
  delay(1000);
  
  pinMode(sonicPin, OUTPUT);
  digitalWrite(sonicPin, HIGH);
}


long duration;
long cm;

void loop(){
    digitalWrite(sonicPin,LOW);
    delayMicroseconds(2);
    digitalWrite(sonicPin,HIGH);
    delayMicroseconds(5);
    digitalWrite(sonicPin,LOW);
    pinMode(sonicPin, INPUT);

    duration = pulseIn(sonicPin,HIGH);
    cm = microToCm(duration);

    pinMode(sonicPin, OUTPUT);

    display.clearDisplay();
    display.setTextSize(2);             // Normal 1:1 pixel scale
    display.setTextColor(SSD1306_WHITE);        // Draw white text

    display.setCursor(0,0);             // Start at top-left corner
    display.println("Distance");

    display.setTextSize(3);             // Normal 1:1 pixel scale
    display.setCursor(0,32);             
    display.print(cm);
    display.println(" cm");
    display.display();
    
    delay(100);
}

 

 

8. 최종 완성

 

  - 글루건으로 형태를 고정하고 검은색 절연 테이프로 잘 붙여주었습니다. 조금 크기만 면도기처럼 손에 잡을 수 있는 형태의 초음파 자를 완성하였습니다.

 

  - 현재 초음파 자는 값이 조금 튀는 것이 있고, 2cm ~330cm 정도 제한이 있지만 집에서 충전식으로 간단하게 사용하기는 괜찮은 것 같습니다.

 

 

초음파 자 측정 및 충전 중

 

 

 

<참고 자료>

1. 초음파 원리

https://www.microsonic.de/kr/support/ultrasonic-technology/principle.htm

2. 아두이노 OLED 0.96 I2C 사용하기

https://m.blog.naver.com/compass1111/221113340448

3. 코딩으로 배우는 센서 – 내하출판사

4. NT-TS601 datasheet

 

NT-TS601_datasheet.pdf
0.43MB

반응형