前言
您可能注意到了,盡管互連電子設(shè)備采用不同單位,有不同的上限和下限,但在它們的工作范圍內(nèi)始終是兼容的。例如,在Playstation 4上玩電子游戲時(shí),當(dāng)您將搖桿一直拉到右邊時(shí),它會(huì)轉(zhuǎn)換為角色向右的最大移動(dòng)量。我們可以看到,搖桿的移動(dòng)范圍與角色的移動(dòng)范圍是匹配的。在不同階段校準(zhǔn)范圍的這個(gè)過程稱為“映射”。
映射過程通常用于根據(jù)期望的驅(qū)動(dòng)來校準(zhǔn)來自傳感器的輸入值。例如,現(xiàn)代汽車中采用電子方向盤的情況,當(dāng)方向盤旋轉(zhuǎn)720度時(shí),車輪大約會(huì)轉(zhuǎn)動(dòng)40度。因此,我們可以看到,0-720度的范圍被電子方向盤使用的電子控制系統(tǒng)映射為0-40度。這種電子控制系統(tǒng)會(huì)結(jié)合使用微控制器或PLC。微控制器上必須有模擬輸入,可以通過PWM或數(shù)字引腳來映射所需的驅(qū)動(dòng)。本DIY項(xiàng)目結(jié)束時(shí),您將能夠了解:
- 什么是映射?
- 如何讀取傳感器輸入
- 如何將傳感器輸入映射到所需的值范圍
- 映射的范圍如何用于所需的驅(qū)動(dòng)
- Arduino中映射功能的語法
- 使用Arduino UNO實(shí)現(xiàn)的映射功能的應(yīng)用
概述
在這個(gè)DIY項(xiàng)目中,我們將開發(fā)一個(gè)進(jìn)程,使用Arduino UNO將電位計(jì)的電阻變化轉(zhuǎn)換為所需的LED數(shù)量。換句話說,在本例中,電位計(jì)被用作“傳感器輸入”,Arduino UNO被用作“映射設(shè)備”,10個(gè)ROHM LED被用作執(zhí)行機(jī)構(gòu)。LED通常是精密零件,經(jīng)常會(huì)出現(xiàn)隨機(jī)故障。因此,我們選擇了ROHM LED,它們足以耐受電流尖峰,而且性能穩(wěn)定。十個(gè)藍(lán)光ROHM LED將根據(jù)電位計(jì)的旋轉(zhuǎn)進(jìn)行映射。將按照以下順序介紹這個(gè)項(xiàng)目:
所需元器件
元器件 | 鏈接/圖片 |
10 x 藍(lán)光ROHM LED |
|
Arduino UNO R3 |
|
USB B數(shù)據(jù)線
(通常隨Arduino UNO R3一起提供) |
|
10k 電位計(jì) |
|
830 孔無焊面包板 breadboard |
|
20 根公頭轉(zhuǎn)公頭跳線 |
|
1個(gè)1kΩ電阻器 |
任何電子商店
|
基于Windows的計(jì)算機(jī),用于編程 |
電路原理圖
所有元器件都采購齊全后,第一步是把所有元器件都連接起來。連接要求如下所述:
- 對(duì)于這個(gè)項(xiàng)目來說,您需要將10個(gè)藍(lán)光ROHM LED的正極引腳(較長的一端)分別連接到Arduino的數(shù)字引腳。
- 在本例中,我們使用了數(shù)字引腳4-13。
- 每個(gè)LED的負(fù)極引腳需要通過1kΩ的電阻器接地。
- 電位計(jì)有三個(gè)引腳。第一個(gè)連接到Arduino的接地引腳,第二個(gè)連接到模擬引腳A5,第三個(gè)引腳連接到5V。執(zhí)行此操作將使第二個(gè)引腳的電壓在0-5V之間變化。
連接示意圖如下所示:
實(shí)際接線如下所示:
- 現(xiàn)在,您的系統(tǒng)已經(jīng)連接好,您已經(jīng)準(zhǔn)備好對(duì)Arduino UNO R3進(jìn)行編程。
設(shè)置Arduino IDE
Arduino編程需要設(shè)置Arduino IDE。Arduino IDE可在Linux和Windows上使用。對(duì)于這個(gè)DIY項(xiàng)目,我們將使用Windows桌面應(yīng)用程序。訪問以下鏈接下載并安裝Arduino IDE:
Windows Installer, 適用于Windows XP及更高版本
成功安裝后,打開Arduino IDE并使用USB B數(shù)據(jù)線連接Arduino UNO R3:
- 在Arduino IDE中,從“工具”>“端口”>“COM 3 (Arduino Genuino / UNO)”中選擇適當(dāng)?shù)腃OM端口。
- 這時(shí),您的設(shè)置已準(zhǔn)備好開始編程。
編程
在Arduino編程中,有兩個(gè)基本函數(shù):Void Setup和Void Loop。完整代碼及其解釋如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
void setup() {
pinMode(A5, INPUT);
//Declare4-13 Digital Pins as Output Pins (For controlling 10 x ROHM LEDs)
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
//Check Analog value at pin A5 and store it in variable x
int x = analogRead(A5);
//Map analog values ranging from 1-1023 to values 0-10
int y=map(x,0,1023,0,10);
/*Use a loop to turn off LEDs having number greater than y. Here “i+3” corresponds to pin number on arduino. Since 10th LED is connected to Digital Pin number 13. Therefore +3 offset has been used*/
for (int i=10; i>y; i—)
{
digitalWrite(i+3,LOW);
}
//Use a loop to turn on LEDs having number lesser than y
for (int i=0; i<y; i++)
{
digitalWrite(i+4,HIGH);
}
delay(5);
}
//As a result number of LEDs lit will corresponding to the position of potentiometer
|
執(zhí)行
如果您沒有通過外部插孔為Arduino UNO供電,在執(zhí)行過程中,請(qǐng)保持它與電腦連接?,F(xiàn)在將電位計(jì)從一端旋轉(zhuǎn)到另一端。當(dāng)電位計(jì)在模擬引腳上給出0值時(shí),沒有LED點(diǎn)亮。旋轉(zhuǎn)電位計(jì)時(shí),點(diǎn)亮LED的數(shù)量會(huì)不斷增加。電位計(jì)給出的值達(dá)到1023時(shí),點(diǎn)亮LED的數(shù)量將達(dá)到10。可以看到,我們已經(jīng)將傳感器值的范圍映射到了LED的數(shù)量。
- 電位計(jì)的起始位置。(模擬值0)
- 電位計(jì)的中間位置。(模擬值512)
- 電位計(jì)的最終位置。(模擬值1023)
評(píng)論