如果你的第一個硬體專案,不是另一個閃爍的 LED,而是一隻會餓、會跟你玩、會睡覺,還會對你輸入的內容做出反應的小寵物,會怎麼樣?
來認識 Kiku。🌸
Kiku 是 Her AI Studio 的吉祥物與內部寵物;這是一個社群計畫,致力於幫助新一代女性學習並使用 AI 進行創作。
在這個迷你工作坊中,我們要把 Kiku 縮小到整隻寵物都能住進一塊 Arduino Uno Q 裡。
完整教學可在 Her AI Studio 課程 中找到
你需要準備:
提示!為了慶祝 Hacktoberfest 2026,Major League Hacking 的紀念贈品包會隨這些 Arduino 一起出貨,所以你可以把這個工作坊當作你的 Hack Day 入門,開始接觸硬體駭客活動。

噓,Kiku 正在睡覺
到了最後,你會得到一隻迷你 Tamagotchi 風格的寵物,它的臉會顯示在板子上的 LED 矩陣上。你可以從鍵盤 餵牠、跟牠玩,還能讓牠睡覺。更重要的是,你會看到只需要少少的程式碼,就能做出一種彷彿有生命的行為。
這個專案結合了幾個很實用的嵌入式程式設計概念:
如果你平常大多寫的是只待在筆電裡的軟體,那麼看到自己的程式突然出現在實體硬體上,會是一件特別有成就感的事。
在打造虛擬寵物之前,先從嵌入式開發者版本的 "Hello, world!" 開始:讓 LED 閃爍。
用 USB 把你的 Uno Q 連接到筆電,並開啟你已下載的 Arduino App Lab。登入你的板子。
建立一個新應用程式,看看自動產生的樣板程式碼。打開 sketch.ino,寫一個基本的閃爍範例:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
}
在 App Lab 中按下 run。
如果內建 LED 每秒亮滅一次,它活了!
如果板子沒有被偵測到,請檢查你的 USB 傳輸線。有些 USB 線只能供電,不能傳輸資料。
現在我們需要讓 Kiku 聽得到我們。當然,我們也可以加按鈕或感測器(在完整工作坊與完整 AI Kit 裡我們就是這麼做的),但其實已經有一個更簡單的介面:Serial 通訊。
用來上傳程式的同一條 USB 連線,也能在程式執行時傳遞筆電與 Arduino 之間的訊息。在 App Lab 裡,它看起來像這樣:

在 setup() 中開始 Serial 通訊:
void setup() {
Serial.begin(9600);
}
接著檢查是否有輸入字元:
void loop() {
if (Serial.available() > 0) {
char typed = Serial.read();
if (typed == 'f') {
// 餵 Kiku
}
if (typed == 'p') {
// 跟 Kiku 玩
}
if (typed == 's') {
// 睡覺或起床
}
}
}
你的鍵盤等於變成了這個實體裝置的控制器。
要和 Kiku 互動,我們會用 3 個按鍵:
f → 餵食
p → 玩耍
s → 睡覺 / 起床
虛擬寵物需要的不只是指令,它還需要狀態。Kiku 會追蹤三個簡單的數值:
int hunger = 3;
int joy = 6;
int energy = 8;
bool asleep = false;
我們會把每個數值視為 0 到 10 之間的值。這樣一來,動作就可以透過增加或減少這些數值來改變寵物。例如餵 Kiku 會降低飢餓值(但不要餵過頭!):
hunger = max(0, hunger - 3);
joy = min(10, joy + 1);
玩耍可能會讓 Kiku 更開心,但也會消耗體力:
joy = min(10, joy + 3);
energy = max(0, energy - 2);
hunger = min(10, hunger + 1);
如果 Kiku 的狀態只有在我們輸入內容時才會改變,那牠就不會特別有「活著」的感覺。
所以我們引入時間!每隔幾秒,tick() 函式會更新 Kiku 的狀態,像這樣:
void tick() {
if (asleep) {
// 回復體力
} else {
// 消耗體力
// 逐漸降低愉悅
}
// 逐漸變餓
}
在你的程式中,請使用較短的間隔,這樣比較容易觀察到變化(之後你也可以再調整,讓你的寵物放輕鬆一點):
const unsigned long TICK_MS = 10000;
也就是每 10 秒更新一次。離開 Kiku 一下子再回來,牠的狀態肯定已經不同了——被晾著不管時,牠們可是會鬧脾氣的!
Kiku 會把內部狀態轉換成 Uno Q 的 LED 矩陣上的表情。我們可以定義牠的眼睛:
enum Eyes {
EYES_OPEN,
EYES_CLOSED,
EYES_HAPPY,
EYES_PEEK
};
以及嘴巴的表情:
enum Mouth {
MOUTH_FLAT,
MOUTH_SMILE,
MOUTH_FROWN,
MOUTH_OPEN,
MOUTH_DOT
};
現在我們的程式可以把狀態轉換成情緒:
Mouth moodMouth() {
if (hunger >= 7 || joy <= 3)
return MOUTH_FROWN;
if (joy >= 7)
return MOUTH_SMILE;
return MOUTH_FLAT;
}
當然,Kiku 並不是真的在感受快樂或飢餓,不過只靠幾個變數與條件判斷,突然就開始像有個性了。
現在各個部分就串起來了。你的主迴圈有三個工作:
簡化後如下:
void loop() {
if (Serial.available() > 0) {
char typed = Serial.read();
if (typed == 'f') feed();
if (typed == 'p') play();
if (typed == 's') toggleSleep();
}
// 當經過足夠時間時更新數值
// 計算眨眼
// 重新繪製 Kiku
}
這就是你的 Kiku 的核心架構。也試試看用你自己的裝置來跑!
在 App Lab 中開啟 Serial Monitor,然後輸入:
f
Kiku 吃飯。
接著輸入:
p
Kiku 玩耍。
再來:
s
Kiku 睡覺。
試著做一些修改,改變 Kiku 的個性。
修改 TICK_MS。
讓 Kiku 眨眼、驚訝,或是難過。
例如:
c → 清理
表面上,我們做出了一隻可愛的虛擬寵物。往深一層看,我們其實探索了幾個會出現在更大型系統中的概念:
輸入處理:Serial 指令變成事件。
狀態管理:變數記住每次迴圈之間發生了什麼。
狀態轉換:動作會改變那些狀態。
基於時間的行為:即使沒有直接輸入,系統也會改變。
渲染:內部狀態透過 LED 矩陣變得可見。
人機互動:動畫與節奏讓簡單的邏輯看起來更有表現力。
如果你為 Hacktoberfest 做出了自己的 Kiku,我們很想看看你給牠設計了什麼樣的個性。🌸
本文由 Her AI Studio 作為送給 Hacktoberfest 駭客們的禮物;這是一個為下一代 AI 女性所設的社群計畫。
完整的 Kiku 工作坊包含完整的 Arduino 程式、練習、知識檢核與其他資源,可在 Her AI Studio 課程 中取得。
原文出處:https://dev.to/heraistudio/build-a-tiny-virtual-pet-on-arduino-in-60-minutes-2cf