專案發想
~
交大創客倶樂部 - 2024暑假創客營
講師介紹
> 洪翠憶
-
陽明交通大學 資工系大二 - 交大創客社 9th教學兼美宣
- 2024台大創客松 友達光電企業獎 第三名
- 特務眼鏡社課講師
發想?
























太理想了吧?!

有講跟沒講一樣呢~
發想流程
0. 審題
1. 「發現」問題
2. 「擬定」解決方案
3. 「驗證」可行性、確認材料表
4. 「實作」方案演示模型
5. 「發表」成品與想法
0. 審題
1. 「發現」問題
2. 「擬定」解決方案
3. 「驗證」可行性、確認材料表
4. 「實作」方案演示模型
5. 「發表」成品與想法
-
題目看清楚
-
務必回扣主題
-
注意評分標準
0. 審題


0. 審題
1. 「發現」問題
2. 「擬定」解決方案
3. 「驗證」可行性、確認材料表
4. 「實作」方案演示模型
5. 「發表」成品與想法
-
觀察、回想身邊困擾
1. 「發現」問題
人
事
時
地
物
-
觀察、回想身邊困擾
1. 「發現」問題
人
事
時
地
物
人
特定人物
某些族群
某些職業
一種類型
人
我
暈船對象
特定人物
某些族群
男
學生
某些職業
高雄人
上班族
一種類型
相貌平平
運氣普通
人
我
暈船對象
特定人物
某些族群
男
學生
某些職業
高雄人
上班族
一種類型
相貌平平
運氣普通
過敏
人
我
暈船對象
特定人物
某些族群
男
學生
某些職業
高雄人
上班族
一種類型
相貌平平
運氣普通
過敏
-
觀察、回想身邊困擾
1. 「發現」問題
人
事
時
地
物
特定人物
某些族群
某些職業
一種類型
我
暈船對象
男
學生
高雄人
上班族
相貌平平
運氣普通
過敏
新聞時事
身邊瑣事
歷史事件
常駐事件
事
貪汙被抓
疫情再起
新聞時事
身邊瑣事
上課聽不懂
鄭捷殺人案
歷史事件
創客松
世界大戰
常駐事件
性別平權
道路安全
事
貪汙被抓
疫情再起
新聞時事
身邊瑣事
上課聽不懂
鄭捷殺人案
歷史事件
創客松
世界大戰
常駐事件
性別平權
道路安全
累累
事
貪汙被抓
疫情再起
新聞時事
身邊瑣事
上課聽不懂
鄭捷殺人案
歷史事件
創客松
世界大戰
常駐事件
性別平權
道路安全
累累
事
-
觀察、回想身邊困擾
1. 「發現」問題
人
事
時
地
物
累累
貪汙被抓
疫情再起
上課聽不懂
鄭捷殺人案
創客松
世界大戰
性別平權
道路安全
新聞時事
身邊瑣事
歷史事件
常駐事件
過去
時
現在
未來
金字塔建造技術
過去
全自動駕駛
AI崛起
賽博龐克
少子化
時
現在
未來
宮廷
金字塔建造技術
過去
全自動駕駛
AI崛起
賽博龐克
少子化
時
現在
未來
宮廷
-
觀察、回想身邊困擾
1. 「發現」問題
人
事
時
地
物
金字塔建造技術
全自動駕駛
AI崛起
賽博龐克
少子化
宮廷
過去
現在
未來
吸塵器
百貨公司
東西放到過期
地
物
飯店
冰箱
家
告示牌
公園
針孔偷拍
吸塵器
百貨公司
東西放到過期
地
物
飯店
冰箱
家
告示牌
公園
針孔偷拍
吸塵器
百貨公司
東西放到過期
地
物
飯店
冰箱
家
告示牌
公園
針孔偷拍
0. 審題
1. 「發現」問題
2. 「擬定」解決方案
3. 「驗證」可行性、確認材料表
4. 「實作」方案演示模型
5. 「發表」成品與想法
偷拍
放到過期
過敏
體力不足
2. 「擬定」解決方案
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
偷拍
放到過期
過敏
體力不足
2. 「擬定」解決方案
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→

沒鼻子錯了嗎

欸嘿我還醒著
0. 審題
1. 「發現」問題
2. 「擬定」解決方案
3. 「驗證」可行性、確認材料表
4. 「實作」方案演示模型
5. 「發表」成品與想法
-
針孔攝影機掃描器
-
冰箱智慧管理系統
-
鼻子剁掉
-
不要報名黑客松
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
3. 「驗證」可行性、確認材料表
-
針孔攝影機掃描器
-
冰箱智慧管理系統
-
鼻子剁掉
-
不要報名黑客松
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
3. 「驗證」可行性、確認材料表
-
針孔攝影機掃描器
-
紅外線/無線訊號偵測
-
紅外線接收器
-
鏡頭
-
-
回饋結果
-
蜂鳴器
-
LED
-
-
開發板
-
Arduino UNO / NANO
-
ESP32
-
-
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
3. 「驗證」可行性、確認材料表
-
冰箱智慧管理系統
-
獲取有效日期資訊
-
影像辨識
-
手動輸入
-
-
資料管理
-
SD卡
-
MySQL
-
-
提醒媒介
-
手機App
-
LCD / OLED
-
-
?
?
?








0. 審題
1. 「發現」問題
2. 「擬定」解決方案
3. 「驗證」可行性、確認材料表
4. 「實作」方案演示模型
5. 「發表」成品與想法
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
-
硬體模型
-
雷切(要排隊)
-
3D列印機(要排隊且非常耗時!) -
紙箱(成本低、相對不堅固)
-
-
硬體線路
-
麵包板
-
洞洞板
-
-
軟體
-
開發板、後端程式
-
美術、UI介面設計
-
4. 「實作」方案演示模型
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
-
硬體模型
-
雷切(要排隊)
-
3D列印機(要排隊且非常耗時!) -
紙箱(成本低、相對不堅固)
-
-
硬體線路
-
麵包板
-
洞洞板
-
-
軟體
-
開發板、後端程式
-
美術、UI介面設計
-
4. 「實作」方案演示模型



0. 審題
1. 「發現」問題
2. 「擬定」解決方案
3. 「驗證」可行性、確認材料表
4. 「實作」方案演示模型
5. 「發表」成品與想法
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
-
簡報
-
詳見簡報課:D
-
-
DEMO影片
-
30秒到3分鐘
-
清楚展示所有功能
-
具活潑情境、有字幕佳
-
剪片工具:
-
YouCut
-
iMovie
-
Canva
-
-
5. 「發表」成品與想法
針孔攝影機掃描器
冰箱智慧管理系統
鼻子剁掉
不要報名黑客松
→
→
→
→
-
簡報
-
詳見簡報課:D
-
-
DEMO影片
-
30秒到3分鐘
-
清楚展示所有功能
-
具活潑情境、有字幕佳
-
剪片工具:
-
YouCut
-
iMovie
-
Canva
-
-
5. 「發表」成品與想法



發現 -> 擬定 -> 驗證
-> 實作 -> 發表
就是這樣喵~


發想練習
遊戲規則
-
每回合10分鐘
-
以小隊為單位舉手搶答!
-
請參考前面發想流程進行發想
-
完成發表後,整組可領取零食獎勵~
-
參與發表的小隊員能多拿一樣零食:D
等我跑一下><
發現 -> 擬定 -> 驗證 -> 實作 -> 發表

好用的工具!
生成式AI
Chat GPT
-
登入 Google / Microsoft / Apple 帳號即可使用
-
免費模型:
3.54o mini / 4o(每日使用額度限量) -
功能廣泛
-
擅長翻譯、文意理解(?
-
不擅邏輯
-
回答不一定正確!
-
使用時務必下清楚指令
Chat GPT 寫 C++ & 下指令示範


#include <iostream>
#define UNASSIGNED 0
#define N 9
using namespace std;
bool FindUnassignedLocation(int grid[N][N], int &row, int &col);
bool isSafe(int grid[N][N], int row, int col, int num);
bool SolveSudoku(int grid[N][N]) {
int row, col;
if (!FindUnassignedLocation(grid, row, col))
return true;
for (int num = 1; num <= 9; num++) {
if (isSafe(grid, row, col, num)) {
grid[row][col] = num;
if (SolveSudoku(grid))
return true;
grid[row][col] = UNASSIGNED;
}
}
return false;
}
bool FindUnassignedLocation(int grid[N][N], int &row, int &col) {
for (row = 0; row < N; row++)
for (col = 0; col < N; col++)
if (grid[row][col] == UNASSIGNED)
return true;
return false;
}
bool UsedInRow(int grid[N][N], int row, int num) {
for (int col = 0; col < N; col++)
if (grid[row][col] == num)
return true;
return false;
}
bool UsedInCol(int grid[N][N], int col, int num) {
for (int row = 0; row < N; row++)
if (grid[row][col] == num)
return true;
return false;
}
bool UsedInBox(int grid[N][N], int boxStartRow, int boxStartCol, int num) {
for (int row = 0; row < 3; row++)
for (int col = 0; col < 3; col++)
if (grid[row + boxStartRow][col + boxStartCol] == num)
return true;
return false;
}
bool isSafe(int grid[N][N], int row, int col, int num) {
return !UsedInRow(grid, row, num) &&
!UsedInCol(grid, col, num) &&
!UsedInBox(grid, row - row % 3, col - col % 3, num) &&
grid[row][col] == UNASSIGNED;
}
void printGrid(int grid[N][N]) {
for (int row = 0; row < N; row++) {
for (int col = 0; col < N; col++)
cout << grid[row][col] << " ";
cout << endl;
}
}
int main() {
int grid[N][N] = {
{5, 3, 0, 0, 7, 0, 0, 0, 0},
{6, 0, 0, 1, 9, 5, 0, 0, 0},
{0, 9, 8, 0, 0, 0, 0, 6, 0},
{8, 0, 0, 0, 6, 0, 0, 0, 3},
{4, 0, 0, 8, 0, 3, 0, 0, 1},
{7, 0, 0, 0, 2, 0, 0, 0, 6},
{0, 6, 0, 0, 0, 0, 2, 8, 0},
{0, 0, 0, 4, 1, 9, 0, 0, 5},
{0, 0, 0, 0, 8, 0, 0, 7, 9}
};
if (SolveSudoku(grid) == true)
printGrid(grid);
else
cout << "No solution exists";
return 0;
}
-
不夠清楚的指令

-
變成解題程式ㄌ
-
沒有格線
-
清楚詳細的指令
-
詳細功能要求
-
操作說明
-
期望效果
-


-
可以玩了!
-
隨機「挖空」,並非隨機出題
-
報錯內容不一定對

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#define UNASSIGNED 0
#define N 9
using namespace std;
bool FindUnassignedLocation(int grid[N][N], int &row, int &col);
bool isSafe(int grid[N][N], int row, int col, int num);
bool SolveSudoku(int grid[N][N]);
void printGrid(int grid[N][N]);
void generateSudoku(int grid[N][N]) {
// Clear the grid
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
grid[i][j] = UNASSIGNED;
// Fill the diagonal 3x3 matrices
for (int i = 0; i < N; i += 3) {
vector<int> numList = {1, 2, 3, 4, 5, 6, 7, 8, 9};
for (int row = i; row < i + 3; row++) {
for (int col = i; col < i + 3; col++) {
int num = numList.back();
numList.pop_back();
grid[row][col] = num;
}
}
}
// Solve the partially filled grid
SolveSudoku(grid);
// Remove random elements to create the puzzle
int numToRemove = 40; // You can adjust this for difficulty
while (numToRemove > 0) {
int cellId = rand() % (N * N);
int row = cellId / N;
int col = cellId % N;
if (grid[row][col] != UNASSIGNED) {
grid[row][col] = UNASSIGNED;
numToRemove--;
}
}
}
void printGridWithLines(int grid[N][N]) {
for (int row = 0; row < N; row++) {
if (row % 3 == 0) cout << "+-------+-------+-------+" << endl;
for (int col = 0; col < N; col++) {
if (col % 3 == 0) cout << "| ";
if (grid[row][col] == UNASSIGNED)
cout << ". ";
else
cout << grid[row][col] << " ";
}
cout << "|" << endl;
}
cout << "+-------+-------+-------+" << endl;
}
bool SolveSudoku(int grid[N][N]) {
int row, col;
if (!FindUnassignedLocation(grid, row, col))
return true;
for (int num = 1; num <= 9; num++) {
if (isSafe(grid, row, col, num)) {
grid[row][col] = num;
if (SolveSudoku(grid))
return true;
grid[row][col] = UNASSIGNED;
}
}
return false;
}
bool FindUnassignedLocation(int grid[N][N], int &row, int &col) {
for (row = 0; row < N; row++)
for (col = 0; col < N; col++)
if (grid[row][col] == UNASSIGNED)
return true;
return false;
}
bool UsedInRow(int grid[N][N], int row, int num) {
for (int col = 0; col < N; col++)
if (grid[row][col] == num)
return true;
return false;
}
bool UsedInCol(int grid[N][N], int col, int num) {
for (int row = 0; row < N; row++)
if (grid[row][col] == num)
return true;
return false;
}
bool UsedInBox(int grid[N][N], int boxStartRow, int boxStartCol, int num) {
for (int row = 0; row < 3; row++)
for (int col = 0; col < 3; col++)
if (grid[row + boxStartRow][col + boxStartCol] == num)
return true;
return false;
}
bool isSafe(int grid[N][N], int row, int col, int num) {
return !UsedInRow(grid, row, num) &&
!UsedInCol(grid, col, num) &&
!UsedInBox(grid, row - row % 3, col - col % 3, num) &&
grid[row][col] == UNASSIGNED;
}
bool isFull(int grid[N][N]) {
for (int row = 0; row < N; row++)
for (int col = 0; col < N; col++)
if (grid[row][col] == UNASSIGNED)
return false;
return true;
}
bool isValid(int grid[N][N]) {
for (int row = 0; row < N; row++) {
for (int col = 0; col < N; col++) {
if (grid[row][col] != UNASSIGNED) {
int num = grid[row][col];
grid[row][col] = UNASSIGNED;
if (!isSafe(grid, row, col, num)) {
grid[row][col] = num;
return false;
}
grid[row][col] = num;
}
}
}
return true;
}
int main() {
srand(time(0));
int grid[N][N];
int original[N][N];
generateSudoku(grid);
// Copy original grid
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
original[i][j] = grid[i][j];
printGridWithLines(grid);
while (!isFull(grid) || !isValid(grid)) {
int x, y, num;
cout << "Enter row, column and number (x y num): ";
cin >> x >> y >> num;
x--; y--; // adjust for 0-based index
if (original[x][y] != UNASSIGNED) {
cout << "Cannot change the original puzzle numbers!" << endl;
} else if (num != UNASSIGNED && !isSafe(grid, x, y, num)) {
cout << "Number conflicts with existing entries!" << endl;
} else {
grid[x][y] = num;
printGridWithLines(grid);
}
if (isFull(grid) && isValid(grid)) {
cout << "Congratulations! You've solved the Sudoku!" << endl;
break;
}
}
return 0;
}
Chat GPT 寫網頁


Copilot
https://copilot.microsoft.com/
-
Windows 11 右下角
-
Edge 瀏覽器搜尋結果上滑/右側
-
跟 Chat GPT 差不多
-
部分功能需登入 Microsoft 帳號(例如算圖)
-
搭配 DALL·E 3 算圖(每日限額快速算圖)
Copilot 爬文


- 每個項目都有爬文連結根據



-
丟圖片掃描也OK~
-
注意是否查錯資料
Copilot 算圖

generate a thinking person, with cartoon style and pure white background
-
簡單、清楚的提示詞
-
建議必備內容
-
內容
-
風格
-
背景
-
-
Generate / Create / ...
-
強烈建議使用英文

Chat GPT 翻譯+修飾詠唱詞

Copilot 算圖

Generate a stunning, sleek, and opulent rocket, boasting an exceptionally fluid aerodynamic shape and impeccable proportions. Its pristine white exterior contrasts magnificently against a transparent green backdrop. The rocket features an exquisitely crafted petite window, exuding elegance. From its thrusters erupts a breathtaking display of flames, transitioning gracefully from a vivid blue to a rich red gradient, creating a spectacular and majestic visual.
- 華麗、縝密的詠唱詞

還有其他好用的工具嗎?

身邊的3C產品
身旁的學長姐們(X
Kahoot!
ProjectThinking
By zsisc28_0okatrinao0
ProjectThinking
- 174