您可以通過閃爍的LED來完成各種操作,在這個簡單的項目中,我們將制造一個小型設(shè)備,當您來回揮動消息時,它可以在空中廣播消息。它比您想像的要容易,而且零件的總成本不到5美元。
該項目利用了一種稱為視覺持久性的視覺幻覺,使文本在空中出現(xiàn)。晚上有人快速移動點燃的煙火時,您可能會遇到這種現(xiàn)象。我們將使用Arduino和一些LED來模仿這種效果。該項目易于構(gòu)建,幾乎不需要任何組件,而且?guī)缀醪恍枰附樱ūM管如果您想了解一些開始使用烙鐵的技巧,請查閱本指南)。
您將需要
Arduino(我使用了$ 2Nano,因為它緊湊且便宜,但任何型號都可以)。
5個紅色LED。
5x220歐姆電阻。
1x9v電池座。
1x撥動開關(guān)。
一塊protoboard,
用于存放成品的外殼(我用了一個漆成黑色的小紙板箱)。
您還需要電烙鐵和一些焊料才能將它們放在一起。
雖然可選,但如果您要使用任何焊錫芯,也可以派上用場。焊接錯誤。面包板和一些連接線對于測試電路也很有用。
布線
布線不那么簡單。首先,如下圖所示連接Arduino,LED和電阻器。
引腳D2到D6分別連接到每個電阻,這些電阻連接到每個LED的正極(長腳)。陰極接地,然后接地回Arduino。完成后,它應(yīng)該看起來像這樣:
就是這樣:我們的電路已經(jīng)完成!
代碼
現(xiàn)在,將您的Arduino連接到計算機,然后打開Arduino IDE。如果您不熟悉Arduino,并希望獲得良好的入門指南,此鏈接將非常有用。
打開一個新草圖并復(fù)制此代碼。此代碼是從該項目中修改的,您可以
// how long each led stays on for
int delayTime = 1;
//how long between each
int charBreak = 3;
//how long to wait after the message is finished before it repeats
int resetTime = 20;
int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
}
int a[] = {1, 6, 26, 6, 1};
int b[] = {31, 21, 21, 10, 0};
int c2[] = {14, 17, 17, 10, 0};
int d[] = {31, 17, 17, 14, 0};
int e[] = {31, 21, 21, 17, 0};
int f[] = {31, 20, 20, 16, 0};
int g[] = {14, 17, 19, 10, 0};
int h[] = {31, 4, 4, 4, 31};
int i[] = {0, 17, 31, 17, 0};
int j[] = {0, 17, 30, 16, 0};
int k[] = {31, 4, 10, 17, 0};
int l[] = {31, 1, 1, 1, 0};
int m[] = {31, 12, 3, 12, 31};
int n[] = {31, 12, 3, 31, 0};
int o[] = {14, 17, 17, 14, 0};
int p[] = {31, 20, 20, 8, 0};
int q[] = {14, 17, 19, 14, 2};
int r[] = {31, 20, 22, 9, 0};
int s[] = {8, 21, 21, 2, 0};
int t[] = {16, 16, 31, 16, 16};
int u[] = {30, 1, 1, 30, 0};
int v[] = {24, 6, 1, 6, 24};
int w[] = {28, 3, 12, 3, 28};
int x[] = {17, 10, 4, 10, 17};
int y[] = {17, 10, 4, 8, 16};
int z[] = {19, 21, 21, 25, 0};
int eos[] = {0, 1, 0, 0, 0};
int excl[] = {0, 29, 0, 0, 0};
int ques[] = {8, 19, 20, 8, 0};
int space[] = {0, 0, 0, 0, 0};
void displayLine(int line){
int myline;
myline = line;
if (myline》=16) {digitalWrite(LED1, HIGH); myline-=16;} else {digitalWrite(LED1, LOW);}
if (myline》=8) {digitalWrite(LED2, HIGH); myline-=8;} else {digitalWrite(LED2, LOW);}
if (myline》=4) {digitalWrite(LED3, HIGH); myline-=4;} else {digitalWrite(LED3, LOW);}
if (myline》=2) {digitalWrite(LED4, HIGH); myline-=2;} else {digitalWrite(LED4, LOW);}
if (myline》=1) {digitalWrite(LED5, HIGH); myline-=1;} else {digitalWrite(LED5, LOW);}
}
void displayChar(char c){
if (c == ‘a(chǎn)’){for (int i = 0; i 《5; i++){displayLine(a[i]);delay(delayTime);}displayLine(0);}
if (c == ‘b’){for (int i = 0; i 《5; i++){displayLine(b[i]);delay(delayTime);}displayLine(0);}
if (c == ‘c2’){for (int i = 0; i 《5; i++){displayLine(c2[i]);delay(delayTime);}displayLine(0);}
if (c == ‘d’){for (int i = 0; i 《5; i++){displayLine(d[i]);delay(delayTime);}displayLine(0);}
if (c == ‘e’){for (int i = 0; i 《5; i++){displayLine(e[i]);delay(delayTime);}displayLine(0);}
if (c == ‘f’){for (int i = 0; i 《5; i++){displayLine(f[i]);delay(delayTime);}displayLine(0);}
if (c == ‘g’){for (int i = 0; i 《5; i++){displayLine(g[i]);delay(delayTime);}displayLine(0);}
if (c == ‘h’){for (int i = 0; i 《5; i++){displayLine(h[i]);delay(delayTime);}displayLine(0);}
if (c == ‘i’){for (int it = 0; it 《5; it++){displayLine(i[it]);delay(delayTime);}displayLine(0);}
if (c == ‘j’){for (int i = 0; i 《5; i++){displayLine(j[i]);delay(delayTime);}displayLine(0);}
if (c == ‘k’){for (int i = 0; i 《5; i++){displayLine(k[i]);delay(delayTime);}displayLine(0);}
if (c == ‘l’){for (int i = 0; i 《5; i++){displayLine(l[i]);delay(delayTime);}displayLine(0);}
if (c == ‘m’){for (int i = 0; i 《5; i++){displayLine(m[i]);delay(delayTime);}displayLine(0);}
if (c == ‘n’){for (int i = 0; i 《5; i++){displayLine(n[i]);delay(delayTime);}displayLine(0);}
if (c == ‘o’){for (int i = 0; i 《5; i++){displayLine(o[i]);delay(delayTime);}displayLine(0);}
if (c == ‘p’){for (int i = 0; i 《5; i++){displayLine(p[i]);delay(delayTime);}displayLine(0);}
if (c == ‘q’){for (int i = 0; i 《5; i++){displayLine(q[i]);delay(delayTime);}displayLine(0);}
if (c == ‘r’){for (int i = 0; i 《5; i++){displayLine(r[i]);delay(delayTime);}displayLine(0);}
if (c == ‘s’){for (int i = 0; i 《5; i++){displayLine(s[i]);delay(delayTime);}displayLine(0);}
if (c == ‘t’){for (int i = 0; i 《5; i++){displayLine(t[i]);delay(delayTime);}displayLine(0);}
if (c == ‘u’){for (int i = 0; i 《5; i++){displayLine(u[i]);delay(delayTime);}displayLine(0);}
if (c == ‘v’){for (int i = 0; i 《5; i++){displayLine(v[i]);delay(delayTime);}displayLine(0);}
if (c == ‘w’){for (int i = 0; i 《5; i++){displayLine(w[i]);delay(delayTime);}displayLine(0);}
if (c == ‘x’){for (int i = 0; i 《5; i++){displayLine(x[i]);delay(delayTime);}displayLine(0);}
if (c == ‘y’){for (int i = 0; i 《5; i++){displayLine(y[i]);delay(delayTime);}displayLine(0);}
if (c == ‘z’){for (int i = 0; i 《5; i++){displayLine(z[i]);delay(delayTime);}displayLine(0);}
if (c == ‘!’){for (int i = 0; i 《5; i++){displayLine(excl[i]);delay(delayTime);}displayLine(0);}
if (c == ‘?’){for (int i = 0; i 《5; i++){displayLine(ques[i]);delay(delayTime);}displayLine(0);}
if (c == ‘。’){for (int i = 0; i 《5; i++){displayLine(eos[i]);delay(delayTime);}displayLine(0);}
if (c == ‘ ’){for (int i = 0; i 《5; i++){displayLine(space[i]);delay(delayTime);}displayLine(0);}
delay(charBreak);
}
void displayString(char* s){
for (int i = 0; i《=strlen(s); i++){
displayChar(s[i]);
}
}
void loop(){
//Change the text inside here to change the text displayed.
//Make sure to keep the brackets and the quotation marks.
displayString(“。.hello!。.”);
delay(40);
}
保存此草圖,然后將其上傳到您的電路板上。如果出現(xiàn)任何錯誤,請確保選擇了正確的板卡和COM端口。您的LED應(yīng)該開始閃爍。如果沒有,請檢查面包板上的所有連接。在代碼開頭聲明的整數(shù)決定了文本顯示的速度。數(shù)值越大,揮動設(shè)備的速度就越快。我發(fā)現(xiàn)這里使用的數(shù)字效果很好。
現(xiàn)在進行快速測試。斷開Arduino與USB電纜的連接,然后將電池座連接到arduino的VIN和GND引腳上
現(xiàn)在,您可以移動它了,小心地嘗試擺動您前面的LED。如果您周圍足夠暗,您應(yīng)該會看到一些字母在空中形成。我發(fā)現(xiàn)它有助于設(shè)置手機來捕獲它。
它有效!現(xiàn)在使它變得更永久一些。
準備就緒的鐵!
像這樣在原型板上放置Arduino板,電阻器和LED:
當然,只要電路保持不變,就可以使布局緊湊。確保您在Arduino的每一側(cè)留出至少一行原型板觸點,以用于組件和電源。如果您是電子產(chǎn)品的初學(xué)者,這里有一些很棒的提示。
我們將把LED陰極成一條線焊接在一起以形成共同的基礎(chǔ),就像我們制作LED矩陣時所做的一樣
折疊每個陰極,使其與另一個陰極重疊,然后焊接它們以形成一條不間斷的線。現(xiàn)在,我們需要將陽極焊接到旁邊的電阻器腳上。我發(fā)現(xiàn)最簡單的方法是將每條腳焊接到各自的焊盤上,然后將烙鐵放在它們之間,以加熱兩個接頭,最后再添加更多的焊料以彌合它們之間的間隙。
檢查每個連接都已牢固連接,然后使用剪鉗從電阻和LED上斷開多余的支腳。
現(xiàn)在重復(fù)相同的任務(wù),但是這次將電阻器的另一端連接到Arduino的腿。這是焊接中最棘手的部分。每個電阻都單獨連接到其Arduino引腳,否則電路將無法正常工作。我在這里犯了幾個錯誤,不得不多次使用焊芯來清除多余的焊錫。
一旦您建立了所有正確的連接,請仔細檢查它們是否與鄰域重疊。如果您可以在此處使用萬用表,則可以使用連續(xù)性模式來檢查每個引腳的電阻上只有一條不間斷的線。如果您只有萬用表,那么本文中會提供一個很好的入門指南。
檢查完每個連接后,請減少多余的連接從電阻器的支腳開始的長度
增加功率
現(xiàn)在,將一條線從Arduino的GND引腳延伸到焊接陰極線末端附近的孔中,然后將電池座的黑色電線放在旁邊。
現(xiàn)在,將電線焊接到GND引腳,就像使用電阻器一樣,并將兩根導(dǎo)線焊接到陰極線的末端以為電路創(chuàng)建一個公共接地。
最后,將一根導(dǎo)線連接到arduino的VIN引腳上,然后將開關(guān)置于該導(dǎo)線和電池組。為這張照片中的熱熔膠開關(guān)道歉,我不得不拆除完成的機器才能拍攝這個階段!
一旦全部焊接在一起,就放好插入電池并輕按開關(guān)。恭喜你!電路完成。如果您看不到任何東西亮起,請仔細檢查每個焊點,看哪里可能有斷裂或短路。
外殼
現(xiàn)在,我們可以正常工作了,讓我們把它放在一個盒子里。盡管您可以使用在業(yè)余商店中購買的盒子甚至舊的特百惠盒子來制作一些永久性的東西,但這里還是使用了一個彩繪的紙板箱。為了獲得額外的極客信譽,您甚至可以在這些便宜的3D打印機之一上進行3D打印。
通過對原型板進行打分,并對其打分并小心地折掉不需要的零件。
》
將電路放置在機柜中,并標記需要戳穿LED和開關(guān)的位置。您還可以選擇標記Arduino板上USB連接器與邊緣的交匯處,以便您可以將其插入以更改文本而無需打開包裝盒。在外殼上鉆出或切出所需的孔。
現(xiàn)在,在LED的邊緣添加一些熱膠并將其粘貼到位。我將一塊海綿粘在電路下面,以便它可以緊緊地放在盒子里。將開關(guān)連接到外殼。我使用了熱膠,盡管螺釘或螺栓會使連接更牢固。您也可以在使用電池時將電池座粘在電路板的背面,以防止其在內(nèi)部移動,但是請確保殼體上的任何金屬觸點都不會碰到您的任何焊接點!
工作完成!
關(guān)閉機箱,您就完成了!要更改文本,請將USB電纜連接到Arduino板上,并在 loop 方法中的 displayString 之后更改括號內(nèi)的文本。找到一個黑暗的地方,玩得開心!
您是否曾經(jīng)構(gòu)建過POV機器并知道改進設(shè)計的方法?您打算自己建造一個嗎?在下面的評論中告訴我們您的項目,我們很樂意聽!
責任編輯:wv
-
led
+關(guān)注
關(guān)注
242文章
23153瀏覽量
658620 -
Arduino
+關(guān)注
關(guān)注
187文章
6464瀏覽量
186681
發(fā)布評論請先 登錄
相關(guān)推薦
評論