산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino 및 HC-05 Bluetooth 모듈 전체 자습서

<메인 클래스="사이트-메인" id="메인">

이 Arduino Bluetooth Tutorial에서는 Bluetooth 통신을 통해 Arduino를 제어하기 위해 HC-05 모듈을 사용하는 방법을 배웁니다. 자세한 내용은 다음 동영상을 보거나 아래에 작성된 튜토리얼을 참조하세요.

개요

이 튜토리얼에서는 스마트폰을 사용하여 Arduino를 제어하고 노트북이나 PC를 사용하여 Arduino를 제어하는 ​​두 가지 예를 만들었습니다. 이 튜토리얼에 과부하가 걸리지 않도록 다음 튜토리얼에서는 HC-05 블루투스 모듈을 구성하고 두 개의 별도 Arduino 보드 간에 마스터 및 슬레이브 장치로 블루투스 통신을 구성하는 방법을 배웁니다.

<그림 클래스="aligncenter">

스마트폰으로 아두이노를 제어하는 ​​첫 번째 예제를 시작하기 전에 HC-05 블루투스 모듈을 자세히 살펴보자. 슬레이브로만 설정할 수 있는 HC-06 모듈과 비교하면 HC-05는 마스터로도 설정할 수 있어 두 개의 별도 Arduino 보드 간에 통신이 가능합니다. 이 모듈에는 여러 버전이 있지만 연결하기가 훨씬 쉽기 때문에 브레이크아웃 보드에 있는 버전을 권장합니다. HC-05 모듈은 블루투스 SPP(Serial Port Protocol) 모듈로 아두이노와 시리얼 통신을 통해 통신합니다.

아래 사이트에서 이 Arduino 튜토리얼에 필요한 구성요소를 얻을 수 있습니다.

회로도


모듈을 Arduino 보드에 연결하는 방법은 다음과 같습니다.

<그림 클래스="aligncenter">

내가 가지고 있는 특정 모듈은 전압 조정기가 포함된 브레이크아웃 보드에 있기 때문에 3.6볼트에서 6볼트까지 전원을 공급받을 수 있습니다. 그러나 데이터 핀의 논리 전압 레벨은 3.3V입니다. 따라서 Arduino TX(5V 출력의 전송 핀)와 블루투스 모듈 RX(3.3V만 지원하는 수신 핀) 사이의 라인을 전압 분배기로 연결해야 모듈이 타지 않습니다. 반면, 블루투스 모듈의 TX 핀과 아두이노 RX 핀 사이의 라인은 블루투스 모듈의 3.3V 신호가 아두이노 보드에서 하이 로직으로 충분히 받아들여지기 때문에 직접 연결할 수 있다.

Arduino 블루투스 통신 예제 소스 코드

이제 아두이노 보드와 스마트폰 간의 통신을 가능하게 하는 아두이노 코드를 만들 준비가 되었습니다. LED를 켜고 끄는 간단한 예를 들어보겠습니다. 하지만 통신을 이해하기에 충분할 것입니다.

#define ledPin 7
int state = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
  if(Serial.available() > 0){ // Checks whether data is comming from the serial port
    state = Serial.read(); // Reads the data from the serial port
 }

 if (state == '0') {
  digitalWrite(ledPin, LOW); // Turn LED OFF
  Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
  state = 0;
 }
 else if (state == '1') {
  digitalWrite(ledPin, HIGH);
  Serial.println("LED: ON");;
  state = 0;
 } 
}Code language: Arduino (arduino)

설명: 먼저 LED가 연결될 핀과 스마트폰에서 오는 데이터를 저장할 변수를 정의해야 합니다. 설정 섹션에서 LED 핀을 출력으로 정의하고 즉시 낮게 설정해야 합니다. 앞에서 언급했듯이 직렬 통신을 사용할 것이므로 Bluetooth 모듈의 기본 전송 속도인 38400 전송 속도에서 직렬 통신을 시작해야 합니다. Serial.available() 함수가 있는 루프 섹션에서 읽을 직렬 포트에 사용 가능한 데이터가 있는지 확인합니다. 즉, Bluetooth 모듈에 데이터를 보낼 때 이 문이 참이므로 Serial.read() 함수를 사용하여 해당 데이터를 읽고 "상태" 변수에 넣습니다. 따라서 Arduino가 문자 '0'을 수신하면 LED가 꺼지고 Serial.println() 함수를 사용하여 직렬 포트를 통해 "LED:OFF" 문자열을 스마트폰으로 다시 보냅니다. 또한 위의 두 줄이 한 번만 실행되도록 "상태" 변수를 0으로 재설정합니다. 여기서 "state" 변수는 정수이므로 스마트폰에서 문자 '0'을 수신할 때 정수 "state" 변수의 실제 값은 ASCII에 따라 문자 '0'에 해당하는 48입니다. table.. 이것이 "if" 문에서 "state" 변수를 문자 '0'과 비교하는 이유입니다. 반면 수신된 문자가 '1'이면 LED가 켜지고 String "LED:ON"이 다시 전송됩니다.

이제 코드를 업로드할 준비가 되었지만 이를 위해서는 Arduino를 업로드할 때 직렬 통신을 사용하므로 RX(디지털 핀 0) 및 TX(디지털 핀1) 핀이 사용 중이기 때문에 TX 및 RX 라인의 플러그를 뽑아야 합니다. Arduino 보드의 다른 TX 및 RX 핀을 사용하면 이 단계를 피할 수 있지만 이 경우 직렬 통신을 위해 SoftwareSerial.h 라이브러리를 사용해야 합니다.

관련:2개의 HC-05 Bluetooth 모듈을 마스터 및 슬레이브로 구성 및 페어링하는 방법 | AT 명령

스마트폰을 HC-05 블루투스 모듈 및 Arduino에 연결

이제 스마트폰을 블루투스 모듈과 아두이노에 연결할 준비가 되었습니다. 여기서 우리가 해야 할 일은 블루투스를 활성화하는 것이고 스마트폰은 HC-05 블루투스 모듈을 찾을 것입니다.

<그림 클래스="aligncenter">

그런 다음 기기를 페어링해야 하며 HC-05 모듈의 기본 비밀번호는 1234입니다. 기기를 페어링한 후에는 Arduino를 제어하기 위한 애플리케이션이 필요합니다. Play 스토어에는 우리가 작성한 Arduino 코드와 함께 작동하는 이 목적을 위한 많은 애플리케이션이 있습니다. 그러나 MIT App Inventor 온라인 애플리케이션을 사용하여 이 튜토리얼을 위한 나만의 맞춤형 애플리케이션을 만들었습니다. 이것은 Android 애플리케이션을 빌드하기 위한 훌륭하고 사용하기 쉬운 애플리케이션이며 다음 튜토리얼에서 Arduino 프로젝트를 위한 맞춤형 Android 애플리케이션을 빌드하는 방법에 대한 자세한 단계별 가이드를 찾을 수 있습니다.

<그림 클래스="aligncenter">

이 예제를 위해 만든 앱은 여기에서 다운로드할 수 있습니다.

Arduino 블루투스 튜토리얼 예시 안드로이드 앱

파일 1개 1.38MB 다운로드

연결 버튼을 사용하여 스마트폰을 Bluetooth 모듈에 연결하고 버튼 아래의 상태 텍스트는 성공적으로 연결되었는지 여부를 알려줍니다. "켜기" 및 "끄기" 버튼을 사용하여 LED를 켜고 끌 수 있습니다. 버튼 위의 텍스트는 특정 버튼을 눌렀을 때 Arduino가 스마트폰으로 다시 보내는 텍스트입니다.

블루투스 통신을 통해 노트북 또는 PC를 사용하여 Arduino 제어

노트북이나 PC를 사용하여 블루투스를 통해 Arduino를 제어하는 ​​방법을 살펴보겠습니다. 따라서 먼저 랩톱을 HC-05 Bluetooth 모듈에 페어링해야 하며 랩톱 Bluetooth 설정에서 이를 수행할 수 있습니다. 노트북이 HC-05 모듈을 검색하고 '1234' 비밀번호를 사용하여 장치를 페어링합니다.

랩톱 장치 관리자에서 장치를 페어링하면 포트(COM 및 LPT) 아래에 "Bluetooth 링크를 통한 표준 직렬 연결"이라는 두 개의 새 엔터티가 나타납니다. 여기에서 장치가 통신할 직렬 포트의 COM 포트 번호를 볼 수 있습니다.

<그림 클래스="aligncenter">

LED를 켜고 끄고 문자열을 랩톱으로 다시 보내는 이전과 동일한 예제를 계속 사용하므로 앞에서 설명한 것과 동일한 Arduino 코드를 사용합니다.

IDE 소스 코드 처리

이제 Processing IDE를 사용하여 Arduino를 제어하는 ​​프로그램을 만들 것입니다. 다음은 소스 코드입니다.

import processing.serial.*;
Serial myPort;
String ledStatus="LED: OFF";

void setup(){
  size(450, 500);
  myPort = new Serial(this, "COM5", 38400); // Starts the serial communication
  myPort.bufferUntil('\n'); // Defines up to which character the data from the serial port will be read. The character '\n' or 'New Line'
}
void serialEvent (Serial myPort){ // Checks for available data in the Serial Port
  ledStatus = myPort.readStringUntil('\n'); //Reads the data sent from the Arduino (the String "LED: OFF/ON) and it puts into the "ledStatus" variable
}

void draw(){
  background(237, 240, 241);
  fill(20, 160, 133); // Green Color
  stroke(33);
  strokeWeight(1);
  rect(50, 100, 150, 50, 10);  // Turn ON Button
  rect(250, 100, 150, 50, 10); // Turn OFF Button
  fill(255);
  
  textSize(32);
  text("Turn ON",60, 135);
  text("Turn OFF", 255, 135);
  textSize(24);
  fill(33);
  text("Status:", 180, 200);
  textSize(30);
  textSize(16);
  text("Program made by Dejan Nedelkovski,\n     www.HowToMechatronics.com", 80, 320);

  text(ledStatus, 155, 240); // Prints the string comming from the Arduino
  
  // If the button "Turn ON" is pressed
  if(mousePressed && mouseX>50 && mouseX<200 && mouseY>100 && mouseY<150){
    myPort.write('1'); // Sends the character '1' and that will turn on the LED
    // Highlighs the buttons in red color when pressed
    stroke(255,0,0);
    strokeWeight(2);
    noFill();
    rect(50, 100, 150, 50, 10);
  }
  // If the button "Turn OFF" is pressed
  if(mousePressed && mouseX>250 && mouseX<400 && mouseY>100 && mouseY<150){
    myPort.write('0'); // Sends the character '0' and that will turn on the LED
    stroke(255,0,0);
    strokeWeight(2);
    noFill();
    rect(250, 100, 150, 50, 10);
  }
}Code language: Arduino (arduino)

설명:  직렬 통신을 가능하게 하기 위해 직렬 라이브러리를 포함하고 직렬 객체를 생성하고 led 상태에 대한 문자열 변수를 정의해야 합니다. 설정 섹션에서 프로그램의 창 크기를 설정하고 직렬 통신을 시작해야 합니다. 여기서 COM 포트 번호는 이전에 장치 관리자에서 확인한 두 개의 COM 포트 번호 중 하나를 시도해야 합니다. 다음 줄은 직렬 포트의 버퍼링을 정의하며 우리의 경우 새 줄이 있을 때까지이며 실제로 Arduino가 문자열 "LED:OFF" 또는 "LED ON"을 보낼 때마다 println( ) 기능. 다음으로 serialEvent() 함수를 사용하여 읽을 직렬 포트에 사용 가능한 데이터가 있는지 확인합니다. 그렇다면 readStringUntil() 함수를 사용하여 Arduino에서 전송된 직렬 포트에서 해당 데이터를 읽습니다. 이 경우 문자열 "LED:OFF" 또는 "LED:ON"입니다.

지속적으로 반복되는 메인 draw() 함수에서 프로그램의 모든 그래픽과 기능을 만듭니다. 따라서 먼저 배경색, 채우기 색상, 획 크기 및 색상을 설정하고 rect() 함수를 사용하여 두 개의 버튼을 그립니다. text() 함수를 사용하여 Arduino에서 오는 ledStatus 문자열을 포함하여 모든 텍스트를 인쇄합니다. 이제 남은 것은 버튼을 기능적으로 만드는 것입니다. 따라서 첫 번째 "if" 문을 사용하여 "켜기" 버튼의 영역을 제한하므로 버튼을 누르면 '1' 문자가 직렬 포트를 통해 Arduino로 전송되고 LED가 켜집니다. 다음 줄은 눌렀을 때 버튼을 강조 표시하는 데 사용됩니다. "Turn OFF" 버튼에도 동일한 절차가 적용됩니다.

<그림 클래스="aligncenter">

이제 프로그램이 준비되었으므로 실행 버튼을 클릭하면 프로그램이 랩톱과 Arduino 간의 Bluetooth 통신을 자동으로 활성화합니다. HC-05 Bluetooth 모듈은 2초마다 깜박이기 시작하여 모듈이 연결되었으며 랩톱을 사용하여 LED를 제어할 수 있음을 나타냅니다.

이 튜토리얼은 여기까지지만 HC-05 블루투스 모듈을 구성하고 마스터 및 슬레이브 장치로 두 개의 별도 Arduino 보드 간에 블루투스 통신을 만드는 방법을 배울 다음 튜토리얼을 확인하는 것을 잊지 마세요.

또한 아래 댓글 섹션에서 언제든지 질문을 하고 내 Arduino 프로젝트 컬렉션을 확인하는 것을 잊지 마세요.


제조공정

  1. Arduino RFID 잠금 자습서
  2. JX 웨이브 생성기
  3. U-blox LEA-6H 02 GPS 모듈(Arduino 및 Python 포함)
  4. Arduino, Windows 및 Azure를 기반으로 하는 추락 감지 시스템
  5. Arduino Uno 및 Bluetooth로 차량 제어
  6. Arduino 지문 센서 자습서
  7. ArduRadio 알람시계
  8. Arduino 및 Bluetooth가 탑재된 스마트 커피 머신
  9. 라즈베리 파이 및 Arduino 노트북
  10. rDUINOScope