2018年11月25日 星期日

雙A學習18051.藍芽模塊6針HC05+PWM調整

雙A學習18051.藍芽模塊6針HC05+PWM調整

此模塊透過藍芽通訊與手機或平板連線,Arduino+Android=雙A,
主式Master為模塊去搜尋手機設備的連線方式,
從式Slave為手機去搜尋模塊的連線方式
此篇學習6針式的HC05,是可調整為主式或從式的模塊,
使用時分為AT設定模式和使用模式,接線是不同的,
以下為Win7+Arduino1.6.6+UNO及安卓測試,圖↓



AT設定模式
AT模式的硬體接線如下
STATE不接
RXD接UNO的P0
TXD接UNO的P1
GND接UNO的GND
Vcc接UNO的5v
EN接UNO的3.3v
部份電路板印刷不同,腳位EN=KEY=WAKEUP是一樣的,圖↓

接好線路後UNO與電腦連結,查看HC05的燈,此時為快閃,
在電腦上執行IDE介面程式,選擇連接阜上傳空程式,確認連接正常,
按住模塊上的按鍵不放,並按下UNO重置鍵,
等UNO開機約2秒後放手,此時模塊上的燈為慢閃,則進入AT模式,
或移開GND線,再插回通電,
打開監控視窗,調整鮑率為38400,此為HC05的原廠預設,
選擇NL&CR,於輸入欄打入AT,部分板是有分大小寫差異的,
第一次會出現ERROE:(0),再次輸入AT,會顯示OK,
若輸入後無回覆顯示,請檢查RX及TX接線是否勞固,圖↓

進入AT模式後可輸入一般常用指令,
AT+ORGL 回復為出廠設定
AT+UART? 查鮑率
AT+ADDR? 查位址
AT+NAME? 查名稱
AT+PSWD? 查密碼
AT+ROLE? 查主/從模式

AT+UART=38400,0,0 修改鮑率為38400
AT+NAME=HC-05 修改名稱為HC-05
AT+PSWD=1234 修改密碼為1234
AT+ROLE=0 設為從模式
AT+ROLE=1 設為主模式
圖↓圖3357

使用模式
試著修改成自己要的設定,由於主式的連接較複雜,請務必設為從式,
其他設定以下用出廠值,完成設定後將機板及模塊先斷電斷線移除,
將模塊接線更換成"使用模式"的腳位連接,
RXD接UNO的P11
TXD接UNO的P10
GND接UNO的GND
Vcc接UNO的5v
EN=KEY=WAKEUP及STATE不用接

此篇要控制LED燈的亮度,務必將燈接在有PWM~符號的腳位上
並接上一220或330電阻到負腳位

如不了解PWM訊號,請先參考UNO320可變電阻調光
http://ee543.blogspot.com/2016/01/arduino320.html
硬體接好連電腦後HC05燈快閃,
開啟UNO IDE程式先上傳空程式確認連線無誤,
由於手機透過藍芽傳輸時會將字元轉換為ASCII碼,
雖然在監控視窗可看到字元或數字,
但對UNO來說只是字碼而非字元,
若要傳輸數字來作計算,需要其他轉換,
此篇僅依ASCII碼來作判別,若不了解ASCII請另搜尋,
得知字母小a編碼為97,小z為122,
因此將接收的碼a~z讀為97~122,透過程式轉換輸出0~255,
將程式上傳後打開監控視窗待機(鮑率9600及NL&CR)

//由手機發出a到z字元轉換成ASCII碼值控制PWM燈的強弱
#include <SoftwareSerial.h> // 引用程式庫
SoftwareSerial BT(10,11); // 對應HC05的TX和RX
int val;  // int及char顯示碼值及字元

void setup()
{
  Serial.begin(9600); // 電腦鮑率
  BT.begin(38400); // HC05鮑率
  pinMode( 9 , OUTPUT);  //被控燈腳位需有pwm
   }

void loop()
{
  if(BT.available() ) {
    val=BT.read();
    Serial.println(val);
    analogWrite(9,map(val,97,122,0,255)); // ASCII值97~122轉換為0~255給燈
    delay(100);
     }
}

以上UNO軟硬體部分算完成,再來手機部分,
可自行編寫或在APP商城有很多藍芽對Arduino用的程式,
以下使用Arduino bluetooth controller,圖

此APP有4種功能,從簡易的開關,和遊戲控制板,
及調光調速,也有字串的輸入,
安裝APP後開啟藍芽,搜尋HC05連線輸入密碼後燈慢快閃,
在APP選文字輸入a~z,會顯示字碼在電腦監控視窗上,
Pin9的LED燈會依字元等級亮度作反應,a不亮,z最亮,
該APP有滑塊功能,輸出數值0~255,
但到UNO只分辨0~9的ASCII碼值,
 

另試著將第3行int val;改為char val;
將顯示碼值改為顯示字元,但實際上使用不變,


www.ee543.com

沒有留言:

張貼留言