아두이노2016. 5. 26. 14:15

자기 전 침대에 누워서 전등을 원격으로 끄고 싶은 때가 있습니다. 저만 그런가요? ^^  음... 뭐 그런 목적보다는 아두이노, 블루투스 모듈, 서보모터를 조합해서 제어하는 방법을 알아보려고 합니다. 만들어서 전등 스위치 같은데 붙이면 블루투스로 스위치를 켜고 끄는것도 가능할 겁니다. 이 글을 보기 전에 제가 예전에 썼던 블루투스 모듈과 서보모터 제어에 대한 글을 참고하시면 각각의 구성에 대해서 더욱 상세히 알 수 있을 겁니다.





준비물

아두이노 우노, 블루투스 모듈(HC-06), 서보모터(SG90, 브라켓), 브레드보드, 각종 연결용 케이블들

블루투스 모듈(HC-06) 입니다. 4개의 핀이 있습니다.


RXD, TXD, GND, VCC 의 단자가 있습니다. 전원은 3.6V~6V 까지 이므로 아두이노 5V를 연결하시면 됩니다.


RC 비행기, 자동차 등에 많이 쓰이는 서보모터 SG90 입니다. 5V 에서 동작 합니다. 모터 축에 끼울 수 있는 3개의 브라켓이 같이 포함되어 있습니다. 스위치 ON/OFF 용이라면 양쪽형 브라켓을 끼우는 것이 낫겠죠?


연결

bluetooth_servo.fzz

음... 막 그리다보니 너저분하네요.  그래도 색상으로 와이어가 구분되니 연결에 참고 하시길 바랍니다. 다시 정리하자면 아래의 표와 같습니다.


블루투스 모듈 (HC-06)

아두이노 우노

VCC

5V

GND

GND

TXD

D2

RXD

D3









서보모터 (SG90)

아두이노 우노

VCC (빨간선)

5V 

GND (갈색선)

GND

Signal (노란선)

D12







실제 연결한 모습 입니다. fritzing 에는 브레드보드를 이용해서 5V 전원을 나누었는데 저의 짭두이노에는 IOREF 대신에 5V가 하나 더 있네요. 그래서 브레드보드를 사용하지 않았습니다. 각자의 상황에 맞게 사용하시면 됩니다.


소스

소스는 블루투스 모듈로 문자열을 받아서 값이 on 일 경우와 그 이외의 경우 (off일 경우) 서보의 움직이는 각도를 조절합니다. 아래의 소스에서는 초기 0도 -> ON 60도 -> OFF 0도


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
#include "Servo.h" //서보 라이브러리
 
Servo myservo; //서보객체
int blueTx=2;   //Tx (블투 보내는핀 설정)
int blueRx=3;   //Rx (블투 받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx);  //시리얼 통신을 위한 객체선언
String myString=""//받는 문자열
 
void setup() {
  myservo.attach(12);   //서보 시그널 핀설정
  myservo.write(0);     //서보 초기각도 0도 설정
  mySerial.begin(9600); //블루투스 시리얼 개방
}
 
void loop() {
  while(mySerial.available())  //mySerial 값이 있으면
  {
    char myChar = (char)mySerial.read();  //mySerial int형식의 값을 char형식으로 변환
    myString+=myChar;   //수신되는 문자열을 myString에 모두 붙임 (1바이트씩 전송되는 것을 모두 붙임)
    delay(5);           //수신 문자열 끊김 방지
  }
  
  if(!myString.equals(""))  //myString 값이 있다면
  {
    Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력
 
      if(myString=="on")  //myString 값이 'on' 이라면
      {
        myservo.write(60);     //각도 60도로 움직임
      } else {
        myservo.write(0);   //각도 0도로 움직임
      }
    myString="";  //myString 변수값 초기화
  }
}
cs



테스트는 스마트폰 앱을 이용했습니다. 'Bluetooth Controller' 라는 앱 입니다. 사용이 간단해서 테스트에 좋은것 같습니다.


Bluetooth Controller 앱 입니다. 실행하고 장치검색 버튼을 눌러서 블루투스 모듈을 연결해 주어야 합니다. 블루투스 모듈의 설정에 대해서는 맨위에 링크 건 블루투스 모듈에 대한 글을 참조해 주세요.


ON / OFF 버튼을 만들어 주었습니다.


버튼은 키설정을 눌러서 만들어 줍니다. 왼쪽이 보여지는 버튼이름, 오른쪽이 블루투스 모듈로 보낼 문자열 입니다.


실행해 보았습니다. 잘 움직이네요. 반응도 즉각적 입니다. 많은 곳에 활용이 가능해 보입니다. 물론 첫머리에 언급했던 집안의 전등 스위치에도 활용이 가능하겠네요.

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. dd

    컴파일 에러입니다
    Serial.printIn("input value:"+myString);

    // exit status 1
    // 'class HardwareSerial' has no member named 'printIn'

    2017.04.26 14:40 [ ADDR : EDIT/ DEL : REPLY ]
    • 틀릴게 없는 간단한 코드인데 에러가 나는 것은 ide 셋업이나 환경 설정에 문제가 있을 가능성이 있어 보입니다.

      2017.04.26 14:47 신고 [ ADDR : EDIT/ DEL ]
  2. jk

    dc모터도 제어가 가능한가요??

    2017.06.02 10:22 [ ADDR : EDIT/ DEL : REPLY ]
  3. jk

    혹시 dc아두이노메가에 모터드라이브 쉴드 h브릿지 l298 사용중인데 위 기능을 사용할 수 있나요?

    2017.06.05 15:24 [ ADDR : EDIT/ DEL : REPLY ]
    • l298은 dc모터 제어 드라이버구요. 서보처럼 정확한 각도를 제어하기는 좀 어렵습니다. 그리고 메가에서도 위와 같이 블루투스모듈과 서보모터 이용시 위와 같이 동작하게 할 수 있습니다

      2017.06.05 17:02 신고 [ ADDR : EDIT/ DEL ]
  4. 비밀댓글입니다

    2017.06.05 23:39 [ ADDR : EDIT/ DEL : REPLY ]
  5. diqdiq

    안녕하세요.
    혹시 만약 블루투스모듈 정격전압 3.3V 짜리 사용할 때는 따로 전압을 일정하게 맞춰주기 위해 따로 레귤레이터를 사용해야 할까요??

    2017.10.09 13:00 [ ADDR : EDIT/ DEL : REPLY ]
    • 아두이노와 연결해서 쓸 것이라면 아두이노의 3.3V OUT 단자를 이용하면 되겠네요.

      2017.10.09 15:43 신고 [ ADDR : EDIT/ DEL ]
  6. diqdiq

    그렇군요 빠른 답변 감사합니다
    그런데 궁금한 것이 또 생겼습니다.
    원래대로라면 블루투스 모듈(HC-06), 서보모터(SG90)
    를 주문해야하는데 주문 직후, 아는 선배께서 재료들을 주셨습니다. 위에 언급된 재료들과는 제품명이 다르던데,

    ZS_040 (5핀짜리 블루투스모듈같습니다.)
    TG9e 9g Analog Micro Servo (서보모터긴한데 뭐지..)

    이거 사용하는데 위에 언급해주신 방법대로랑 달라지나요?

    2017.10.09 20:54 [ ADDR : EDIT/ DEL : REPLY ]
  7. 공대가자!!

    안녕하세요 이제 아두이노 입문해서 정말 많은 도움을 받고 있습니다!
    올려주신글 보고 블루투스 LED작동과 서보 모터 작동을 성공 하였는데 혹시 여기올라와 있는 어플을 이용하여 서보모터와 LED를 on off키를 추가한후 따로 따로 구동할수 있는지가 궁금합니다!!

    2017.10.10 11:55 [ ADDR : EDIT/ DEL : REPLY ]
    • 글에서 보시다시피 어플은 키를 추가 할 수 있는 기능이 있습니다. 당연히 가능 합니다

      2017.10.10 14:16 신고 [ ADDR : EDIT/ DEL ]
  8. 도와주세요!!

    안녕하세요! 아두이노 입문자인데요.
    질문이 있습니다..

    저에게는 현재 아두이노 나노와 9v 300mA짜리 어댑터가 있습니다..
    5V에서 동작하는 서보모터를 제어하기 위해 이 9v짜리 어댑터를 사용할 수 있을까요??
    생각해본것은, (빵판에 부착된)나노의 VIN 과 GND에 어댑터를 연결하여 전원을 공급해주고 그 곳을 통해 직접 서보모터에 전원을 인가하려고했는데,.. 왠지 타버릴것 같기도하구요 ㅠㅠ
    아니면 5V단자에 바로 꽂으면 자동으로 5V로 변환된 전압을 인가시킬수 있을까요??
    답변해주시면 대단히 감사하겠습니다..

    2017.12.05 01:00 [ ADDR : EDIT/ DEL : REPLY ]
    • 나노라면 어댑터는 말하신대로 vin 에 연결하면 됩니다. 9v라도 레귤레이터가 있으니 상관 없어요. 그리고 서보는 나노의 5v 출력을 이용하면 됩니다

      2017.12.06 11:41 신고 [ ADDR : EDIT/ DEL ]
  9. 도와주세요!

    글 내용대로 회로구성을 했는데 (사실 9볼트 인풋은 필요없더라구요) 그냥 5볼트 유에스비에 폰충전기로 전원을 인가했는데 신호도 안주었는데 켜자마자 바로 서보모터가 그냥 시계방향으로돌고 최대각에서 걸려있네요.. 뭐가문제일까요? ㅠ

    2017.12.09 16:57 [ ADDR : EDIT/ DEL : REPLY ]
    • 이해할 수 없는 에러가 날 경우에는
      소스를 최대한 단순화해서 디버그 하던가
      조건문 같은 곳에 임의의 값을 넣어서 시리얼 모니터에 찍어봐고 어떤 루틴을 타는지 관찰하는 수 밖에 없어요.
      그리 어려운 소스가 아니니 한 번 분석해 보시고 여기 저기 고쳐보시기 바랍니다.

      2017.12.09 22:25 신고 [ ADDR : EDIT/ DEL ]
  10. 아주 친절한 설명과 좋은 정보에 우선 감사드립니다.

    글 내용대로 그대로 똑같이 다했고
    블루투스까지 페어링 된 걸 확인했는데
    서보모터가 작동을 안하네요... ㅠ
    어디서 잘 못 된걸까요? 각 모듈과 모터는 정상입니다.
    아 그리고 제가 초보라 그런데 저 상태로는
    서보모터가 걸려서 손으로 키고 끌수가 없는 것 같던데
    60도 작동 후에 다시 30도 만큼 되돌아와서 모터본체와
    브라켓이 수평이 되게 하려면 myservo.write를 어떻게 적용시켜야 할까요? 아니면 방법이 다르다거나 안되는건가요?

    2018.02.03 14:53 [ ADDR : EDIT/ DEL : REPLY ]
    • 첫번째 질문은 위에 있는 저의 답변 참고하시고 두번째 질문은 저의 블로그에서 서보로 검색해서 서보모터에 대해서 좀 더 파악해 보시길 바랍니다

      2018.02.03 15:45 신고 [ ADDR : EDIT/ DEL ]
    • 서보모터에 대해서는 http://deneb21.tistory.com/220 참고하시면 되겠네요

      2018.02.03 15:46 신고 [ ADDR : EDIT/ DEL ]
  11. 부탁드립니다.

    혹시 이게 hm-10 으로 했을 떈 달라지나요?
    우선 hm 6은 문제없이 잘 됩니다.
    hm 10도 이전에 글 써주셨던 블루투스'만' 연결하는 건 잘 되는데요
    블루투스+서보모터 소스를 쓰면 블루투스 통신이 안 되네요.. 왜 그런걸까요?

    2021.06.12 17:23 [ ADDR : EDIT/ DEL : REPLY ]