반응형

아두이노, 농구대 점수판 예제 코드

 

글. 오상문 sualchi@daum.net

 

모형 농구대를 제작하고 공이 통과할 때마다 1점씩 올리는 예제입니다.

 

공을 저 사진의 바구니 그림 통 안으로 넣습니다. 

흰 상자에 아두이노 보드가 들어있으며, 디스플레이를 고정하는 지지대이기도 합니다. 

초음파 센서는 원통에 부착되었고 상자 속 아두이노 보드와 점프선으로 연결됩니다.

 

참고로 농구대 링(상자)은 앞에서는 잘 안보이지만 뒤쪽 고정대에 장착된 상태입니다.

 

[LCD 4핀]                   [아두이노]

-----------------------------------------

 GND   -------------------  GND

 VCC   -------------------   5V

 SDA   -------------------   A4

 SCL   -------------------   A5 

 

[초음파 센서]              [아두이노]

-----------------------------------------

 VCC ----------------------  5V

 GND ---------------------- GND

TRIG ----------------------  디지털 7번핀

ECHO ---------------------  디지털 6번핀

 

[그림] 모형으로 만든 농구대와 점수 출력용 디스플레이 (상자에 아두이노 보드 들어감)

 

 

[그림] 농구공(실제로는 탁구공 ^^)이 통과되면 점수가 1점 올라갑니다. 

디스플레이가 잘 안보이는데 자세히 보면 0에서 1로 올라간 것을 볼 수 있습니다.

 

 

 

[그림] 농구대 박스 내부에 설치된 아두이노와 디스플레이 연결 모습 

 

 


 

다음은 예제 코드입니다.

 

이 예제는 메뉴에서 '툴 > 라이브러리 관리'에서 설치된 라이브러리에 

LiquidCrystal_I2C가 있는지 확인하고 

없으면 관리 창에서 이 라이브러리를 검색해서 설치해야 합니다. 

 

// Compatible with the Arduino IDE 1.0
// Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

 

#define TRIG 7
#define ECHO 6

 

int score = 0;
int timer = 60;
unsigned long distance;

 

// set the LCD address to 0x20 for a 16 chars and 4 line display
// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27,16,2);  // 2줄 디스플레이로 설정
 
void setup()
{
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT);  // 초음파 출력부 설정
  pinMode(ECHO, INPUT);   // 초음파 입력부 설정
 
  lcd.init();            // LCD 초기화 
  lcd.backlight();    // 백라이트 on
  lcd.clear();         // 내용 지움  
  lcd.print("Score: ");     // "Score: " 문자열 출력 
  lcd.print(score);         // 이어서... 점수 출력 
//  lcd.setCursor(0,1);   // 나중에 시간 제한 설정시 사용하려고 설명문으로 처리함
//  lcd.print("Time: ");        
//  lcd.print(timer);         
}
 
void loop()
{  

   // 초음파 센서 측정 부분 
  digitalWrite(TRIG, LOW);
  delayMicroseconds(1);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);       
  distance = pulseIn(ECHO, HIGH)/29/2; // 확인 거리를 cm 단위로 변경

 

  if(distance < 5) {  // 거리 5cm 미만이면 공이 통과하는 경우이고 점수 1점 올림
    score++;
    lcd.clear();
    lcd.print("Score: ");
    lcd.print(score);

//  lcd.setCursor(0,1);  // 나중에 시간 제한 설정시 사용하려고 설명문으로 처리함
//  lcd.print("Time: "); 
//  lcd.print(timer);    

    delay(500);   // 중복 점수 발생하지 않도록 0.5초 지연 
                       // (공이 통에서 튕기면서 머무는 시간을 고려한 값임) 

  }

 

  delay(10);   // 0.01초 단위로 초음파 검사. 더 늘려도 될 것 같지만... 
}

 

<이상>

 

반응형

+ Recent posts