본문 바로가기
아두이노 응용

[아두이노] cds sensor와 servo motor로 t-rex game 스페이스키 자동으로 누르게하기

by 작동미학 2020. 4. 9.
반응형

▶ 이 가이드를 따라하면

-  인터넷에서 좋은 호응을 얻었던 Chrome브라우저의 t-rex game automation을 따라해볼 수 있다.

 

▶ 부품 설명 및 회로 구성

 최근 간단하면서도 재미있는 arduino DIY를 보았는데, 바로 크롬 브라우저의 공룡 게임 자동화이다.

바로 이녀석이다. 화면에 직접 조도센서를 붙여서 서보 모터로 스페이스키를 자동으로 눌러서 점프시켜준다.

https://twitter.com/null4bl3/status/1247032404990210053?s=20

cds라는 조도 센서(하나에 수십원 정도밖에 안하는)와 서보모터를 간단히 결합하면 된다. 서보모터에 대한 강의는 본 블로그에도 존재한다. 

https://bbangpan.tistory.com/6

 

[모터/서보모터] 소형 서보 모터(servo motor) 아두이노 구동 가이드

서보 모터(servo motor)를 아두이노에 붙여서 작동하는 가이드 ▶ 이 가이드를 따라하면, - servo motor를 아두이노 UNO와 연결하여 자유롭게 제어할 수 있다 - 아두이노 기본 내장 라이브러리인 servo의 사용법을..

bbangpan.tistory.com


cds 센서는 10k옴 저항과 함께 사용할 수 있는데, 아래를 참고하면 상세 내용을 알 수 있다.

https://kocoafab.cc/tutorial/view/356

 

조도센서-빛 측정하기

조도센서란? 조도센서(Photo Resistor)는 주변 환경의 밝기를 측정할 수 있는 센서입니다. 광에너지(빛)를 받으면 내부에 움직이는 전자가 발생하여 전도율이 변하는 광전효과를 가지는 소자를 사용합니다. 이번 프로젝트에서 사용하는 조도센서는 황화카드뮴을(Cds)를 소자로 사용했기 때문에 Cds 센서라고 부르기도 합니다.   Cds센서는 작고 단순한 구조로 되어있기 때문에 가격이 매우 싸고 가장 보편적으로 사용되고 있습니다. 조도 센서는 실생활에서 다

kocoafab.cc

여기서는 곧바로 간단하게 위 두가지를 결합시키자. 아래와 같이 조립된다.

구성도이 복잡해보이지만, 서보모터의 5V, GND를 아두이노 보드에 연결하고 제어핀을 9번 pin에 꼽고, cds센서는 5V, GND를 10K옴 저항과 조도 센서를 직렬 연결한 아래 위에 연결한 후, 조도 센서와 저항의 가운데에 선을 따서 A0 측정핀에 연결하였다.

cds 센서 부위를 좀더 확대해보면 위와 같다. cds센서와 아두이노 보드 연결은 위의 조도센서 상세 링크를 참조한다.

cds 센서를 적당한 도구를 이용해 모니터에 붙이고 t-rex game을 연결한다. 장애물이 지나갈때 해당 모니터 작은 부위가 어두워지는 것을 cds sensor로 감지하는 것이다. t-rex game은 크롬브라우저에서 랜선을 뽑으면 볼 수 있다.

소스 코드는 아래를 사용한다. 아래에 주의한다.

https://github.com/bbangpan/bbangpan.com/blob/master/neibc_servo_light/neibc_servo_light.ino

 

bbangpan/bbangpan.com

sources for bbangpan.com. Contribute to bbangpan/bbangpan.com development by creating an account on GitHub.

github.com

 A) cds 센서의 정확도가 이 장치의 안정성을 좌우한다. 안정성이 떨어지면 점프 해야할 곳에서 점프를 하지 않고, 점프를 하지 말아야 할 곳에서 점프를 하게 된다. 여기서는 3개의 값을 읽어 평균하여 사용하니 조금 나았다.

 B) cds 센서는 어두울수록 값이 높아진다. 하기의 threshold값은 (jump기준이 되는 어두운 값과, 평소 흰색 배경일때의 값) 모니터 밝기나 상황에 따라 조절해야 한다.

 

 

소스도 복사해서 붙여넣어 보자.

/* Originally posted on www.bbangpan.com

Program Description: Servo motor & light sensor test code (t-rex game automation imitation) 
Needed library : Servo(Arduino's default library)
Tested on : Arduino 1.8.5, Arduino UNO R3, Small size servo motor + cds sensor + 10k ohm register

Copyright (c) 2020 www.bbangpan.com. All right reserved.

This program can be used for any non-commercial purpose freely. */

#include 

int servoPin = 9;
int cdsPin = A0;
int jump = 0;
int readytojump = 0;
int cdst1 = 0;
int cdst2 = 0;
 
Servo servo;

int angle = 0; // servo position in degrees

void setup() {
  servo.attach(servoPin);
  Serial.begin(9600);
  servo.write(0);
  delay(1000);
}

 

void loop() {
  int  cdst3 = analogRead(cdsPin);

  // averaging past three values
  int  cds = (cdst1 + cdst2 + cdst3) / 3                ;
  cdst1 = cdst2;
  cdst2 = cdst3;

  if (cds > 206 && readytojump == 1) {
      jump = 1;
      readytojump = 0;
  } else if(cds < 190) {
      readytojump = 1;
      jump = 0; 
  }
  Serial.print("cds =  ");
  Serial.println(cds);

  if(jump == 1) { 
    jump = 0;
    Serial.println("JUMP!");
    servo.write(80);
    delay(150);
    servo.write(0);                                               
  }

}

그러면 아래와 같이 선인장이 나타나면 스페이스 키를 눌러줘서 공룡이 잘 뛰는 영상을 만들어낼 수 있다.

http://youtu.be/EQR3sl44xVc

고정만 잘하면 몇가지 재미있는 응용을 만들 수 있겠다. 스마트폰 게임 노가다에도 쓸 수 있지 않을까?

 

▶ 구매 가이드

서보모터 : http://www.aliexpress.com/wholesale?SearchText=arduino+servo

(시험용의 경우는 소형(micro)으로 구매하기를 권고한다. 중형이 넘어가면 서보모터 드라이버가 별도로 필요하다)

cds 센서 : https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20200408083733&SearchText=cds+sensor

 

 강의 키워드

서보 모터, servo motor, 아두이도, Arduino, t-rex, trex, automation, 자동화, cds sensor, 공룡 게임, 크롬

 

반응형