1. IR 센서의 반사광으로 흑백 구분하기



2. 바닥면의 IR 센서로 바닥의 밝기 측정하기

[참고] Jellibi AGV는 반사광이 많을수록 analogRead() 함수로 읽히는 값이 더 작도록 회로가 구성되어 있습니다.

3. 전면의 중앙 IR 센서로 거리 측정하기 응용 실습



[주의] IR 센서로 정확한 거리를 측정하기 힘듭니다.
반사하는 벽이나 종이의 재질과 흑백 색상에 따라서 측정값이 많이 달라질 수 있습니다.
4. 디버깅(Debugging) 실습 : 소스 코드에서 문제점 찾아 수정하기 (오류가 포함된 소스 코드)
u디버깅(Debugging) 이란?
컴퓨터 프로그램이나 하드웨어 장치에서 잘못된 부분, 즉 버그(오류)를 찾아서
수정하거나 회피하는 처리과정이다.
흔히 프로그램의 오류를 찾아 수정하는 작업을 할 때 “디버깅한다”고 표현한다.
- u아두이노 코딩 시 흔히 사용하는 디버깅 방법
- 시리얼 모니터에 모니터링할 값을 출력하여 확인
- LCD/OLED 등에 모니터링할 값을 출력하여 확인
- LED, BUZZER 소리, 모터 회전 등의 출력으로 확인
- 버깅 실습 예제 소스
오른쪽 코드는 직전의 실습 코드와 같이 전면의 IR 센서로 거리를 측정하는 코드입니다.
하지만, 여기서는 디버깅 실습을 위해 의도적으로 2군데 오류를 추가했습니다.
업로드하여 실행했을 때 시리얼 모니터에 거리 측정값이 잘 나오도록 수정하세요!

예상되는 오류를 수정하고 실행하여 측정 값을 시리얼 모니터로 확인하면서 (만약 오류가 더 있다면 이를 수정하고 다시 실행하여 결과를 확인하면서)
디버깅을 해보세요!
5. 소스 코드에서 문제점 찾아 수정하기 (소스 수정 및 해설)

- 오류가 있는 소스에서는 IR 센서의 값을 읽기 위해 digitalRead() 함수를 사용하고 있으므로,
센서를 읽은 value1 값은 0 또는 1 이 됩니다. - if 구문에서 if( value1 < 1000 )인 경우가 먼저 검사되므로, 두 번째 비교 검사인 else if( value1 < 950 ) 부분은 아예
실행이 되지 않습니다.
[ 거리 측정이 잘 되도록 수정된 소스 코드 ]

- IR 센서의 값을 읽을 때는 analogRead() 함수를 사용해야 합니다. ( 반환 값 : 0 ~ 1023 )
- if 구문에서 if( value1 < 950 )인 경우를 먼저 검사하고, 그 다음에 else if( value1 < 1000 ) 인 경우를 검사해야
값에 따라 두 조건이 모두 검사됩니다.
다음은 전면의 모든 센서의 데이터를 cm로 대략 변환하는 프로그램입니다. 소스 코드를 작성 후 테스트해 보시기 바랍니다.
////////////// IR센서 (바닥면 2개 + 전면 3개)
#define pinLT1 A6 // 1번(왼쪽) IR센서 연결 핀
#define pinLT2 A7 // 2번(오른쪽) IR센서 연결 핀
#define pinLT3 A0 // 전면 왼쪽 IR센서
#define pinLT4 A1 // 전면 중앙 IR센서
#define pinLT5 A2 // 전면 오른쪽 IR센서
//////////////////// 메인 프로그램 (setup & loop)
void setup() {
Serial.begin( 9600 ); // 시리얼 통신 (bps)
}
void printDistance(int value)
{
if( value < 300 )
Serial.print( ", 0.5 Cm 이내" );
else if( value < 700 )
Serial.print( ", 1 Cm 이내" );
else if( value < 850 )
Serial.print( ", 2 Cm 이내" );
else if( value < 950 )
Serial.print( ", 5 Cm 이내" );
else if( value < 1000 )
Serial.print( ", 10 Cm 이내" );
else
Serial.print( ", 멀거나 없음" );
}
void loop() {
int left_value = analogRead( pinLT3 ); // 왼쪽 IR센서 값 읽기
int center_value = analogRead( pinLT4 ); // 가운데 IR센서 값 읽기
int right_value = analogRead( pinLT5 ); // 오른쪽 IR센서 값 읽기
Serial.print( "왼쪽 IR값= " ); // IR센서로 반사되는 값을 읽음
Serial.print( left_value ); // 색상이나 반사면 상태에 의존
printDistance(left_value);
Serial.print( "가운데 IR값= " ); // IR센서로 반사되는 값을 읽음
Serial.print( center_value ); // 색상이나 반사면 상태에 의존
printDistance(center_value);
Serial.print( "오른쪽운데 IR값= " ); // IR센서로 반사되는 값을 읽음
Serial.print( right_value ); // 색상이나 반사면 상태에 의존
printDistance(right_value);
Serial.println();
delay( 1000 );
}728x90
728x90
'소프트웨어 > Arduino' 카테고리의 다른 글
| 스마트 액츄에이터의 회전 방향과 속도 제어 코딩 실습 (0) | 2026.03.18 |
|---|---|
| 스마트 액츄에이터의 회전 방향과 속도 제어 (0) | 2026.03.18 |
| 주요 센서들의 입력 처리와 디버깅 실습 #1 (0) | 2026.03.12 |
| 스마트 액츄에이터 (0) | 2026.03.12 |
| 모바일베이스(MobileBase) (0) | 2026.03.12 |