const int trig = 8; //define Arduino pin const int echo = 9; const int TX = 10; const int RX = 11;
const int delay_time = 1000; //delay 1000 ms for every measurment
SoftwareSerial BT(RX, TX); //set Bluetooth RX (-> pin TX of Bluetooth Module), TX (-> pin RX of Bluetooth Module)
void setup() { Serial.begin(9600); //set baud rate of Serial Monitor BT.begin(9600); //set baud rate of Bluetooth pinMode(trig, OUTPUT); //set trigger pin to OUTPUT (-> pin trig of Ultrasonic Sensor) pinMode(echo, INPUT); //set echo pin to INPUT (-> pin echo of Ultrasonic Sensor) Serial.println("Start!!!"); }
void loop() { float duration; //duration to record the time of every back and forth float distance; digitalWrite(trig, HIGH); //trigger sona for 1 ms delayMicroseconds(1000); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); //use pulseIn() function to get the time of pin echo from HIGH to LOW, unit=microseconds distance = (duration / 2) * 0.034; //distance = ( half of time of back and forth )x( wave velocity(use 0.034 cm per microsecond) )
Serial.print("Distance ="); //show result on Serial Monitor Serial.print(distance); Serial.println("cm"); delay(delay_time);
int sendData = (int) (distance * 100); //times 100 and convert disance to integer byte packet[3]; packet[0] = 97; //key send to phone packet[1] = sendData / 256; //divides sendData to two 1 byte packets packet[2] = sendData % 256;
if(BT.available() > 0) //check BT is succeed if(BT.read() == 97) //check recieve key from phone { Serial.println("succeed!"); for(int i = 0; i < 3; i++) BT.write(packet[i]); //send packet to phone }
請問一下 你提供的app我要怎麼去作使用??
您好,都是用 App Inventor 來開發的,不是 Java。
.aia 就是原始檔。請看看我們的App Inventor 中文學習網(http://www.appinventor.tw),有很多範例
超音波感測模組,距離不管多遠都可以感測到嗎?
還是物體只能放在前方不遠處而已?
您好,當然有限制啦… 以常見的HC SR04 超音坡模組來說,大約是 4cm ~ 2m 但兩公尺實際上對機器人來說相當遠了,所以建議在 1m 的距離之內是比較準的。超音波在牆角的雜訊會特別大,數值會亂跳,請注意喔~
http://blog.lyhdev.com/2012/10/arduino-1hc-sr04.html
App inventor能顯示電腦printf嗎
您好,不懂是什麼意思耶
請問一下 : 有沒有可能 ….
1. 點下手機 app 按鈕打開超音波接收 app 之後 , 藍芽自動連接上 , 而不需要再次去 點擊 connect 按鈕 ?
2. 如果是懶人的話(像我這樣) , 有沒有可能設計成 : 手機一開機 , 就自動進入 app 的測量畫面 ?
感謝回復 謝謝
您好, 當然可以的, 只要把藍牙連線的指令(bluetoothClient.connect)指令寫在 Screen1.Initialize 事件中就可以了. 但要注意您的arduino 要先開起來等候連線, 不然程式開啟時會試著連線一次, 沒連上就沒戲唱了
請問 藍牙收發接收器JY-MCU04 or JY-MCU05 哪裡買的到呢??
我們就有賣啦, 或是露天拍賣、光華商場也很好找
可以使用HC-05藍牙模組做嗎??
您好, 當然可以. 請參考我們的線上教學投影片 http://www.slideshare.net/NissinAllelujahnissin/4-44394140
您好,使用您的範例可是我平板數值跟arduino監測系統數值有誤差 請問是為什麼 ?
誤差可能是時間差所導致,請問怎麼個差法?
請問換成光學指紋辨識器 怎麼改?
請問是哪一款?
SoftwareSerial.h可以发这个库给我吗?
這是預載的程序庫喔,不用另外裝了,您編譯出錯了嗎?
用好了但手機沒有顯示出感測的數值
要怎麼解決?
請問可以在Serial monitor 看到超音波的值嗎?
都用好了,app無法顯示出所測到的值,監控台可以看到測出的值,想請問怎麼解決
有什麼錯誤畫面可以看嗎?您這麼說我也只能請您從頭檢查一次哪邊有問題,請問 part 3 顯示類比腳位值這個範例可以正常執行嗎?
有時候會出現負的值,大概偵測出300以上的值傳到手機會變負的,請問要怎麼解決
請參考本篇:http://blog.cavedu.com/programming-language/appinventor/appinventorandarduinowithbluetooth3/ 但您是用SR04嗎? 這類型的超音波感測器如果超過2公尺的話不是太準,建議只送出2m以內的數值這樣會比較簡單
你好,請問如果要將超音波之類的感測器從序列埠上讀取到的多筆數值,輸出成TXT檔可行嗎(週邊界面是超音波感測器->Arduino UNO改接USB->PC)?
還有輸出指令的寫法是否是用void loop()迴圈裡用if else條件式去寫?
你好,如果要將數值輸出成TXT檔是可行的,以下有幾種方法供你參考:
1.使用teraterm免費軟體,在網路上搜尋teraterm Arduino關鍵字有很多教學,Arduino輸出指令是Serial.print(); 或 Serial.println();
2.使用Arduino透過firmata協定,利用Python做輸出。建議參考書目:Python x Arduino物聯網整合開發實戰
3.可以買SD卡模組,將檔案存入SD卡內。
感謝你的回覆!
方法一的部分我也有看到國外的玩家用類似Teraterm的免費軟體”Coolterm”來做ARDUINO的TXT輸出。
只是方法二和方法三的是用Python的程式語言,比較符合我的需求。
請問簡單來說使用方法二的話,是不是先將ARDUINO的程式上傳板子->Python再跟ARDUINO做連結->最後把ARDUINO的data存成TXT檔放到Python的資料夾裡面?
你好,先說方法二,方法二只需要用到SD的函式庫即可,不需要用到Python。
再來方法三,你說的沒錯,Arduino這端上傳完程式,然後Python這端要安裝pySerial套件跟Arduino COM port溝通,讀到的txt會存在執行的Python檔的同一個資料夾中。
可以詳見:https://playground.arduino.cc/Interfacing/Python
不好意思 請問藍芽接受能改成用esp8266 跟手機app傳資料嗎
可以的,但這樣就要走WIFI了,App Inventor端也要改成Web元件來與開發板互動,本篇教學就不適用囉 這篇提供您參考:https://medium.com/kidstronics/mit-app-inventor-2-meets-esp8266-03-kidserie-fa92cc8ae8a2
我想請問下 我想將火焰感測器數值傳到手機app裡(利用藍芽的方式) 當偵測到火焰時蜂鳴器會叫 我可以參考哪一篇呢 我把您一~七篇教學文都參閱了 但還是不太會弄
第二篇就是您要的啦~ http://blog.cavedu.com/2014/01/02/appinventorandarduinowithbluetooth3/ 如果偵測到火焰就送某個數字或字元給App Inventor,App Inventor收到 (用 if / else )後再處理即可。但如果是要控制蜂鳴器的話,為什麼要多繞一圈到app呢?
請先確認Arduino端可以正確判斷火焰偵測狀況喔
想請問如果要在APP顯示垃圾滿 半滿 空 要怎麼寫 我是用超音波模組去感應ㄉ
您好,在App Inventor端用 if / else if / else 去處理超音波感測器的數值即可
老師您好
如果要將這篇文章中的app跟常閉型震動感測器(sw-420)做應用的話應該如何修改呢?
他是數位輸出的感測器
我想要製作一個類似警報器的東西,當震動感測器感受到震動的時候就會透過藍牙傳送訊號給手機
請問app及編碼的部分應該如何修改呢?
謝謝老師
您好,請參考本系列Part 2,請把code中的analogread改為digitalRead即可。如果有偵測到震動(digitalRead() 結果為 1) 就送某個數字或字元給App Inventor,反之則送另一筆資料。架構都是一樣的,請先確認在Arduino端可以正確讀取感測器資料即可
不過感測器都是輸入裝置才對喔
如果改成用夏普PM2.5和DH22 使用藍芽HC06 傳送至手機 ARDUINO的程式碼怎麼寫? AI2的方面怎麼製作?
您好:請參考本系列文章 Part6:Arduino 傳兩筆資料到 Android 手機。Arduino要用什麼感測器都可以,先確認可以正確讀取到感測器值之後再送出即可
請問還有辦法再加上一顆lcd嗎?
當然可以啊
您好,想做這個來做專題
但我們運用的是 拿超音波來量身高的值。
想請問 可以讀取 身高的值嗎, 我有這個來做測驗 發現距離一高的時候差距滿大的。
您好,可以參考HC SR04的資料表(https://www.electroschematics.com/8902/hc-sr04-datasheet/),雖然最大距離可到4m,但是我們實際上使用超過1m就不太準,因此不建議用超音波感測器來量身高。您可能需要改用別種方式來量身高
您好,我們最近做專題遇到了一些問題想請教你們
問題如下:我們因為需要所以用了兩台arduino,讓兩台以I2C連結(有線),其中master端想要加入藍芽,讓手機能夠傳一些數值給master的arduino做使用,但不知道會不會與I2C做衝突呢?
藍牙不要去佔到I2C腳位就好啦。為什麼要用兩台Arduino,是因為腳位不夠還是距離問題? 如果腳位不夠的話,建議改用Mega 2560這種腳位較多的板子會比較輕鬆
請問如果藍芽裝置改為HC-05那麼程式碼要如何修改呢?
你好austin0518:
若使用HC-05程式碼不需要修改,接法也是和HC-06相同
那如果是用HC-05也可以嗎?
你好john:
HC-05可以的喔!
為甚麼我開藍芽他需要密碼才能連線
你好阿辰:
你可以參照此篇教學文做設定:http://blog.cavedu.com/2017/10/18/雙a計畫藍牙模組hc05、hc06常見的指令使用教學/
老師您好
如果我是用MQ-3去做的話是要改甚麼?
你好Chris:
如果使用MQ-3去做的話,AppInventor不需要改,則Arduino端需要改寫接收到MQ-3的值就好了
你好 我想問 如果是兩個超音波數據呢
您好,請用本文修改即可 https://blog.cavedu.com/2015/04/05/arduino-multidata-to-app/
老師你好
如果是用兩個超音波偵測 請問有哪裡要改?
您好,請先確認Arduino端可以正確讀取兩筆超音波感測器,傳送作法如本篇 http://blog.cavedu.com/2015/04/05/arduino-multidata-to-app/
請問如果想用APP裡按鈕來開關超音波模組動作,如何修改比較好?
您好,透過按鈕去開關 Clock.Timer 這個事件就可以了
請問一下 如果改成 指紋傳感器 可以把指紋回傳嗎???
您好,當然可以,原理都是一樣的喔
你好!為何電話顯示不了讀取到的距離數值呢?但我在serial monitor裡面是能看到的
你好wuu:
可能問題有兩種
1.Arduino和藍牙接線有錯
2.Arduino和藍牙鮑率不一樣
你好,我想請問,若是不透過arduino模板去進行連接,直接將距離感測器連接藍芽然後由手機app去命令距離感測器回傳數值是可行的嗎,app inventor可以進行測距感測器的數值演算嗎?(從sensor傳回的數據有很多所以要進行演算排除才能將正確的距離顯示在app上)
您好,藍牙模組無法讀取距離感測器吧。應該不可行,都是需要Arduino的。只要Arduino端能正確讀取,數值傳送對App Inventor來說都是一樣的。本範例其實與之前的讀取Arduino類比腳位範例是一樣的
我所有的程式都是複製上面範例的APPINVETOR也是用版大給的可是我的手機無法顯示數值,監控台可以看到測出的值,類比輸出也有數值,想請問怎麼解決
chifong你好:
應該跟下一位相同問題吧,請看下面的回答
你好,我的程式碼與APP都是用上面的範例可是APP卻無法顯示數值,監控端視有數值的,用APP都是用上面的範例可是APP卻無法顯示數值,監控端視有數值的,用前面PART3的範例 是可以動作的 想請問是甚麼問題
tony你好:
可能問題有兩種
1.Arduino和藍牙接線有錯
2.Arduino和藍牙鮑率不一樣
您好,可以給我APP的下載網址嗎?
huangdaniel1031,你好:
文中有提供下載連結
請問
可以將超音波測得的距離藉由藍芽傳到Matlab嗎?
matlab 我們比較少碰喔,不好意思~
你好,我使用了上面方式,但是手機未顯示數值,請問是哪裡出問題
這樣講我只能說很多地方都可能出問題,請依序好好檢查軟硬體設定吧
請問如果改成mq7一氧化碳感測器的話 也可以用這樣的方式做嗎
您好,只要 arduino 端讀取正確,要發送什麼資料都是可以的喔
不好意思 如果我想要改成用紅外線測距的話要怎麼改呢,還有我想要固定距離的時候手機會出現提示又要怎麼改呢 麻煩了!!!
你好,jun:
分成兩個部分,Arduino程式和App Inventor程式:
Arduino:
要先抓出紅外線測距的距離,所以你要把本範例Arduino的超音波距離變數distance,換成紅外線測距的距離。
App Inventor:
在when Clock1.Timer元件中最內層if…then,是接收Arduino傳來的超音波距離。那你可以另外在底下在加上if…then的距離判別式,太遠或太近可以跳出對話框之類的功能。
請問為什麼我電腦有跑偵測得數值
但我手機沒有辦法跑數字出來
接線檢查過了…
你好,Junnnn:
請參考這一篇有常見問題說明
http://wp.me/p3T9Qk-45F