專案發想

~

交大創客倶樂部 - 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

https://chatgpt.com/

  • 登入 Google / Microsoft / Apple 帳號即可使用

  • 免費模型:3.5 4o 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