본문 바로가기

프로그래밍/Arduino

거리에 따른 3색 LED 색 변경

  1. 준비물
    - 초음파 센서 1개
    - 3색 LED 1개


  2. 코드
  3. //초음파센서 trig, echo핀 설정
    const int distTrigPin = 2;
    const int distEchoPin = 3;
    
    //3색 LED 핀 설정
    const int ledRedPin = 11;
    const int ledGreenPin = 10;
    const int ledBluePin = 9;
    
    void setup() {
      pinMode(distTrigPin, OUTPUT);
      pinMode(distEchoPin, INPUT);
    }
    
    void loop() {
      analogWrite(ledRedPin, 0);
      analogWrite(ledGreenPin, 0);
      analogWrite(ledBluePin, 0);
    
      //거리 측정
      digitalWrite(distTrigPin, HIGH); //스위치 온
      // 1sec = 1000 ms, 1ms = 1000 microSec
      delayMicroseconds(10);
      digitalWrite(distTrigPin, LOW); //잠깐 쉬고 바로 꺼줌
    
      //pulseIn: pin이 HIGH가 될 때까지의 시간을 구함
      //최대 1초까지 대기, 대기 중 HIGH가 안된다면 0으로 반환
      long duration = pulseIn(distEchoPin, HIGH);
      if(duration == 0) {
        return;
      }
    
      // 29.1를 나누면 cm단위, 왕복이기 때문에 58.2
      long distance = duration / 58.2;
    
      if(distance < 10) {
        analogWrite(ledRedPin, 255);
      }
      else if(distance < 20) {
        analogWrite(ledGreenPin , 255);
      }
      else if(distance < 30) {
        analogWrite(ledBluePin , 255);
      }
    
      delay(100);
    }
    


  4. 영상


  5. 알게된 점
    - 초음파센서 거리 측정 과정
       1) 초음파 센서의 trigger에서 초음파 발사
       2) 발사된 초음파 사물에 반사
       3) 반사되어 나온 초음파 echo에서 받아서 거리 측정

    - echo의 기본값은 LOW, 초음파 받으면 HIGH로 변경(HIGH가 될 때까지 시간을 계산해 거리를 측정)
    - trigger에서 초음파를 날린 후 짧은 시간(microSec) 안에 바로 꺼줘야 정확한 측정 가능

    - pulseIn(p1, p2)
       1) p1번호의 pin이 p2상태가 될 때까지의 시간을 구함
       2) 기본적으로 최대 1초까지 대기하지만, 1초가 넘어가도 상태가 변하지 않는 경우 경우 0을 반환
       3) pulseIn에서 구한 값을 29.1로 나누면 cm값을 구할 수 있음(초음파 센서는 왕복이므로 58.2를 나눔)