[오늘의 타겟] DC 모터 / 모터 드라이버
- DC 모터
- 2개에 선에 전압을 입력하면 모터가 돌아간다.
- 전압의 방향을 반대로 입력하면 모터도 반대로 돌아간다.
- 참고자료
https://m.blog.naver.com/kids_power/221572444008
- 모터 드라이브 : L298N
->모터 가동에 필요한 충분한 전류, 전압을 제공.
참고자료. 모터드라이브를 사용하는 이유.
*** 오늘 실습 재료
DC 모터 2개
바퀴 2개
모터드라이버(빨간색)
아두이노
아두이노 선
아두이노 케이블
[실습 1] 모터 1개 전진-후진 기본코드
- 사전작업 : 5v 인에이블 점퍼제거
- 모터드라이브 기본 회로 구성
- 바퀴 결합
- 아두이노 모터 드라이버 구동회로
// 3번과 4번 핀은 모터 제어에 관한 핀
int IN1Pin = 3;
int IN2Pin = 4;
// 5번핀은 모터의 힘을 설정해주는 핀
int ENPin = 5;
void setup() {
pinMode(IN1Pin, OUTPUT);
pinMode(IN2Pin, OUTPUT); // 3, 4번 제어핀들은 핀모드를 출력은로 설정
analogWrite(ENPin, 255); //5번 핀에 255의 최대 힘을 설정한다.
}
void loop() {
//Go : 핀 3, 핀 4 에 신호를 다르게 하면 전진
digitalWrite(IN1Pin, HIGH);
digitalWrite(IN2Pin, LOW);
delay(5000);//5sec
//Back : 핀 3, 핀 4 에 신호를 다르게 하면 후진
digitalWrite(IN1Pin, LOW);
digitalWrite(IN2Pin, HIGH);
delay(5000);//5sec
//Brake (Stop) 핀 3, 4에 똑같이 High를 주거나 Low을 주면 은 멈춘다.
digitalWrite(IN1Pin, HIGH);
digitalWrite(IN2Pin, HIGH);
delay(5000);//1sec
}
[실습 2] 모터 1개 전진-후진울 시리얼모니터로 제어
- 실습1 회로를 그대로 씁니다.
- 시리얼 모니터란?
-> 컴퓨터로 아두이노를 제어하기 위한 통신 포트
- 시리얼 통신으로 모터 제어 코드
int IN1Pin = 3;
int IN2Pin = 4;
int ENPin = 5;
void setup() {
pinMode(IN1Pin, OUTPUT);
pinMode(IN2Pin, OUTPUT);
analogWrite(ENPin, 255); //Max Speed
Serial.begin(9600);
Serial.println("start !! ");
}
void loop() {
if(Serial.available()) //시리얼모니터에서 데이터가 들어오면
{
char in_data; // 입력된 데이터 저장을 위한 변수
in_data = Serial.read(); //입력된 데이터 in_data에 저장
Serial.print("data : ");
Serial.println(in_data);
if(in_data == '1') //입력된 데이터가 '1'이라면
{
digitalWrite(IN1Pin, HIGH);
digitalWrite(IN2Pin, LOW);
}
else if(in_data == '2') //입력된 데이터가 '2'이라면
{
//뒤로 회전 (어떤 방향으로 꽂았느냐에 따라서 방향 반대)
digitalWrite(IN1Pin, LOW);
digitalWrite(IN2Pin, HIGH);
}
else if(in_data == '3') //입력된 데이터가 '3'이라면
{
//회전 정지
digitalWrite(IN1Pin, HIGH);
digitalWrite(IN2Pin, HIGH);
}
}
}
자료 출처 : https://codingrun.com/111
아래 사진과 같이 잘 작동 하나요?
[실습 3] 모터 2개를 제어 해 보자.
모터 2개 제어 회로 주요 이슈
- 모터가 2개부터는 외부 전원에서 전원을 모터드라이브에 추가로 공급해 주어야 한다.
- 이때 포인트는 외부 전압원 GND 와 아두이노 GND를 연결하여 전기적으로 평형을 맞추어야 한다.
- 위 회로에서는 아두이노 V_in 에 외부 전원 VCC 를 공급해 줌으로 아두이노에게도 전원을 공급한다.
실습 회로와 프로그래밍 코드는 아래 url을 타고 들어가서 진행하세요~!
https://steemit.com/arduino/@jhis21c/dc-dc
[도전 과제]
모터 2개 회로를 시리얼 모니터로 제어 해보세요.
W 누르면 바퀴 전진
S 누르면 바퀴 후진
A 누르면 좌회전
D 누르면 우회전
X 누르면 버튼은 바퀴 모두 정지
- 회로는 [실습 3] 회로 그대로 쓰시면 됩니다.
- 프로그래밍 코드는 [실습 2] 회로를 수정해서 쓰면 됩니다.
int IN1Pin = 8;
int IN2Pin = 7;
int IN3Pin = 2;
int IN4Pin = 4;
int ENAPin = 6;
int ENBPin = 3;
void setup() {
Serial.begin(9600);
pinMode(IN1Pin, OUTPUT);
pinMode(IN2Pin, OUTPUT);
pinMode(IN3Pin, OUTPUT);
pinMode(IN4Pin, OUTPUT);
analogWrite(ENAPin, 255);
analogWrite(ENBPin, 255);
}
void loop()
{
if(Serial.available()) //시리얼모니터에서 데이터가 들어오면
{
char in_data; // 입력된 데이터 저장을 위한 변수
in_data = Serial.read(); //입력된 데이터 in_data에 저장
Serial.print("data : ");
Serial.println(in_data);
if(in_data == 's')
{
digitalWrite(IN1Pin, HIGH);
digitalWrite(IN2Pin, LOW);
digitalWrite(IN3Pin, HIGH);
digitalWrite(IN4Pin, LOW);
delay(1000);
}
else if(in_data == 'w')
{
digitalWrite(IN1Pin, LOW);
digitalWrite(IN2Pin, HIGH);
digitalWrite(IN3Pin, LOW);
digitalWrite(IN4Pin, HIGH);
delay(1000);
}
else if(in_data == 'd')
{
digitalWrite(IN1Pin, HIGH);
digitalWrite(IN2Pin, LOW);
digitalWrite(IN3Pin, LOW);
digitalWrite(IN4Pin, HIGH);
}
else if(in_data == 'a')
{
digitalWrite(IN1Pin, LOW);
digitalWrite(IN2Pin, HIGH);
digitalWrite(IN3Pin, HIGH);
digitalWrite(IN4Pin, LOW);
}
else if(in_data == 'x')
{
digitalWrite(IN1Pin, HIGH);
digitalWrite(IN2Pin, HIGH);
digitalWrite(IN3Pin, HIGH);
digitalWrite(IN4Pin, HIGH);
}
}
}
- 도전과제 완료 후 원킹쌤에게 검사 받고 보고서 작성하면 됩니다.
끝.
'메이커 프로젝트 > 아두이노 +' 카테고리의 다른 글
아두이노 서보모터 제어(심화) (2) | 2021.09.28 |
---|---|
아두이노 블루투스 제어 (0) | 2021.09.03 |
[모듈 1-6] 아두이노 부저로 소리내기(feat. 전자 피아노 만들기) (2) | 2020.09.22 |
[ 모듈 1-5 ] 아두이노 초음파 센서 제어하기(feat. processing 아두이노 시각화) (2) | 2020.09.22 |
[모듈 1-4] 아두이노 시리얼통신 제어(Feat. 로봇팔 만들기) (3) | 2020.09.08 |