블로그 이미지
조이키트 블로그
아두이노, 라즈베리파이, 반도체 센서/모듈 활용

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice

250x250
2020. 7. 28. 10:39 아두이노 기초
728x90
반응형

아두이노와 초음파센서를 사용하여 거리에 따라 LED 색을 변하는 프로젝트를 만들 수 있다.

아래는 간단한 예시 코드이다. 이 코드는 초음파센서로 측정된 거리에 따라 RGB LED의 색상을 변화시킨다.

거리가 가까워지면 빨간색에서 시작하여 멀어질수록 파란색으로 변화한다.

 

코딩 

// 초음파 센서 핀 정의
#define trigPin 13
#define echoPin 12

// RGB LED 핀 정의
#define redPin 9
#define greenPin 10
#define bluePin 11

// 초음파 센서 변수
long duration;
int distance;

// RGB LED 변수
int redValue = 255;
int greenValue = 0;
int blueValue = 0;

void setup() {
  // 핀 모드 설정
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  // 시리얼 통신 시작
  Serial.begin(9600);
}

void loop() {
  // 초음파 센서로 거리 측정
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  
  // 거리에 따라 LED 색상 변경
  if (distance <= 30) {
    redValue = 255;
    greenValue = 0;
    blueValue = 0;
  } else if (distance > 30 && distance <= 60) {
    redValue = 0;
    greenValue = 255;
    blueValue = 0;
  } else {
    redValue = 0;
    greenValue = 0;
    blueValue = 255;
  }
  
  // LED에 색상 적용
  analogWrite(redPin, redValue);
  analogWrite(greenPin, greenValue);
  analogWrite(bluePin, blueValue);
  
  // 시리얼 모니터에 거리 출력
  Serial.print("Distance: ");
  Serial.println(distance);
  
  // 500ms 대기
  delay(500);
}

 

준비품 : 아두이노uno R3, 초음파센서, 3색 LED, 300옴 저항 3개

아두이노 UNO
초음파 센서
3색 LED
300옴 저항
아두이노 우노 R3 초음파 센서 3색 LED 300옴 저항

 

 

다음과 같이 회로에 요소들을 연결한다

 

먼저 3색 LED의 RED를 아두이노 9번핀, GREEN을 10번핀, BLUE를 11번핀에 300옴 저항을 각각 연결하여 아두이노에 연결한다.

다음 초음파센서의 TRIG를 아두이노 2번핀에 연결하고, ECHO를 아두이노 3번핀에 연결한다.

센서의 VCC를 아두이노 +5V에 연결하고, 센서의 GNE는 아두이노 GND에 똑같이 연결한다.

그리고 3색 LED의 2번 다리를 +5V에 연결하고 USB케이블을 아두이노 포트에 연결한다.

 

 

다음 아두이노 IDE를 실행하여 다음과 같이 코딩한다.

초음파센서 거리측정

초음파 센서의 TRIG, ECHO핀을 매크로 상수로 TREG는 2로, ECHO는 3으로 선언한다.

삼색 LED의 RED를 9, GREEN은 10, BLUE은 11로 정의한다.

void setup문에서 핀모드를 TRIG는 OUTPUT로, ECHO는 INPUT로 설정한다.

다음 void loop문에서 digitalWrite(TRIG, LOW/HIGH)는 초음파센서의 TRIG에서 초음파를 발사하는 부분이다. 

long distance = pulseIn(ECHO, HIGH)/58.2; 는 pulseIn 명령어를 사용하여 ECHO에 초음파가 들어오는 시간을 계산한다. 여기서 58.2는 시간을 cm단위로 변환하여 주는 역활을 한다.

삼색 LED의 R, G, B를 모두 255로 설정하여 초기상태에서는 LED를 끄게한다.

여기서 255로 설정하는 이유는 삼색LED의 공동다리가 "+" 이기 때문이다. 만일 LED의 공동다리가 "-"이라면 R, G, B의 값을 모두 0으로 해주어야 한다.

다음 if문에서 distance < 10은 거리 10cm이하에서는 RED가 켜지고, 거리 20cm 이하에서는 GREEN을 켜며, 30cm이하에서는 BLUE가 켜진다. 여기서 analogWrite값을 0으로 정해주어야만 LED가 켜진다. 위에서 얘기한것처럼 LED의 공동핀이 "-"인 경우는 analogWrite값을 255로 정해주어야 할 것이다.

위와 같이 전부 코딩을 끝낸 후 업로드 시켜주면 초음파에 어떠한 물체가 감지되면 거리에 따른 값이 LED에 현시될 것이다.

 

출력 결과

https://www.youtube.com/watch?v=jP6X4kVFmto&t=20s

 

 

 

 

728x90
반응형
posted by 조이키트 블로그