自製ARC Reactor 方舟反應爐造型燈(全程教學,需要3D列印)PART 3
如果你還沒看過PART 1 或PART 2,請直接點選PART 1、PART 2
雖然PART 2 有講過接下來要用的材料,但我還是再提醒一便好了
注意:如果你在PART 2 就已經準備好所有材料工具,不用理會這篇的前置準備
準備材料:
1. Arduino Nano *1
2. HC-06或YFROBOT 藍芽模組*1
3. 3 pin小開關*1
5. 4號電池*3(簡易版)
.
.
.
以下為進階版,若只想做入門可以不用準備
5. 3.7V聚合物鋰電池(200mah以上推薦,大小不超過35*30*15mm)(進階版)
6. 充電模組TP4056 *1(進階版)
7. 升壓模組(輸出5V)*1(進階版)
準備工具:
1. 尖嘴鉗
2. 熱熔膠槍
3. 銲槍
4. 剪刀
5. 美工刀
6. 絕緣膠帶*1
7. 斜口鉗(建議)
開始製作!!!
第一步:電路
兩張圖上半部都是同一種電路,只是用電池及充電的地方不同
(希望不會太難懂)
通訊電路說明:
內圈燈的RGB 3腳位,分別接在Arduino Nano板上的D3 , D5 , D6上
外圈燈的RGB 3腳位,分別接在Arduino Nano板上的D9 , D10 , D11上
藍芽模組的腳位有Vcc , Gnd , Txd , Rxd,分別連結3V3 , Gnd , Rxd , Txd
(Rxd接Txd,Txd接Rxd)
以上三個的Gnd接一起
|
充電電路說明:(簡易版忽略)
電池與充電模組並聯,並將其中的正極接到開關的一端,而負極連到升壓模組的負極位置
開關的中間端連到升壓模組的正極
升壓模組的USB接都要去掉,並將負極連到Gnd,正極連到Vin
|
把在PART 2已經接好的內圈燈及外圈燈接到Arduino Nano上
(如果你已經接電卻還沒像這樣亮請不要擔心,因為程式還沒灌)
第三步:接電
請先將最後一條杜邦線對切
簡易版:將對切的杜邦線,分別插在VIN、GND上,然後VIN接開關端,GND接電池組負極
|
進階版:將對切的杜邦線,分別插在VIN、GND上,然後VIN接升壓模組正極,GND接負極
|
再來將連接電源的兩條杜邦線接到Arduino Nano上的VIN及GND
(還沒灌程式,所以理論上就算通電了也不會亮)
在上傳程式時,要注意:
記得先在開發版選Arduino Nano,以及選擇序列埠(圖片僅供參考)
而手機程式呢,我則是使用App Inventor 2來撰寫
第五步:灌程式
我們要灌的程式有兩個,一個是給Arduino Nano,另一個是手機app
而下面我先給的是Arduino IDE的原始碼(你可以直接複製,或是點連結下載)
#include <SoftwareSerial.h> #include <Wire.h> //引用二個函式庫SoftwareSerial及Wire SoftwareSerial #define LEDR1 9//紅1燈腳位 #define LEDG1 10//綠1燈腳位 #define LEDB1 11//藍1燈腳位 #define LEDR2 3//紅2燈腳位 #define LEDG2 5//綠2燈腳位 #define LEDB2 6//藍2燈腳位 int r1 = 0; int g1 = 0; int b1 = 0; int r2 = 0; int g2 = 0; int b2 = 0; int mode = 1;// byte cmmd[10]; float adjustR1 = 0.5; float adjustG1 = 0.3; float adjustB1 = 0.3; float adjustR2 = 0.9; float adjustG2 = 0.9; float adjustB2 = 0.9; unsigned long previousMillis = 0; long randomInterval = 1000; long breatheInterval = 50; SoftwareSerial I2CBT(0,1); //定義PIN0及PIN1分別為RX及TX腳位 void setup() { Serial.begin(9600); //Arduino起始鮑率9600 I2CBT.begin(9600); //藍牙鮑率9600 pinMode(LEDR1, OUTPUT); pinMode(LEDG1, OUTPUT); pinMode(LEDB1, OUTPUT); pinMode(LEDR2, OUTPUT); pinMode(LEDG2, OUTPUT); pinMode(LEDB2, OUTPUT); } void loop() { unsigned long currentMillis = millis(); analogWrite(LEDR1, r1); analogWrite(LEDG1, g1); analogWrite(LEDB1, b1); analogWrite(LEDR2, r2); analogWrite(LEDG2, g2); analogWrite(LEDB2, b2); if (((I2CBT.available()))>0) { //判斷有沒有訊息接收 for (int i=0; i<7; i++) { Serial.println(cmmd[i]=I2CBT.read());//將接收的訊息顯示出來 }//for } //if Serial.print("cmmd[0] = "); Serial.println(cmmd[0]); switch(cmmd[0]){ case 0: r1=cmmd[1]; g1=cmmd[2]*0.9; b1=cmmd[3]*0.9; r2=cmmd[4]*0.3; g2=cmmd[5]*0.2; b2=cmmd[6]*0.2; break; case 1: if(currentMillis - previousMillis >= randomInterval){ previousMillis = currentMillis; Random(); randomInterval = cmmd[1]*10; } break; case 2: if(currentMillis - previousMillis >= breatheInterval){ Breathe(); previousMillis = currentMillis; breatheInterval = cmmd[1]*10; } break; default: r1=cmmd[1]; g1=cmmd[2]; b1=cmmd[3]; r2=cmmd[1]; g2=cmmd[2]; b2=cmmd[3]; break; } } void Breathe(){ Serial.print("mode = "); Serial.println(mode); if (mode == 1){ if(r1>=250){ mode = 2; } else{ r1+=5; r2+=5; } } else if (mode == 2){ if(g1>=250){ mode = 3; } else{ g1+=5; g2+=5; } } else if (mode == 3){ if(b1>=250){ mode = 4; } else{ b1+=5; b2+=5; } } else if (mode == 4){ if(r1<=5){ mode = 5; } else{ r1-=5; r2-=5; } } else if (mode == 5){ if(g1<=5){ mode = 6; } else{ g1-=5; g2-=5; } } else if (mode == 6){ if(b1<=5){ mode = 1; } else{ b1-=5; b2-=5; } } } void Random(){ r1 = random(0, 255); g1 = random(0, 255); b1 = random(0, 255); r2 = random(0, 255); g2 = random(0, 255); b2 = random(0, 255); } |
App的用法我在這裡就不多做說明了,因為本身在第一次啟動程式就會出現教學
至於你可能會在App的教學中看到右下角有個錄音的按鍵
但到了正式的程式中卻又沒有,那是因為之前我有多做了一個錄音的功能,但在這次的實作中並不會用到,所以我把那個功能刪了
第六步:收尾
當以上所有步驟都完成後,我們要來把最後的收尾動作做好
但其實也不難,除了測試好所有功能外,還要檢查有沒有短路或接觸不良,你不妨可以拿它甩一甩或敲一敲,不要害怕不小心弄壞,因為如果作品是堅固的話,這點小動作是不會影響品質的,接著要小心外圈和內圈接觸的地方,因為那裏極有可能會短路,一旦短路了也不要怕,中間隔著幾張小紙片就好。
在蓋上燈罩前,先保持連線狀態,並讓燈保持全亮,這樣可以檢視在移動的過程中是否有問題,最後蓋上你的蓋子,如果過程都沒有問題的話,那麼恭喜你,你已經完成了這考驗耐性及手藝的艱鉅任務,並且成功自製了一顆方舟反應爐(偽)>.<
最後希望你很enjoy在手製的過程中,就如同一位Maker般,也謝謝你願意耐心地看完我這篇長文!
留言
張貼留言