DC 모터
DC 모터
L298N
모터 드라이버 모듈
속도 설정
- ENA, ENB
- 점퍼스위치가 있는 경우 정속도(속도 조절 불가)
- 점퍼스위치를 제거하고 PWM 핀에 연결하면 속도 조절 가능
모터 방향 설정
CAR-EX/app.ino
// 우측 바퀴
int IN1 = 8;
int IN2 = 7;
int EN1 = 9;
// 좌측 바퀴
int IN3 = 5;
int IN4 = 4;
int EN2 = 3; // PWM 제어
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(EN1, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(EN2, OUTPUT);
}
void loop()
{
// 전진
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(EN1, 200);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(EN2, 200);
delay(1000);
// 정지
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(2000);
}
Motor 클래스화
motor.h
#pragma once
#include <Arduino.h>
class Motor {
protected:
int in1; // 전진
int in2; // 후진
int en; // 속도, PWM
public:
Motor(int in1, int in2, int en);
void forward(int speed=200); // 전진
void backward(int speed=200); // 후진
void stop(); // 정지
void setSpeed(int speed);
};
motor.cpp
#include "motor.h"
Motor::Motor(int in1, int in2, int en) : in1(in1), in2(in2), en(en) {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(en, OUTPUT);
}
void Motor::forward(int speed) { // 전진
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(en, speed);
}
void Motor::backward(int speed) { // 후진
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(en, speed);
}
void Motor::stop() { // 정지
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
analogWrite(en, 0);
}
void Motor::setSpeed(int speed) {
analogWrite(en, speed);
}
app.ino
#include "motor.h"
Motor right(8, 7, 9);
Motor left(5, 4, 3);
void setup() {
}
void loop()
{
// 전진
left.forward();
right.forward();
delay(1000);
// 정지
left.stop();
right.stop();
delay(2000);
// 후진
left.backward();
right.backward();
delay(1000);
// 정지
left.stop();
right.stop();
delay(2000);
}
Car 클래스화
car.h
#pragma once
#include <Arduino.h>
#include "motor.h"
class Car {
protected:
Motor right;
Motor left;
public:
Car(int in1, int in2, int en1, int in3, int in4, int en2);
void forward(int speed=200); // 전진
void backward(int speed=200); // 후진
void turnLeft(int speed=200); // 좌회전 r: forward, l: backward
void turnRight(int speed=200); // 우회전 r: backward, l: forward
void setSpeed(int rightSpeed, int leftSpeed);
void stop();
};
car.cpp
# include "car.h"
Car::Car(int in1, int in2, int en1, int in3, int in4, int en2):
right(in1, in2, en1), left(in3, in4, en2) {
}
void Car::forward(int speed) {
right.forward(speed);
left.forward(speed);
}
void Car::backward(int speed) {
right.backward(speed);
left.backward(speed);
}
void Car::turnLeft(int speed) {
right.forward(speed);
left.backward(speed);
}
void Car::turnRight(int speed) {
right.backward(speed);
left.forward(speed);
}
void Car::setSpeed(int rightSpeed, int leftSpeed) {
right.setSpeed(rightSpeed);
left.setSpeed(leftSpeed);
}
void Car::stop() {
right.stop();
left.stop();
}
app.ino
#include <car.h>
Car car(8, 7, 9, 5, 4 ,3);
void setup() {
}
void loop()
{
// 전진
car.forward();
delay(2000);
// 정지
car.stop();
delay(2000);
// 후진
car.backward();
delay(1000);
// 정지
car.stop();
delay(2000);
car.turnLeft();
delay(500);
car.stop();
delay(1000);
car.turnRight();
delay(500);
car.stop();
delay(1000);
}
'IoT 디바이스 활용 > Arduino' 카테고리의 다른 글
Arduino - 블루투스 조이스틱 컨트롤러 (0) | 2020.10.16 |
---|---|
Arduino - 블루투스 통신 HC-05 (BtMiniCom.h) (0) | 2020.10.16 |
Arduino - Digital Sensors (0) | 2020.10.16 |
Arduino - LED Sensors, 온도 센서 (0) | 2020.10.16 |
Arduino - WIFI - ESP8266 - 라이브러리 (WifiUtil.h) (0) | 2020.10.16 |
댓글