WORK - 7 (과제)

JMIN·2025년 5월 17일

사물인터넷

목록 보기
18/23

🚀 도전과제

  • 거리 출력을 LCD로 표시하고 거리에 따라 피에조 부저 출력하기

⚡ 회로도

📜 코드

이번 실습에서는 초음파 센서를 통해 측정한 거리를 LCD에 출력하고,
해당 거리 값에 따라 피에조 부저에서 다른 멜로디가 재생되도록 구성했다.

  • 거리가 50cm를 초과하면
    → LCD에 거리 출력
    → 피에조 부저로 '작은 별' 멜로디 재생

  • 50cm 이하일 경우
    → LCD에 거리 출력
    → 피에조 부저로 '곰 세 마리' 멜로디 재생

    곰세마리와 작은 별 멜로디는 WORK - 5 (과제) 를 참조하여 재사용 했다.

우선 사용하는 센서들이 많기 때문에 코드를 가독성 좋게 정리하는데 신경을 많이 썻다.
또한 아두이노 IDE에서는 원하는 라이브러리를 사용했기 때문에 lcd.begin()으로 초기화를 했지만 오늘 실습은 TinkerCad를 통해 내장된 라이브러리를 사용해야 하기 때문에 lcd.init()으로 초기화를 했다.

초음파 센서의 작동원리 및 핀 설정

오늘 실습의 핵심인 초음파 센서(HC-SR04)는 거리 측정을 위한 센서로,
trigerecho 두 개의 주요 핀을 사용한다.

  • 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()와 같은 함수들도 내가 따로 만들어 활용한 것이다.

예전에는 몰랐지만, 코드가 점점 길어지고 복잡해질수록 가독성생산성을 고려한 구조화가 정말 중요하다는 것을 체감하는 중이다.

profile
🐂처럼 살기;

0개의 댓글