BASIC4MCU | 질문게시판 | 아두이노 DC모터 제어 질문
페이지 정보
작성자 master 작성일2018-07-02 10:04 조회10,785회 댓글0건본문
DC모터(PGM42-DS4572E) 24V 1/24감속비 모터를 모터 드라이브(DMC-16)을 통해 아두이노 UNO 또는 MEGA를 이용해서 제어하려고 하는데 코딩 설계부분에 어려움을 느껴 질문하게 되었습니다.
현재 작성해본 코딩 초안입니다.
엔코더 모터를 구입하여 작동시키려 하였으나, 사정상 단순 시간제어로 모터를 제어하려고 합니다.
아두이노 스위치 3개를 추가하여 각 스위치를 누름에 따라 지정된 시간만큼 모터를 회전시키려 합니다.
검토 및 수정 해주시면 감사하겠습니다.
int speed1 = 10;
int dir1 = 12;
const int Bt = 6;
int A = 0;
const int Bt2 = 5;
int B = 0;
const int Bt3 = 4;
int C = 0;
int TIME = 22700;
int TIME2 = 35600;
int TIME3 = 58500;
void setup() {
Serial.begin(9600);
pinMode(Bt, INPUT_PULLUP);
pinMode(Bt2, INPUT_PULLUP);
pinMode(Bt3, INPUT_PULLUP);
pinMode(dir1, OUTPUT);
}
void loop() {
A = digitalRead(Bt);
B = digitalRead(Bt2);
C = digitalRead(Bt3);
if (A == 0){
digitalWrite(dir1, HIGH);
analogWrite(speed1, 51);
delay(TIME);
analogWrite(speed1, 0);
delay(600);
}
if (B == 0){
digitalWrite(dir1, HIGH);
analogWrite(speed1, 33);
delay(TIME2);
analogWrite(speed1, 0);
delay(600);
}
if (C == 0){
digitalWrite(dir1, HIGH);
analogWrite(speed1, 21);
delay(TIME3);
analogWrite(speed1, 0);
delay(600);
}
else
{
digitalWrite(dir1, LOW);
analogWrite(speed1, 0);
}
}
* 추가로 아두이노 스위치를 눌러 모터가 회전할때 시리얼 모니터에 모터 속도와 출력이 표시되도록 코딩도 함께 도와주시면 감사하겠습니다.
//
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-05-26 오전 11:15:29// by Ok-Hyun Park//const int speed1=10,dir1=12,Bt1=6,Bt2=5,Bt3=4;//int TIME1=22700,TIME2=35600,TIME3=58500;//void setup(){Serial.begin(9600);pinMode(Bt1,INPUT_PULLUP);pinMode(Bt2,INPUT_PULLUP);pinMode(Bt3,INPUT_PULLUP);pinMode(dir1,OUTPUT);}//void loop(){if(!digitalRead(Bt1)){Serial.print("A speed="); Serial.println(speed1);digitalWrite(dir1,HIGH); analogWrite(speed1,51); delay(TIME1); analogWrite(speed1,0);Serial.println("A Processed");}if(!digitalRead(Bt2)){Serial.print("B speed="); Serial.println(speed2);digitalWrite(dir1,HIGH); analogWrite(speed1,33); delay(TIME2); analogWrite(speed1,0);Serial.println("B Processed");}if(!digitalRead(Bt3)){Serial.print("C speed="); Serial.println(speed3);digitalWrite(dir1,HIGH); analogWrite(speed1,21); delay(TIME3); analogWrite(speed1,0);Serial.println("C Processed");}}
딜레이 시간이 22초~59초 정도로 상당히 깁니다.
동작하는 동안 시리얼 모니터에 뭔가를 출력하도록 수정 해보죠
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-05-26 오전 11:23:23// by Ok-Hyun Park//const int speed1=10,dir1=12,Bt1=6,Bt2=5,Bt3=4;//int TIME1=227,TIME2=356,TIME3=585;//void setup(){Serial.begin(9600);pinMode(Bt1,INPUT_PULLUP);pinMode(Bt2,INPUT_PULLUP);pinMode(Bt3,INPUT_PULLUP);pinMode(dir1,OUTPUT); digitalWrite(dir1,HIGH);}//void loop(){if(!digitalRead(Bt1)){Serial.print("A speed="); Serial.println(speed1);analogWrite(speed1,51);for(int i=0;i<TIME1;i++){delay(100);if((i%10)==0){ Serial.print((TIME1-i)/10); Serial.print(" "); } // 1초마다 출력}analogWrite(speed1,0);Serial.println("A Processed");}if(!digitalRead(Bt2)){Serial.print("B speed="); Serial.println(speed2);analogWrite(speed1,33);for(int i=0;i<TIME2;i++){delay(100);if((i%10)==0){ Serial.print((TIME2-i)/10); Serial.print(" "); } // 1초마다 출력}analogWrite(speed1,0);Serial.println("B Processed");}if(!digitalRead(Bt3)){Serial.print("C speed="); Serial.println(speed3);analogWrite(speed1,21);for(int i=0;i<TIME3;i++){delay(100);if((i%10)==0){ Serial.print((TIME3-i)/10); Serial.print(" "); } // 1초마다 출력}analogWrite(speed1,0);Serial.println("C Processed");}}
댓글 0
조회수 10,785등록된 댓글이 없습니다.