월요일

[아두이노] 초음파 레이더 만들기

서보모터와 초음파 센서를 이용해 레이더를 만들어 보겠습니다.

아래의 물품들을 준비해주세요.

<준비물>

아두이노 우노 R3




모터쉴드 v2.0




서보모터 SG90




초음파 센서 HC-SR04




먼저 모터쉴드를 아두이노 위로 적층해줍니다.




서보모터를 모터쉴드에 연결합니다.

서보모터는 갈색선이 Vcc, 빨간선이 GND, 주황색선이 Signal 입니다.




모터쉴드의 Servo 2번에 꽂아줍니다.




초음파 센서를 연결합니다.

초음파 센서의 핀은 보드에 인쇄되어 있어 쉽게 알 수 있습니다.

가장 왼쪽이 Vcc, 가장 오른쪽이 GND, 왼쪽 두 번째가 Trig, 오른쪽 두 번째가 Echo 입니다.




Vcc는 5V에, GND는 GND에, Trig는 10번에, Echo는 11번에 꽂아줍니다.




마지막으로 센서와 모터의 회전부를 결합해줍니다.

이제 연결은 끝났습니다.

컴퓨터와 연결하고 아두이노를 켜줍니다.

아래의 코드를 입력해줍니다.


#define TRIG 11
#define ECHO 10
#include <Servo.h>
Servo servo;

int m=1; // 서보모터의 시작 각도
int M=179; // 서보모터의 끝 각도
int pos=M;
int a=1; // 서보모터 각도의 증가량

void setup(){
  pinMode(TRIG,OUTPUT);
  pinMode(ECHO,INPUT);
  Serial.begin(115200);
  servo.attach(9); // 모터쉴드 Servo2의 핀은 9번과 연결
}

void loop(){
  servo.write(pos);
  Serial.print(pos);
  Serial.print(",");
  Serial.print(distancee());
  Serial.print(".");
  pos=pos-a;
  if(pos<=m||pos>=M){
    a*=-1; // 음수를 곱해 방향을 전환
  }
 delay(15);
}

unsigned long distancee(){
  unsigned long distance;
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG,LOW);
  distance = pulseIn(ECHO,HIGH)/58.2;
  return distance;
}


컴파일 및 업로드 후 시리얼 모니터를 띄워줍니다.




시리얼 모니터에 서버모터의 각도와 감지거리의 값이 교대로 나오게 됩니다.

아래는 작동 모습입니다.




이제 센서값으로 실제 레이더처럼 만들어 보겠습니다.

프로세싱이라는 과정이 필요합니다.

아래의 링크로 가서 본인의 OS에 맞는 것을 다운 받습니다.

https://processing.org/download/?processing

바로 실행하여 아래의 코드를 입력해줍니다.


import processing.serial.*;
Serial myport;
String myString = null;
int angle;
int dis;

void setup(){
  myport = new Serial(this, "COM3", 115200); // 자신의 포트와 보드레이트를 입력해줍니다.
  size(1300,700);
  background(321);
}

void draw(){
  noStroke();
  fill(0,7);
  rect(0,0,width,height);
  rader();
  drawline();
  drawangry();
}

void serialEvent(Serial p){
  try{
    myString = p.readStringUntil('.');
    if(myString != null){
      String[] list = split(myString,',');
      angle = int(list[0]);
      dis = int(list[1].replace(".",""));
      print(angle);
      println(dis);
    }
  }
  catch(Exception e){
  }
}

void drawline(){
  pushMatrix();
  translate(width/2,height);
  strokeWeight(4);
  stroke(98,245,31);
  line(0,0,width/2*cos(radians(angle)),-width/2*sin(radians(angle)));
  popMatrix();
}

void drawangry(){
  pushMatrix();
  translate(width/2,height);
  stroke(255,10,10);
  float d = (width/2.0/30.0)*(float)dis;
    if(d<width/2){
      line(d*cos(radians(angle)),-d*sin(radians(angle)), width/2*cos(radians(angle)), -width/2*sin(radians(angle)));
    }
    popMatrix();
}

void rader(){
  pushMatrix();
  translate(width/2,height);
  noFill();
  strokeWeight(2);
  stroke(98,245,31);
  arc(0,0,width,width,PI,TWO_PI);

  arc(0,0,width*2/3,width*2/3,PI,TWO_PI);
  arc(0,0,width*1/3,width*1/3,PI,TWO_PI);
  arc(0,0,width*5/6,width*5/6,PI,TWO_PI);
  arc(0,0,width*1/6,width*1/6,PI,TWO_PI);
  arc(0,0,width*3/6,width*3/6,PI,TWO_PI);
  line(0,0,width/2*cos(radians(30)),-width/2*sin(radians(30)));
  line(0,0,width/2*cos(radians(60)),-width/2*sin(radians(60)));
  line(0,0,width/2*cos(radians(90)),-width/2*sin(radians(90)));
  line(0,0,width/2*cos(radians(120)),-width/2*sin(radians(120)));
  line(0,0,width/2*cos(radians(150)),-width/2*sin(radians(150)));
  textAlign(RIGHT);
  textSize(30);
  fill(98,245,31);
  text("10cm",width/6,0);
  text("20cm",width*2/6,0);
  text("30cm",width*3/6,0);
  popMatrix();
}


본인이 사용하는 포트와 보드레이트로 수정하고 실행해줍니다.




실행버튼을 누르면 레이더 화면이 뜨게 되고 감지되는 것이 있으면 빨간색으로 바뀌게 됩니다.




아래는 작동 모습입니다.




[아두이노] blink 예제 실행

아두이노가 준비되었으니 기본 제공되는 예제를 실행해보겠습니다.

[파일] -> [예제] -> [01.Basics] -> [Blink]를 클릭합니다.

Blink는 아두이노 보드 내 LED를 1초에 한 번씩 깜빡이게하는 예제입니다.

왼쪽 상단 체크 모양을 눌러 컴파일합니다.




체크 모양 옆 화살표 모양을 눌러 보드에 업로드합니다.




이제 보드를 살펴봅니다.

노란 LED가 1초에 한 번씩 깜빡입니다.




코드 내 DELAY(1000)의 괄호 안 숫자를 조절하면 더 빠르게 혹은 더 느리게 조절이 가능합니다.

[아두이노] 준비

아두이노 우노 R3와 연결 케이블을 준비합니다.


아두이노 공식홈페이지에 가면 정품 아두이노를 살 수 있지만,




저는 가난한 대학생이므로ㅠ 호환보드를 사용하도록 하겠습니다.





케이블은 USB type A ~ USB type B로 준비해줍니다.




HW가 준비되었다면, 이를 제어할 SW가 필요합니다.

아두이노 홈페이지에 가서 Arduino IDE를 다운 받아야 합니다.




SOFTWARE 배너에서 DOWNLOADS를 클릭해줍니다.





본인 OS에 맞는 것을 다운 받아 설치해줍니다.




저는 microsoft store에 있는 아두이노 앱을 다운 받았습니다.




다음으로 드라이버를 설치해주어야 합니다.

정품이 아닌 호환보드는 드라이버를 따로 찾아서 설치해야 합니다.

보드를 구매한 곳의 안내에 따르면...




먼저 링크에 있는 파일을 다운로드하고 압축을 풀어줍니다.




폴더 내 모든 것을 선택하고 복사합니다.

사용자 폴더 내 [문서] -> [Arduino]로 갑니다.

붙여넣기하여 모두 덮어씌워 줍니다.




컴퓨터와 아두이노를 케이블로 연결해줍니다.

장치관리자에 가서 연결된 포트를 확인해줍니다.




저는 COM3로 연결되어 있네요.

포트번호를 기억해두시고 아까 전에 설치한 Arduino IDE를 실행합니다.

[툴] -> [포트]로 가서 본인의 포트번호를 클릭합니다.




[툴] -> [보드]로 가서 WAVGAT UNO R3를 클릭합니다.




이로써 아두이노를 사용할 준비가 끝났습니다.