2016-11-01 5 views
0

4DC 모터로 작동하는 로봇을 만들고 있는데 블루투스를 연결할 때 약간의 문제가 있습니다. 내가 블루투스없이 모터에 대한 테스트 코드를 실행할 때, 모터는 최대의 힘을 발휘하며 아무런 문제가 없다. Arduino + AdaFruit Motor Shield 2.3 + 블루투스 전원 문제?

#include <Wire.h> 
#include <Adafruit_MotorShield.h> 
#include "utility/Adafruit_PWMServoDriver.h" 

// Create the motor shield object with the default I2C address 
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

// Select which 'port' M1, M2, M3 or M4. 
Adafruit_DCMotor *M1 = AFMS.getMotor(1); 
Adafruit_DCMotor *M2 = AFMS.getMotor(2); 
Adafruit_DCMotor *M3 = AFMS.getMotor(3); 
Adafruit_DCMotor *M4 = AFMS.getMotor(4); 

void setup() { 

    AFMS.begin(); // create with the default frequency 1.6KHz 
    //AFMS.begin(1000); // OR with a different frequency, say 1KHz 
    // turn on motor 

    M1->setSpeed(255); 
    M2->setSpeed(255); 
    M3->setSpeed(255); 
    M4->setSpeed(255); 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 

    Serial.begin(9600);   // set up Serial library at 9600 bps 
} 

void loop() 
{ 
M1->run(FORWARD); 
M2->run(FORWARD); 
M3->run(FORWARD); 
M4->run(FORWARD); 
delay (5000); 

M1->run(BACKWARD); 
M2->run(BACKWARD); 
M3->run(BACKWARD); 
M4->run(BACKWARD); 
delay (5000); 
} 

내가 블루투스를 연결하고 모터 아래의 코드를 실행

이 낮은 토크로 실행하는 거의 로봇을 이동할 수 있습니다 여기에만 모터에 대한 테스트 코드입니다. 여기
#include <Wire.h> 
#include <Adafruit_MotorShield.h> 
#include "utility/Adafruit_PWMServoDriver.h" 

// Create the motor shield object with the default I2C address 
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

// Select which 'port' M1, M2, M3 or M4. 
Adafruit_DCMotor *M1 = AFMS.getMotor(1); 
Adafruit_DCMotor *M2 = AFMS.getMotor(2); 
Adafruit_DCMotor *M3 = AFMS.getMotor(3); 
Adafruit_DCMotor *M4 = AFMS.getMotor(4); 

const int BTState = 11; 
int state; 

void setup() { 

    AFMS.begin(); // create with the default frequency 1.6KHz 
    //AFMS.begin(1000); // OR with a different frequency, say 1KHz 
    // turn on motor 

    M1->setSpeed(255); 
    M2->setSpeed(255); 
    M3->setSpeed(255); 
    M4->setSpeed(255); 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 

    pinMode(BTState, INPUT); 
    Serial.begin(9600);   // set up Serial library at 9600 bps 
} 

void loop() 
{ 
    //Stop car when connection lost or bluetooth disconnected 
    if (digitalRead(BTState) == LOW) { 
    state = 'S'; 
    } 

    //Save income data to variable 'state' 
    if (Serial.available() > 0) { 
    state = Serial.read(); 
    } 

    //If state is equal with letter 'F', car will go forward! 
    if (state == 'F') { 

    M1->run(FORWARD); 
    M2->run(FORWARD); 
    M3->run(FORWARD); 
    M4->run(FORWARD); 
    } 


    //If state is equal with letter 'B', car will go backward 
    else if (state == 'B') { 

    M1->run(BACKWARD); 
    M2->run(BACKWARD); 
    M3->run(BACKWARD); 
    M4->run(BACKWARD); 
    } 

    //If state is equal with letter 'S', stop the car 
    else if (state == 'S') { 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 
    } 
} 

내 세트까지의 사진입니다 : 블루투스 올 때 내가 제대로 모든 것을 연결 한

enter image description here

enter image description here

하지만 난 이해가 안 돼요 왜 내가 앞으로 시작할 때 또는 블루투스를 통해 내 전화기 또는 컴퓨터에서 뒤로 명령 DC 모터의 최고 속도를 얻지 못하고 있습니다. 그것은 거의 내가 그들에게 충분한 힘을 얻지 못하고있는 것처럼 보인다.

내가 뭘 잘못하고 있니?

+0

이 질문은 [arduino.se] 여기에보다 더 적합하다. –

+0

안녕하세요 켄, 네,하지만 요점을 참조하십시오하지만 너무 행운이 질문을 게시했습니다. 저는 배선 문제가 아니라 코드 문제로 인해 누군가가 문제를 지적 할 수 있기를 바랍니다. – Slavisha

답변

0

좋아요. 문제가 무엇인지 알아냅니다. 그것은 코드의이 부분에 있습니다

//If state is equal with letter 'S', stop the car 
    else if (state == 'S') { 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 
    } 

그래서 내가이 앱이 데이터를 블루투스를 통해 50ms마다 스트리밍입니다. 그래서 그 순간들 사이에 블루투스가 위의 코드를 실행하고 있습니다. 그래서 블루투스의 상태가 "S"라면 위의 코드를 실행하는 것보다 1을 더한다고하자. "S"상태는 앱의 아무 버튼도 누르지 않은 것을 의미하며 로봇을 정지시키는 것을 의미합니다. S 상태가 1보다 크면 else if 문을 실행하는 것보다 해당 코드 행을 작성할 수 있습니까?

감사합니다, 슬라브