DOGGY Vol.2 실행 영상



DOGGY Vol.2 실행 영상




설명 : 사람을 낯설어 하고 가까이 가지 못 하는 유기견을 표현한 Interaction 작품
초음파 센서를 이용하여 앞의 물체를 인식하고 거리가 20cm 이내에 물체가 있을 경우
멈추고 LED를 켜며, 고개를 절래절래 흔든다

아쉬운 점 : 시간이 이틀 정도만 더 있었다면 카메라를 달아 사람 얼굴을 인식하고
뒤로 물러서는 액션을 보여줄 수 있었을 것 같다
사람 얼굴을 DOGGY가 보고 인지하고 있다는 것을 사람이 알게 될 경우
인터랙션 효과가 배가 될 것이라고 생각하기 때문에 아쉬움이 더 크다

배운 점 : 파이널 때는 모든 과목의 과제들이 집중되기 때문에 시간이 더욱 촉박하다
제한된 시간 내에 최대의 효과를 내기 위해 중요한 것에 집중할 필요가 있을 것 같다
어떤 것이 더 중요하고 덜 중요한지 우선순위를 정해 계획을 잘 세워야 할 것 같다
이번 프로젝트에서는 카메라로 사람 얼굴을 인식시키는 데에 일주일을 소비한 것이
큰 타격이었다 다음에는 먼저 할 수 있는 것부터 다 구현해 놓은 뒤에, 남는 시간에
차근차근 다음단계를 진행해 나가도록 해야겠다




Arduino 4WD robot Interaction 소스코드

// connect motor controller pins to Arduino digital pins
// motor one
int enA = 10;
int in1 = 9;
int in2 = 8;
// motor two
int enB = 5;
int in3 = 7;
int in4 = 6;
void setup()
{
  // set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(115200);  //initial the Serial
}
void demoOne()
{
  // this function will run the motors in both directions at a fixed speed
  // turn on motor A
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 200);
  // turn on motor B
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 200);
  delay(2000);
  // now change motor directions
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(2000);
  // now turn off motors
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}
void demoTwo()
{
  // this function will run the motors across the range of possible speeds
  // note that maximum speed is determined by the motor itself and the operating voltage
  // the PWM values sent by analogWrite() are fractions of the maximum speed possible
  // by your hardware
  // turn on motors
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  // accelerate from zero to maximum speed
  for (int i = 0; i < 256; i++)
  {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  }
  // decelerate from maximum speed to zero
  for (int i = 255; i >= 0; --i)
  {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  }
  // now turn off motors
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void go() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 255);
  // turn on motor B
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 255);
  delay(2000);
}

void stopA() {
  // now turn off motors
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}


void goR() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(enA, 255);
  delay(1000);
}

void goL() {
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enB, 255);
  delay(1000);
}
void loop()
{
  if (Serial.available())  {
    byte cmd = Serial.read();
    //    Serial.write(Serial.read());//send what has been received
    if (cmd == 0x55) {
      go();
    } else if (cmd == 0x44) {
      stopA();
    } else if (cmd == 0x52) {
      goR();
    } else if (cmd == 0x4C) {
      goL();
    }
  }
}




" 이종호 교수님 블로그에서 퍼옴 "