第1步:需要的部件
對(duì)于這個(gè)項(xiàng)目,我從一個(gè)舊的陰影盒購(gòu)買二手商店。由于它的形狀很好并且已經(jīng)安裝了一塊玻璃,我不需要做任何進(jìn)一步的工作。任何陰影盒或深框架都可以工作,它只需要足夠大,可以將LED燈條固定在里面,并有前玻璃和后視鏡的空間。
您需要的其他部件包括
Shadowbox
鏡子窗膜
LED燈條(確保它是5V)
四個(gè)超聲波傳感器
母頭(這可能是可選的)
一個(gè)電容器(大約100uF到220uF可以工作)
一個(gè)電阻器(任何200-600歐姆都可以工作)
電池組(我用18650制造自己的電池,但9V電池可以工作)
你還需要一個(gè)少量供應(yīng)。
烙鐵(可以只使用壓接機(jī))
熱膠槍
玻璃切割器(如果需要鏡子或玻璃)
連接線,我使用了一條舊的網(wǎng)絡(luò)電纜(CAT5)
Dupont壓接器(可選,但非常有用)
3D打印機(jī)(我的是Robo3D)
我的建議是提示根據(jù)你的供應(yīng)量來(lái)確定。這些是我使用過(guò)的耗材。
第2步:在膠片上添加膠片
我做的第一步是在我的鏡頭上添加一個(gè)鏡像膠片前玻璃。事實(shí)證明這是非常容易的。
無(wú)限遠(yuǎn)鏡使用后視鏡和前玻璃上的“雙向”鏡子的方式。然后光線會(huì)在后視鏡和雙向鏡子之間反彈,最終逃離雙向鏡子。留下鏡子無(wú)限深的效果。
我使用的是銀色窗簾遮光膜,涂抹后留下非常鏡面的效果。您也可以嘗試不同的膠片效果以獲得其他效果。
只需按照膠片附帶的說(shuō)明將其涂在前玻璃背面即可。對(duì)于我的膠片,你將肥皂水涂在玻璃上,將膠片切成精確的尺寸(或略小),涂抹并用刮刀將多余的水?dāng)D出。讓它干一夜,你就完全了。
第3步:安裝LED燈條
衡量你的陰影框的內(nèi)部尺寸,并確定四個(gè)邊中的每個(gè)邊上應(yīng)有多少個(gè)LED。如果每側(cè)有奇數(shù)個(gè)LED,它將工作得最好。具有奇數(shù)將允許一個(gè)LED作為燈的中心。
一旦確定每側(cè)需要多少個(gè)LED,請(qǐng)仔細(xì)切割LED燈條,確保只切割指定的LED您可以保持最終切割部件的正確極性。
切割LED后,將它們干燥安裝到陰影箱中,并仔細(xì)測(cè)量需要多少連接線才能將它們重新連接到陰影箱中。角落。你可以避免切割一些角落,這一切都取決于你的影子箱的大小。對(duì)于我的,我只需要切割其中一個(gè)角落。
用短線焊接切割的LED條帶,如果使用裸線,則應(yīng)用熱縮管。通過(guò)對(duì)齊箭頭確保維持LED的正確極性。
在LED燈條的起始處,焊線會(huì)導(dǎo)致連接到Arduino。這些引線將通過(guò)后視鏡進(jìn)行捕捉。
在正確切割和焊接LED之后,將背膠粘貼并粘貼在框架上,將它們安裝在陰影盒內(nèi)部。不要相信粘合劑會(huì)粘住,因此在整個(gè)LED燈條的關(guān)鍵位置涂上熱膠。在拐角處特別小心,因?yàn)樗鼈儗⑹紫仍谀抢锼缮ⅰ?/p>
步驟4:為超聲波傳感器構(gòu)建軟件
將超聲波傳感器連接到該項(xiàng)目的方法有很多種。我通過(guò)將電線引線連接到母頭的4個(gè)引腳上,然后將頭部熱膠粘到框架的背面。這允許我插入我的超聲波傳感器并在必要時(shí)將其移除。
在每個(gè)標(biāo)題上使用4根不同顏色的電線,并保持順序與陰影盒周圍的順序完全相同。我們稍后將所有+ 5V和GND線連接在一起,每個(gè)ECHO,TRIGG線將連接到Ardiuno。保持顏色一致將使該過(guò)程更容易。
將電線焊接到接頭后,我為每個(gè)接頭添加了一小段收縮管。
或者,超聲波傳感器可以直接焊接到電線上并安裝在陰影箱上。
步驟5:安裝鏡子和背面
超聲波傳感器接頭粘合后,是時(shí)候?qū)㈢R子粘到遮陽(yáng)板背板上并安裝背面。如果您的鏡子太大,請(qǐng)使用玻璃切割器將其切割成正確的尺寸。請(qǐng)注意,正確的尺寸可能會(huì)比你的支持者小一點(diǎn)1/2英寸。
我的影子盒使用框架中的一個(gè)凹槽來(lái)固定背部,然后使用兩個(gè)小金屬鉤來(lái)固定它地方,給我的支持者一個(gè)小角度。您的設(shè)計(jì)可能會(huì)有所不同。
使用熱膠,在背面涂上一些大膠水,然后將鏡子按到位。鏡子粘合后,將電線繞在電線周圍并將其連接到框架上。如有必要,在每個(gè)角落涂抹少量熱膠。
在安裝背面之前,最好先測(cè)試一下LED燈條,確保所有接線都正確無(wú)誤。此外,確保在連接之前將LED線引線從背面拉出,因?yàn)槲覀儗⒃谙乱徊街行枰@些引線。
步驟6:連接Arduino Uno和Ultra Sonic傳感器
收集超聲波傳感器的所有GND線,并將尾纖線連接到束上,然后將它們?nèi)亢附釉谝黄?。這將成為我們所有傳感器的共同基礎(chǔ)。尾纖線將插入Arduino UNO。
對(duì)所有超聲波傳感器的+ 5V線路重復(fù)此過(guò)程。你應(yīng)該將所有的線束都焊接在一起,并將一根引線插入Arduino。
接下來(lái),LED燈條的GND和+ 5V應(yīng)該在其電源上獲得一個(gè)100-200uF的電容。確保觀察到正確的極性,電容的負(fù)極在GND線上。我使用與傳感器公共電線相同的技術(shù)將我焊接在一起。
最后,在LED燈條的DATA線上,串聯(lián)一個(gè)200-500歐姆的電阻器。這將確保我們的LED燈帶不會(huì)產(chǎn)生電流涌入,導(dǎo)致我們的第一個(gè)LED燒壞。
在所有連接處添加熱縮管。下一步顯示電路圖是否有用。
完成所有接線后,將每根導(dǎo)線連接到Arduino。 GND至GND,+ 5V至+ 5V,LED數(shù)據(jù)至PIN 10,傳感器至PIN 2-9。
我用我的壓接器將杜邦端部添加到每根電線上。如果您沒(méi)有壓接器,可以將連接線焊接到每根導(dǎo)線或?qū)⑺鼈兒附拥讲孱^引腳。
步驟7:電路圖
這是我設(shè)計(jì)的電路圖。乍一看可能看起來(lái)很復(fù)雜,但它只有4個(gè)傳感器,每個(gè)傳感器有4根線和LED燈條。
步驟8:Arduino代碼
我選擇使用傳感器周圍的脈沖LED制作橙色中心點(diǎn),以測(cè)量最近的物體。當(dāng)然,由于你有傳感器和基本代碼,你可以做一些完全不同的事情。
注意:
這使用Adafruit NeoPixel庫(kù),確保你正確安裝該庫(kù)。
傳感器的確切順序及其PIN碼。
調(diào)整陰影框使用的總像素?cái)?shù)。
根據(jù)需要調(diào)整顏色。
告訴代碼“角落”的位置,這些是盒子每一邊的中心點(diǎn)。
#include
const int NUMPIXELS = 26;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, 10);
const int NUMPIXELS = 26;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, 10);
const int topTrigPin = 2;
const int topEchoPin = 3;
const int leftTrigPin = 4;
const int leftEchoPin = 5;
const int botTrigPin = 6;
const int botEchoPin = 7;
const int rightTrigPin = 8;
const int rightEchoPin = 9;
void setup() {
Serial.begin(9600);
pixels.begin();
}
int corners[4] = {16, 23, 3, 10};
int focusPoint = 20;
int focusMoveTo = 20;
int rainbow = 0;
uint32_t rainbowColor = Wheel(0);
unsigned long previousMillis = 0;
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis 》= 500) {
previousMillis = currentMillis;
long top = readSensor(topTrigPin, topEchoPin);
long left = readSensor(leftTrigPin, leftEchoPin);
long bot = readSensor(botTrigPin, botEchoPin);
long right = readSensor(rightTrigPin, rightEchoPin);
Serial.print(“t:”);
Serial.print(top);
Serial.print(“l(fā):”);
Serial.print(left);
Serial.print(“b:”);
Serial.print(bot);
Serial.print(“r:”);
Serial.println(right);
rainbowColor = (Wheel((rainbow) & 255));
rainbow = (rainbow + 1) % 255;
if (top 《 left && top 《 bot && top 《 right ) {
// move to top
focusMoveTo = corners[0];
} else if (left 《 top && left 《 bot && left 《 right) {
// move to left
focusMoveTo = corners[1];
} else if (bot 《 top && bot 《 left && bot 《 right ) {
// move to bot
focusMoveTo = corners[2];
} else if ( right 《 top && right 《 left && right 《 bot ) {
// move to right
focusMoveTo = corners[3];
}
}
if (focusPoint != focusMoveTo) {
if (focusPoint 》 focusMoveTo) {
focusPoint--;
} else {
focusPoint++;
}
}
bounceAround(focusPoint);
delay(30);
}
int pos = 0;
long readSensor(int trigPin, int echoPin) {
pos++;
if (pos == 5) {
pos = 0;
}
return pos;
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
long duration, cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
return microsecondsToCentimeters(duration);
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds/29/2; // to convert time into distance
//The speed of sound is 340m/s or 29 microseconds per centimeter.
//the ping travels out and back so distance from the obstacle is half of the distance travelled
}
int bounceSize = 5;
int bounceSizeMax = 5;
int bounceDirection = 1;
void bounceAround(int point) {
setAll(rainbowColor);
if (bounceSize 《= 0) {
bounceDirection = 1;
} if (bounceSize 》= bounceSizeMax) {
bounceDirection = -1;
}
bounceSize += bounceDirection;
pixels.setPixelColor(point, pixels.Color(0,250,0));
for(int i = 1; i 《= bounceSize; i++ ){
pixels.setPixelColor(point - i, pixels.Color(40*i,40*i,40*i));
pixels.setPixelColor(point + i, pixels.Color(40*i,40*i,40*i));
}
showStrip();
}
void showStrip() {
pixels.show();
}
void setAll(uint32_t color) {
for(int i = 0; i 《 NUMPIXELS; i++ ) {
pixels.setPixelColor(i, color);
}
}
void setAll(byte red, byte green, byte blue) {
for(int i = 0; i 《 NUMPIXELS; i++ ) {
pixels.setPixelColor(i, red, green, blue);
}
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos 《 85) {
return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos 《 170) {
WheelPos -= 85;
return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
步驟9:3D打印支架
背面有Arduino和電池,它不適合貼合墻壁,所以我決定設(shè)計(jì)和3D打印一個(gè)簡(jiǎn)單的立場(chǎng)。經(jīng)過(guò)4次修改,這是我提出的立場(chǎng)。它有足夠的空間放置底部超聲波傳感器并緊緊握住我的影子盒。
你可能決定用你的影子箱做一些不同的事情。
第10步:總結(jié)
將Arduino和電池組粘貼到框架的背面,你就完成了!
-
超聲波傳感器
+關(guān)注
關(guān)注
18文章
574瀏覽量
35877 -
遠(yuǎn)鏡
+關(guān)注
關(guān)注
0文章
6瀏覽量
5999
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論