找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9212|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Arduino教程-數(shù)值校準(zhǔn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99556 發(fā)表于 2016-1-30 18:39 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
Hi,大家好!上一次,我們給大家介紹了一位新成員,代號(hào)叫Arduino Mega2560,在這里跟大家提個(gè)醒兒,在以后的學(xué)習(xí)中,只要Arduino UNO能完成的實(shí)驗(yàn),用Mega2560也一定能完成。好,就醬!下面繼續(xù)我們今天新的內(nèi)容。
在實(shí)際使用中,我們很有可能會(huì)遇到一種情況,將模擬信號(hào)接口獲取到的數(shù)值進(jìn)行重新校準(zhǔn),以方便我們在項(xiàng)目中接下來的實(shí)際操作中,使用起來更加便捷。今天我們就來一起看看,關(guān)于這個(gè)問題,到底是如何解決的。
首先,還是先來看看,我們都需要哪些硬件吧。
硬件方面
圖片來源:Arduino電路硬件
具體如下:
  • Arduino UNO(1塊)
  • 面包板(1塊)
  • 220Ω電阻(1個(gè))
  • 10KΩ電阻(1個(gè))
  • LED神燈(1個(gè))
  • 光敏電阻(1個(gè))
  • 面包線(若干)
嗯,看起來沒有陌生的面孔,之前我們都見過的。好,繼續(xù)。
軟件方面Arduino官方提供的IDE
連接電路
圖片來源:Arduino電路連接
還好還好,電路連接也不是特別復(fù)雜。在之前的學(xué)習(xí)中,我們已經(jīng)對(duì)光敏電阻學(xué)習(xí)過,所以對(duì)它的電路連接應(yīng)該也比較熟悉了。如果一切順利,讓我們進(jìn)行最后一步。
添加幾行代碼首先,還是新建一個(gè)項(xiàng)目窗口。

圖片來源:Arduino官方IDE
然后向其中添加幾行代碼:


  1. // 定義光敏電阻模擬信號(hào)引腳常量
  2. const int sensorPin = A0;
  3. // 定義LED神燈數(shù)字信號(hào)引腳常量
  4. const int ledPin = 9;
  5. // 定義接收光敏電阻模擬信號(hào)數(shù)值變量
  6. int sensorValue = 0;
  7. // 定義光敏電阻模擬信號(hào)最小數(shù)值變量,
  8. // 初始化為最大常見整數(shù)值1023。
  9. int sensorMin = 1023;
  10. // 定義光敏電阻模擬信號(hào)最大數(shù)值變量,
  11. // 初始化為最小常見整數(shù)值0。
  12. int sensorMax = 0;
  13. // 對(duì)Arduino電路板或相關(guān)狀態(tài)進(jìn)行初始化方法
  14. void setup() {
  15.   // 定義13號(hào)數(shù)字引腳為輸出類型引腳
  16.   pinMode(13, OUTPUT);
  17.   // 將13號(hào)引腳的狀態(tài)初始化為高電壓,
  18.   // 也即將Arduino UNO電路板上自帶的
  19.   // 那盞LED神燈點(diǎn)亮。
  20.   // 點(diǎn)亮此LED神燈的目的是為了清晰的指示
  21.   // 接下來要進(jìn)行的5秒鐘操作。
  22.   digitalWrite(13, HIGH);
  23.   // 在最開始的5秒鐘,不停地獲取光敏電阻的
  24.   // 數(shù)值,以此在這5秒鐘內(nèi)得到其中的最大和
  25.   // 最小數(shù)值。
  26.   while (millis() < 5000) {
  27.     sensorValue = analogRead(sensorPin);
  28.     // 比較獲取到的數(shù)值,
  29.     // 如果比sensorMax數(shù)值大,
  30.     // 則賦值給sensorMax,以此記錄最終得到
  31.     // 的最大值。
  32.     if (sensorValue > sensorMax) {
  33.       sensorMax = sensorValue;
  34.     }
  35.     // 比較獲取到的數(shù)值,
  36.     // 如果比sensorMin數(shù)值小,
  37.     // 則賦值給sensorMin,以此記錄最終得到
  38.     // 的最小值。
  39.     if (sensorValue < sensorMin) {
  40.       sensorMin = sensorValue;
  41.     }
  42.   }
  43.   // 5秒鐘過后,將13號(hào)數(shù)字引腳的數(shù)值
  44.   // 設(shè)置為低電壓,以此熄滅Arduino UNO
  45.   // 電路板自帶的那盞LED神燈。
  46.   digitalWrite(13, LOW);
  47. }
  48. // 系統(tǒng)調(diào)用,無限循環(huán)方法
  49. void loop() {
  50.   // 讀取光敏電阻的數(shù)值
  51.   sensorValue = analogRead(sensorPin);
  52.   // 使用map()方法,將獲取到的sensorValue數(shù)值,
  53.   // 從sensorMin~sensorMax的數(shù)值范圍內(nèi),
  54.   // 映射到0~255數(shù)值范圍內(nèi)的某個(gè)數(shù)值。
  55.   sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
  56.   // 保證映射完成之后的sensorValue數(shù)值在0~255范圍內(nèi)。
  57.   // 第一個(gè)參數(shù)是輸入值,
  58.   // 第二個(gè)參數(shù)和第三個(gè)參數(shù)是數(shù)值的取值范圍。
  59.   // 返回值被限定在0~255之間。
  60.   sensorValue = constrain(sensorValue, 0, 255);
  61.   // 將最終校準(zhǔn)后的數(shù)值設(shè)置給LED神燈
  62.   analogWrite(ledPin, sensorValue);
復(fù)制代碼



好!代碼一共就這幾行,只有一個(gè)新面孔,那就是constrain()方法。這個(gè)方法的使用也很簡單,代碼的注釋里已經(jīng)說明了使用方法,這里不再啰嗦。

圖片來源:Arduino官方IDE的文件編輯菜單選項(xiàng)
點(diǎn)擊上圖中標(biāo)有向右指向的箭頭圖標(biāo),將編寫完成的代碼燒入Arduino電路板。如果一切順利,LED神燈的亮度會(huì)隨著光敏電阻的光線強(qiáng)弱進(jìn)行變化。
總結(jié)通過這次學(xué)習(xí),我們知道了如何校準(zhǔn)數(shù)值。這對(duì)于主要以模擬信號(hào)的傳感器而言,有時(shí)候是非常必要的,可以過濾掉忽高忽低的數(shù)值,并將最終數(shù)值強(qiáng)制變換到指定的某個(gè)數(shù)值范圍內(nèi),對(duì)于數(shù)值的穩(wěn)定起到很關(guān)鍵的作用。在我們做的這個(gè)實(shí)驗(yàn)中,光敏電阻越亮,產(chǎn)生的數(shù)值越大,相應(yīng)的LED神燈也就越亮。那如果想讓光敏電阻越暗,LED神燈變的越亮應(yīng)該怎么辦呢?如果改裝一下,就可以變身一款時(shí)髦的應(yīng)急燈嘍!可以開動(dòng)腦筋想一想!
下期預(yù)告對(duì)于模擬信號(hào)的傳感器,產(chǎn)生的數(shù)值有可能不是非常的穩(wěn)定,或者說偶爾有可能會(huì)產(chǎn)生忽高忽低的數(shù)值,那如何讓獲取到的模擬數(shù)值變的連貫平滑呢?好!下一次我們就解決這個(gè)問題!


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:239822 發(fā)表于 2017-10-23 10:30 | 只看該作者
樓主,你的下一期在哪呢,需要參考你的消抖思路,共享大愛,贊
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表