曾經(jīng)希望您擁有自己的Knight Industries 2000(KITT)汽車-您知道嗎,來自Knight Rider?通過構(gòu)建LED掃描儀,使您的夢(mèng)想更接近現(xiàn)實(shí)!這是最終結(jié)果:
您需要什么
該項(xiàng)目不需要很多零件,您可能已經(jīng)有很多零件了:
1 x Arduino UNO或類似的
1 x面包板
8 x紅色LEDs
8 x 220歐姆電阻
1 x 10k歐姆電位器
公對(duì)公連接線
如果您有Arduino入門套件,則很可能所有這些部件都可以(用入門工具可以做什么)套件。)
只要有八個(gè)可用的引腳(幾乎從未使用過Arduino?請(qǐng)從這里開始),幾乎任何Arduino都可以使用。您可以使用移位寄存器來控制LED,盡管該項(xiàng)目不需要此操作,因?yàn)锳rduino具有足夠的引腳。
構(gòu)建計(jì)劃
這是一個(gè)非常簡(jiǎn)單的項(xiàng)目。盡管從大量的電線來看可能看起來很復(fù)雜,但是每個(gè)單獨(dú)的部分都非常簡(jiǎn)單。每個(gè)發(fā)光二極管(LED)連接到其自己的Arduino引腳。這意味著每個(gè)LED均可單獨(dú)打開和關(guān)閉。電位計(jì)連接到Arduino模擬輸入引腳,用于調(diào)整掃描儀的速度。
電路
電位器的外部左引腳(從正面看,引腳在底部)接地。將相反的外部引腳連接到+ 5v。如果不能正常工作,則將這些引腳接反。在2中將中間引腳連接到Arduino模擬量。
將每個(gè)LED的陽極(長(zhǎng)腳)連接到數(shù)字引腳1至8。將陰極(短腳)連接到Arduino地面。
代碼
創(chuàng)建一個(gè)新草圖并將其另存為“ knightRider”。代碼如下:
const int leds[] = {1,2,3,4,5,6,7,8}; // Led pins
const int totalLeds = 8;
int time = 50; // Default speed
void setup() {
// Initialize all outputs
for(int i = 0; i 《= totalLeds; ++i) {
pinMode(leds[i], OUTPUT);
}
}
void loop() {
for(int i = 0; i 《 totalLeds - 1; ++i) {
// Scan left to right
digitalWrite(leds[i], HIGH);
delay(time);
digitalWrite(leds[i + 1], HIGH);
delay(time);
digitalWrite(leds[i], LOW);
}
for(int i = totalLeds; i 》 0; --i) {
// Scan right to left
time = analogRead(2);
digitalWrite(leds[i], HIGH);
delay(time);
digitalWrite(leds[i - 1], HIGH);
delay(time);
digitalWrite(leds[i], LOW);
}
}
讓我們對(duì)其進(jìn)行分解。每個(gè)LED引腳都存儲(chǔ)在一個(gè)數(shù)組中:
const int leds[] = {1,2,3,4,5,6,7,8};
數(shù)組本質(zhì)上是相關(guān)項(xiàng)目的集合。這些元素被定義為常量(“ const”),這意味著它們以后無法更改。盡管建議使用常量,但不必使用常量(如果刪除“ const”,代碼將正常工作)。
使用方括號(hào)(“ []”)訪問數(shù)組的元素和一個(gè)稱為索引的整數(shù)。索引從零開始,因此“ leds [2]”將返回?cái)?shù)組中的第三個(gè)元素—針腳3。數(shù)組使代碼更快地編寫且更易于閱讀,它們使計(jì)算機(jī)難以完成工作!
一個(gè)for循環(huán)用于將每個(gè)引腳設(shè)置為輸出:
for(int i = 0; i 《= totalLeds; ++i) {
pinMode(leds[i], OUTPUT);
}
此代碼位于“ setup()”函數(shù)內(nèi)部,因?yàn)樗鼉H需要在以下位置運(yùn)行一次程序的開始。 For循環(huán)非常有用。它們?cè)试S您一次又一次地運(yùn)行相同的代碼,每次都使用不同的值。它們非常適合使用數(shù)組。聲明了整數(shù)“ i”,并且只有循環(huán)內(nèi)部的代碼才能訪問此變量(稱為“作用域”)。 i的值從零開始,對(duì)于循環(huán)的每次迭代,i都增加1。一旦i的值小于或等于“ totalLeds”變量,則循環(huán)“中斷”(停止)。
i的值用于訪問“ leds”數(shù)組。該循環(huán)訪問數(shù)組中的每個(gè)元素,并將其配置為輸出。您可以手動(dòng)鍵入“ pinMode(pin,OUTPUT)”八次,但是為什么您可以寫八行卻可以寫三行呢?
盡管有些編程語言可以告訴您數(shù)組中有多少個(gè)元素(通常使用像array.length這樣的語法),Arduino并沒有使其變得如此簡(jiǎn)單(它涉及到更多的數(shù)學(xué)運(yùn)算)。由于數(shù)組中元素的數(shù)目是已知的,所以這不是問題。
在主循環(huán)內(nèi)部( void loop())是另外兩個(gè)for循環(huán)。第一個(gè)循環(huán)將LED從1 – 8設(shè)置為ON,然后關(guān)閉。第二個(gè)循環(huán)將LED從8 – 1設(shè)置為ON,然后關(guān)閉。請(qǐng)注意,如何將電流引腳設(shè)置為ON,同時(shí)將電流引腳加一個(gè)也設(shè)置為ON。這樣可以確保始終同時(shí)有兩個(gè)LED,從而使掃描儀看起來更逼真。
在每個(gè)循環(huán)開始時(shí),電位計(jì)的值都將被讀取到“時(shí)間”變量中:/p》 time = analogRead(2);
此操作執(zhí)行兩次,每個(gè)循環(huán)一次。這需要不斷檢查和更新。如果此操作不在循環(huán)中,它仍然可以工作,但是會(huì)有一個(gè)小的延遲-它僅在循環(huán)完成執(zhí)行后才運(yùn)行。電位計(jì)是模擬的,因此為什么要使用“ analogRead(pin)”。這將返回零(最小值)到1023(最大值)之間的值。 Arduino能夠?qū)⑦@些值轉(zhuǎn)換為更有用的值,但是對(duì)于這種使用情況,它們是完美的選擇。
更改LED的間隔(或掃描儀的速度)之間的延遲以毫秒為單位(1/1000秒) ),因此最長(zhǎng)時(shí)間僅為1秒。
高級(jí)掃描器
現(xiàn)在,您已經(jīng)了解了基本知識(shí),讓我們來看一下在更復(fù)雜的地方。該掃描儀將從外部開始并在工作中成對(duì)點(diǎn)亮LED。然后將其反轉(zhuǎn),從內(nèi)部到外部成對(duì)發(fā)光。以下是代碼:
const int leds[] = {1,2,3,4,5,6,7,8}; // Led pins
const int totalLeds = 8;
const int halfLeds = 4;
int time = 50; // Default speed
void setup() {
// Initialize all outputs
for(int i = 0; i 《= totalLeds; ++i) {
pinMode(leds[i], OUTPUT);
}
}
void loop() {
for(int i = 0; i 《 (halfLeds - 1); ++i) {
// Scan outside pairs in
time = analogRead(2);
digitalWrite(leds[i], HIGH);
digitalWrite(leds[(totalLeds - i) - 1], HIGH);
delay(time);
digitalWrite(leds[i], LOW);
digitalWrite(leds[(totalLeds - i) - 1], LOW);
delay(time);
}
for(int i = (halfLeds - 1); i 》 0; --i) {
// Scan inside pairs out
time = analogRead(2);
digitalWrite(leds[i], HIGH);
digitalWrite(leds[(totalLeds - i) - 1], HIGH);
delay(time);
digitalWrite(leds[i], LOW);
digitalWrite(leds[(totalLeds - i) - 1], LOW);
delay(time);
}
}
此代碼稍微復(fù)雜一些。請(qǐng)注意,兩個(gè)循環(huán)如何從零變?yōu)椤?halfLeds – 1”(3)。這使掃描儀更好。如果兩個(gè)循環(huán)都從4 – 0和0 – 4變?yōu)檠h(huán),則相同的LED將以相同的順序閃爍兩次-看起來效果不佳。
您現(xiàn)在應(yīng)該擁有一臺(tái)工作正常的Knight Rider LED掃描儀!修改它以使用更多或更大的LED或?qū)崿F(xiàn)您自己的圖案將很容易。該電路很容易移植到Raspberry Pi(是Pi的新功能?從此處開始)或ESP8266。
責(zé)任編輯:wv
-
掃描儀
+關(guān)注
關(guān)注
2文章
438瀏覽量
68463 -
Arduino
+關(guān)注
關(guān)注
190文章
6499瀏覽量
192390
發(fā)布評(píng)論請(qǐng)先 登錄
超酷的樹莓派激光雷達(dá)掃描儀!

蔡司工業(yè)CT三坐標(biāo)掃描儀測(cè)量軟件

微軟已修復(fù)掃描儀USB連接問題
如何將三維激光掃描儀與BIM結(jié)合使用
三維激光掃描儀在工程測(cè)量中的優(yōu)勢(shì)
三維激光掃描儀與無人機(jī)結(jié)合的應(yīng)用
三維激光掃描儀使用技巧 三維激光掃描儀測(cè)量精度分析
三維激光掃描儀應(yīng)用領(lǐng)域 三維激光掃描儀與傳統(tǒng)測(cè)量工具比較
大幅掃描儀掃描地圖怎么操作
蔡司激光三維掃描儀有效掃描金屬材料

何為電磁干擾(EMI)掃描儀,哪里需要它?

如何選擇電磁干擾(EMI)掃描儀,看看這幾點(diǎn)

評(píng)論