**【整理與體驗】 一克拉**
* * * * *
**案例1:超聲波測距程序及調試**
步驟:
1接板(如何中接?要練習)
2找代碼(如何找?百度或arduino中國在線等)
3定uno板定端口(如何做?打開軟件arduino在工具菜單下)
4復制代碼到arduino中燒寫上傳
5測距:(arduino軟件右上角有串口監視器,打開就可看到數據)
* * * * *
* * * * *
//超聲波測距程序及調試
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//發一個10ms的高脈沖去觸發TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}
### 【說 明】
1、看測試。燒載完成后-打開串口窗口-查看電路正確的接線,模塊與著被測物體對著,結果可以看到上圖所示的測距距離。
2、重要代碼。 pulseIn(EchoPin, HIGH),
此函數是計算EchoPin的高電平時間,先將引腳拉高,開始計時,直到該引腳變為低電平為止,單位為ms,如果超出還沒讀取到的話,將返回0.
cm = pulseIn(EchoPin, HIGH) / 58.0;可能很多人會問為什么要除以58.0呢,聲速是340m/s換算一下就是函數返回的值是ms,1s=1000ms,cm=t/1000*34/2=0.017*t=t/58.8,
所以會有除以58.0.
3、聲音要是在真空是什么情況?原來真空下聲音是不能傳播的,在不同溫度和壓強下的聲速是不一樣的。
-----------------------------------------------------------------
* * * * *
#### **案例2:Arduino實驗之超聲測距+【LCD1602屏顯示】**
* * * * *
步驟:
1接板(如何中接?認識UNO板及傳感器,要練習)
2找代碼(如何找?百度或arduino中國在線等)
3定uno板定端口(如何做?打開軟件arduino在工具菜單下)
4復制代碼到arduino中
5屏顯:
接-板上接LED顯示屏(正、負、scl、sda角)
找-找型號找庫,調庫代碼放在setup前,本程序加了3句,調庫
setup中加上2句話,Loop中加上5句
6燒寫上傳
7測距:(arduino軟件右上角有串口監視器,打開就可看到數據)
* * * * *
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C mylcd(0x27,16,2); //頭三句調庫 連屏
const int TrigPin = 2; //發出信號腳
const int EchoPin = 3; //接收信號腳
float cm; //單位
void setup()
{
mylcd.init();
mylcd.backlight(); //共2句 定屏屬性
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//發一個10ms的高脈沖去觸發TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
Serial.print(cm);
Serial.print("cm");
Serial.println();
mylcd.setCursor(0, 0); //光標從這里開始
mylcd.print(cm);
mylcd.setCursor(0, 1); //換行后顯示距離
mylcd.print("cm");
mylcd.clear(); //清屏 共5句 開屏-顯示-清屏
delay(1000);
}
* * * * *
* * * * *
**案例3:超聲波測距程序及調試,+【用LCD1602屏顯示+報警】**
* * * * *
步驟:
1接板(如何中接?認識UNO板及傳感器,要練習)
2找代碼(如何找?百度或arduino中國在線等)
3定uno板定端口(如何做?打開軟件arduino在工具菜單下)
4復制代碼到arduino中
5屏顯:
接-板上接LED顯示屏(正、負、scl、sda角)
找-找型號找庫,調庫代碼放在setup前,本程序加了3句,調庫
setup中加上2句話,Loop中加上5句
6米斯奇:加邏輯,復制到arduino中修改
7燒寫上傳
8測距:(arduino軟件右上角有串口監視器,打開就可看到數據)
* * * * *
//超聲波測距程序及調試,【用LCD1602屏顯示+報警】
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C mylcd(0x27,16,2);
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
pinMode(11, OUTPUT); //D11口設為報警口
mylcd.init();
mylcd.backlight();
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//發一個10ms的高脈沖去觸發TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
Serial.print(cm);
Serial.print("cm");
Serial.println();
if (cm >= 30.00) { //大于30厘米就報警
digitalWrite(11,HIGH);
} else {
digitalWrite(11,LOW);
}
mylcd.setCursor(0, 0);
mylcd.print(cm);
mylcd.setCursor(0, 1);
mylcd.print("cm");
delay(1000);
mylcd.clear();
}
* * * * *
* * * * *
**案例4:超聲波測距程序及調試,【用LCD1602屏顯示+區塊報警+Mixly助手】**
* * * * *
步驟:
1接板(如何中接?接泡沫板、接超聲波、接LED屏、接藍牙注意收發要反著接)
2定uno板.定端口(如何做?打開軟件arduino在工具菜單下)
3找-找型號找庫,調庫代碼放在setup前,本程序加了3句,調庫 setup中加上2句話,Loop中加上5句
4復制下面代碼(復制到arduinoIDE中)
5加邏輯,米斯奇中做并把代碼復制到arduino中修改
6燒寫上傳,先用右上角端口監視器看一下
7測距:(打開就可看到數據)
8**控制手機**。手機appinventor:先查看藍牙是否接到板,接好后,在App中編程,把組件全聯起來。如何修改藍牙名稱?
* * * * *
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C mylcd(0x27,16,2);
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
pinMode(11, OUTPUT); //D11口設為報警口
mylcd.init();
mylcd.backlight();
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//發一個10ms的高脈沖去觸發TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
//下面兩句是關鍵函數
cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
if (cm> 50) {
Serial.print(cm);
Serial.print("安全"); //串口輸出 中英文都可以
Serial.println();
mylcd.setCursor(0, 0);
mylcd.print(cm);
mylcd.setCursor(0, 1);
mylcd.print("Security"); //LED屏顯只認英文
delay(2000);
mylcd.clear();
}
if (cm < 50 && cm > 30) {
Serial.print(cm);
Serial.print("正常");
Serial.println();
mylcd.setCursor(0, 0);
mylcd.print(cm);
mylcd.setCursor(0, 1);
mylcd.print("Normal");
delay(2000);
mylcd.clear();
}
if (cm < 30) {
Serial.print(cm);
Serial.print("危險");
Serial.println();
mylcd.setCursor(0, 0);
mylcd.print(cm);
mylcd.setCursor(0, 1);
mylcd.print("Danger");
delay(2000);
mylcd.clear();
}
}
* * * * *
* * * * *
**案例5:超聲波測距程序及調試
【用LCD1602屏顯示+區塊報警(Mixly助手)+控制手機】**
步驟:
1接板(如何中接?接泡沫板、接超聲波、接LED屏、接藍牙注意收發要反著接)
2定uno板.定端口(如何做?打開軟件arduino在工具菜單下)
3找-找型號找庫,調庫代碼放在setup前,本程序加了3句,調庫 setup中加上2句話,Loop中加上5句
4復制下面代碼(復制到arduinoIDE中)
5加邏輯,米斯奇中做并把代碼復制到arduino中修改
6燒寫上傳,先用右上角端口監視器看一下
7測距:(打開就可看到數據)
8**控制手機**。手機appinventor:先查看藍牙是否接到板,接好后,在App中編程,把組件全聯起來。
**如何修改藍牙名稱?**
* * * * *
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C mylcd(0x27,16,2);
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
pinMode(11, OUTPUT); //D11口設為報警口
mylcd.init();
mylcd.backlight();
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//發一個10ms的高脈沖去觸發TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
//下面兩句是關鍵函數
cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
if (cm> 50) {
Serial.print(cm);
Serial.print("安全"); //串口輸出 中英文都可以
Serial.println();
mylcd.setCursor(0, 0);
mylcd.print(cm);
mylcd.setCursor(0, 1);
mylcd.print("Security"); //LED屏顯只認英文
delay(2000);
mylcd.clear();
}
if (cm < 50 && cm > 30) {
Serial.print(cm);
Serial.print("正常");
Serial.println();
mylcd.setCursor(0, 0);
mylcd.print(cm);
mylcd.setCursor(0, 1);
mylcd.print("Normal");
delay(2000);
mylcd.clear();
}
if (cm < 30) {
Serial.print(cm);
Serial.print("危險");
Serial.println();
mylcd.setCursor(0, 0);
mylcd.print(cm);
mylcd.setCursor(0, 1);
mylcd.print("Danger");
delay(2000);
mylcd.clear();
}
}
* * * * *
### 控制手機
1、加藍牙。 把藍牙接到Uno板上,注意收發反接TX/RX腳
2、手機上裝千月串口(事先就裝好)
先打開手機藍牙功能,再打開千月串口軟件,選擇藍牙并建立通迅。
下載地址:
(1)千月藍牙管理http://dl.pconline.com.cn/download/1026564.html
(2)千月無線手機版http://a.xiazaiba.com/app/26599.html
(3)千月官網-暢享無線http://www.bluesoleil.com.cn/
(4)手機應用管理:輸入千月串口或藍牙串口助手下載
作用:進行藍牙串口通迅測試,連接單片機與電腦和手機的通迅模板。一是幫助搜索藍牙設備,二是接收并顯示數據,三是設置ASCII與HEX的輸入輸出模式。
3、手機上安裝AI伴侶(事先就裝好)
手機版AI下載:我的云盤https://pan.baidu.com/s/1nwXvrlR
作用:測試環節。當App做好后,就要對它進行測試。
### 特別提醒:
桌面版AI伴侶,利于不帶手機的教學測試(安裝這類軟件時都要先關閉退出衛士殺毒軟件類)使用這款AI伴侶的前提條件是:電腦必須具備硬件加速功能(支持WebGL)
下載地址:http://blog.sina.com.cn/s/blog_62218b990102wu1m.html
我的云盤:
win10 x64 https://pan.baidu.com/s/1pNoShWv
win7 x64 https://pan.baidu.com/s/1kWx755P
win7 x32 https://pan.baidu.com/s/1c31jAQs
winxp https://pan.baidu.com/s/1c2TZ8QW
**4、手機App。**(AppInventor 此軟件必須在根目錄中,且為英文名)
**第一步:組件及布局**

**第二步:編程部分 組件邏輯聯系**

**第三步:**先在開發環境中點擊菜單“連接->AI伴侶”,出現二維碼。
**第四步:**打開手機藍牙-打開手機千月串口對接測試藍牙-打開AI伴侶掃描二維碼,之后:用編碼進行連接,如下圖,


源文件下載(我的云盤):https://pan.baidu.com/s/1ggShRBd
* * * * *
* * * * *
## 學習小結:
①做手機app,版面可以設科學點美觀點,雖然并不第一重要。
②apk程序文件如何去掉風險提示?因為程序沒有通過認證去不掉。
③手機程序(屏幕程序)與手機控物程序(手機與物聯)不同。
**手機程序:**
方法一:軟件AppInventor,AI伴侶,藍牙串口助手(千月串口)等
方法二:在線app
**手機控物程序:**
軟件
手機程序app inventor,手機安裝(AI伴侶,千月串品,訊飛語音+),arduino+米斯奇,S4A,各種傳感器等
①先把實物傳感器按s4a軟件要求接好。如 把藍牙和arduino板接好。(裝配成功)
②調試一下,把uno板接上電腦,并在電腦上打開軟件arduino,寫入(燒錄)相關代碼調試。
代碼從哪來?如何找到?
一是會編,二是會調用借用。一般不必自己編,已經有的代碼和庫文件要會調用。
如何證明燒寫成功?用arduinoIDE自帶的串口助手(在arduino右上角),選好接的串口號com,波特率?輸入幾個字符,發送一下,看顯示。(電腦與板卡通信成功)
③千月串口app,arduino的藍牙管理軟件,在手機上安裝,打開手機藍牙功能,并打開千月串口,找藍牙設備。
發送字符,看返回值,測試一下。(手機與板卡通信成功)
④邏輯代碼,代碼在米斯奇里做好,復制粘貼到arduino,反復修改調試,驗證、上傳,直到成功。
⑤編手機遙控程序
軟件app inventor,注意先建項目,查看連接端口,編好后,下載到本地,并傳送到手機安裝測試
、
* * * * *
* * * * *
### 總結:
電腦控物--- 電腦與單片機 。 如各種傳感器
手機控物---手機通過藍牙或WIFI,聯系控物。如 釣魚船
單片機控手機(電腦)---單片機通過藍牙等通迅組件,通過在手機app建立聯系,控制手機。如 超聲波傳感器的停車安全距離提示
- 第 1 節 【基礎】認識Arduino
- 電子知識
- Arduino與圖形編程軟件結合使用
- 第 2 節 【基礎】串口類串口并口
- 第 3 節 【基礎】認識傳感器
- 認識舵機
- 超聲波傳感器
- 認識藍牙
- LCD1602屏顯
- 光敏電阻傳感器
- 第 4 節 【教程】Arduino示例教程模塊版
- 第 5 節 【概述】電腦控制UNO板組件
- 第 6 節 【實例】光敏傳感器與LED燈結合用(自控節能燈)
- 第 7 節 【實例】超聲波測距及調試
- 第 8 節 【實例】點亮LED燈
- 第 9 節 【實例】可控舵機-電位器控制舵機
- 第 10 節 【實例】安卓手機控制Arduino單片機-藍牙串口通訊
- 第 11 節 【實例】WIFI物聯-貝殼物聯網控制LED燈