步驟1:電路
Arduino的模擬輸入可接受0V至5V輸入。此輸入具有10位分辨率,這意味著信號(hào)被分成2 ^ 10個(gè)段或1024個(gè)計(jì)數(shù)?;诖耍谠试S同時(shí)按下的同時(shí),我們最多可能輸入到模擬輸入中的是10個(gè)按鈕到1個(gè)模擬輸入。但是,這不是一個(gè)完美的世界。導(dǎo)體中存在電阻,外部來(lái)源的噪聲以及功率不完善。因此,為了給自己帶來(lái)足夠的靈活性,我計(jì)劃設(shè)計(jì)6個(gè)按鈕。這在一定程度上受到TinkerCAD Circuits具有6開(kāi)關(guān)DIP開(kāi)關(guān)對(duì)象這一事實(shí)的影響,這將使測(cè)試變得容易。
設(shè)計(jì)的第一步是確保每個(gè)按鈕在按下時(shí)單獨(dú)按下,將提供獨(dú)特的電壓。這排除了所有電阻器的值相同。下一步是,并聯(lián)添加電阻值時(shí),電阻值不能與任何單個(gè)電阻器值相同。當(dāng)電阻并聯(lián)時(shí),可以通過(guò)Rx = 1/[(1/R1)+(1/R2)]來(lái)計(jì)算得到的電阻。因此,如果R1 = 2000和R2 = 1000,則Rx = 667。我推測(cè)通過(guò)將每個(gè)電阻器的尺寸加倍,對(duì)于任何組合我都不會(huì)看到相同的電阻。
因此,到目前為止,我的電路是有6個(gè)開(kāi)關(guān),每個(gè)開(kāi)關(guān)都有自己的電阻。但是,完成該電路還需要一個(gè)電阻。
最后一個(gè)電阻有3個(gè)用途。首先,它充當(dāng)下拉電阻。如果沒(méi)有電阻,則當(dāng)沒(méi)有按鈕按下時(shí)電路將不完整。這將使Arduino模擬輸入上的電壓浮動(dòng)到任何電壓電位。下拉電阻器實(shí)質(zhì)上將電壓下拉至0V。第二個(gè)目的是限制該電路的電流。歐姆定律指出,V = IR或電壓=電流乘以電阻。在給定的電壓源下,電阻越大,電流就越小。因此,如果將5V信號(hào)施加到500ohm電阻,則我們可以看到的最大電流為0.01A或10mA。第三個(gè)目的是提供信號(hào)電壓。流過(guò)最后一個(gè)電阻的總電流為:i = 5V/Rtotal,其中Rtotal = Rlast + {1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R 5)+(1/R 6)]}。但是,對(duì)于每個(gè)按下了相應(yīng)按鈕的電阻,僅包括1/Rx。從總電流中,提供給模擬輸入的電壓將為i * Rlast或i * 500。
步驟2:證明-Excel
證明該電路具有獨(dú)特的電阻和獨(dú)特的電壓的最快,最簡(jiǎn)單的方法是使用Excel的功能。
我設(shè)置了所有可能的組合切換輸入并按照二進(jìn)制模式順序組織這些。值“ 1”表示開(kāi)關(guān)打開(kāi),空白表示開(kāi)關(guān)關(guān)閉。在電子表格的頂部,我輸入了每個(gè)開(kāi)關(guān)和下拉電阻的電阻值。然后,我計(jì)算了每種組合的等效電阻,但當(dāng)所有電阻都關(guān)閉時(shí)除外,因?yàn)檫@些電阻在沒(méi)有電源的情況下不會(huì)產(chǎn)生影響。為了使我的計(jì)算變得容易,以便我可以復(fù)制和粘貼到每個(gè)組合,我通過(guò)將每個(gè)開(kāi)關(guān)值(0或1)乘以其反向電阻值來(lái)將所有組合包括在計(jì)算中。如果開(kāi)關(guān)斷開(kāi),這樣做可以從計(jì)算中消除其電阻??梢栽陔娮颖砀竦膱D像中看到生成的方程式,但是Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6)。使用Itotal = 5V/Req,我們確定通過(guò)電路的總電流。這與流過(guò)下拉電阻的電流相同,并向我們的模擬輸入提供電壓。計(jì)算公式為Vin = Itotal x Rx。查看Req數(shù)據(jù)和Vin數(shù)據(jù),我們可以發(fā)現(xiàn)我們確實(shí)有唯一的值。
在這一點(diǎn)上,我們的電路似乎可以正常工作?,F(xiàn)在要弄清楚如何對(duì)Arduino進(jìn)行編程。
第3步:Arduino編程
當(dāng)我開(kāi)始考慮如何對(duì)Arduino進(jìn)行編程時(shí),我最初計(jì)劃設(shè)置各個(gè)電壓范圍來(lái)確定開(kāi)關(guān)是打開(kāi)還是關(guān)閉。但是,有一天晚上躺在床上時(shí),我想到應(yīng)該可以找到一個(gè)方程式來(lái)做到這一點(diǎn)。怎么樣? EXCEL。 Excel能夠計(jì)算方程以最適合圖表中的數(shù)據(jù)。為此,我需要一個(gè)開(kāi)關(guān)(二進(jìn)制)的整數(shù)值與對(duì)應(yīng)于該值的電壓輸入之間的等式。在我的Excel工作簿中,將“整數(shù)值”放在電子表格的左側(cè)。現(xiàn)在確定我的方程式。
下面是有關(guān)如何在Excel中確定直線方程式的快速教程。
1)選擇一個(gè)不包含任何數(shù)據(jù)的單元格。如果選擇了一個(gè)具有數(shù)據(jù)的單元格,Excel將嘗試猜測(cè)要趨勢(shì)的單元格。因?yàn)镋xcel很少能正確預(yù)測(cè),所以這使設(shè)置趨勢(shì)變得更加困難。
2)選擇“插入”選項(xiàng)卡,然后選擇“散點(diǎn)圖”。
3)右鍵單擊圖表框,然后單擊“選擇數(shù)據(jù)。..”。這將彈出“選擇數(shù)據(jù)源”窗口。選擇“添加”按鈕繼續(xù)選擇數(shù)據(jù)。
4)給它指定一個(gè)系列名稱(可選)。通過(guò)單擊向上箭頭,然后選擇電壓數(shù)據(jù),選擇X軸的范圍。通過(guò)單擊向上箭頭,然后選擇整數(shù)數(shù)據(jù)(0-63),選擇Y軸的范圍。
5)右鍵單擊數(shù)據(jù)點(diǎn),然后選擇“添加趨勢(shì)線。..”。在“設(shè)置趨勢(shì)線格式”窗口中,選擇“多項(xiàng)式”按鈕。觀察趨勢(shì),我們發(fā)現(xiàn)2的階數(shù)不太匹配。我選擇了3階,覺(jué)得這更準(zhǔn)確。選中“在圖表上顯示方程式”復(fù)選框?,F(xiàn)在,最終方程式顯示在圖表上。
6)完成。
確定?;氐紸rduino程序?,F(xiàn)在我們有了方程式,對(duì)Arduino進(jìn)行編程很容易。代表開(kāi)關(guān)位置的整數(shù)以1行代碼計(jì)算。通過(guò)使用“ bitread”功能,我們可以獲取每個(gè)單獨(dú)位的值,從而了解每個(gè)按鈕的狀態(tài)。 (請(qǐng)參閱照片)
第4步:TinkerCAD電路
如果您尚未簽出TinkerCAD電路,請(qǐng)立即執(zhí)行。等待?。。?!完成閱讀我的Instructionable,然后將其簽出。 TinkerCAD Circuits使測(cè)試Arduino電路非常容易。它包括幾個(gè)電子對(duì)象和Arduino,甚至允許您對(duì)Arduino進(jìn)行編程以進(jìn)行測(cè)試。
要測(cè)試我的電路,我使用DIP開(kāi)關(guān)組設(shè)置了6個(gè)開(kāi)關(guān)并將它們與電阻器捆綁在一起。為了證明我的Excel電子表格中的電壓值正確,我在Arduino的輸入處顯示了一個(gè)電壓表。一切都按預(yù)期工作。
為證明Arduino編程工作正常,我使用Arduino的數(shù)字輸出將開(kāi)關(guān)的狀態(tài)輸出到LED。
然后我將每個(gè)開(kāi)關(guān)切換為一切可能的組合,并為能說(shuō)“ IT WORKS”而感到自豪??!
-
按鈕
+關(guān)注
關(guān)注
0文章
134瀏覽量
12724 -
Arduino
+關(guān)注
關(guān)注
187文章
6461瀏覽量
186524 -
模擬輸入
+關(guān)注
關(guān)注
0文章
17瀏覽量
10667
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論