前言
您可能注意到了,儘管互連電子裝置採用不同單位,有不同的上限和下限,但在它們的工作範圍內始終是相容的。例如,在Playstation 4上玩電子遊戲時,當您將搖杆一直拉到右邊時,它會轉換為角色向右的最大行動量。我們可以看到,搖杆的行動範圍與角色的行動範圍是匹配的。在不同階段校準範圍的這個過程稱為“映射”。
映射過程通常用於根據期望的驅動來校準來自感測器的輸入值。例如,現代汽車中採用電子方向盤的情況,當方向盤旋轉720度時,車輪大約會轉動40度。因此,我們可以看到,0-720度的範圍被電子方向盤使用的電子控制系統映射為0-40度。這種電子控制系統會結合使用微控制器或PLC。微控制器上必須有類比輸入,可以透過PWM或數位引腳來映射所需的驅動。本DIY專案結束時,您將能夠瞭解:
概述
在這個DIY專案中,我們將研發一個進程,使用Arduino UNO將電位計的電阻變化轉換為所需的LED數量。換句話說,在本例中,電位計被用作“感測器輸入”,Arduino UNO被用作“映射裝置”,10個ROHM LED被用作致動器。LED通常是精密零件,經常會出現隨機故障。因此,我們選擇了ROHM LED,它們足以耐受電流尖峰,而且性能穩定。十個藍光ROHM LED將根據電位計的旋轉進行映射。將按照以下順序介紹這個專案:
所需元件
元件 | 連結/圖片 |
10個藍光ROHM LED | https://www.rohm.com/products/led/led-lamps-mono-color-type/sla560bct-product |
Arduino UNO R3 | https://www.aliexpress.com/item/32981776049.html |
USB B資料線
(通常隨Arduino UNO R3一起提供) |
|
10k電位計 | https://www.aliexpress.com/item/32859477972.html |
830孔無焊麵包板breadboard | https://www.aliexpress.com/item/32701019904.html |
20根公頭轉公頭跳線 | https://www.aliexpress.com/item/32951945552.html |
1個1kΩ電阻 | 任何電子商店 |
基於Windows的電腦,用於程式設計 |
所有元件都採購齊全後,第一步是把所有元件都連接起來。連接要求如下所述:
連接示意圖如下所示:
實際接線如下所示:
Arduino程式設計需要設定Arduino IDE。Arduino IDE可在Linux和Windows上使用。對於這個DIY專案,我們將使用Windows桌面應用程式。訪問以下連結下載並安裝Arduino IDE:
成功安裝後,打開Arduino IDE並使用USB B資料線連接Arduino UNO R3:
程式設計
在Arduino程式設計中,有兩個基本函數: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 |
void setup() { //Declare A5 Analog pin as input pin pinMode(A5, INPUT); //Declare 4-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 |
執行
如果您沒有透過外部插孔為Arduino UNO供電,在執行過程中,請保持它與電腦連接。現在將電位計從一端旋轉到另一端。當電位計在類比引腳上給出0值時,沒有LED點亮。旋轉電位計時,點亮LED的數量會不斷增加。電位計給出的值達到1023時,點亮LED的數量將達到10。可以看到,我們已經將感測器值的範圍映射到了LED的數量。