정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노와 블루투스를 이용한 서보모터 제어.
혜숭이 | 2017-11-23

https://kocoafab.cc/make/view/520 를 보고 한 보드내에 연결되어 있는 조이스틱과 서보모터를 분리해,

한 보드(마스터보드)에는 조이스틱이 연결되어 있고,

또 다른 보드(슬레이브보드)에는 서보모터 두개가 연결되어 있어

블루투스 모듈을 이용해 마스터보드의 조이스틱의 움직임에 따라 슬레이브보드의 서보모터가 움직이게 만드려 합니다.

 

현재 두 보드의 블루투스 페어링 및 마스터보드에서 슬레이브 보드에 명령을 보내 수행하는것도 성공하였습니다.

 

다만 한가지 문제가 있는데 맨 위 링크의 예제에서는 조이스틱이 움직일때만 서보모터가 움직이는데,

제 경우에는 조이스틱이 한번 움직이면, 조이스틱을 움직이지 않아도 도중에 멈추지 않습니다.

제 생각에는 슬레이브 보드를 조금만 손대면 해결이 가능할 것 같습니다.

일주일째 코드를 이리바꾸고 저리바꾸고 하다가 도저히 제 힘으론 더이상 힘들것 같아 올려봅니다.

메이커 분들의 많은 도움 부탁 드리겠습니다.

 

 

<마스터보드>

#include <SoftwareSerial.h>
SoftwareSerial btSerial(2,3);

void setup() {
  Serial.begin(9600);   // 시리얼 통신을 시작하며, 통신속도는 9600
  btSerial.begin(9600);
  pinMode(4,INPUT);  
}

void loop() {
  
  int push = digitalRead(4);                       // 변수 push에 디지털 3번핀에 입력되는 신호를 대입
  int X = analogRead(1);                           // 변수 X에 아날로그 1번핀에 입력되는 신호를 대입
  int Y = analogRead(0);                           // 변수 Y에 아날로그 0번핀에 입력되는 신호를 대입
  int a,b,c,d;

if(Y<440){
  Serial.print('a');
  btSerial.print('a');
}

if(Y>550){
  Serial.print('b');
  btSerial.print('b');
}


if(X<460){
  Serial.print('c');
  btSerial.print('c');
}

if(X>590){
  Serial.print('d');
  btSerial.print('d');
}

  delay(300);                                           // 0.3초 대기

}

 

<슬레이브 보드>

#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial btSerial(2, 3);

Servo Motor_H;
Servo Motor_V;

int H = 0;
int V = 0;
int posx = 90;
int posy = 90;


void setup() {

  Serial.begin(9600);  
  btSerial.begin(9600);// set the data rate for the BT port

  Motor_H.attach(5);
  Motor_V.attach(6);
  Motor_H.write(90);
  Motor_V.write(90);

}

void loop() {
  
    byte data;

    data = btSerial.read();

    if(data=='a'){
      for (posx;posx<=180;posx++){
        Motor_H.write(posx);
        Serial.print(posx);
        delay(10);        
      }   
    }

    if(data=='b'){
      for (posx;posx>=0;posx--){
        Motor_H.write(posx);
        Serial.print(posx);
        delay(10);
      }   
    }
   
    if(data=='c'){
      for(posy;posy<=180;posy++){
        Motor_V.write(posy);
        Serial.print(posy);
        delay(10);
      }       
    }

    if(data=='d'){
      for(posy;posy>=0;posy-=1){
        Motor_V.write(posy);
        Serial.print(posy);
        delay(10);
      }          
    }

    
}

 

이전글   |    온습도 센서를 이용한 가습기 에러 2017-11-23
다음글   |    아두이노 ->php -> MariaDB로 넘어가는데 오류가 생기네요 ... 2017-11-24