# data[].attributes.body
학습 주차별 페들렛, 포트폴리오 (사진 + 내용) 과정 기록

3/13 조 짜시고 - 조별 피드백

1차 콘셉 발표: 3/20

- 각 학반별

- 재료 선정, 물품 구입 3월 말

- 발표 PT : 추진일정, 역할분담, 설계(3D, 손 제도), 단가(예상 비용, 금액), 예상문제점, 해결방안

중간발표: 5/14예정

- 중간완성도

- 학과별 진행

- 조별 발표 후, 개인 피드백(추가), 동료평가 및 조별 상호 평가

최종별표: 6/25

- 동영상 포함,

- 학과별 진행

- 상호평가 + 동료평가(조별 평가)

# data[].attributes.headline
김민기조 컨셉발표 PPT

# data[].attributes.subject
김민기조 컨셉발표 PPT

# data[].attributes.body
https://www.canva.com/design/DAGhdxRiX6M/rCctPc3ctrfzVC1MzJFdYg/edit?utm_content=DAGhdxRiX6M&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton

# data[].attributes.attachment_link.title
그룹 프로젝트 프레젠테이션

# data[].attributes.headline
이원준조 컨셉발표 PPT

# data[].attributes.subject
이원준조 컨셉발표 PPT

# data[].attributes.attachment_link.description
디자인 전문가가 아니어도 무료 템플릿으로 손쉽게 원하는 디자인을 할 수 있어요.

# data[].attributes.headline
장율 조 컨셉발표 ppt

# data[].attributes.subject
장율 조 컨셉발표 ppt

# data[].attributes.body
프로젝트 주제를 정하기 위해 다양한 사이트들을 돌아보았고, 후보들(기타, 악력기, 로봇팔) 중 '가장 창의적이다'는 이유를 들어 만장일치로 로봇팔이 선정되었다.

로봇팔의 초안을 선정하였다.

# data[].attributes.body
3/12

로봇팔의 기초이자 중심이 되는 손가락을 설계하였다. [붙임 1]

20일에 있을 컨셉 발표를 위해 프레젠테이션 제작을 시작하였다. [붙임 2]

기본 배경 틀 제작

목차 및 기타 슬라이드 틀 제작

디자인 선정

3/13

손가락을 3D프린터로 출력하였다. [붙임 3]

# data[].attributes.body
프로젝트 컨셉을 정하기 위해 여러 의견을 나누면서 영상도 찾아보다가, 칩을 제거하는 로봇청소기를 만들면 편리하지않을까 하고 로봇청소기로 선정했다.

# data[].attributes.body
컨셉을 로봇청소기로 정하고 모양을 그려보고, 사용될 재료나, 크기를 조정하면서 기초적인 설계도를 작성했다.

# data[].attributes.body
로봇청소기를 만들기위해 필요한 재료를 여러 사이트를 돌아다니며 찾아보고 적절한 것들을 선정했다.

# data[].attributes.body
3/19

20일에 있을 컨셉발표를 위해 프레젠테이션을 최종 점검하였다.

전체적인 디자인

가독성

내용

# data[].attributes.body
프로젝트 주제를 정하는 과정에서 재활용할 수 있는 재료를 찾아 적극적으로 활용하려 하며, 아이디어실을 둘러보며 쓸만한 재료가 있는지 탐색하는 중이다.

# data[].attributes.body
•프로젝트를 발전시키기 위해 관련 영상을 참고하며 아이디어를 구상하고 있다. 기존 사례를 분석하며 새로운 발명으로 만들기 위해 검색하고 있다 (사진1)

•프로젝트에 들어갈 재료를 구상하고 3D 인벤터로 구상하여 만들고 있다 (사진2)

# data[].attributes.body
프로젝트에 필요한 아두이노를 만들기 위해 팀원들과 상의밑 프로젝트에 필요한 아두이노를 만들고 있다

# data[].attributes.body
잔디 깎이 기계를 만들기 위해 필요한 재료들을 구입하기 위해 팀원들과 소통하며 재료들을 구입하고 있다.

# data[].attributes.body
잔디깎이 기계의 필요한 아두이노를 활용한 회로 설계 및 프로그래밍을 수행하고 있다

# data[].attributes.headline
아두이노 L298N테스트

# data[].attributes.subject
아두이노 L298N테스트

# data[].attributes.body
// 초음파 센서 핀
#define TRIG_LEFT 9
#define ECHO_LEFT 8
#define TRIG_RIGHT 7
#define ECHO_RIGHT 6

// 모터 제어 핀
#define IN1 2 // 왼쪽 모터
#define IN2 3
#define IN3 4 // 오른쪽 모터
#define IN4 5

// 거리 기준값 (장애물 감지 거리 cm)
#define THRESHOLD 15

void setup() {
  // 시리얼
  Serial.begin(9600);

  // 초음파 핀
  pinMode(TRIG_LEFT, OUTPUT);
  pinMode(ECHO_LEFT, INPUT);
  pinMode(TRIG_RIGHT, OUTPUT);
  pinMode(ECHO_RIGHT, INPUT);

  // 모터 핀
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {
  int distanceLeft = measureDistance(TRIG_LEFT, ECHO_LEFT);
  int distanceRight = measureDistance(TRIG_RIGHT, ECHO_RIGHT);

  Serial.print("Left: ");
  Serial.print(distanceLeft);
  Serial.print(" cm, Right: ");
  Serial.print(distanceRight);
  Serial.println(" cm");

  if (distanceLeft < THRESHOLD) {
    // 왼쪽에 장애물 → 잠깐 후진 → 오른쪽으로 회전

    delay(300);
    turnRight();
    delay(500);

  } else if (distanceRight < THRESHOLD) {
    // 오른쪽에 장애물 → 잠깐 후진 → 왼쪽으로 회전

    delay(300);
    turnLeft();
    delay(500);

  } else {
    forward(); // 정면에 장애물 없으면 전진
  }

  delay(100);
}

// 거리 측정 함수
int measureDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  int distance = duration * 0.034 / 2;
  return distance;
}

// 모터 제어 함수
void forward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void backward() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void turnLeft() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void turnRight() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void stopMotors() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

# data[].attributes.body
프로젝트에 필요한 금속재료를 선생님께 부탁하여 재료를 가공하는 모습이다

# data[].attributes.body
프로젝트에 필요한 금속 프레임을 정밀하게 측정하고, 설계도에 맞춰 제작하는 과정이다.

# data[].attributes.body
드릴링 머신을 이용하여 금속 프레임에 필요한 구멍을 뚫고 있는 과정이다

# data[].attributes.body
알루미늄 프로파일을 수직으로 세운 뒤, 설계도에 맞춰 정확한 위치에 고정하고 있는 모습이다.

# data[].attributes.body
로봇청소기를 제작하기 위해 필요한 부품들이 뭐가 있을지 다같이 조사하여 정리하였다.

# data[].attributes.body
각 부품들의 세세한 사용방법과 부품들을 연결했을 때 일어날 수 있는 문제점들을 찾아보고 해결방안을 구하였다.

# data[].attributes.body
로봇청소기 외형 도면을 제작하고, 선생님과 아두이노를 활용해 바퀴가 돌아갈 수 있도록 설계하였다.

# data[].attributes.body
3D프린터 크기의 한계로 인해, 본품을 한 번에 출력할 수 없다는 문제점을 찾아 인터넷에 있는 다른 사람들의 로봇청소기 도면을 참고하며 로봇청소기의 외형 도면을 재구성하였다.

# data[].attributes.headline
고심 끝에 로봇청소기를 4분할하여 출력한

# data[].attributes.body
고심 끝에 로봇청소기를 4분할하여 출력한다는 해결책을 찾아내었다.

# data[].attributes.body
배송이 도착한 배터리를 아두이노에 연결하기 위해 선생님에게 도움을 받는 과정이다.

# data[].attributes.headline
이원준조 중간발표 PPT

# data[].attributes.subject
이원준조 중간발표 PPT

# data[].attributes.attachment_link.description
디자인 전문가가 아니어도 무료 템플릿으로 손쉽게 원하는 디자인을 할 수 있어요.

# data[].attributes.body
새롭게 만든 도면을 이용하여 3D프린터를 출력하고, 아두이노를 이용하여 장애물을 감지할 수 있도록 설계를 하는 모습이다.

# data[].attributes.body
아두이노를 사용하여 감지하는 부분에 손을 가져다대면, 바퀴가 멈추도록 아두이노를 구성하였다.

# data[].attributes.body
28일에 있을 중간발표를 위해 PPT를 만들며, 기존의 4분할 도면에 내부 부품들이 들어가기에 공간이 외소하다는 문제점이 생겨 추가 구입할 물품을 찾아보며 도면을 재구성하였다.

# data[].attributes.body
도면을 재구성한 결과, 기존의 4분할 방법을 사용하는 대신 윗 부분을 뚜껑처럼 나눠 나사를 박아 조립할 수 있도록 하였다.

# data[].attributes.body
배터리에 흡입모터와 모터를 연결하는 도중 배터리가 모터들을 버티지 못 하게 된다는 문제가 발생했다. 또한 모터를 장착하였을 때 바퀴가 지면에 닿는 부분이 미세하여 제대로 작동이 안 된다는 문제점이 발생했다.

# data[].attributes.headline
아두이노 통합 코드 (팬모터+바퀴)

# data[].attributes.subject
아두이노 통합 코드 (팬모터+바퀴)

# data[].attributes.body
// 초음파 센서 핀

#define TRIG_LEFT 9

#define ECHO_LEFT 8

#define TRIG_RIGHT 7

#define ECHO_RIGHT 6

// 모터 제어 핀

#define IN1 2 // 왼쪽 모터

#define IN2 3

#define IN3 4 // 오른쪽 모터

#define IN4 5

// 거리 기준값 (장애물 감지 거리 cm)

#define THRESHOLD 15

// 진공 펌프 핀

const int VACUUM_PIN = 11;

void setup() {

// 시리얼 통신

Serial.begin(9600);

Serial.println("Vacuum Test");

// 진공 펌프 핀 설정 및 PWM 출력 고정

pinMode(VACUUM_PIN, OUTPUT);

analogWrite(VACUUM_PIN, 50);

// 초음파 센서 핀 설정

pinMode(TRIG_LEFT, OUTPUT);

pinMode(ECHO_LEFT, INPUT);

pinMode(TRIG_RIGHT, OUTPUT);

pinMode(ECHO_RIGHT, INPUT);

// 모터 제어 핀 설정

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

}

void loop() {

int distanceLeft = measureDistance(TRIG_LEFT, ECHO_LEFT);

int distanceRight = measureDistance(TRIG_RIGHT, ECHO_RIGHT);

Serial.print("Left: ");

Serial.print(distanceLeft);

Serial.print(" cm, Right: ");

Serial.print(distanceRight);

Serial.println(" cm");

if (distanceLeft < THRESHOLD) {

delay(300);

turnRight();

delay(500);

}

else if (distanceRight < THRESHOLD) {

delay(300);

turnLeft();

delay(500);

}

else {

forward();

}

delay(100);

}

// 거리 측정 함수

int measureDistance(int trigPin, int echoPin) {

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

long duration = pulseIn(echoPin, HIGH);

int distance = duration * 0.034 / 2;

return distance;

}

// 모터 제어 함수

void forward() {

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

}

void backward() {

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

}

void turnLeft() {

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

}

void turnRight() {

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

}

void stopMotors() {

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

}

# data[].attributes.body
// 초음파 센서 핀
#define TRIG_LEFT 9
#define ECHO_LEFT 8
#define TRIG_RIGHT 7
#define ECHO_RIGHT 6

// 모터 제어 핀
#define IN1 2 // 왼쪽 모터
#define IN2 3
#define IN3 4 // 오른쪽 모터
#define IN4 5

// 거리 기준값 (장애물 감지 거리 cm)
// 왼쪽 센서 임계값을 좀 더 크게 설정
#define THRESHOLD_LEFT 18
#define THRESHOLD_RIGHT 15

// 진공 펌프 핀
const int VACUUM_PIN = 11;

void setup() {
  Serial.begin(9600);
  Serial.println("Vacuum Test");

  pinMode(VACUUM_PIN, OUTPUT);
  analogWrite(VACUUM_PIN, 50);

  pinMode(TRIG_LEFT, OUTPUT);
  pinMode(ECHO_LEFT, INPUT);
  pinMode(TRIG_RIGHT, OUTPUT);
  pinMode(ECHO_RIGHT, INPUT);

  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {
  int distanceLeft = measureDistance(TRIG_LEFT, ECHO_LEFT);
  int distanceRight = measureDistance(TRIG_RIGHT, ECHO_RIGHT);

  Serial.print("Left: ");
  Serial.print(distanceLeft);
  Serial.print(" cm, Right: ");
  Serial.print(distanceRight);
  Serial.println(" cm");

  if (distanceLeft < THRESHOLD_LEFT && distanceRight < THRESHOLD_RIGHT) {
    delay(300);
    backward();
    delay(500);
  }
  else if (distanceLeft < THRESHOLD_LEFT) {
    delay(300);
    turnRight();
    delay(500);
  }
  else if (distanceRight < THRESHOLD_RIGHT) {
    delay(300);
    turnLeft();
    delay(500);
  }
  else {
    forward();
  }

  delay(100);
}

// 거리 측정 함수
int measureDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  int distance = duration * 0.034 / 2;
  return distance;
}

// 모터 제어 함수
void forward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void backward() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

// 제자리 회전 함수: 한쪽은 앞으로, 한쪽은 뒤로
void turnLeft() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void turnRight() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void stopMotors() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}