第1步:收集材料
我有多少次說出來?始終擁有您需要的東西,并保證您能夠在完成之前構建一些東西。
注意:其中一些是聯盟鏈接(標記為“al” ),如果您通過它們購買,我將得到一個小的回扣,而不會給您帶來額外費用。感謝您購買鏈接!
零件:
1x Arduino Nano Nano - al
1x 10k旋轉電位器5個裝10k電位器 - al
1x 5mm桶式千斤頂(我的油炸Arduino Uno回收)女性桶式千斤頂(5個裝) - al
2x 2 -pin瞬時按鈕10個裝SPST按鈕開關 - 白色
來自60個LED/米線(任何等效物,例如WS2812B,12x NeoPixels)將起作用Adafruit NeoPixels
0.5毫米鋁
舊柔性打火機的柔性頸部
上下蓋環由“Stick and Click”LED櫥柜燈LED櫥柜燈 - al
一小片1/4英寸膠合板
重型扁平金屬尺寸(大約)1.5“×2.5”×0.25“
絞合芯電線
工具:
熱膠槍和膠水
烙鐵和焊錫
無線電鉆和各種小捻刀
X-acto刀(或美工刀)
剝線鉗
鉗子
剪線鉗/剪刀
重型剪刀
如果您沒有扁平金屬重量,您還需要:
1卷便宜的焊料(不是你將用于焊接的東西)廉價的無鉛焊料
酒精蠟燭(或本生燈)
你不介意毀壞的小硬化鋼盤(或者如果你有一個小坩堝)
三腳架用于所述盤子/坩堝(我用12號鋼絲制成的)
一種粘土植物盤(其中一種東西在鍋底下)
一些鋁箔
p》
注意:如果您有焊接套件或3D打印機,則可能不需要此處列出的所有工具。
步驟2:減輕重量
這是一個相當困難的步驟,你必須使用極其謹慎這樣做。如果您的重金屬重量或扁平釹磁鐵約為2.75“乘1.75”乘0.25“,我建議使用它(而磁鐵甚至可以讓您將燈放在金屬表面上!)。
免責聲明:我不對您的任何傷害負責,所以請使用常識。
另外,在混凝土表面外面這樣做你不會介意它是否有點燒焦(這只是一個預防措施)。我沒有這個過程的圖片,因為相機本來就是我不需要或想要的額外分心。
首先,用鋁箔或濕粘土制作一個小模具,約2 3/4英寸×1 3/4英寸×1/4英寸內部尺寸。它可以是像我的橢圓形或矩形。使用多層箔或厚粘土層。
將模具放入陶瓷植物盤中,填充兩者模具和托盤 冷水。
拿y我們的未點燃的酒精蠟燭/本生燈,并將鋼盤/坩堝放在三腳架上,這樣火焰將加熱盤子的中心(點亮時)。點燃燃燒器之前,確保你手上至少有 1把鉗子或金屬加工鉗,如果不是2.
戴上皮手套是個好主意,在接下來的幾個步驟中,長袖,長褲,露趾鞋和護目鏡。
卷起并從線軸上取下一堆便宜的焊料并將其放入鋼盤中,然后點燃燃燒器。等到線圈完全融化,然后開始以中等速度將剩余焊料送入碟中。如果焊料中含有松香,則可能會在高溫下自發燃燒,產生淡黃色火焰和黑煙。別擔心,這發生在我身上多次,并且完全正常。
繼續將焊料送入培養皿中,直到最后一個熔化。
讓任何燃燒松香的火焰完全消失,并用鉗子/鉗子抓住碟子,輕輕旋轉內部融化的金屬,同時小心翼翼地保持它在火焰中。
在確定所有焊料完全液化且溫度很高的情況下,快速小心地將其從火焰并將其倒入模具中。當一些水蒸發并且其余部分被迫離開時,會發出《強烈的嘶嘶聲和蒸汽。模具由熔化的焊料代替。
讓焊料冷卻,關閉燃燒器/吹掉蠟燭,將鋼盤放在安全的地方冷卻。您可能需要將冷水倒在冷卻焊料上以加速冷卻并進一步硬化。 (冷水使外部冷卻比內部更快,產生內部張力,使金屬更硬,更硬,類似于魯珀特王子的掉落。)你也可以在你的金屬盤上澆水,但這會導致它變脆,特別是如果多次完成。
焊料完全冷卻后(大約《20分鐘左右安全),將其從鋁箔模具中取出。
我的一側比另一側更厚,所以我用錘子將它弄平,并使邊緣變平(導致你在圖片中看到的形狀)。然后我在流水下輕輕地打磨它來打磨它,并把它放在一邊待用。
步驟3:構建電子外殼,步驟1
這些是用于容納Nano的外殼的部件,安裝接口,基本上是將HALO燈固定在一起的部件。我用我的0.5毫米鋁和熱膠水制作我的,但是如果你有一臺3D打印機(我一直試圖為我的商店買一段時間)我在Tinkercad制作了一個.STL版本,我附在這里給你下載。由于我自己沒有打印機,我無法測試打印模型以查看是否所有打印都正常,但我認為如果在切片機中添加適當的支撐結構應該沒問題。如果您需要或想要稍微不同的設計或美學,您也可以在這里復制和編輯源文件。
尺寸實際上來自我為焊接而不是尺寸的金屬重量。電子產品,但結果非常好,尺寸非常優秀。
圖片描述的操作順序與我在此處寫的略有不同,這是因為我設計了一種改進的方法根據我原來的方法的結果。
如果你像我一樣從鈑金裝配,這就是你需要做的事情:
第1步:面板
切割兩個相同的半圓形形狀,大約1.5英寸高,3英寸寬。 (我把它弄得一團糟,所以它們看起來有點像點唱機的前面)。
在兩個板中的一個板上,為按鈕和電位器鉆出三個孔。我的每個直徑為1/4英寸。 這些可以是任何布局,但我更喜歡我的電位器在中心稍微抬起,兩側的按鈕形成等腰三角形。在鉆孔時,我總是先做一個小的導孔,然后再去到所需尺寸的鉆頭,它有助于使孔中心并使它們更清潔。
第2步:拱形蓋
彎曲在一塊鋁板上方以適合其中一個面板的曲線,標記正確的邊緣長度。
切出一條這個長度和大約2英寸寬的條帶,形成一個弧形,與相匹配兩側面板曲線的形式。
找到曲線頂部的中心點,然后鉆一個洞到適合打火機的彈性頸。我將孔 偏向后方,因為我的燈在使用時大部分頸部向前傾斜,所以我想為此添加一點抵消。我的彈性琴頸直徑只有1/4英寸,因此我使用了1/4英寸的鉆頭(我擁有的最大扭曲鉆頭,小于3/4英寸)并且只是小心地彎曲并扭曲了鉆孔以“鉆孔”直到頸部適合。
現在我們有了殼的零件,下一步是添加電子元件并將它們組合在一起!
步驟4:構建電子外殼,步驟2
現在我們添加按鈕和電位計,并將它們放在一起。
步驟1:按鈕和螺栓
從按鈕和電位計上擰下六角螺母。堅果下方應該有一個扣環設備,將其留在原位。
將每個組件通過各自的孔插入,然后將螺母擰回以將每個組件固定到位。將螺母擰緊到您確定每個組件 完全安全的程度。
步驟2.彎曲頸部
將彎曲頸部穿過彎曲部分頂部的孔。熱膠或焊接(如果你有設備)將頸部牢固地固定到位。
如果使用熱膠就像我一樣,最好將它粘在大量的膠水 兩側分布在大面積上以防止膠水在以后脫落。
步驟3:殼體組裝(不適用于3D印刷外殼)
使用焊條或熱膠將前后面板固定在拱形蓋上各自的位置。我花了幾次試圖粘上膠水,就像之前一樣,訣竅是在關節的兩側上使用很多膠水,就像頸部一樣。 膠水所覆蓋的區域越大,粘貼的越好。
現在我們有了shell,我們可以繼續添加所有的電路位。
步驟5:添加電子設備
這是有趣的部分:焊接!最近幾周我真的對焊接感到有些厭倦,因為我最近一直在這么做,試圖完成我應該盡快提出的另一個項目(留意我機器人顯示器的一個激進的新版本)平臺),導致我破壞了一個鐵并獲得了另一個。..無論如何,這里沒有太多的焊接,所以這應該是非常簡單的。
注意:如果您的Nano已經有針頭它,我建議為這個項目拆焊它們,它們只會妨礙它們。
上面的圖片中有一張圖表,如果您愿意,可以按照該圖表進行操作。
步驟1:接口
從每個開關,將電線從單個引腳焊接到電位計的側引腳。將從同一側引腳焊接到Nano上的接地引腳。
將電位器中心引腳的導線焊接到Nano 上的 A0。
焊接未連接引腳 切換到 A1 上的《。
焊接來自未連接引腳的電線在其他開關到 A2 on Nano 。
注意:哪個開關是哪個無關緊要,你可以很容易地在代碼中更改它們,除了一個開關簡單地與另一個開關相反的事實。
切割一段長于《4》英寸的導線,剝開兩側。使用Sharpie,用一條線標記一側。
將電線焊接到電位計的最后未連接側銷,扭曲此電線的未連接端 一起與最后一個子步驟電線的未標記的結尾 。
將此連接端焊接到Nano上的 5V 。
步驟2:顯示和電源線
剪切 2根長度的導線比柔性頸部長4英寸,剝去兩端。
使用Sharpie,標記每根電線的末端,一根線2線,一根3 。
將導線2線焊接到Nano 上的數字引腳9。
在 5mm桶式插孔上》,將電線從中心引腳(正極)焊接到納米上的 Vin。
焊料另一根電線到桶形千斤頂的側銷(接地/負極)。
使用3個 的長線將《3》 的長線旋轉。
將這些 電線焊接到Nano 上的開路GND引腳。
隔離連接 電氣膠帶或熱膠,如果需要。
步驟3:切割孔(僅限金屬版,如果3D打印封面,則應該沒問題)
使用鉆頭和 X-acto或美工刀,小心在封面側面打出孔 《納米的 USB端口。
另一個洞關于桶面孔的大小在封面背面,最好靠近USB端口對面的一側。
步驟4:安裝組件
Feed三根長線穿過彈性頸部并從外伸出呃那邊。
使用大量熱膠,將槍管插孔安裝到位,引腳朝向頂蓋頂部。
再次使用大量熱膠,安裝Nano ,重置按鈕朝下和插槽中的USB端口。我在桶式千斤頂和Nano 之間做了一個“熱膠橋”,這使得每個人牢牢地保持對方。
現在我們可以繼續制作加權基數!
第6步:加權基數
我對自己的焊接技術很有信心并且計劃好了,所以我在測試代碼之前先添加了基礎。如果你對自己的技能不太自信,我會建議跳過這一步,當你知道一切正常時,最后回到它。
如果你制作了3D打印版本,你可以跳過第一步繼續前進到第二步。
第1步:木材
從一張1/4英寸的膠合板,切割底座約 3英寸乘2英寸。
將邊緣打磨以平滑將其打開并移除色塊。
第2步:重量
首先,確保您的重量選擇,無論是磁鐵,金屬還是定制焊錫,都適合我們制造的金屬蓋邊緣。我的一個方向有點大,所以我用X-acto刀從側面刮了一下。如果你不是那種你可以做到這一點的那種,你可能不得不擺弄不同的基礎設計。
在膠合板的中心熱膠粘,或者在3D打印設計的情況下,在中心“托盤”中我為此設計的區域。
步驟3:底座
將金屬蓋安裝在重物上,然后將放在木質底座上。 (對于3D打印設計,請將其裝入預制凹槽中。)
確保重量不會干擾任何電子設備。
使用熱膠來保護基礎。使用足夠確保連接牢固。
現在我們完全制作了控制盒,讓我們繼續操作燈。
第7步:NeoPixel Halo Ring
此燈的名稱的靈感,這部分是我們將用作源的NeoPixel光環照明。如果需要,可以使用任何NeoPixel或可單獨尋址的LED環修改或替換此特定部件。
步驟1:焊接
剪切的NeoPixels 12個LED 的長度。
將 GND引腳焊接到 3線的彈性頸部的線。
將 Din引腳焊接到 2線的電線上。
將 5V引腳焊接到有線 1行。
第2步:測試燈光
下載并安裝 Adafruit_NeoPixel庫,然后打開“strandtest”代碼。
更改常量 PIN為9 。
更改定義條帶的行,使其配置為12個LED 。
將代碼上傳到Nano,確保所有LED正常運行。
用工作的LED替換任何有故障的LED ,直到整個條帶工作。
步驟3:振鈴
采取“堅持并點擊”燈光中的“頂環”,內側邊緣 切斷任何螺絲安裝座。
在邊緣上切出一個小凹口,用于從條帶上切下電線。
剝去封面,看看NeoPixels背面的膠帶(如果有的話)和將它們粘在戒指內,條帶的任一端正好在我們制造的凹口處。
使用熱膠牢固固定條帶邊緣。
膠水完全冷卻后, 再次測試像素。這是為了確保沒有人對熱量和卷曲(我的一些人)。
步驟4:裝載
切出兩個1/4英寸木材的小矩形,大約環的高度和1 2/3倍寬。
將這些相互平行的》粘在環的導線兩側, 填充間隙并用膠水完全覆蓋電線。
小心地》 超長的線回到彈性頸部,然后粘合木塊使用充足的膠水和小心地填充任何空隙(不用膠水填充頸部)。》 頸部。
步驟6:完成
如果你愿意,你可以涂上戒指并裝上任何顏色,我更喜歡銀色飾面,所以我只使用Sharpie來掩蓋那些(令人討厭)打印的徽標到了戒指上。燈的其余部分也是如此。
現在我們可以繼續完成最終的代碼了!
步驟8:代碼和測試
所以我們現在需要做的就是對燈進行編程并進行測試。附件是當前的代碼版本(rev1.0),我已經相當廣泛地測試了這個代碼,它運行得很好。我正在開發一個rev2.0,其中按鈕被配置為外部中斷,以便可以更容易地在兩者之間切換模式,但是這個版本是錯誤的,還沒有準備好發布。使用當前版本,您必須按住按鈕,直到它運行Debounce循環并識別狀態更改,這可能會對較長的“動態”循環產生煩擾。下面是代碼中寫有一些解釋(可下載版本中有相同的解釋)。
#include
#ifdef __AVR__
#include
#endif
#define PIN 9
#define POT A0
#define BUTTON1 A1
#define BUTTON2 A2
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic ‘v1’ (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel halo = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);
// And now, a safety message from our friends at Adafruit:
// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel‘s data input
// and minimize distance between Arduino and first pixel. Avoid connecting
// on a live circuit.。.if you must, connect GND first.
// Variables
int buttonState1;
int buttonState2; // the current reading from the input pin
int lastButtonState1 = LOW; // the previous reading from the input pin
int lastButtonState2 = LOW;
int mode; //the mode of our lights, can be one of 16 settings (0 through 15)
int brightVal = 0; // the brightness/ speed, as set by the potentiometer
// the following variables are long’s because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers
void debounce (){
// read the state of the switch into a local variable:
int reading1 = digitalRead(BUTTON1);
int reading2 = digitalRead(BUTTON2);
// If either of the buttons changed, due to noise or pressing:
if (reading1 != lastButtonState1 || reading2 != lastButtonState2) {
// reset the debouncing timer
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) 》 debounceDelay) {
// if the button state has definitely changed due to pressing/releasing:
if (reading1 != buttonState1) {
buttonState1 = reading1; //set it as the reading if it‘s changed
if (buttonState1 == LOW) { //these are set as active low switches
mode ++;
if (mode == 16){
mode = 0;
}
}
}
if (reading2 != buttonState2){
buttonState2 = reading2;
if (buttonState2 == LOW){
mode = mode - 1;
if (mode == -1){
mode = 15;
}
}
}
}
// save the reading for the next time through the loop
lastButtonState1 = reading1;
lastButtonState2 = reading2;
}
void getBright(){ //our code to read the potentiometer, utputs a value between 0 and 255. Used to set brightness in some modes and speed in others.
int potVal = analogRead(POT);
brightVal = map(potVal, 0, 1023, 0, 255);
}
//Here are our color modes. Some of these are derived from the strandtest example, others are original.
// Fill the dots one after the other with a color (colorwipe, derived from strandtest)
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i
//rainbow functions (also derived from strandtest)
void rainbow(uint8_t wait) {
uint16_t i, j;
for(j=0; j《256; j++) {
for(i=0; i
// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
uint16_t i, j;
for(j=0; j《256*5; j++) { // 5 cycles of all colors on wheel
for(i=0; i《 halo.numPixels(); i++) {
halo.setPixelColor(i, Wheel(((i * 256 / halo.numPixels()) + j) & 255));
}
halo.show();
delay(wait);
}
}
// 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 halo.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos 《 170) {
WheelPos -= 85;
return halo.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return halo.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void setup() {
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code
pinMode(POT, INPUT);
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(PIN, OUTPUT);
Serial.begin(9600); //debugging stuff
halo.begin();
halo.show(); // Initialize all pixels to ’off‘
}
void loop() {
debounce();
//Serial.println(mode); //more debugging
//Serial.println(lastButtonState1);
//Serial.println(lastButtonState2);
if (mode == 0){
getBright();
for (int i = 0; i 《 halo.numPixels(); i++){
halo.setPixelColor(i, halo.Color(brightVal, brightVal, brightVal)); //set all pixels to white
}
halo.show();
};
if (mode == 1){
getBright();
for (int i = 0; i 《 halo.numPixels(); i++){
halo.setPixelColor(i, halo.Color(brightVal, 0, 0)); // set all pixels to red
}
halo.show();
};
if (mode == 2){
getBright();
for (int i = 0; i 《 halo.numPixels(); i++){
halo.setPixelColor(i, halo.Color(0, brightVal, 0)); // set all pixels to green
}
halo.show();
};
if (mode == 3){
getBright();
for (int i = 0; i 《 halo.numPixels(); i++){
halo.setPixelColor(i, halo.Color(0, 0, brightVal)); // set all pixels to blue
}
halo.show();
};
if (mode == 4){
getBright();
for (int i = 0; i 《 halo.numPixels(); i++){
halo.setPixelColor(i, halo.Color(0, brightVal, brightVal)); // set all pixels to cyan
}
halo.show();
};
if (mode == 5){
getBright();
for (int i = 0; i 《 halo.numPixels(); i++){
halo.setPixelColor(i, halo.Color(brightVal, 0, brightVal)); // set all pixels to purple/magenta
}
halo.show();
};
if (mode == 6){
getBright();
for (int i = 0; i 《 halo.numPixels(); i++){
halo.setPixelColor(i, halo.Color(brightVal, brightVal, 0)); // set all pixels to orange/yellow
}
halo.show();
};
if (mode == 7){ //now the dynamic modes
getBright();
colorWipe(halo.Color(brightVal, 0, 0), 50); // Red
};
if (mode == 8){
getBright();
colorWipe(halo.Color(0, brightVal, 0), 50); // Green
};
if (mode == 9){
getBright();
colorWipe(halo.Color(0, 0, brightVal), 50); // Blue
};
if (mode == 10){
getBright();
colorWipe(halo.Color(brightVal, brightVal, brightVal), 50); // white
};
if (mode == 11){
getBright();
colorWipe(halo.Color(brightVal, brightVal, 0), 50); // orange/yellow
};
if (mode == 12){
getBright();
colorWipe(halo.Color(0, brightVal, brightVal), 50); // cyan
};
if (mode == 13){
getBright();
colorWipe(halo.Color(brightVal, 0, brightVal), 50); // purple/magenta
};
if (mode == 14){ // the last two are speed control, because the brightness is dynamic
getBright();
rainbow(brightVal);
};
if (mode == 15){
getBright();
rainbowCycle(brightVal);
};
delay(10); //allow the processor a little rest
}
第9步:大結局
現在我們有一個夢幻般的超亮小燈!
您可以從此處進一步修改,或保持原樣。您可以更改代碼,甚至可以完全編寫新代碼。您可以放大底座并添加電池。你可以添加一個風扇。您可以添加更多NeoPixels。你可以用它做的所有事情的清單幾乎是無限的。我說“差不多”,因為我很確定我們仍然沒有技術將其轉換為迷你門戶生成器(不幸的是),但除此之外,唯一的限制是你的想象力(在某種程度上,正如我最近發現的那樣,你工作坊中的工具)。但是,如果你沒有這些工具,不要讓它阻止你,如果你真的想要做某事,總有辦法。
這是這個項目的一部分,向我自己(以及在較小的程度上,世界)證明我可以做出其他人也想要的有用的東西,即使我擁有的只是一個名副其實的舊垃圾和廢棄組件以及一堆Arduino供應品。
我會離開這里,因為我認為這個結果相當不錯。如果您有改進建議或有關我的方法的問題,請在下面留言。如果你做了這個,拍照,我們都想看到它!
-
燈泡
+關注
關注
0文章
109瀏覽量
24360 -
Arduino
+關注
關注
188文章
6490瀏覽量
190074
發布評論請先 登錄
松下影像制作方案分享會成功舉辦
芯科科技助力Kwikset開發新一代Halo Select智能門鎖產品
松下MPS媒體制作平臺概述
基于華為云 Flexus 云服務器 X 實例快速搭建 Halo 博客平臺

基于華為云 Flexus 云服務器 X 實例部搭建 Halo 博客平臺

評論