國立勤益科技大學 電子工程系 專題實務報告 多功能偵測機器人 指導老師 : 陳英傑教授 專題學生 : 賴泳霖 洪聖凱 1
目錄 一 中文摘要 2 二 簡介 2 三 硬體分析 6 四 軟體分析 11 五 測試結果 16 六 結論 17 七 參考資料 18 一 中文摘要 常常在電視上看到消防隊員在搶救災害現場時, 因為瓦斯外洩沒有注意 2
到, 產生爆炸而受到嚴重傷亡, 所以希望能夠在災害處理現場做一些更好的防範 利用機器人或自走車先進去災害現場, 使用感測器偵測, 讓救災人員了解哪裡瓦斯濃度特別高, 以利找到瓦斯洩漏地點, 這樣在搶救時就可以針對這區域做特別處理, 減低在搶救時人員受傷的機率 二 簡介 1. 電路圖 2. 實際接線 3
3. 使用軟體 Arduino 4
4. 成品 5
三 硬體分析 1. 設備材料 名稱 數量 ARDUINO UNO R3 ARDUINO HC-06 藍芽模組 ARDUINO MQ-2 煙霧模組 ARDUINO HC-SR04 超音波模組 IC L293D 雙軸直流馬達圓型蜂鳴器直流電壓 3~6 伏特麵包版電池盒 一個一個一個一個一個四顆一個兩塊一組 2. Arduino UNO R3 6
3. IC L293D 用來控制四顆直流馬達 1,2EN: 連接高電壓時啟動左側馬達控制 1A: 輸入高電壓時, 電流會導向 3 號針腳 (1Y) 1Y: 連接到馬達 HEAT SINK AND GDOUND: 接地 HEAT SINK AND GDOUND: 接地 2Y: 連接到馬達 2A: 輸入高電壓時, 電流會導向 3 號針腳 (2Y) Vcc2: 給馬達使用的電源 3,4EN: 連接高電壓時啟動右側馬達控制 3A: 輸入高電壓時, 電流會導向 3 號針腳 (3Y) 3Y: 連接到馬達 HEAT SINK AND GDOUND: 接地 HEAT SINK AND GDOUND: 接地 4Y: 連接到馬達 4A: 輸入高電壓時, 電流會導向 3 號針腳 (4Y) Vcc1: 提供給 IC 的電源, 這個 Pin 要供給 5V 電壓 7
4. HC-SR04 超音波感測器 超音波感測器是由超音波發射器 接收器和控制電路所組成 當它被觸發的時候, 會發射一連串 40 khz 的聲波並且從離它最近的物體接收回音 超音波是人類耳朵無法聽見的聲音, 因為它的頻率很高 探測的距離為 2cm-450cm, 精度為 0.3 cm, 感應角度為 15 度 8
5. HC-06 藍芽模組 ARDUINO HC-06 藍芽模組的腳位 KEY 命令回應模式 VCC 正電源 ( 輸入電壓範圍 3.6V 到 6V, 通常為 5V) GND 接地 TXD 傳送 RXD 接收 STATE 狀態 6. MQ-02 Arduino MQ-2 煙霧感測器在家庭和工業中主要用於檢測氣體是否洩漏, 它能夠探測範圍 300~10000ppm 的可燃氣體, 液化氧 甲烷 丙烷, 丁烷 酒精和煙霧 ( 可燃氣體 ) 等 9
7. 蜂鳴器 使用 3~6 伏特直流電壓 8. 直流馬達 控制電流方向可使馬達正反轉 10
四 軟體分析 1. 程式介紹 #include <SoftwareSerial.h> SoftwareSerial BT(10, 9); char val; const int ENA = 2; const int motor1a= 3; const int motor2a= 4; // 第一組馬達致能腳 // 正轉 // 反轉 const int ENB = 5; const int motor3a = 6; const int motor4a = 7; // 第二組馬達致能腳 // 正轉 // 反轉 const int LEDPin = 8; const int trigpin = 11; unsigned long echopin=a5; int time = 0; float duration; float distance; // 設定函數 int sensorvalue; int Key1Pin = 12; int buzzerpin= 13; int sensorpin=a0; 11
void setup() BT.begin(9600); Serial.begin(115200); pinmode(ena,output); pinmode(motor1a,output); pinmode(motor2a,output); pinmode(enb,output); pinmode(motor3a,output); pinmode(motor4a,output); pinmode(trigpin,output); pinmode(echopin,input); pinmode(ledpin,output); pinmode(sensorpin,input); pinmode(key1pin, OUTPUT); pinmode(buzzerpin,output); void loop() if (BT.available()) val = BT.read(); switch (val) case 'w' : digitalwrite(ena,high); digitalwrite(enb,high); forward(); break; case 'x' : digitalwrite(ena,high); digitalwrite(enb,high); backward(); break; case 'a' : digitalwrite(ena,high); digitalwrite(enb,high); turnleft(); break; case 'd' : digitalwrite(ena,high); // 設定接角模式 // 假如藍芽有收到東西進入 If 迴圈 // 判斷接收到的數值 12
digitalwrite(enb,high); turnright(); break; case 's' : digitalwrite(ena,low); digitalwrite(enb,low); stop(); break; digitalwrite(trigpin,low); delaymicroseconds(2); digitalwrite(trigpin,high); delaymicroseconds(5); digitalwrite(trigpin,low); duration = pulsein(echopin,high); // 計算高准位的時間 distance = (duration/2)/29; Serial.print("Data:"); Serial.print (time); Serial.print(", d = "); Serial.print(distance); Serial.println(" cm"); time = time + 1; delay(1000); // 轉換成公分 // 顯示 DATA // 顯示偵測次數 // 顯示 d= // 顯示換算好的距離 // 顯示 cm // 一秒更新一次 if(distance<15) tone(ledpin,262); delay(300); tone(ledpin,1976); delay(300); notone(ledpin); else // 如果離障礙物小於 15 公分 // 蜂鳴器會發出這個頻率的聲音 // 蜂鳴器會發出這個頻率的聲音 13
notone(ledpin); Serial.print("Value:"); sensorvalue = analogread(sensorpin); Serial.print(sensorValue, DEC); delay(500); if(sensorvalue <= 300) // 讀取 MQ-02 偵測到的數值 // 以 10 進位顯示 MQ-02 偵測到的數值 // 假如數值小於 300 Serial.print(" Safe"); digitalwrite(buzzerpin, LOW); else Serial.print(" Danger"); digitalwrite(buzzerpin, HIGH); Serial.println(" "); // 顯示 Safe // 蜂鳴器不響 // 顯示 Danger // 蜂鳴器響 void forward() digitalwrite(motor1a,low); digitalwrite(motor2a,high); digitalwrite(motor3a,low); digitalwrite(motor4a,high); void backward() digitalwrite(motor1a,high); digitalwrite(motor2a,low); digitalwrite(motor3a,high); digitalwrite(motor4a,low); void turnleft() // 直走副程式 // 倒退副程式 14
digitalwrite(motor1a,high); digitalwrite(motor2a,low); digitalwrite(motor3a,low); digitalwrite(motor4a,high); void turnright() digitalwrite(motor1a,low); digitalwrite(motor2a,high); digitalwrite(motor3a,high); digitalwrite(motor4a,low); void stop() // 左轉副程式 // 右轉副程式 digitalwrite(motor1a,low); digitalwrite(motor2a,low); digitalwrite(motor3a,low); digitalwrite(motor4a,low); // 停止副程式 15
五 測試結果 1. 超音波距離測試 以手來測試超音波感測器是否有正常動作 16
2. 瓦斯濃度測試 以打火機釋放瓦斯來測試煙霧模組是否能正常動作 六 結論 這次的專題實作是有預防災害的自走車, 以 Arduino 開發版結合其他模組來達成我們想要的功能, 在剛開始要先預想我們要的功能是什麼, 再來設計電路與程式, 過程中, 我們遇到許多的電路設計上的問題與程式的 DEBUG, 發現到在電池盒沒電的時候, 感測器或有感應錯誤發生的問題 在以往的課堂都是題目已經幫我們設計好, 我們只要填填空格, 而專題是從無到有, 一步一步地慢慢完成, 透過這次寶貴的經驗, 增進了我們找到問題並且排除錯誤的能力 17
七 參考資料 Arduino UNO R3 程式設計周邊硬體超圖解 Arduino 互動設計入門第 2 版 ISBN 978-986-312-195-4 Arduino UNO R3 http://shop.cpu.com.tw/product/40500/info/ HC-06 無線藍芽通訊模組 http://shop.cpu.com.tw/product/47191/info/ HC-SR04 超音波測距模組 http://shop.cpu.com.tw/product/45466/info/ MQ-02 煙霧感測器 http://shop.cpu.com.tw/product/46518/info/ 18