Rumah Pintar Oyen

Tahun 4 hingga 6Arduino Uno & ESP32GeminiMakmal Arduino Maya
Mia tidak pandai menulis kod. Tidak mengapa! Mia akan belajar tiga perkara sahaja:
Cara menyambung lampu, butang dan bunyi ke papan Arduino.
Cara meminta Gemini menulis kod dengan arahan yang jelas.
Cara menjalankan kod dalam simulator dan membetulkannya.
Tekan Seterusnya › di bawah, atau guna kekunci anak panah. Perkataan bergaris titik seperti mikropengawal boleh ditekan untuk melihat maksudnya.
Perjalanan kita hari ini
Setiap bahagian menjawab soalan yang timbul daripada bahagian sebelumnya.
| Bahagian | Soalan | Masa |
|---|---|---|
| 1 Otak kecil | Apakah Arduino dan ESP32? | 25 minit |
| 2 Pintu-pintu pin | Bagaimana otak itu bercakap dengan lampu dan butang? | 30 minit |
| 3 Sambung dengan betul | Bagaimana menyambung LED, butang dan buzzer tanpa merosakkannya? | 40 minit |
| 4 Pelan Pin | Bagaimana mencatat apa disambung ke mana? | 20 minit |
| 5 Bercakap dengan Gemini | Bagaimana meminta kod yang betul? | 45 minit |
| 6 Bina & Jalankan | Bagaimana menjalankan kod dan membetulkan ralat? | 40 minit |
| 7 Projek Rumah Pintar | Boleh kita bina rumah pintar Oyen sepenuhnya? | 60 minit+ |
Masa hanya cadangan. Cikgu boleh pecahkan kepada beberapa sesi.
Apakah Arduino?

Arduino ialah papan kecil yang ada mikropengawal. Ia seperti otak kecil. Kita beri ia satu senarai arahan (kod), dan ia akan ikut arahan itu berulang-ulang tanpa penat.
Arduino Uno
Papan paling popular untuk belajar. Ada 14 pin digital. Sesuai untuk lampu, butang, bunyi dan sensor.
Tiada Wi-Fi.
ESP32
Lebih laju dan ada Wi-Fi serta Bluetooth. Boleh hantar mesej ke Internet.
Kita guna ESP32 untuk projek yang perlu Internet.
Tiada papan sebenar? Tiada masalah!
Hari ini kita guna simulator. Simulator meniru papan Arduino di skrin komputer. Lampu akan menyala, butang boleh ditekan, dan bunyi boleh didengar, semuanya di skrin.
- Tiada wayar yang tercabut.
- Tiada komponen yang terbakar jika tersalah sambung.
- Kod yang sama boleh dimuat naik ke papan sebenar nanti.
Pin ialah pintu

Pintu-pintu itu dipanggil pin GPIO. Setiap pin ada nombor. Kod akan menyebut nombor pin, contohnya pin 13 atau GPIO 26.
Masuk atau keluar?

OUTPUT Keluar
Otak menghantar arahan keluar. Contoh: nyalakan LED, bunyikan buzzer, pusingkan motor.
Dalam kod: pinMode(13, OUTPUT);
INPUT Masuk
Otak menerima berita dari luar. Contoh: butang ditekan, suhu bilik, cahaya matahari.
Dalam kod: pinMode(4, INPUT_PULLUP);
Setiap pin hanya boleh jadi satu pada satu masa: input atau output. Sebab itu kita perlu tahu setiap komponen jenis yang mana.
Aktiviti: Isih komponen
Tekan jawapan untuk setiap komponen.
Tandakan (✓) jenis setiap komponen.
| Komponen | Input | Output |
|---|---|---|
| 💡 LED | ☐ | ☐ |
| 🔘 Butang | ☐ | ☐ |
| 🔔 Buzzer | ☐ | ☐ |
| 🌡️ Sensor suhu | ☐ | ☐ |
| 🎚️ Potensiometer | ☐ | ☐ |
| ⚙️ Motor servo | ☐ | ☐ |
| ☀️ Sensor cahaya | ☐ | ☐ |
| 📟 Skrin LCD | ☐ | ☐ |
Mengenali LED

LED ialah lampu kecil. Arus elektrik hanya boleh lalu satu arah: masuk ikut kaki panjang, keluar ikut kaki pendek.
Jika terbalik, LED tidak akan menyala.
LED juga tidak tahan arus yang terlalu kuat. Kita perlu “pengawal pintu” untuk mengehadkan arus. Pengawal itu dipanggil perintang.
Litar LED yang betul
- Wayar dari pin (contoh GPIO 26) ke satu hujung perintang.
- Hujung lain perintang ke kaki panjang LED.
- Kaki pendek LED ke GND.
Perintang boleh diletak di sebelah kaki pendek juga. Yang penting, ia ada dalam bulatan itu.
Butang: cara paling mudah

Sambung butang antara pin dan GND. Tidak perlu perintang!
Dalam kod, kita guna INPUT_PULLUP. Ia menghidupkan perintang kecil yang tersembunyi di dalam papan.
Butang tidak ditekan → pin baca HIGH
Butang ditekan → pin baca LOW
Beritahu Gemini perkara ini supaya kodnya betul (kita belajar di Bahagian 5).
Buzzer dan sensor
🔔 Buzzer (output)
Mengeluarkan bunyi. Kaki + ke pin, kaki − ke GND.
Dalam kod, bunyi dibuat dengan tone(pin, frekuensi). Frekuensi tinggi = bunyi nyaring.
🌡️ Sensor suhu DHT22 (input)
Tiga kaki: VCC ke 3V3, GND ke GND, SDA (data) ke satu pin, contoh GPIO 15.
Perlukan pustaka DHT. Makmal Arduino Maya sudah menyediakannya.
🎚️ Potensiometer (input)
Tombol pusing. Kaki tengah ke pin analog (Uno: A0; ESP32: GPIO 34). Kaki tepi ke 3V3/5V dan GND.
Analog bermaksud nilai banyak, bukan hidup/mati sahaja: 0 hingga 1023 (Uno) atau 0 hingga 4095 (ESP32).
☀️ Sensor cahaya LDR (input)
Mengesan terang atau gelap. Dalam Wokwi, modul LDR ada kaki AO (analog) ke pin analog.
Sesuai untuk lampu malam automatik.
Pin mana yang boleh dipakai?
Bukan semua pin sesuai untuk murid. Sesetengah pin ada tugas rahsia ketika papan dihidupkan. Guna senarai ini:
| Papan | ✅ Selamat untuk LED, butang, buzzer | 📈 Analog (sensor) | ⛔ Elakkan |
|---|---|---|---|
| ESP32 | 4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 | 32, 33, 34, 35 (34 & 35 input sahaja) | 0, 1, 2, 3, 6 hingga 12, 15* |
| Uno | 2 hingga 13 | A0 hingga A5 | 0 dan 1 (untuk Serial) |
* GPIO 15 masih boleh untuk sensor DHT22 seperti dalam contoh Wokwi, tetapi elakkan untuk butang.
Pelan Pin: peta litar kita

Pelan Pin ialah jadual kecil: komponen apa, disambung ke pin mana, dan jenisnya. Pelan ini sangat penting kerana:
- Kita sambung wayar ikut pelan.
- Kita beri pelan yang sama kepada Gemini.
- Jadi kod Gemini sepadan dengan litar kita.
| Komponen | Pin | Jenis | Nota |
|---|---|---|---|
| LED merah | GPIO 26 | OUTPUT | melalui perintang 220 Ω |
| Butang loceng | GPIO 4 | INPUT | ke GND, INPUT_PULLUP |
| Buzzer | GPIO 25 | OUTPUT | kaki − ke GND |
Aktiviti: Buat Pelan Pin kamu
Isi Pelan Pin untuk rumah pintar Oyen. Guna jadual pin selamat di halaman sebelumnya. Pastikan tiada dua komponen berkongsi pin yang sama.
Papan: ☐ ESP32 ☐ Arduino Uno
| Komponen | Pin | Jenis | Nota sambungan |
|---|---|---|---|
| LED merah | ☐ IN ☐ OUT | ||
| Butang | ☐ IN ☐ OUT | ||
| Buzzer | ☐ IN ☐ OUT | ||
| ☐ IN ☐ OUT | |||
| ☐ IN ☐ OUT |
Pilih papan, kemudian pilih pin untuk setiap komponen. Halaman ini akan memberi amaran jika ada pin yang tidak sesuai. Pelan ini disimpan dan digunakan dalam Pembina Arahan nanti.
| Guna? | Komponen | Pin | Jenis |
|---|
Gemini: kawan yang pandai menulis kod

Gemini sangat pandai, tetapi ia tidak dapat melihat litar kita. Ia hanya tahu apa yang kita tulis. Arahan yang kita beri kepada Gemini dipanggil prompt.
Lima bahan prompt yang hebat
Seperti memasak nasi lemak, prompt yang sedap perlukan bahan yang cukup:
Contoh prompt yang ada kelima-lima bahan:
Aktiviti: Bahan apa yang hilang?
Menulis TUGAS yang jelas
Bahan ketiga, TUGAS, paling susah. Tulis seperti resipi: langkah demi langkah, dengan nombor dan masa.
“Buat lampu isyarat.”
“Ulang selama-lamanya: LED hijau menyala 5 saat, kemudian LED kuning 2 saat, kemudian LED merah 5 saat. Hanya satu LED menyala pada satu masa.”
Perkataan yang membantu:
| Untuk | Guna perkataan |
|---|---|
| Masa | “selama 3 saat”, “setiap 500 milisaat” |
| Syarat | “Apabila butang ditekan…”, “Jika suhu lebih daripada 30 °C…” |
| Ulangan | “Ulang selama-lamanya”, “sebanyak 3 kali” |
| Urutan | “Mula-mula… kemudian… akhir sekali…” |
Aktiviti: Pembina Arahan
Pelan Pin kamu dari Bahagian 4 dimasukkan secara automatik. Tulis tugas, pilih peraturan, kemudian tekan Salin dan tampal dalam Gemini.
Lengkapkan templat ini, kemudian taip dalam Gemini.
3 · Tugas (langkah demi langkah):
4 · Peraturan
Prompt kamu:
Semak: adakah kod ikut Pelan Pin?
Gemini kadang-kadang menukar nombor pin. Sebelum menjalankan kod, cari nombor pin dalam kod dan bandingkan dengan Pelan Pin. Biasanya ia di bahagian atas kod, seperti const int LED = 26;.
Tampal kod daripada Gemini di bawah, kemudian tekan Semak.
Cari setiap nombor pin dalam kod Gemini (cari const int, #define dan pinMode). Bandingkan dengan Pelan Pin kamu.
| Komponen | Pin dalam Pelan Pin | Pin dalam kod Gemini | Sama? |
|---|---|---|---|
| ☐ Ya ☐ Tidak | |||
| ☐ Ya ☐ Tidak | |||
| ☐ Ya ☐ Tidak |
Tip: halaman web modul ini ada Pemeriksa pin automatik.
Membuka Makmal Arduino Maya
- Klik dua kali Makmal ESP32 (atau Makmal Uno) di Desktop.
- Fail
sketch.inoterbuka. Inilah tempat kod. - Lihat bar biru di bawah. Itu butang-butang kita:
| Butang | Fungsi |
|---|---|
| ▶ Bina & Jalankan (F5) | Tukar kod kepada bahasa mesin, kemudian buka simulator. |
| ■ Henti | Hentikan simulator. |
| 📋 Salin untuk Gemini | Salin kod dan mesej ralat, siap untuk ditampal dalam Gemini. |
| 📁 Projek Baharu | Buat folder projek baharu. |
| 🔑 Lesen Wokwi | Kali pertama sahaja (dan sebulan sekali): aktifkan simulator. |
Kali pertama: lesen Wokwi
Simulator Wokwi percuma, tetapi perlu lesen yang diperbaharui lebih kurang sebulan sekali. Cikgu mungkin sudah melakukannya.
- Tekan 🔑 Lesen Wokwi, pilih Dapatkan lesen melalui pelayar.
- Pelayar web terbuka. Log masuk akaun Wokwi (minta bantuan cikgu).
- Tekan GET YOUR LICENSE.
- Pelayar bertanya “Buka Visual Studio Code?”. Tekan Buka.
- Kembali ke aplikasi. Mesej “License activated” muncul. Siap!
Simulator perlukan Internet. Membina kod (compile) tidak perlu Internet.
Tampal, bina, jalankan

- Dalam Gemini, tekan butang salin pada blok kod.
- Dalam
sketch.ino, tekan Ctrl+A (pilih semua), kemudian Ctrl+V (tampal). Kod lama diganti. - Tekan ▶ Bina & Jalankan atau F5.
- Tunggu mesej “Membina kod...”. Kali pertama mungkin ambil masa 1 minit.
- Simulator terbuka. Lihat LED, tekan butang dengan tetikus, dengar buzzer!
- Mesej Serial muncul di bahagian Terminal di bawah.
diagram.json. Jika litar kamu berbeza (contoh: ada buzzer), cikgu akan beri diagram.json yang betul, atau kamu boleh lukis litar di wokwi.com (halaman seterusnya).Melukis litar di wokwi.com
Kita boleh melukis litar di laman wokwi.com, kemudian bawa lukisan itu ke Makmal Arduino Maya.
- Buka wokwi.com, pilih ESP32 atau Arduino Uno, kemudian projek kosong.
- Tekan butang + (biru) untuk tambah komponen: LED, Resistor, Pushbutton, Buzzer.
- Klik pada hujung kaki untuk mula wayar, klik pada pin untuk tamatkan. Ikut Pelan Pin!
- Klik perintang, tukar nilai kepada 220.
- Klik tab diagram.json, tekan Ctrl+A dan Ctrl+C.
- Dalam Makmal Arduino Maya, buka
diagram.json, tekan Ctrl+A dan Ctrl+V. Simpan.
Alamak, ada ralat!

Ikut gelung baiki ini:
Tekan 📋 Salin untuk Gemini. Kod dan mesej ralat disalin bersama.
Tampal dalam Gemini (Ctrl+V) dan hantar. Gemini akan menerangkan dan membetulkan.
Salin kod baharu, tampal dalam
sketch.ino, tekan F5 sekali lagi.Kod berjalan tetapi tidak buat apa yang kamu mahu? Beritahu Gemini dengan jelas apa yang berlaku dan apa yang sepatutnya berlaku:
Aktiviti: Fahami mesej ralat
Mesej ralat dalam Bahasa Inggeris. Ini tiga yang paling biasa:
| Mesej | Maksud |
|---|---|
expected ';' before ... | Terlupa titik koma ; di hujung baris. |
'LED' was not declared in this scope | Nama LED digunakan tetapi belum diberitahu apa ia. |
No such file or directory | Kod perlukan pustaka yang tiada. |
Projek Rumah Pintar Oyen
Pilih projek mengikut tahap. Untuk setiap projek: Pelan Pin → litar → prompt → jalankan → baiki.
Lampu berkelip
LED rumah Oyen berkelip setiap 1 saat.
LED + perintang · Uno pin 13 atau ESP32 GPIO 26
Lampu isyarat jalan Oyen
Hijau 5 s → kuning 2 s → merah 5 s, berulang.
3 LED + 3 perintang
Loceng pintu Oyen
Tekan butang → buzzer berbunyi dan LED menyala 1 saat.
Butang, buzzer, LED
Lampu malam automatik
Apabila gelap, LED menyala. Apabila terang, LED padam.
Modul LDR + LED
Penggera panas
Jika suhu lebih 30 °C, buzzer berbunyi dan suhu dicetak ke Serial.
DHT22 + buzzer
“Oyen dah balik!”
Tekan butang → ESP32 hantar mesej melalui Wi-Fi ke papan kelas.
Butang + Wi-Fi (halaman seterusnya)
Tahap 3: “Oyen dah balik!” melalui Wi-Fi

Dalam simulator, ESP32 bersambung ke Wi-Fi bernama Wokwi-GUEST (tiada kata laluan). Dari situ ia boleh sampai ke Internet sebenar.
Tambah bahan ini dalam prompt kamu:
Cikgu akan memberi alamat pelayan kelas. Tanpa alamat itu, kamu boleh menguji dengan http://example.com/: jika Serial menunjukkan 200, ESP32 kamu sudah sampai ke Internet!
Senarai semak projek
Tahniah, jurutera cilik! 🎉

Apa yang kita pelajari
- Arduino dan ESP32 ialah otak kecil yang ikut arahan kod.
- Pin ialah pintu: output untuk menghantar, input untuk menerima.
- LED perlu perintang dan arah yang betul. Butang ke GND dengan INPUT_PULLUP.
- Pelan Pin menghubungkan litar dengan prompt.
- Prompt hebat ada lima bahan: Papan, Pelan Pin, Tugas, Peraturan, Semakan.
- Ralat itu biasa: Salin → Tampal → Cuba lagi.
Nota cikgu
- Pasang MakmalArduinoMaya-Setup.exe pada setiap PC (tidak perlu hak admin, kira-kira 5 minit, 2.2 GB).
- Aktifkan lesen Wokwi pada setiap PC (butang 🔑). Lesen ikut akaun Wokwi dan perlu diperbaharui lebih kurang sebulan sekali. Semak terma Wokwi untuk kegunaan kelas.
- Pastikan Internet berfungsi untuk Gemini dan simulator. Uji satu PC: buka Makmal ESP32, tekan F5, LED mesti berkelip.
- Sediakan fail
diagram.jsonuntuk projek Tahap 1 hingga 3 jika murid tidak akan melukis litar sendiri. - Pastikan akaun Gemini murid (DELIMa) boleh digunakan. Gemini untuk murid bawah 18 tahun bergantung pada tetapan pentadbir sekolah.
- Bahagian 1 hingga 4 boleh diajar tanpa komputer: guna kad komponen dan Pelan Pin bercetak.
- Galakkan murid membaca kod Gemini sekali imbas: cari nombor pin,
delay()danif. Mereka tidak perlu faham semua. - Jika kod Gemini guna
ledcAttach()(versi 3.x) dan gagal dibina, minta Gemini “guna ESP32 Arduino core 2.0.17”. - Kerja berpasangan: seorang “jurutera litar”, seorang “penulis prompt”, bertukar setiap projek.
Ditulis untuk murid Tahun 4 hingga 6, bengkel sehari (kira-kira 4 jam 20 minit tanpa rehat). Pelan Pin dan prompt disimpan dalam pelayar murid sahaja. Tiada data dihantar ke mana-mana.
Contoh kod rujukan
Kod di bawah sudah diuji dengan pengkompil Makmal Arduino Maya. Guna untuk menyemak jika kod Gemini murid terlalu jauh menyimpang.
Loceng pintu Oyen (ESP32)
const int BUTANG = 4; // butang ke GND const int BUZZER = 25; const int LED = 26; void setup() { Serial.begin(115200); pinMode(BUTANG, INPUT_PULLUP); pinMode(LED, OUTPUT); } void loop() { if (digitalRead(BUTANG) == LOW) { // ditekan Serial.println("Butang ditekan!"); digitalWrite(LED, HIGH); tone(BUZZER, 1000); delay(1000); noTone(BUZZER); digitalWrite(LED, LOW); } }
“Oyen dah balik!” (ESP32, Wi-Fi)
#include <WiFi.h> #include <HTTPClient.h> const int BUTANG = 4; const char* PELAYAN = "http://example.com/"; // ganti dengan alamat pelayan kelas void setup() { Serial.begin(115200); pinMode(BUTANG, INPUT_PULLUP); WiFi.begin("Wokwi-GUEST", "", 6); while (WiFi.status() != WL_CONNECTED) { delay(200); Serial.print("."); } Serial.println(" Wi-Fi bersambung!"); } void loop() { if (digitalRead(BUTANG) == LOW) { HTTPClient http; http.begin(PELAYAN); http.addHeader("Content-Type", "text/plain"); int kod = http.POST("Kumpulan Harimau: Oyen dah balik!"); Serial.print("Jawapan pelayan: "); Serial.println(kod); http.end(); delay(1000); // elak hantar berkali-kali } }