이 프로젝트 정보
매우 우수한 무선 근거리(및 개인) 네트워크는 의심할 여지 없이 Bluetooth(BT)입니다. 오늘날 우리는 일상 생활에서 유명한 "블루 리틀 라이트"의 도움으로 상호 연결된 휴대폰, 스테레오, 카메라 등을 사용하는 것을 흔히 볼 수 있습니다.
일반적으로 IoT 및 자동화의 세계에서는 BT 기술을 사용하여 휴대폰을 통해 원격 제어를 찾는 것이 매우 일반적입니다. 이는 두 가지 기본 구성요소로 인해 발생하지만 매우 중요합니다.
<울> 안드로이드 앱(예:MIT AppInventor2) 및
용 단순 개발 플랫폼
<울> 저렴한 BT 모듈(예:HC-06)
이 튜토리얼에서는 로봇을 움직이거나 집의 램프를 켜는 등의 작업을 위해 모바일 장치를 통해 Arduino의 출력을 제어하는 방법에 대한 몇 가지 아이디어를 개발할 것입니다.
1단계:Bluetooth 모듈 및 Arduino 그림>
시장에서 "마스터-슬레이브" BT 3.0 모듈을 HC-05로, "슬레이브" 모듈을 HC-06으로 찾는 것이 매우 일반적입니다. 보다 최근에는 BT 4.0 또는 BLE("Bluetooth Low Energy") 기술과 함께 작동하는 HC-08 및 HC-10이 등장했습니다. 불행히도 Apple은 BT 3.0에 대한 지원을 제공하지 않기 때문에 BLE 모듈은 iPhone에 연결할 수 있는 유일한 모듈입니다.
여기에서 논의된 프로젝트를 위해 저는 매우 인기 있고 저렴한 HC-06을 사용할 것입니다. BT 모듈은 5V로 전원이 공급되므로 예를 들어 Arduino UNO에 쉽게 연결할 수 있습니다. 그의 송신(Tx) 및 수신(Rx) 핀은 ESP8266의 경우에서 볼 수 있듯이 전압 분배기가 필요 없이 UNO에 직접 연결할 수 있습니다. 일반적으로 HC-06은 핀 0과 1 Arduino("직렬 0")에 직접 연결해야 합니다.
<울> HC06-Tx - Arduino 핀 0(Rx)
<울> HC06-Rx - Arduino 핀 1(Tx)
"Serial 0" 입력(UNO의 유일한 HW 직렬 포트)을 사용할 때 USB 포트도 사용하기 때문에 프로그램 로드 중에 HC-06이 물리적으로 핀 0과 1에 연결되지 않을 수 있음을 기억하는 것이 매우 중요합니다. 같은 직렬. 이 작은 문제를 해결하는 간단한 방법(프로젝트에서 많은 GPIO UNO를 사용하지 않는 경우)은 라이브러리 SoftwareSerial을 통해 "SW 직렬 포트"를 사용하는 것입니다. 여기서는 UNO의 핀 10과 11(각각 Tx, Rx)을 사용합니다.
2단계:HC-06 테스트 및 구성
다음 단계는 HC-O6을 테스트, 프로그래밍 및 초기화하기 위한 간단한 코드를 작성하는 것입니다. 시작하려면 라이브러리 소프트웨어 직렬을 포함하고 "BT" 변수를 새 직렬 포트로 설정합니다.
#include SoftwareSerial BT(10, 11); // 수신, TXString 명령 =""; // 블루투스 devicevoid setup ()의 응답을 저장합니다.{ Serial.begin (9600); Serial.println("AT 명령어 입력"); BT.begin(9600); // HC-06 일반적으로 기본 전송 속도}
그런 다음 BT에서 오는 데이터를 단순히 기다리는 코드 본문이 나옵니다. 도착하면 데이터가 직렬 모니터에 기록됩니다. 마찬가지로 AT 명령은 직렬 모니터에서 HC-06 모듈로 보낼 수 있습니다.
void loop (){ if (BT.available ()) // 가능한 경우 데이터를 수신합니다. { while (BT.available ()) // "계속 수신". { 지연 (10); // 안정화를 위한 지연 추가 char c =BT.read(); // 직렬 읽기 명령 수행 + =c; // 문자열을 빌드합니다. } Serial.println(명령); 명령 =""; // 반복 없음 } if (Serial.available ()) { delay (10); BT.write(Serial.read()); }}
프로그램이 로드되면 직렬 모니터를 사용하여 다음과 같은 몇 가지 기본 테스트를 수행합니다.
<울> "AT"를 보내면 모듈이 "OK"로 응답해야 합니다.
<울> 펌웨어 버전 묻기:" T + VERSION", 모듈이 응답해야 합니다(예:"linvorV1.8").
<울> HC-06을 사용하면 "The T + NAMEMJRoBot_BT_HC06"과 같이 모듈 이름을 정의할 수 있습니다. 그러나 다른 모듈과 달리 모듈에 설정된 이름이 무엇인지 알 수 없습니다. 이전 명령을 보낼 때 HC-06은 간단히 "OKsetname"이라고 응답합니다.
일반적으로 HC-O6에는 비밀번호(또는 PIN):1234가 기본으로 제공됩니다. AT 명령을 사용하여 새 비밀번호를 설정할 수 있습니다.
<울> AT + PIN xxxx 여기서 'xxxx'는 4자리 숫자입니다.
HC-06 테스트용 Arduino 코드:
F08H931IL8LGG7U.ino
3단계:Android 기기 그림> 그림> 그림>
확인! 모듈이 UNO에 연결되어 실행 중입니다. Android 기기를 소개할 시간입니다.
Google 스토어에는 사용할 수 있는 앱이 많이 있습니다. MIT Application2 도구를 사용하여 내가 개발한 앱을 사용하고 Google 스토어에서 무료로 다운로드할 수 있습니다. MJRoBot BT Digital Analog Voice Control
앱은 디지털 명령(버튼 또는 음성을 통해)과 아날로그 명령을 전송하여 서보와 같은 PWM 장치를 제어합니다(0에서 255 사이의 데이터 전송).
<울> 앱 다운로드
<울> Android 기기 설정으로 이동하여 BT 모듈을 찾아 연결합니다(PIN 1234 또는 사용자가 정의한 기타 입력). 장치가 연결 데이터를 유지하므로 이 작업은 한 번만 수행해야 합니다.
<울> 기기와 HC-06이 대화하면 앱을 실행합니다. 두 번째로 앱을 실행하면 BT 모듈이 자동으로 연결되어야 합니다.
<울> 모듈 이름을 선택합니다(제 경우에는 끝에 HC-06이 있는 이름입니다).
그러면 앱에 "CONNECTED"가 표시되어 HC-06과 "페어링"되었음을 알립니다. 이 시점에서 앱 버튼을 테스트하고 앱이 전송하는 데이터를 PC 직렬 모니터에서 확인하십시오. 예를 들어 4개의 장치에 대해 "ON" 및 "OFF" 버튼을 순차적으로 누르면 결과는 다음과 같습니다.
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
이제 BT 모듈과 대화하는 Android용 앱이 있으므로 유용한 것을 만들어 보겠습니다.
4단계:Arduino 출력 제어.
위와 같이 회로를 구성해 봅시다. 아이디어는 앱을 사용하여 LED를 켜고 끄고 강도를 제어하는 것입니다.
연결:
<울> 장치 1:"dev1on / dev1off" ==> LED 빨간색 ==> 핀 3 UNO
<울> 장치 2:"dev2on / dev2off" ==> LED 노란색 ==> 핀 5 UNO
<울> 장치 3:"dev3on / dev3off" ==> LED 녹색 ==> 핀 6 UNO
<울> 장치 4:"dev4on / dev4off" ==> LED 파란색 ==> 핀 9 UNO
즉, "Device 1" 버튼과 관련된 "ON"을 트리거하기 위해 "dev1on"이라는 문자 메시지가 Arduino로 전송됩니다. 이 메시지를 받으면 빨간색 LED가 켜져야 합니다.
4개의 핀은 PWM을 생성할 수 있는 핀입니다(모든 UNO 디지털 핀이 PWM을 생성할 수 있는 것은 아닙니다. "~ ". 이것은 PWM을 통해 LED의 강도를 제어하기 위해 숫자 데이터를 보내기 위해 앱에서 "슬라이더"를 사용하는 데 중요합니다.
<울> Dev A0:"r / 0-255" ==> LED 빨간색 ==> 핀 3 UNO
<울> Dev A1:"y / 0-255" ==> LED 노란색 ==> 핀 5 UNO
<울> Dev A2:"g / 0-255" ==> LED 녹색 ==> 핀 6 UNO
<울> Dev A3:"b / 0-255" ==> LED 파란색 ==> 핀 9 UNO
슬라이더의 경우 PWM 데이터 값(0 ~ 255) 이전에 'slider' 명령이 오고 있음을 알리기 위해 문자가 Arduino에 전송됩니다.
아래 비디오에서 위 프로그램 부분의 데모(버튼 및 슬라이더):
전체 Arduino 코드 아래:
FA44NBUIL8LGGAY.ino
5단계:음성 명령으로 IoT 장치 제어
IoT 장치 제어의 경우 음성이 요즘 트렌드입니다. Arduino / HC-06 / Android를 사용하여 이러한 유형의 제어를 얻는 것은 매우 간단합니다. Android 기기에는 이미 "factory"에서 이 기능이 있습니다. 내가 개발한 앱에는 Android가 명령을 "듣고" 텍스트 형식으로 보내도록 하는 버튼이 추가되었습니다. 아두이노로. 코드는 오는 문자열을 "읽는" 책임이 있습니다.
내 코드에 몇 가지 예를 추가했습니다. 예를 들어 Arduino가 "TV 연결" 명령을 수신하면 녹색 LED(장치 3에 해당)가 켜집니다(LED 대신 TV를 연결하는 릴레이가 있을 수 있음).
코드의 루프 부분에 있는 문자열을 사용자 언어로 된 명령으로 변경해야 합니다. 나는 포르투갈어를 모국어로 사용했고 영어와 억양이 다르기 때문에 Google에서 관리하기가 더 쉽습니다. 짧은 문장이나 단어만 사용해야 합니다. 중요한 것은 작성한 내용과 Google 음성 인식 앱이 반환하는 내용 간의 완벽한 일치입니다.
여기에서 MIT AppInventor2에서 직접 실행할 수 있는 .aia 파일에 대한 링크를 찾을 수 있습니다. 아래 비디오에서 음성 제어의 작은 데모:
6단계:결론
글쎄요, 이 튜토리얼을 통해 BT / Android / Arduino를 사용하여 "사물"을 제어할 수 있는 엄청난 잠재력을 실현할 수 있다고 믿습니다. 항상 그렇듯이 이 프로젝트가 다른 사람들이 흥미진진한 전자 제품의 세계에서 길을 찾는 데 도움이 되기를 바랍니다. , 로봇 공학 및 IoT! 더 많은 프로젝트를 보려면 내 블로그 MJRoBot.org를 방문하세요.
세계 남쪽에서 온 살루도스!
다음 튜토리얼에서 만나요!
감사합니다
마르셀로
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> 코드
<울> 코드 스니펫 #1
코드 스니펫 #2
코드 스니펫 #3
코드 스니펫 #1일반 텍스트
#include SoftwareSerial BT(10, 11); // 수신, TXString 명령 =""; // 블루투스 devicevoid setup ()의 응답을 저장합니다.{ Serial.begin (9600); Serial.println("AT 명령어 입력"); BT.begin(9600); // HC-06 일반적으로 기본 전송 속도}
코드 스니펫 #2일반 텍스트
void loop (){ if (BT.available ()) // 가능한 경우 데이터를 수신합니다. { while (BT.available ()) // "계속 수신". { 지연 (10); // 안정화를 위한 지연 추가 char c =BT.read(); // 직렬 읽기 명령 수행 + =c; // 문자열을 빌드합니다. } Serial.println(명령); 명령 =""; // 반복 없음 } if (Serial.available ()) { delay (10); BT.write(Serial.read()); }}
코드 스니펫 #3일반 텍스트
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
섹션>