自製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般,也謝謝你願意耐心地看完我這篇長文!
































留言
張貼留言