[Arduino] 스마트 스위치 만들기

아두이노와 블루투스를 이용한 원격 제어 스위치로 침대 밖을 최소화하자

naljin
7 min readApr 18, 2021

누워서 원격으로 불을 끄고 싶다,, 하지만 제품들은 너무 비싸,, 집에 있는 아두이노로 비벼볼 수 없을까?

아두이노 스마트 스위치 만들기 바로 시작해봅시다!

미리보기

서보모터 접착이 잘 안돼서.. 손으로 고정쓰..^^

준비물

  • 아두이노
  • 서보모터
  • 블루투스 모듈
  • 브레드 보드
  • 점퍼선

초기 세팅

일단 아두이노를 컴퓨터랑 연결해야겠쥬? 바로 꽂아줍시다

그리고 개발 시작 국룰인 Hello world 프린트 코드를 작성하고

void setup() {
Serial.begin(9600); //디버그용 시리얼 개방. 9600은 1초간에 전송되는 신호의 수.
}
void loop() {
Serial.println("hello world"); //디버그용 출력
delay(1000); //1초 딜레이
}

작성한 코드를 아두이노에 업로드해봅시다. 좌측 상단에 박스 쳐놓은 화살표를 누르면 되는디

이때 툴에 보드 및 포트를 나에게 맞는걸로 잘 설정되어있는지 한번 더 확인 합시다

오키 별다른 에러 안뜬다! -> ㅊㅋㅊㅋ

근데 헬로월드도 안뜬다! -> 우측 상단의 아이콘을 누릅시다

해장 아이콘을 누르면 밑에 같은 창이 뜨는데 여기서 보드레이트 설정을 코드에서 Serial.begin(9600) 인자로 넣어준 숫자랑 동일하게 맞춰줘야합니다

다르게 설정하면 아래처럼 깨져나오는데 아두이노는 초당 9600비트 속도로 데이터 보내는데(코드) 컴퓨터에서는 다른 속도로 받아들이려고(보드레이트) 하기 때문이라고 하네여

오키 여기까지 왔으면 반은 온거져

블루투스를 이용한 서보 모터 제어

하드웨어 연결

이제 점퍼선을 이용해서 각 모듈이랑 아두이노랑 연결해봅시다.

우선 블투 모듈은 ground, vcc, rx, tx 를 연결해주면 되는디 각각 아두이노의 GND, 5v, 2번, 3번에 연결합니다

서보 모터는 ground, vcc, 시그널핀을 연결해주면 되는데 그라운드랑 전압은 똑같고 시그널 핀만 12에 꽂이봅시다

만약 연결법이 헷갈린다면 이곳의 도면을 참고 고고

코드 작성

이제 코드를 쓸 차례인데, 메인 로직은 블루투스로부터 받아온 문자열이 “on” 이면 서보 모터의 각도를 30도로, 그 외면 0도로 변경하는 것입니다. 참고로 아두이노에서 코드 정렬 shortcut 은 Command+T 랍니다ㅏㅏ

폰-아두이노 연결

이제 폰과 아두이노를 블루투스로 연결해서 확인해봐야겠져? 이를 위해 우선 앱스토어에서 아두이노 블투 연결을 쉽게 도와주는 앱을 다운받았습니다. 저는 Bluetooth for Arduino 라는 앱을 받아서 이거 기준으로 설명드릴게여

우선 앱을 열면 메인 화면에 블루투스 연결 가능한 목록이 뜨는데, 저의 블투 모듈 이름은 HMSoft기 때문에 저걸 클릭해줄게여. 빨간 빛으로 깜빡이던 블투 모듈이 서로 연결되면 더 이상 깜빡이지 않는 빨간 빛으로 변한답니당

이제 블투와 어떻게 상호작용할거냐를 선택할 수 있는 몇가지 옵션이 나옵니다! 이번 예제의 경우 간단히 온오프 커맨드로 제어하는 것이기 때문에 첫번째 옵션인 Switch를 선택했어여 (제대로 값 들어가는지 디버깅할때는 마지막 옵션인 터미널을 사용했지만여). 그러면 스위치 토글 상태에 따라 어떤 커맨드를 보낼 것인지 지정할 수 있습니다.

제대로 동작하나유?! 그렇다면 이제 전원을 컴퓨터 대신 건전지 같은걸로 공급하게 바꾸고, 서보 모터를 전등 스위치 있는데 붙여서 해피해피 집순 라이프를 즐기도록합시다~!

결과물

스위치를 이용한 서보 모터 제어

하드웨어 연결

난 핸드폰으로 제어하지 않고, 스위치 모듈을 이용해 on / off 를 하고 싶다! 하시는 분들은 일단 스위치 모듈과 저항이 있어야겠져? 그리고 아까 연결했던 블루투스 모듈은 ㄷㅏ 제거해줍니다

위치 입력 핀은 3번으로 설정해줄건데, 자세한 아두이노 연결 방법은 이곳에 나와있는 첫번째 도면을 참고합시다.

코드 작성

위의 블루투스 모듈과 관련된 로직은 모두 지우고, 현재 스위치 상태 (on / off) 를 담는 bool 타입의 isOn 변수를 만들어 스위치가 눌릴때마다 상태를 반대로 변경해줍니다. 블루투스때는 “on” 문자열 여부로 서보모터의 각도를 조절했다면, 여기서는 isOn 값에 따라 서보 모터의 각도를 조절해줍니다.

결과물

번외) 소리를 이용한 서보 모터 제어

사실 제가 블루투스 다음에 하고 싶었던건 박수 소리에 따라 불을 켰다 껐다 하는거였어여.. 그게 잘 안돼서 로직이 비슷한 스위치로 변경한거긴 한디..!!

스위치에서는 isOn 값을 변경하는 조건이 ‘button이 눌렸을 때’라면, 여기서는 ‘soundSensor로부터 입력받은 값이 임계점(threshold)을 넘을 때’ 라는 것 밖에 차이가 없거든여?

진짜 코드도 제대로 작성한 것 같고.. 하드웨어 연결도 제대로 한 것 같은데.. 실제로는 analogRead(sondSensor) 값이 51 정도로 고정되어 찍히고 오히려 A0 에 연결된 선을 빼면 값이 올라가는거예여…?????? 진짜 어이없어;;;;;

만약 해보실 분들이 계시면 연결 도면은 여기를 참고하고.. 코드는.. 저는 되진 않았지만.. 참고하실 분들은 하시길.. 억울하다 억울해~!~!

참고

--

--