BASIC4MCU | 질문게시판 | 아두이노 블루투스 dc모터 속도 조절 질문
페이지 정보
작성자 master 작성일2018-09-06 08:39 조회14,017회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=2932
본문
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
//모터 PIN 설정
#define LEFT_A1 4 //왼쪽 바퀴
#define LEFT_B1 5 //왼쪽 바퀴
#define RIGHT_A2 6 //오른쪽 바퀴
#define RIGHT_B2 7 //오른쪽 바퀴
#define en1 9
#define en1 11
//블루투스 PIN 설정
#define BLUE_TX 2 //블루투스 TX
#define BLUE_RX 3 //블루투스 RXSoftwareSerial mySerial(BLUE_TX, BLUE_RX); //시리얼 통신을 위한 객체선언
char value; //블루투스에서 받는 값
void setup() {
Serial.begin(9600); //시리얼모니터
mySerial.begin(9600); //블루투스 시리얼 개방pinMode(LEFT_A1, OUTPUT);
pinMode(RIGHT_A2, OUTPUT);
pinMode(LEFT_B1, OUTPUT);
pinMode(RIGHT_B2, OUTPUT);
Serial.println("Arduino Bluetooth Car is ready to start");
}
void loop() {
while(mySerial.available()) //mySerial에 전송된 값이 있으면
{
value = mySerial.read(); //전송값 읽음
Serial.print(value);if(value == 'l'){ //좌회전(강)
Serial.println("left");
left();
}else if(value == 'r'){ //우회전(강)
Serial.println("right");
right();
}else if(value == 'f'){ //전진
Serial.println("forward");
forward();
}else if(value == 'b'){ //후진
Serial.println("backward");
backward();
}else if(value == 'w'){ //우회전(약)
Serial.println("slow right");
sRight();
}else if(value == 'q'){ //좌회전(약)
Serial.println("slow left");
sLeft();
}else if(value == 's'){ //정지
Serial.println("stop");
stop();
}
}}
// 자동차 움직임 정의 Function 들
void forward(){
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
analogWrite(9, 51);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
analogWrite(11, 51);
}
void backward(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, HIGH);
analogWrite(9, 51);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, HIGH);
analogWrite(11, 51);
}
void left(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, HIGH);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
}
void right(){
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, HIGH);
}
void sLeft(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
}
void sRight(){
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, LOW);
}
void stop(){
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, LOW);
}일단 코딩한 것을 올렸습니다.여기서 PWM 4,5번에 하나 (PIN 9)6,7번에 하나 (PIN 11)연결해 놓고 했는데 속도가 계속 일정하게 빠릅니다.테스터기를 이용해 전압을 체크를 했는데255 때 4.7v51 때 4.7v로 똑같습니다.정말 급합니다.어떻게 하면 속도를 줄일수 있을까요?아 그리고 전진과 후진 멈춤만 할꺼라서 거기에만 analogWrite를 썼습니다.모터드라이버와 가변저항기 가지고 있습니다.//// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-08-25 오후 9:08:30// by Ok-Hyun Park//#include <SoftwareSerial.h> // 시리얼 통신 라이브러리 호출//모터 PIN 설정#define LEFT_A1 4 // 왼쪽 바퀴#define LEFT_B1 5 // 왼쪽 바퀴#define RIGHT_A2 6 // 오른쪽 바퀴#define RIGHT_B2 7 // 오른쪽 바퀴#define enL 9#define enR 11//블루투스 PIN 설정#define BLUE_TX 2// 블루투스 TX#define BLUE_RX 3// 블루투스 RXSoftwareSerial mySerial(BLUE_TX,BLUE_RX); // 시리얼 통신을 위한 객체선언char value;// 블루투스에서 받는 값//void setup(){Serial.begin(9600); // 시리얼모니터mySerial.begin(9600); // 블루투스 시리얼 개방pinMode(LEFT_A1,OUTPUT);pinMode(RIGHT_A2,OUTPUT);pinMode(LEFT_B1,OUTPUT);pinMode(RIGHT_B2,OUTPUT);Serial.println("Arduino Bluetooth Car is ready to start");}//void loop(){while(mySerial.available()){ // mySerial에 전송된 값이 있으면value=mySerial.read(); // 전송값 읽음Serial.print(value);if(value=='l'){ Serial.println("left"); left(); } // 좌회전(강)if(value=='r'){ Serial.println("right"); right(); } // 우회전(강)if(value=='f'){ Serial.println("forward"); forward(); } // 전진if(value=='b'){ Serial.println("backward"); backward(); } // 후진if(value=='w'){ Serial.println("sLOW right"); sRight(); } // 우회전(약)if(value=='q'){ Serial.println("sLOW left"); sLeft(); } // 좌회전(약)if(value=='s'){ Serial.println("stop"); stop(); } // 정지}}//void forward(){digitalWrite(LEFT_A1 ,HIGH); digitalWrite(LEFT_B1 ,LOW ); analogWrite(enL,51);digitalWrite(RIGHT_A2,HIGH); digitalWrite(RIGHT_B2,LOW ); analogWrite(enR,51);}//void backward(){digitalWrite(LEFT_A1 ,LOW ); digitalWrite(LEFT_B1 ,HIGH); analogWrite(enL,51);digitalWrite(RIGHT_A2,LOW ); digitalWrite(RIGHT_B2,HIGH); analogWrite(enR,51);}//void left(){digitalWrite(LEFT_A1 ,LOW ); digitalWrite(LEFT_B1 ,HIGH);digitalWrite(RIGHT_A2,HIGH); digitalWrite(RIGHT_B2,LOW );}//void right(){digitalWrite(LEFT_A1 ,HIGH); digitalWrite(LEFT_B1 ,LOW );digitalWrite(RIGHT_A2,LOW ); digitalWrite(RIGHT_B2,HIGH);}//void sLeft(){digitalWrite(LEFT_A1 ,LOW ); digitalWrite(LEFT_B1 ,LOW );digitalWrite(RIGHT_A2,HIGH); digitalWrite(RIGHT_B2,LOW );}//void sRight(){digitalWrite(LEFT_A1 ,HIGH); digitalWrite(LEFT_B1 ,LOW );digitalWrite(RIGHT_A2,LOW ); digitalWrite(RIGHT_B2,LOW );}//void stop(){digitalWrite(LEFT_A1 ,LOW ); digitalWrite(LEFT_B1 ,LOW );digitalWrite(RIGHT_A2,LOW ); digitalWrite(RIGHT_B2,LOW );}
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-08-25 오후 9:11:59// by Ok-Hyun Park//#define enL 9#define enR 11//void setup(){Serial.begin(9600);}//void loop(){analogWrite(enL, 0); analogWrite(enR, 0); Serial.println(" 0"); delay(5000);analogWrite(enL, 50); analogWrite(enR, 50); Serial.println(" 50"); delay(5000);analogWrite(enL,100); analogWrite(enR,100); Serial.println("100"); delay(5000);analogWrite(enL,150); analogWrite(enR,150); Serial.println("150"); delay(5000);analogWrite(enL,200); analogWrite(enR,200); Serial.println("200"); delay(5000);analogWrite(enL,250); analogWrite(enR,250); Serial.println("250"); delay(5000);}
전압 테스트는 간단한 코드로 하세요전압이 다르게 나와야지 정상입니다.
댓글 0
조회수 14,017등록된 댓글이 없습니다.