6차시 : 자율 주행 자동차 만들기 (2)

# 6차시 목차

  • 들어가기(문제 이해하기)

[상상노트] 가장 중요한 목표와 소중한 시간 관리



  • 스마트 RC카 프로그래밍 실습

모터 드라이버(L298N) 실습

모터 드라이버(L298N) 예제 코드 살펴보기

스마트 RC카 주행 제어


  • 생각 펼치기

지속 가능한 팀 활동을 위해 이야기 나누기

들어가기 (문제 이해하기)

상상노트

여러분의 삶에서 가장 중요한 목표는 무엇이고 이를 이루기 위해 여러분의 소중한 시간은 어떻게 관리되고 있나요?

목표 관리, 시간 관리에 도움이 되는 나만의 방법이 있다면 소개해주세요.

스마트 RC카를 만드는 과정도 동일합니다. 주어진 시간 안에서 팀원과 함께 역할을 잘 나누어 진행해주세요.


스마트 RC카 프로그래밍 실습

[모터 드라이버]

• 모터 드라이버(L298N)는 스마트 RC카의 바퀴를 움직이는 모터의 회전 방향이나 회전 속도를 조절하기 위해 필요한 장치

• 아두이노 보드를 활용해서 직접 모터 속도, 회전 방향을 조절할 수 있지만, 사용하는 모터가 요구하는 전원을 공급할 수 없어 모터 드라이버(L298N)를 사용

• 모터 드라이버(L298N)를 사용하기 위해서 별도의 전원 공급(배터리 추가 연결)이 필요



모터드라이버(L298N) 예제 코드 살펴보기

int RightMotor_E_pin = 5; // 오른쪽 모터의 Enable & PWM

int RightMotor_1_pin = 8; // 오른쪽 모터 제어선 IN1

int RightMotor_2_pin = 9; // 오른쪽 모터 제어선 IN2

int LeftMotor_3_pin = 10; // 왼쪽 모터 제어선 IN3

int LeftMotor_4_pin = 11; // 왼쪽 모터 제어선 IN4

int LeftMotor_E_pin = 6; // 왼쪽 모터의 Enable & PWM

void SmartCar_Go();

void SmartCar_Back();

//좌우 모터 속도 조절, 설정 가능 최대 속도 : 255

int L_MotorSpeed = 153; // 왼쪽 모터 속도

int R_MotorSpeed = 153; // 오른쪽 모터 속도

void setup() {

pinMode(RightMotor_E_pin, OUTPUT); // 출력모드로 설정

pinMode(RightMotor_1_pin, OUTPUT);

pinMode(RightMotor_2_pin, OUTPUT);

pinMode(LeftMotor_3_pin, OUTPUT);

pinMode(LeftMotor_4_pin, OUTPUT);

pinMode(LeftMotor_E_pin, OUTPUT);

}

void loop() {

SmartCar_Go();

delay(3000);

SmartCar_Back();

delay(3000);

}

void SmartCar_Go() { // 전진

Serial.println("Forward");

digitalWrite(RightMotor_1_pin, HIGH);

digitalWrite(RightMotor_2_pin, LOW);

digitalWrite(LeftMotor_3_pin, HIGH);

digitalWrite(LeftMotor_4_pin, LOW);

analogWrite(RightMotor_E_pin, L_MotorSpeed);

analogWrite(LeftMotor_E_pin, R_MotorSpeed);

}

void SmartCar_Back() { // 후진

Serial.println("Backward");

digitalWrite(RightMotor_1_pin, LOW);

digitalWrite(RightMotor_2_pin, HIGH);

digitalWrite(LeftMotor_3_pin, LOW);

digitalWrite(LeftMotor_4_pin, HIGH);

analogWrite(RightMotor_E_pin, L_MotorSpeed);

analogWrite(LeftMotor_E_pin, R_MotorSpeed);

}

digitalWrite(RightMotor_1_pin, HIGH);

digitalWrite(RightMotor_2_pin, LOW);

: 오른쪽 모터 정방향 회전

digitalWrite(RightMotor_1_pin, LOW);

digitalWrite(RightMotor_2_pin, HIGH);

: 오른쪽 모터 역방향 회전


digitalWrite(LeftMotor_3_pin, HIGH);

digitalWrite(LeftMotor_4_pin, LOW);

: 왼쪽 모터 정방향 회전

digitalWrite(LeftMotor_3_pin, LOW);

digitalWrite(LeftMotor_4_pin, HIGH);

: 왼쪽 모터 역방향 회전


스마트 RC카 주행 제어

1. 오른쪽 모터와 왼쪽 모터의 속도를 동일하게 설정하고 직진하였을 때, RC카가 오른쪽으로 향하게 되면 어떻게 해야 할까요?


[코드]

11 int L_MotorSpeed = 153;

12 int R_MotorSpeed = 153;

[코드]

11 int L_MotorSpeed = 153;

12 int R_MotorSpeed = 180;

회전이 더 느린 쪽의 속도를 높여주거나, 더 높은 곳을 낮춰주어 모터 속도를 교정할 수 있습니다.

2-1. 모터 드라이버 방향 실습 - 모터가 진전하려면?


2-2. 모터 드라이버 방향 실습 - 모터가 전하려면?


3. 모터 드라이버 주행 실습

- 정회전(직진), 역회전(후진), 오른쪽 왼쪽 모터 회전 속도 조절하여 방향 전환



1.정해진 시간에 정한 목표를 모두 달성했나요? 목표로 삼은 결과물까지 도달하지 못했다면, 그 원인은 무엇이라고 생각하시나요? 조금 더 효율적으로 결과물을 만들기 위해서는 어떤 방법이 있을까요?


2.팀원과 함께 새로운 제품을 만드는 과정은 결코 쉬운 일이 아닙니다. 팀워크 속에는 소통, 신뢰, 관계, 협업 등 문제 해결을 위해 사람과 사람이 서로 만나 풀어야 하는 다양한 내용과 방법들이 담겨있습니다.


3.이제 팀원들과 함께 이번 과정을 통해 지속 가능한 팀 활동을 위해 꼭 필요한 내용들이 무엇인지 이야기를 나눠보고 글로 정리해봅시다.


[생각 정리] 오늘 학습한 내용을 키워드 중심으로 정리해봅시다.