2016-07-16 2 views
0

방금 ​​Arduino를 배우기 시작했습니다. 나는 자율성을 얻고 자하는 로봇과 손을 잡는 것에 대해 생각했다. 나는 DC 모터의 모터 컨트롤을 이해하려고 애써왔다. 나는 자원을 찾기 위해 노력했지만 적절하게 내 문제를 설명하는 것을 찾을 수 없다. 나는 모터의 코드를 쓰는 방법을 잘못 이해하고 있음을 이해할 수 없다 (comp sci undergrad). 단지 테스트를 위해 모터를 실행하기위한Arduino Uno DC- 모터 컨트롤러 개념 설명

내 코드입니다 : 난 그냥 아무 소용이 일정한 속도로 모터를 실행하려고

// MotorA 
int dir1PinA = 7; 
int dir2PinA = 5; 
int speedPinA = 6; 

//motor B 

int dir1PinB = 4; 
int dir2PinB = 2; 
int speedPinB = 3; 


void setup() { 
    //Serial.begin(9600); 
    pinMode (dir1PinA, OUTPUT); 
    pinMode (dir2PinA, OUTPUT); 
    pinMode (speedPinA,OUTPUT); 
    pinMode (dir1PinB, OUTPUT); 
    pinMode (dir2PinB, OUTPUT); 
    pinMode(speedPinB, OUTPUT); 

    // put your setup code here, to run once: 

} 

void loop() { 
    analogWrite(speedPinA, 500); 
    analogWrite(speedPinB, 500); 
    digitalWrite (dir1PinA, LOW); 
    digitalWrite (dir2PinA, HIGH); 
    digitalWrite (dir1PinB,HIGH); 
    digitalWrite (dir2PinB, LOW); 

    // put your main code here, to run repeatedly: 

} 

. 같은 방법으로 모터를 제어하는 ​​예제 코드를 발견했지만 루프와 변수가 추가되었습니다.speed. 작동

테스트 코드는 다음과 같습니다

//Motor A 
int dir1PinA = 7; 
int dir2PinA = 5; 
int speedPinA = 6; 

//motor B 
int dir1PinB = 4; 
int dir2PinB = 2; 
int speedPinB = 3; 

unsigned long time; 
int speed; 
int dir; 

void setup() 
{ 
pinMode (dir1PinA, OUTPUT); 
pinMode (dir2PinA, OUTPUT); 
pinMode (speedPinA, OUTPUT); 
pinMode (dir1PinB, OUTPUT); 
pinMode (dir2PinB, OUTPUT); 
pinMode (speedPinB, OUTPUT); 
time = millis(); 
speed = 0; 
dir = 1; 
} 

void loop() 
{ 
analogWrite (speedPinA, speed); 
analogWrite (speedPinB, 555 - speed); 

// set direction 
if (1 == dir) 
{ 
digitalWrite (dir1PinA , LOW); 
digitalWrite (dir2PinA, HIGH); 
digitalWrite (dir1PinB, HIGH); 
digitalWrite (dir2PinB, LOW); 
} 
else 
{ 
digitalWrite (dir1PinA, HIGH); 
digitalWrite (dir2PinA, LOW); 
digitalWrite (dir1PinB, LOW); 
digitalWrite (dir2PinB, HIGH); 
} 

if (millis() - time> 5000) 
{ 
time = millis(); 
speed += 20; 
if (speed> 555) {speed = 0;} 

if (1 == dir) 
{dir = 0;} 
else 
{dir = 1;} 
} 
} 

지금 내가 거기 루프와 여분의 변수이지만 이론적으로 그들은 단지 일정한 속도로 모터를 실행하는 데 필요한해서는 안 이해합니다. 제 질문은 그 것입니다 두 번째에 있지만 모터의 실행에 절대적으로 중요합니다 상단 스케치에서 무엇을 놓치고 있습니까?

나는 이것이 멍청한 순간이지만 사전에 사과하고 싶습니다.하지만 논리적 인 지식을 찾지 못했습니다.

+1

이것은 C++ 코드가 아닙니다. C++ 태그가있는 이유는 무엇입니까? 여기에 태그는 구체적인 의미를 가지고 있으며 익숙한 이름을 갖고 있거나주의를 끌기 위해 무작위로 추가하는 것은 적절하지 않습니다. 누락 된 부분은 첫 번째 코드의 주석에 분명하게 명시되어 있습니다. 특별히 * 반복적으로 언급하는 것에 유의하십시오. –

답변

0

"작동하는"Arduino 코드 ( C++, 예 C++ 컴파일러로 컴파일 됨) 두 모터 중 하나 (B)가 즉시 시작되고 다른 하나는 재설정 (또는 심지어 나중에) 후 시작됩니까? 그리고 즉시 시작한 모터는 5 초 후에 방향을 바꿉니 까?

다른 방법으로 이해를 돕기 위해 단순화 방향으로 작업 샘플을 약간 수정 해보십시오.
예. 먼저 "dir"변경 사항과 "else"부분을 제거하십시오.

0

먼저 코드를 디버그합니다. 사진 또는 회로도를 게시하지 않았으므로 하드웨어에 대한 몇 가지 가정을하고, 마지막으로 작업을 제공 할 것입니다. 해결책.

코드 :

그래서 내 첫 번째 가정은 아마도 현재의 반대로, 높고 낮은 사이에 두를 전환하고, 다음 하나는 속도를 설정하기 때문에 모터가 3 개 핀을 가지고 있다는 것입니다.

내가 추측하고 있듯이 모터를 뒤집으려면 현재 방향을 반전해야합니다. 이 핀을 높게 또는 낮게 설정해도 실제로 전류가 역전되지는 않습니다. 또한 Arduino는 실제로 DC 모터를 구동하기에 충분한 출력 전류를 갖고 있지 않습니다. 아마 천천히 하나를 실행할 수 있습니다. 더 많은 일을하고 싶다면 외부 전원이 필요합니다.

드라이브 한 방향으로 DC 모터 :

이것은 아마도 가장 쉬운 일입니다. 트랜지스터, 다이오드 및 저항기 만 있으면됩니다.양 방향

두 방향에서 DC 모터를 구동하려면 최대 네 개의 DC 모터에 Here is a tutorial

드라이브는 당신이 현재 가고있는 방향을 반전 할 필요가있다. 이것은 처음에는 복잡해 보입니다. 당신이 이미이 정확한 것을하기 위해 당신을 위해 뭔가를 만들었다는 것을 깨달을 때까지. 모터 컨트롤이라고합니다. 그것은 단지 몇개의 H-Bridges가있는 방패 일뿐입니다. 그들은 꽤 싸다.

나는 AdaFruit's을 좋아한다. 나는 한 쌍의 로봇을 가지고 오래 전에 로봇을 만들었습니다.

Tutorial on how to use the Adafruit MotorShield