Panduan · 13 mnt baca

Menulis Kode Arduino dengan AI: Prompt yang Lebih Baik, Pengujian, dan Perbaikan

Menulis kode Arduino dengan AI seperti ChatGPT: template prompt, cek sebelum upload, fungsi karangan, pin yang salah, delay() yang mengunci, dan keamanan listrik PLN.

Menulis kode Arduino dengan AI berarti menjelaskan proyekmu ke asisten chat seperti ChatGPT, Gemini, Claude, atau Copilot, lalu meminta kode yang berfungsi untuk Arduino, ESP32, atau Raspberry Pi Pico. Kalau dipakai dengan benar, pekerjaan berjam-jam bisa selesai dalam hitungan menit: alih-alih mulai dari halaman kosong, kamu langsung punya draf yang siap dikompilasi. Tapi AI tidak bisa melihat rangkaianmu, tidak tahu board apa yang ada di mejamu, dan bisa menyampaikan hal yang salah dengan sangat yakin. AI bisa mengarang fungsi library yang tidak ada, memilih pin yang salah, atau menulis perulangan delay() yang membuat semuanya macet. Karena itu, keterampilan yang sebenarnya bukan meminta kode, melainkan meminta dengan baik dan memeriksa kode yang kamu terima.

Di panduan ini kamu akan melihat bagaimana asisten AI menghasilkan kode Arduino dan kenapa ia bisa salah, cara menulis prompt yang baik yang mencakup board, pin, library, dan perilaku yang diharapkan, serta langkah apa saja untuk memeriksa kode sebelum kamu meng-upload-nya. Kita akan membahas tiga kesalahan yang paling sering muncul, lengkap dengan pesan compiler asli dan kode yang sudah diperbaiki. Setelah itu kita bahas cara yang benar untuk menempelkan error kompilasi dan meminta perbaikannya, kenapa kamu tidak boleh memercayai AI ketika bekerja dengan tegangan listrik PLN, dan cara memakai alat-alat ini tanpa berhenti belajar.

Board Arduino Uno R3
AI bisa menulis kode, tapi tidak bisa melihat board-mu, pengkabelanmu, atau modul yang kamu pakai; informasi itu harus kamu berikan sendiri di prompt.

Bagaimana AI menulis kode Arduino, dan kenapa bisa salah?

Model bahasa besar (LLM) seperti ChatGPT tidak menulis kode dengan menjalankannya seperti compiler; ia menulis dengan menebak lanjutan yang paling mungkin berdasarkan jutaan contoh yang dilihatnya selama pelatihan. Untuk topik yang punya banyak contoh di internet (LED berkedip, membaca DHT11, memutar servo), cara ini bekerja sangat baik. Tapi pengetahuan model berhenti di tanggal tertentu, jadi ia mungkin tidak tahu fungsi yang berubah di versi library yang lebih baru. Ia juga bisa mencampur fungsi dari dua library berbeda yang namanya sama. Yang paling penting, alih-alih bilang “aku tidak tahu”, ia bisa mengarang jawaban yang terdengar masuk akal; ini disebut halusinasi. Karena model tidak bisa melihat rangkaianmu, nomor pin, level tegangan, dan versi modul ia simpulkan dari apa yang kamu tulis atau dari tebakannya sendiri.

PekerjaanSeberapa bagus AI?Kenapa?
Kode contoh sederhana (LED, tombol, membaca sensor)Sangat bagusAda ribuan contoh serupa di internet
Menjelaskan kode yang sudah ada baris demi barisSangat bagusMembaca dan menjelaskan kode tidak perlu menebak
Mencari penyebab error kompilasiBagusPesan error punya pola yang dikenali model
Kode untuk versi library terbaruLemahPengetahuannya berhenti di tanggal tertentu; bisa jadi ia tidak tahu fungsi baru
Memilih pin yang cocok dengan rangkaianmuLemahIa tidak bisa melihat board atau pengkabelanmu, jadi ia berasumsi
Pengaturan waktu dan mengerjakan beberapa hal sekaligusLumayanKebanyakan contoh memakai delay(), jadi hasilnya kode yang memblokir
Tegangan listrik PLN, baterai, dan rangkaian arus besarTidak bisa diandalkanKesalahan bisa berakibat luka bakar, kebakaran, atau kesetrum; model tidak bisa bertanggung jawab

Bagaimana cara menulis prompt yang baik?

Kode yang diberikan AI tidak bisa lebih baik daripada informasi yang kamu berikan. Dengan permintaan satu baris seperti “tulis kode Arduino untuk mengukur suhu”, model akan memilih sendiri board, sensor, pin, dan library-nya. Kalau pilihannya tidak cocok dengan yang kamu punya, kodenya tidak bisa dikompilasi, atau bisa dikompilasi tapi tidak berfungsi. Tulis prompt yang baik seperti kamu menjelaskan proyek lewat telepon ke teman yang baru pertama kali mendengarnya: sebutkan board, komponen, sambungan, library, perilaku yang diharapkan, dan batasannya satu per satu. Tabel di bawah merangkum apa saja yang perlu ada di prompt Arduino:

Apa yang perlu ada di prompt?Kenapa pentingContoh
Nama board yang persisPin, tegangan, dan perintah berbeda antara Uno, ESP32, dan PicoArduino Uno R3 (ATmega328P)
Versi IDE dan coreDi ESP32, fungsi-fungsinya berubah antara core 2.x dan 3.xArduino IDE 2.3, core esp32 3.x
Kode tipe komponenDHT11 dan DHT22, atau SG90 dan MG996R, tidak samaDHT22, LCD I2C 16x2 (PCF8574, alamat 0x27)
Sambungan pinModel mengikuti pengkabelanmu, bukan mengarang pinDATA DHT22 → D2, tombol antara D3 dan GND
Nama library dan pembuatnyaLibrary berbeda dengan nama yang sama memakai fungsi yang berbedaAdafruit DHT sensor library, LiquidCrystal I2C buatan Frank de Brabander
Perilaku yang diharapkan dalam angka“Bunyi kalau panas” itu samar, “di atas 30 °C” bisa diukurUkur setiap 2 detik, bunyikan buzzer 3 kali di atas 30 °C
BatasanMencegah kebiasaan buruk model sejak awalJangan pakai delay(), pakai millis()
Format hasilKamu mendapat kode dan informasi instalasinya sekaligusSatu file .ino, komentar dalam bahasa Inggris, daftar library yang diperlukan

Contohnya, prompt ini memberi hasil jauh lebih baik daripada permintaan satu baris: “Aku memakai Arduino Uno R3 dan Arduino IDE 2.3. Pin DATA DHT22 ada di D2, buzzer aktif di D8, dan LCD I2C 16x2 (PCF8574, alamat 0x27) dengan SDA di A4 dan SCL di A5. Library Adafruit DHT sensor library dan LiquidCrystal I2C buatan Frank de Brabander sudah terinstal. Setiap 2 detik, tampilkan suhu dan kelembapan di LCD, dan kalau suhu naik di atas 30 °C, bunyikan buzzer dengan bunyi pendek-pendek. Pakai millis() alih-alih delay() dan beri komentar di setiap baris. Di bagian atas, tulis daftar library yang perlu kuinstal, dan di bagian akhir, tulis asumsi yang kamu buat.” Dengan prompt ini, hampir tidak ada lagi yang perlu ditebak oleh model.

Sebelum meminta kode, tambahkan “Apakah ada informasi yang kurang untuk menulis proyek ini? Tanyakan dulu padaku.” Model yang bagus akan menanyakan tegangan catu daya, apakah sensornya polos atau sudah di modul, atau alamat LCD. Jangan pernah menaruh kata sandi Wi-Fi, API key, atau token bot di prompt; pakai penanda seperti “YOUR_PASSWORD” dan ketik sendiri nilai aslinya ke dalam kode di langkah paling akhir.

Langkah memeriksa kode buatan AI

Serapi apa pun kodenya kelihatan, periksa dulu dengan daftar cek ini sebelum meng-upload ke board-mu. Kebanyakan langkah ini hanya butuh beberapa menit dan jauh lebih murah daripada modul yang terbakar karena pin yang salah sambung:

  1. Kompilasi dulu: Tekan Verify (tombol centang) tanpa menyambungkan board. Kalau muncul error, minta perbaikannya dengan cara di bawah; untuk arti pesan-pesannya, lihat error kompilasi Arduino.
  2. Cek library satu per satu: Cari setiap baris #include di Library Manager dan instal library yang nama, pembuat, dan contohnya cocok dengan kode. Kalau belum yakin caranya, panduan Cara Instal Library Arduino akan memandumu.
  3. Bandingkan pin: Cocokkan setiap nomor pin di kode dengan pengkabelanmu sendiri dan peta pin board. Pakai alat Pinout untuk melihat pin PWM dan pin yang sebaiknya dihindari.
  4. Hitung nilai listriknya: Cek nilai resistor yang disarankan dengan kalkulator Resistor LED. Kalau sensor dengan output 5 V masuk ke ESP32 atau Pico yang 3,3 V, pasang pembagi tegangan di antaranya.
  5. Coba di simulator: Jalankan kodenya di Wokwi atau Tinkercad sebelum menyambungkan perangkat keras asli; kesalahan logika akan ketahuan tanpa mempertaruhkan komponen.
  6. Uji sedikit demi sedikit: Jangan upload seluruh proyek sekaligus. Coba dulu sketch kecil yang hanya membaca sensor dan mencetak ke Serial Monitor, lalu tambahkan layar, dan buzzer atau relay paling akhir.
  7. Pantau Serial Monitor: Tambahkan Serial.println() di titik-titik penting untuk melihat apakah variabel berisi nilai yang kamu harapkan, dan pastikan baud rate sama dengan Serial.begin() di kode. Selengkapnya di Serial Monitor Arduino.
  8. Minta kodenya dijelaskan: Untuk setiap baris yang tidak kamu pahami, tanyakan “baris ini fungsinya apa, dan apa yang terjadi kalau kuhapus?” Jangan pernah meng-upload kode yang tidak bisa kamu jelaskan.

Kesalahan umum 1: fungsi library yang tidak ada

Kesalahan AI yang paling licik adalah menulis fungsi yang sebenarnya tidak ada, tapi namanya sangat meyakinkan. Misalnya, library Servo standar punya attach(), write(), writeMicroseconds(), read(), dan detach(), tapi tidak punya fungsi setSpeed(); model bisa mengarangnya ketika kamu meminta servo yang bergerak pelan. Kadang fungsinya memang ada, tapi di board lain: Serial.printf() berjalan di ESP32 tapi tidak bisa dikompilasi di Arduino Uno. Kadang juga fungsinya milik versi lama: ledcSetup() dan ledcAttachPin() sudah dihapus di versi 3.x core Arduino ESP32 yang dirilis tahun 2024, tapi kebanyakan model masih menulis kode dengan fungsi itu. Lalu ada library berbeda yang memakai file header yang sama: di satu library bernama LiquidCrystal_I2C.h layar dimulai dengan lcd.init(), di library lain dengan nama yang sama memakai lcd.begin(). Kalau kamu melihat peringatan “Multiple libraries were found” di output compiler, curigai kekeliruan ini.

Yang ditulis AIPesan compiler atau gejalaPerbaikan yang benar
Serial.printf("%d", x) di Uno“'class HardwareSerial' has no member named 'printf'; did you mean 'print'?” (Uno tidak punya printf)Cetak sepotong-sepotong dengan Serial.print() atau susun teksnya dulu dengan snprintf()
sprintf(buf, "%.1f", t) di UnoBisa dikompilasi, tapi mencetak ? alih-alih angkaDi AVR, keluarga printf tidak mendukung float; pakai dtostrf(t, 4, 1, buf)
servo.setSpeed(10)“'class Servo' has no member named 'setSpeed'” (fungsi setSpeed tidak ada)Ubah sudut sedikit demi sedikit di dalam perulangan
ledcSetup(0, 5000, 8) di ESP32 core 3.x“'ledcSetup' was not declared in this scope” (fungsinya sudah dihapus)Pakai ledcAttach(pin, frekuensi, resolusi) dan ledcWrite(pin, nilai)
Hanya library DHT yang terinstal“fatal error: Adafruit_Sensor.h: No such file or directory” (library pendukung belum ada)Instal juga library Adafruit Unified Sensor
lcd.begin() yang tidak cocok dengan library yang terinstal“no matching function for call to 'LiquidCrystal_I2C::begin()'” (fungsi tidak cocok)Buka contoh bawaan library yang terinstal dan pakai perintah mulainya (misalnya lcd.init())
analogReadResolution(12) di Uno“'analogReadResolution' was not declared in this scope” (tidak ada di Uno)ADC Uno 10-bit; hapus baris itu, nilainya dari 0 sampai 1023

Jebakan fungsi lama di ESP32: ledcAttach, bukan ledcSetup

Ketika kamu meminta kode ESP32 untuk mengatur kecerahan LED atau kecepatan motor, kemungkinan besar AI akan menulis tiga serangkai ledcSetup(channel, frequency, resolution), ledcAttachPin(pin, channel), dan ledcWrite(channel, value). Kode itu berjalan di core versi 2.x. Tapi di versi 3.x, channel diatur otomatis: ledcAttach(pin, frequency, resolution) menyiapkan pin dalam sekali jalan, dan ledcWrite(pin, value) sekarang menerima nomor pin, bukan channel. Versi yang terinstal bisa kamu lihat di samping paket esp32 di Boards Manager. Kode di bawah mengecek versinya ketika kompilasi, jadi bisa berjalan di kedua core:

C++ (Arduino IDE)
1// ESP32 PWM: çekirdek 2.x ve 3.x ile uyumlu LED soldurma / LED fade for both core 2.x and 3.x
2#include <esp_arduino_version.h>   // ESP_ARDUINO_VERSION_MAJOR için / for ESP_ARDUINO_VERSION_MAJOR
3
4const int LED_PIN = 2;             // çoğu DevKit'te dahili LED / onboard LED on most DevKits
5const uint32_t FREKANS = 5000;     // PWM frekansı, Hz / PWM frequency, Hz
6const uint8_t COZUNURLUK = 8;      // 8 bit: 0-255 / 8-bit: 0-255
7
8#if ESP_ARDUINO_VERSION_MAJOR >= 3
9// Çekirdek 3.x: kanal otomatik seçilir, fonksiyonlar pin alır / Core 3.x: channel is automatic, functions take the pin
10void pwmBaslat() { ledcAttach(LED_PIN, FREKANS, COZUNURLUK); }
11void pwmYaz(uint32_t deger) { ledcWrite(LED_PIN, deger); }
12#else
13// Çekirdek 2.x: önce kanal kurulur, sonra pine bağlanır / Core 2.x: set up a channel, then attach the pin
14const uint8_t KANAL = 0;
15void pwmBaslat() { ledcSetup(KANAL, FREKANS, COZUNURLUK); ledcAttachPin(LED_PIN, KANAL); }
16void pwmYaz(uint32_t deger) { ledcWrite(KANAL, deger); }
17#endif
18
19void setup() {
20  Serial.begin(115200);
21  Serial.print("ESP32 Arduino cekirdegi / core: ");
22  Serial.println(ESP_ARDUINO_VERSION_MAJOR);
23  pwmBaslat();
24}
25
26void loop() {
27  // Tek iş yaptığı için burada delay() sorun değil / delay() is fine here: only one task
28  for (int d = 0; d <= 255; d++) { pwmYaz(d); delay(4); }   // yavaşça yan / fade in
29  for (int d = 255; d >= 0; d--) { pwmYaz(d); delay(4); }   // yavaşça sön / fade out
30}

Pelajarannya bukan hanya soal ESP32: kalau kamu menyebutkan versi core dan library di prompt, model punya peluang untuk memilih fungsi yang benar. Kalau setelah versinya kamu sebutkan model masih memakai fungsi lama, buka salah satu contoh resmi library dari menu File > Examples, lalu tempelkan ke prompt dengan pesan “tulis ulang dengan fungsi-fungsi di contoh ini”. Contoh resmi selalu cocok dengan versi yang terinstal. Kalau penasaran cara kerja PWM, lihat Apa Itu PWM?

Kesalahan umum 2: memilih pin yang salah

Walaupun kodenya bisa dikompilasi dan di-upload, pin yang salah berarti rangkaian yang diam-diam tidak melakukan apa-apa, atau modul yang terbakar. Compiler tidak bisa menangkapnya, karena bagi compiler nomor pin hanyalah angka. Berikut kesalahan pin yang paling sering dibuat AI, per board:

BoardKesalahan AI yang umumApa yang terjadi?Cara yang benar
Arduino UnoPin non-PWM untuk analogWrite() (misalnya D7)LED tidak meredup: di bawah 128 mati, mulai 128 ke atas menyala penuhPin PWM: 3, 5, 6, 9, 10, 11
Arduino UnoMenyambungkan modul ke D0 atau D1Upload bisa gagal dan Serial Monitor bisa menampilkan karakter sampahD0 dan D1 adalah jalur serial USB; mulai dari D2
Arduino NanoMemakai A6 dan A7 sebagai pin digitaldigitalRead() dan digitalWrite() tidak berfungsiA6 dan A7 hanya bisa jadi input analog
ESP32Memakai GPIO 6–11Board crash atau terus rebootPin-pin ini terhubung ke memori flash; pilih pin aman seperti GPIO 4, 5, 16–19, 21–23
ESP32Memakai GPIO 34–39 sebagai outputLED tetap mati; tombol terbaca tidak menentu tanpa pull-upPin-pin ini hanya untuk input dan tidak punya resistor pull-up internal
ESP32Membaca nilai analog dari pin ADC2 ketika Wi-Fi menyalaanalogRead() gagal atau mengembalikan nilai yang tidak bermaknaSambungkan sensor analog ke pin ADC1 (GPIO 32–39)
Raspberry Pi Pico WPin(25) untuk LED bawaanLED tetap matiDi Pico W, LED terhubung ke chip nirkabel; pakai Pin("LED")
AI sering mengabaikan level tegangan. Pin ESP32 dan Raspberry Pi Pico bekerja di 3,3 V dan tidak tahan 5 V; menyambungkan sensor dengan output 5 V secara langsung bisa merusak pin secara permanen. Di Arduino Uno, sebaiknya jangan menarik lebih dari 20 mA terus-menerus dari satu pin (batas maksimum mutlak 40 mA). Motor, kumparan relay, dan LED strip yang panjang tidak pernah disambung langsung ke pin; harus ada transistor atau driver di antaranya. Untuk tata letak pin board-mu, lihat Pinout Arduino Uno.

Kesalahan umum 3: delay() yang mengunci

Karena kebanyakan contoh Arduino di internet ditulis dengan delay(), AI juga memakai delay() secara default. Selama delay(1000) berjalan, prosesor tidak mengerjakan apa pun selama satu detik penuh: tidak membaca tombol, tidak mengecek sensor, dan tidak memperbarui layar. Untuk kode yang hanya mengerjakan satu hal, itu tidak masalah. Tapi kalau kamu meminta dua hal sekaligus, seperti “kedipkan LED dan bunyikan buzzer ketika tombol ditekan”, sering kali kamu akan mendapat kode seperti ini:

C++ (Arduino IDE)
1// Yapay zekanın sık ürettiği, kilitlenen kod / Blocking code that AI often produces
2const int BUTON_PIN = 2;    // buton: D2 ile GND arası / button between D2 and GND
3const int LED_PIN = 13;     // dahili LED / onboard LED
4const int BUZZER_PIN = 8;   // aktif buzzer / active buzzer
5
6void setup() {
7  pinMode(BUTON_PIN, INPUT_PULLUP);
8  pinMode(LED_PIN, OUTPUT);
9  pinMode(BUZZER_PIN, OUTPUT);
10}
11
12void loop() {
13  digitalWrite(LED_PIN, HIGH);
14  delay(1000);                          // 1 sn boyunca buton okunmaz / button is not read for 1 s
15  digitalWrite(LED_PIN, LOW);
16  delay(1000);                          // 1 sn daha kör bekleme / another blind second
17
18  if (digitalRead(BUTON_PIN) == LOW) {  // yalnızca tam bu anda basılıysa / only if pressed right now
19    digitalWrite(BUZZER_PIN, HIGH);
20    delay(200);
21    digitalWrite(BUZZER_PIN, LOW);
22  }
23}

Kode ini bisa dikompilasi tanpa error, tapi hampir selalu tidak terjadi apa-apa ketika kamu menekan tombol. Sekitar 2 detik dari setiap putaran loop() habis di dalam dua panggilan delay(), dan tombol hanya dibaca selama beberapa mikrodetik di antaranya. Tekanan singkat hampir selalu meleset dari momen itu; supaya buzzer pasti berbunyi, kamu harus menahan tombol lebih dari 2 detik. Solusinya bukan menunggu, melainkan melihat jam: millis() mengembalikan milidetik sejak board menyala, setiap tugas mengecek apakah waktunya sudah tiba, dan loop() berjalan ribuan kali per detik:

C++ (Arduino IDE)
1// millis() ile kilitlenmeyen sürüm / Non-blocking version with millis()
2const int BUTON_PIN = 2;    // buton: D2 ile GND arası / button between D2 and GND
3const int LED_PIN = 13;     // dahili LED / onboard LED
4const int BUZZER_PIN = 8;   // aktif buzzer / active buzzer
5
6const unsigned long LED_ARALIK = 1000;  // LED değişim aralığı, ms / LED toggle interval, ms
7const unsigned long BIP_SURE = 200;     // bip süresi, ms / beep length, ms
8const unsigned long SICRAMA = 30;       // debounce süresi, ms / debounce time, ms
9
10unsigned long ledZaman = 0;     // LED'in son değiştiği an / last LED toggle
11unsigned long bipZaman = 0;     // bipin başladığı an / beep start
12unsigned long butonZaman = 0;   // butonun son değiştiği an / last button change
13bool ledDurum = false;
14bool bipCaliyor = false;
15int oncekiButon = HIGH;         // önceki buton seviyesi / previous button level
16
17void setup() {
18  pinMode(BUTON_PIN, INPUT_PULLUP);
19  pinMode(LED_PIN, OUTPUT);
20  pinMode(BUZZER_PIN, OUTPUT);
21}
22
23void loop() {
24  unsigned long simdi = millis();
25
26  // 1) LED: zamanı geldiyse durum değiştir / toggle the LED when its time has come
27  if (simdi - ledZaman >= LED_ARALIK) {
28    ledZaman = simdi;
29    ledDurum = !ledDurum;
30    digitalWrite(LED_PIN, ledDurum ? HIGH : LOW);
31  }
32
33  // 2) Buton: yalnızca basıldığı anı yakala / catch only the moment of the press
34  int buton = digitalRead(BUTON_PIN);
35  if (buton != oncekiButon && simdi - butonZaman >= SICRAMA) {
36    butonZaman = simdi;
37    oncekiButon = buton;
38    if (buton == LOW && !bipCaliyor) {  // HIGH -> LOW: yeni basış / new press
39      bipCaliyor = true;
40      bipZaman = simdi;
41      digitalWrite(BUZZER_PIN, HIGH);
42    }
43  }
44
45  // 3) Buzzer: süre dolunca sustur / silence it when the time is up
46  if (bipCaliyor && simdi - bipZaman >= BIP_SURE) {
47    bipCaliyor = false;
48    digitalWrite(BUZZER_PIN, LOW);
49  }
50}

Di versi ini LED, tombol, dan buzzer bekerja tanpa saling menunggu. Pengurangan dalam bentuk simdi - ledZaman >= LED_ARALIK tetap memberi hasil yang benar walaupun millis() kembali ke nol, kira-kira setiap 49,7 hari, sedangkan perbandingan millis() > targetTime yang kadang ditulis AI akan rusak ketika penghitungnya kembali ke nol. Menangkap momen tombol berubah dari HIGH ke LOW mencegah buzzer berbunyi berulang-ulang selama tombol ditahan, dan jeda 30 ms menyaring pantulan kontak (debounce). Untuk topik lengkapnya, lihat panduan Arduino millis() vs delay(), dan untuk pengkabelan tombol, lihat Cara Menghubungkan Push Button ke Arduino.

Kalau sejak awal kamu menulis “jangan pakai delay(), atur waktu setiap tugas dengan millis()” di prompt, kamu tidak akan pernah mengalami masalah ini. Ada dua pola penguncian lain yang perlu dicek: di board dengan USB native seperti Leonardo dan Micro, baris while (!Serial); membuat program menunggu selamanya ketika board tidak tersambung ke komputer. Selain itu, delay() di dalam interrupt service routine (ISR) bisa membuat program macet, karena millis() tidak bertambah selama interrupt.

Menempelkan error kompilasi dan meminta perbaikannya

AI benar-benar jago menjelaskan error kompilasi, asalkan kamu memberikan error lengkap beserta konteksnya. Kalau kamu hanya menulis “kodenya tidak jalan”, model terpaksa menebak. Ikuti urutan ini:

  1. Ketika error kompilasi muncul di Arduino IDE 2, klik Copy error messages di notifikasi kanan bawah, atau pilih dan salin seluruh teks di panel output. Tulisan exit status 1 di baris terakhir tidak berguna kalau berdiri sendiri; penyebab sebenarnya ada di baris error: yang lebih atas.
  2. Prompt-mu harus berisi, dengan urutan ini: board dan versi core, kode lengkap, pesan error lengkap, serta nama dan versi library yang terinstal.
  3. Sebelum meminta perbaikan, tulis “Jelaskan dulu penyebab error-nya, lalu tunjukkan hanya baris yang perlu diubah”. Dengan begitu model tidak menulis ulang seluruh sketch dan menambah error baru, dan kamu belajar apa yang berubah dan kenapa.
  4. Terapkan perubahan yang disarankan dan kompilasi lagi. Kalau muncul error baru, tempelkan lagi baris error: yang paling atas; perbaiki satu error dalam satu waktu.
  5. Kalau setelah dua atau tiga putaran error yang sama masih ada, putuskan lingkarannya dan kompilasi contoh resmi library. Kalau contohnya juga tidak bisa dikompilasi, masalahnya bukan di kodemu, melainkan di pengaturanmu: board yang dipilih salah, library kurang, atau dua library dengan nama sama saling bentrok.

Kalau error terjadi ketika upload, bukan ketika kompilasi (misalnya “avrdude: stk500_recv(): programmer is not responding” atau “Failed to connect to ESP32” di ESP32), mengubah kode tidak akan membantu; kamu perlu mengecek port, kabel, driver, dan pilihan board. Panduan kode Arduino gagal di-upload membahas kasus-kasus itu langkah demi langkah. Ketika bertanya ke AI soal error upload, sertakan pesan lengkapnya dan sistem operasi yang kamu pakai.

Meminta AI menulis kode Raspberry Pi Pico dan MicroPython

Aturan yang sama berlaku ketika kamu meminta kode MicroPython, tapi di sini AI juga bisa tertukar platform. Kode yang ditulis untuk komputer Raspberry Pi dengan RPi.GPIO atau gpiozero tidak berjalan di Pico; di Pico kamu memakai modul machine dari MicroPython. Modul board dan digitalio milik CircuitPython juga tidak ada di MicroPython. Jadi tulis informasi yang jelas seperti “Raspberry Pi Pico W, MicroPython, Thonny” di prompt-mu. Kode di bawah berjalan di Pico maupun Pico W dan memakai ticks_ms() untuk mengatur waktu alih-alih menunggu:

MicroPython
1# Pico ve Pico W: bekletmeden LED + buton / Pico and Pico W: LED + button without blocking
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT)             # Pico W'da Pin(25) çalışmaz / Pin(25) does not work on Pico W
6buton = Pin(14, Pin.IN, Pin.PULL_UP)  # buton: GP14 ile GND arası / button between GP14 and GND
7
8ARALIK = 500                          # LED değişim aralığı, ms / LED toggle interval, ms
9SICRAMA = 30                          # debounce süresi, ms / debounce time, ms
10son = time.ticks_ms()                 # LED'in son değiştiği an / last LED toggle
11degisim = time.ticks_ms()             # butonun son değiştiği an / last button change
12onceki = 1                            # önceki buton seviyesi / previous button level
13sayac = 0
14
15while True:
16    simdi = time.ticks_ms()
17    if time.ticks_diff(simdi, son) >= ARALIK:      # taşmada da doğru / correct even on overflow
18        son = simdi
19        led.toggle()
20    deger = buton.value()
21    if deger != onceki and time.ticks_diff(simdi, degisim) >= SICRAMA:
22        degisim = simdi
23        onceki = deger
24        if deger == 0:                # basıldığı an / moment of the press
25            sayac += 1
26            print("Basma / press:", sayac)

Ketika kodenya dijalankan di Thonny, LED bawaan berkedip setiap setengah detik dan setiap tekanan tombol mencetak angka yang terus bertambah di jendela Shell. time.ticks_diff() memberi selisih yang benar walaupun penghitung tick kembali ke awal, sedangkan pengurangan biasa time.ticks_ms() - son yang sering ditulis AI bisa memberi hasil salah di kode yang berjalan lama. Kalau kamu baru mengenal Pico, mulai dari Apa Itu Raspberry Pi Pico?

Tegangan listrik PLN: jangan percaya AI

AI bisa menulis kode untuk relay yang menyalakan lampu, stopkontak, atau pemanas bertegangan listrik PLN dalam hitungan detik, dan menjelaskan pengkabelannya dengan sangat yakin. Tapi tegangan listrik PLN (220 V di Indonesia) bisa membunuh; sambungan yang salah atau kabel yang longgar bisa menyebabkan kesetrum dan kebakaran. Model tidak bisa mengukur pengkabelan yang ia jelaskan, tidak bisa melihat rangkaianmu, dan tidak bisa bertanggung jawab atas hasilnya. Jangan pernah membuat sambungan listrik PLN hanya berdasarkan instruksi AI; kalau umurmu di bawah 18 tahun, selalu kerjakan bersama orang dewasa atau orang yang paham kelistrikan.

Kalau proyekmu akan memakai listrik PLN, uji dulu di tegangan rendah: pakai LED sebagai pengganti lampu dan LED strip 12 V sebagai pengganti stopkontak. Kalau sistemnya memang harus menghidupmatikan listrik PLN, ada aturan yang tidak bisa ditawar. Cabut steker rangkaian sebelum mengerjakannya. Relay harus memutus kabel fasa (L), bukan netral. Jangan melebihi rating arus dan tegangan yang tercetak di modul relay (10 A 250 VAC di kebanyakan modul), dan taruh sisi tegangan tinggi di dalam kotak tertutup yang terisolasi. Modul relay murah sering tidak memberi jarak yang cukup antara sisi tegangan rendah dan tegangan tinggi; kalau bisa, pilih stopkontak pintar atau kotak relay siap pakai yang bersertifikat. Pengkabelan modul relay dibahas lengkap di Apa Itu Modul Relay?

Memakai AI tanpa berhenti belajar

Kalau AI menulis semua sketch-mu, kamu tidak akan tahu harus berbuat apa di hari pertama kodenya tidak jalan. Kalau tujuanmu belajar elektronika dan pemrograman, pakai AI bukan sebagai mesin kode, melainkan sebagai guru yang sabar:

  • Tulis sendiri dulu: Coba tulis kodenya sendiri, lalu minta AI memeriksanya dengan “tunjukkan kesalahanku, tapi jangan beri kode yang sudah diperbaiki”.
  • Minta petunjuk, bukan jawaban: Kalau kamu mentok, bilang “beri aku petunjuk untuk langkah berikutnya saja”.
  • Minta dijelaskan baris demi baris: Setelah kodenya dijelaskan, coba jelaskan logika yang sama dengan kata-katamu sendiri; bagian yang tidak bisa kamu jelaskan adalah bagian yang belum kamu pelajari.
  • Ketik, jangan salin: Mengetik kode sendiri alih-alih menempelkannya membuatmu jauh lebih cepat hafal sintaks dan nama fungsi.
  • Tebak dulu, lalu uji: Sebelum mengubah sebuah nilai, tebak apa yang akan terjadi (misalnya kalau LED_ARALIK menjadi 200), lalu upload dan cek.
  • Uji dirimu sendiri: Minta AI memberi lima soal tentang topik yang baru kamu pelajari; untuk mengulang dasar-dasarnya, pakai dasar pemrograman Arduino.
  • Ikuti aturannya: Untuk tugas sekolah dan lomba sains, ikuti aturan pemakaian AI dan sebutkan dengan jelas kalau kamu memakainya.

Proyek pertama yang bisa dicoba dengan AI

  • Tampilan suhu: Tampilkan nilai yang diukur DHT11 di LCD I2C; sebutkan alamat LCD dan pembuat library di prompt-mu.
  • Sensor parkir: Ukur jarak dengan HC-SR04 dan bunyikan bip makin cepat ketika rintangan makin dekat; minta pengaturan waktu berbasis millis().
  • Lampu tidur: Nyalakan LED ketika gelap dengan LDR; baca dulu nilai ambangnya di Serial Monitor dan tulis sebagai angka di prompt-mu.
  • Kendali LED lewat Wi-Fi: Nyalakan dan matikan LED dari halaman yang dibuka di ponselmu dengan ESP32; sebutkan versi core di prompt-mu.
  • Idemu sendiri: Pilih proyek dari daftar ide proyek Arduino dan jelaskan ke AI dengan template prompt dari panduan ini.

AI bisa menjadi pembantu tercepat yang ada di dekatmu selama kamu belajar Arduino, asalkan kamu memberinya informasi yang benar, mengompilasi kode yang kamu terima, mengecek pin, menguji sedikit demi sedikit, dan tidak pernah meng-upload baris yang tidak kamu pahami. Kalau kamu mencari contoh tepercaya untuk membandingkan kode buatan AI, aplikasi BlueGrays punya proyek LED, tombol, DHT11, PWM ESP32, dan Pico dengan skema rangkaian langkah demi langkah dan kode yang sudah diuji.

Pertanyaan umum

Apakah AI bisa menulis kode Arduino?

Bisa. Asisten seperti ChatGPT, Gemini, Claude, dan Copilot bisa menghasilkan kode yang berfungsi untuk sebagian besar proyek Arduino, ESP32, dan Raspberry Pi Pico yang sederhana. Tapi sebelum meng-upload, kamu tetap harus mengompilasinya dan mengecek sendiri pin, library, dan level tegangannya; AI tidak bisa melihat rangkaianmu dan bisa salah.

AI apa yang paling bagus untuk menulis kode Arduino?

Tidak ada satu jawaban yang benar; model besar yang ada sekarang memberi hasil yang mirip untuk kode Arduino sederhana. Perbedaannya biasanya datang dari prompt, bukan dari modelnya: prompt yang menyebutkan board, sambungan pin, library, dan perilaku yang diharapkan dengan jelas akan menghasilkan kode yang lebih baik, asisten mana pun yang kamu pakai.

Kenapa kode Arduino dari ChatGPT tidak berfungsi?

Penyebab yang paling sering adalah fungsi yang tidak ada atau milik board lain, kode yang ditulis untuk versi library yang berbeda, pin yang salah, dan panggilan delay() yang memblokir semuanya. Kompilasi dulu kodenya; kalau ada error, tempelkan pesan lengkapnya beserta informasi board dan versinya. Kalau bisa dikompilasi tapi tidak berfungsi, cetak nilai-nilai antara ke Serial Monitor untuk menemukan di mana masalahnya.

Bagaimana cara meminta AI memperbaiki error kompilasi Arduino?

Berikan nama board, versi core dan library, kode lengkap, dan pesan error lengkap dari panel output dalam satu pesan. Kalau kamu menambahkan “jelaskan dulu penyebabnya, lalu tunjukkan hanya baris yang berubah”, kamu mendapat perbaikan yang tepat dan belajar kenapa error itu terjadi.

Apakah pengkabelan relay listrik PLN dari AI bisa dipercaya?

Tidak, kalau hanya mengandalkan AI. Kodenya biasanya baik-baik saja, tapi bahayanya ada di pengkabelan; AI tidak bisa melihat rangkaianmu dan tidak bisa menjamin instruksinya benar. Sambungkan sisi listrik PLN hanya bersama orang yang paham, dengan steker tercabut, memakai susunan relay yang memutus kabel fasa dan berada di dalam kotak tertutup; kalau bisa, pakai stopkontak pintar siap pakai yang bersertifikat.

Apakah memakai AI merugikan proses belajar Arduino?

Kalau kamu menyalin kode tanpa memahaminya, ya; kamu tidak akan tahu harus berbuat apa di error pertama. Kalau kamu menulis kode sendiri dulu lalu meminta AI memeriksanya, menjelaskannya baris demi baris, dan memberi petunjuk alih-alih jawaban, AI justru mempercepat belajarmu. Aturannya sederhana: jangan pernah meng-upload baris yang tidak bisa kamu jelaskan.

Lihat semua proyek
LED Berkedip
#1Pemula

LED Berkedip

"Halo" pertama di dunia elektronika: menyalakan dan mematikan satu LED. Arduino menyalakan dan mematikan LED dengan jeda singkat, sehingga cahayanya berkedip cepat. Kamu melihat dengan cara paling sed

4.6(188)
1127
Kendali LED dengan Tombol Tekan (Tekan)
#9Pemula

Kendali LED dengan Tombol Tekan (Tekan)

Persis seperti bel pintu: lampu tetap menyala selama kamu menekan, dan mati ketika kamu melepasnya. Arduino terus mendengarkan tombol; selama ditekan LED menyala, dan begitu jarimu terangkat LED mati.

4.8(113)
229
Suhu dan Kelembapan dengan DHT11
#55Menengah

Suhu dan Kelembapan dengan DHT11

Seberapa hangat kamarmu, dan apakah udaranya lembap atau kering? Sensor DHT11 mengukur suhu dan kelembapan, dan Arduino menulis nilainya di layar LCD dua baris, diperbarui setiap beberapa detik. Jika

4.7(47)
73
LED Berkedip dengan ESP32
#103Pemula

LED Berkedip dengan ESP32

Mengajarkan penggunaan output GPIO dasar dengan ESP32. Kita membuat efek berkedip dengan menyalakan dan mematikan LED dari pin digital. Versi ESP32 dari proyek blink klasik di Arduino UNO; perintah blink dasar di lingkungan Arduino sama, tetapi susunan pin ESP32 dan level GPIO 3,3 V-nya berbeda dengan Arduino UNO.

4.7(37)
99
Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)
#147Pemula

Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)

Proyek pembuka seri Raspberry Pi Pico! Kita mengedipkan LED hijau bawaan untuk memastikan board bekerja; percobaan "Hello World" klasik. TANPA komponen eksternal, hanya Pico dan kabel USB. Kodenya ditulis dalam MicroPython (bahasa resmi dari Raspberry Pi Foundation). Pelajari kelas machine.Pin, mode Pin.OUT, metode led.on()/off(), dan time.sleep() di Thonny IDE, dan ikuti setiap perubahan di output Serial (REPL). Juga pas untuk menguji firmware MicroPython.

5.0(1)
10
LED Fade dengan PWM ESP32
#110Pemula

LED Fade dengan PWM ESP32

Mengubah kecerahan LED secara halus dari 0 ke maksimum, dan dari maksimum ke 0. Kita mengendalikan PWM dengan analogWrite() seperti di Arduino; sintaks yang sama bekerja tanpa masalah di ESP32 Arduino Core 3.0+. Definisi pin + pinMode + analogWrite sudah cukup.

4.8(36)
54
LED Fade PWM Raspberry Pi Pico (Efek Bernapas)
#160Pemula

LED Fade PWM Raspberry Pi Pico (Efek Bernapas)

LED tidak lagi sekadar berkedip, ia bernapas! Dengan PWM (Pulse Width Modulation) Pico, kecerahan LED naik lalu turun perlahan, seperti lampu MacBook yang tidur. Pelajari kelas machine.PWM, duty_u16() (kecerahan 16-bit 0–65535), frekuensi PWM (freq(1000): 1000 siklus per detik, tanpa kedipan terlihat), loop range() bertahap, dan output mirip analog dari pin digital. PWM juga dipakai untuk warna RGB, motor, servo, dan buzzer.

0.0(0)
4
Menggunakan Layar LCD dengan I2C
#32Pemula
Premium

Menggunakan Layar LCD dengan I2C

Beri Arduino-mu layar sendiri dan buat ia menulis pesan pertamanya. Layar LCD dua baris tersambung hanya dengan beberapa kabel; sapaan muncul di baris atas, lalu pesan kedua di baris bawah, layar dibe

4.8(53)
70