이번 실습에서는 초음파 센서를 통해 측정한 거리를 LCD에 출력하고,
해당 거리 값에 따라 피에조 부저에서 다른 멜로디가 재생되도록 구성했다.
곰세마리와 작은 별 멜로디는 WORK - 5 (과제) 를 참조하여 재사용 했다.
우선 사용하는 센서들이 많기 때문에 코드를 가독성 좋게 정리하는데 신경을 많이 썻다.
또한 아두이노 IDE에서는 원하는 라이브러리를 사용했기 때문에 lcd.begin()으로 초기화를 했지만 오늘 실습은 TinkerCad를 통해 내장된 라이브러리를 사용해야 하기 때문에 lcd.init()으로 초기화를 했다.
오늘 실습의 핵심인 초음파 센서(HC-SR04)는 거리 측정을 위한 센서로,
triger와 echo 두 개의 주요 핀을 사용한다.
triger핀은 초음파를 발생시키는 핀이므로pinMode(triger, OUTPUT);
→ 출력(OUTPUT) 모드로 설정해야 한다.
echo핀은 triger에서 발사한 초음파가 물체에 반사되어 돌아왔을 때pinMode(echoPin, INPUT);
→ 입력(INPUT) 모드로 설정해주어야 한다.
함수에 익숙해지고 많이 사용해보는 것이 중요하다고 생각하여,
이번 시간에는 직접 함수를 만들어 활용하는 데 집중했다.
우선, 초음파 센서를 사용하여 거리를 측정하는 함수를 만들었다.
함수 이름을 checkDistance()로 하려 했는데, checkInstance()로 만들었다,,
(Distance라고 해야 했는데 왜 Instance라고 했는지 모르겠다 글 쓰면서 알았다; ㄱ-)
unsigned int distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
distance = pulseIn(echoPin, HIGH) / 2 * 0.034;
return distance;
unsigned int distance
→ 거리는 음수가 나올 수 없으므로 부호 없는 정수로 선언
digitalWrite(trigPin, LOW) → HIGH -> 다시 LOW
→ 초음파 발사를 위한 트리거 신호 설정
pulseIn(echoPin, HIGH)
→ 초음파가 돌아올 때 까지 echo 핀이 HIGH 상태인 시간(us) 을 측정
거리 계산 공식 :
거리 = (시간 x 속도) / 2
= pulseIn 결과 / 2 * 0.034
(공기 중 음속은 약 340m/s = 0.034 cm/us)
return distance;loop()함수 등에서 활용 가능오늘은 다양한 센서들을 조합하여 과제를 수행했다. 그리고 C언어 공부 중 특히 어렵게 느껴졌던 함수에 대해 더 익숙해지고자 직접 함수를 만들어 사용했다.
이제는 새로운 센서를 배워도 사용하는 데 큰 어려움이 없다. 필요한 라이브러리도 스스로 찾아서 설치할 수 있고, 라이브러리 설명서만 조금 읽어보면 코드도 금방 이해할 수 있게 되었다. 무엇보다 나에게 맞는 라이브러리를 선택하는 것도 중요하다는 점을 느꼈다.
그동안 배웠던 센서들을 활용해, 단지 머릿속에서 상상만 했던 것들을 실제로 구현해 보니 꽤 뿌듯한 경험이었다.
또한 함수를 적극적으로 활용하니 코드 구조가 훨씬 깔끔해졌다는 것도 확실히 느낄 수 있었다.
이번 시간의 핵심은 초음파 센서이기 때문에 보여주지는 않았지만, lcdSetup(), lilStar(), threeBear()와 같은 함수들도 내가 따로 만들어 활용한 것이다.
예전에는 몰랐지만, 코드가 점점 길어지고 복잡해질수록 가독성과 생산성을 고려한 구조화가 정말 중요하다는 것을 체감하는 중이다.