Yapay Zeka ile Arduino Kodu Yazma: İstem, Doğrulama ve Hatalar
Yapay zeka ile Arduino kodu yazarken iyi istem nasıl yazılır? Kodu doğrulama adımları, uydurma fonksiyonlar, yanlış pin, delay() kilitlenmesi ve 220 V uyarısı.
Yapay zeka ile Arduino kodu yazma, ChatGPT, Gemini, Claude ya da Copilot gibi bir sohbet asistanına projeni anlatıp ondan Arduino, ESP32 veya Raspberry Pi Pico için çalışan bir kod istemektir. Doğru kullanıldığında saatler süren bir işi dakikalara indirir: boş bir sayfadan başlamak yerine elinde derlenmeye hazır bir taslak olur. Ama yapay zeka devreni göremez, masandaki kartı bilmez ve yanlış bir şeyi de çok emin bir dille söyleyebilir. Olmayan bir kütüphane fonksiyonu uydurabilir, yanlış pin seçebilir ya da her şeyi kilitleyen delay() döngüleri yazabilir. Bu yüzden asıl beceri kodu istemek değil, iyi istemek ve gelen kodu doğrulamaktır.
Bu rehberde bir yapay zeka asistanının Arduino kodunu nasıl ürettiğini ve neden yanıldığını, kartı, pinleri, kütüphaneleri ve beklenen davranışı içeren iyi bir istemin (prompt) nasıl yazıldığını ve üretilen kodu karta yüklemeden önce hangi adımlarla doğrulaman gerektiğini göreceksin. En sık görülen üç hatayı gerçek derleyici mesajları ve düzeltilmiş kodlarla ele alacağız. Ardından derleme hatasını yapıştırıp düzelttirmenin doğru yolunu, 220 V şebeke gerilimiyle çalışırken neden yapay zekaya güvenmemen gerektiğini ve öğrenmeyi bırakmadan bu araçları nasıl kullanacağını anlatacağız.

Yapay zeka Arduino kodunu nasıl yazar, neden yanılır?
ChatGPT gibi büyük dil modelleri (LLM) kodu bir derleyici gibi çalıştırarak değil, eğitim sırasında gördüğü milyonlarca örnekten yola çıkıp en olası devamı tahmin ederek yazar. İnternette çok örneği olan konularda (LED yakmak, DHT11 okumak, servo döndürmek) bu yöntem çok iyi sonuç verir. Ancak modelin bilgisi belli bir tarihte donmuştur ve kütüphanelerin yeni sürümlerinde değişen fonksiyonları bilmeyebilir. Aynı adı taşıyan iki farklı kütüphanenin fonksiyonlarını birbirine karıştırabilir. En önemlisi, bilmediği bir şey için "bilmiyorum" demek yerine akla yatkın görünen bir cevap uydurabilir; buna halüsinasyon denir. Model senin devreni görmediği için pin numaralarını, gerilim seviyelerini ve modül sürümünü ya senin yazdıklarından ya da kendi tahmininden çıkarır.
| İş | Yapay zeka ne kadar iyi? | Neden? |
|---|---|---|
| Basit örnek kod (LED, buton, sensör okuma) | Çok iyi | İnternette binlerce benzer örnek var |
| Var olan kodu satır satır açıklamak | Çok iyi | Kodu okuyup anlatmak tahmin gerektirmez |
| Derleme hatasının sebebini bulmak | İyi | Hata mesajları kalıplıdır ve modeller bu kalıpları tanır |
| Kütüphanenin en yeni sürümüne uygun kod | Zayıf | Bilgisi belli bir tarihte donmuştur; yeni fonksiyonları bilmeyebilir |
| Senin devrene uygun pin seçimi | Zayıf | Kartını ve kablolamanı görmez, varsayımla seçer |
| Zamanlama ve aynı anda birkaç iş | Orta | Örneklerin çoğu delay() ile yazıldığı için kilitlenen kod üretir |
| 220 V, akü ve yüksek akımlı devreler | Güvenilmez | Hatanın bedeli yanık, yangın ya da çarpılmadır; model sorumluluk alamaz |
İyi bir istem (prompt) nasıl yazılır?
Yapay zekanın verdiği kodun kalitesi, ona verdiğin bilginin kalitesini geçemez. "Arduino ile sıcaklık ölçen kod yaz" gibi tek cümlelik bir istekte model hangi kartı, hangi sensörü, hangi pini ve hangi kütüphaneyi kullanacağını kendisi seçer. Seçtikleri senin elindekilerle tutmazsa kod ya derlenmez ya da derlenip çalışmaz. İyi bir istem, projeyi ilk kez duyan bir arkadaşına telefonda anlatır gibi yazılır: kart, bileşenler, bağlantılar, kütüphaneler, beklenen davranış ve kısıtlar tek tek söylenir. Aşağıdaki tablo bir Arduino isteminde bulunması gereken bilgileri özetliyor:
| İstemde ne olmalı? | Neden önemli? | Örnek |
|---|---|---|
| Kartın tam adı | Uno, ESP32 ve Pico'da pinler, gerilim ve komutlar farklıdır | Arduino Uno R3 (ATmega328P) |
| IDE ve çekirdek sürümü | ESP32'de 2.x ile 3.x arasında fonksiyonlar değişti | Arduino IDE 2.3, esp32 çekirdeği 3.x |
| Bileşenlerin model numarası | DHT11 ile DHT22, SG90 ile MG996R aynı değildir | DHT22, I2C'li 16x2 LCD (PCF8574, adres 0x27) |
| Pin bağlantıları | Model pin uydurmaz, senin kablolamana uyar | DHT22 DATA → D2, buton D3 ile GND arasında |
| Kütüphanenin adı ve yazarı | Aynı adlı farklı kütüphaneler farklı fonksiyonlar kullanır | Adafruit DHT sensor library, Frank de Brabander LiquidCrystal I2C |
| Sayılarla beklenen davranış | "Isınınca öt" belirsizdir, "30 °C'nin üstünde" ölçülebilir | 2 saniyede bir ölç, 30 °C'yi geçince buzzer'ı 3 kez öttür |
| Kısıtlar | Modelin kötü alışkanlıklarını baştan engeller | delay() kullanma, millis() kullan |
| Çıktı biçimi | Kodu ve kurulum bilgisini birlikte alırsın | Tek .ino dosyası, Türkçe yorumlar, gereken kütüphanelerin listesi |
Örneğin şu istem, tek cümlelik bir istekten çok daha iyi sonuç verir: "Arduino Uno R3 ve Arduino IDE 2.3 kullanıyorum. DHT22 sensörünün DATA pini D2'de, aktif buzzer D8'de, I2C'li 16x2 LCD'nin (PCF8574, adres 0x27) SDA'sı A4'te, SCL'si A5'te. Adafruit DHT sensor library ve Frank de Brabander'ın LiquidCrystal I2C kütüphanesi kurulu. Her 2 saniyede bir sıcaklık ve nemi LCD'ye yaz, sıcaklık 30 °C'yi geçerse buzzer'ı kısa kısa öttür. delay() yerine millis() kullan, satırlara Türkçe yorum ekle. Kodun başında kurmam gereken kütüphaneleri, sonunda da yaptığın varsayımları listele." Bu istemde modelin tahmin etmesi gereken neredeyse hiçbir şey kalmaz.
Yapay zekanın ürettiği kodu doğrulama adımları
Gelen kod ne kadar düzgün görünürse görünsün, karta yüklemeden önce bir kontrol listesinden geçir. Bu adımların çoğu birkaç dakika sürer ve yanlış bağlanmış bir pin yüzünden yanan bir modülden çok daha ucuzdur:
- Önce yalnızca derle: Kartı takmadan Doğrula (onay işareti) düğmesine bas. Hata çıkarsa aşağıdaki yöntemle düzelttir; mesajların anlamı için Arduino derleme hataları yazısına bak.
- Kütüphaneleri tek tek doğrula: Koddaki her #include satırını Kütüphane Yöneticisi'nde ara ve adı, yazarı ve örnekleri kodla uyuşan kütüphaneyi kur. Kurulumu bilmiyorsan Arduino kütüphane ekleme rehberi adım adım anlatıyor.
- Pinleri karşılaştır: Koddaki her pin numarasını kendi kablolamanla ve kartın pin haritasıyla karşılaştır. PWM pinleri ve kullanılmaması gereken pinler için Pinout aracını kullan.
- Elektriksel değerleri hesapla: Önerilen direnç değerini LED direnci hesaplayıcısıyla kontrol et. 5 V çıkışlı bir sensör 3,3 V'luk ESP32 ya da Pico'ya bağlanacaksa araya gerilim bölücü koy.
- Simülatörde dene: Kodu gerçek devreye bağlamadan önce Wokwi ya da Tinkercad üzerinde çalıştır; mantık hatalarını hiçbir parçayı riske atmadan yakalarsın.
- Parça parça test et: Bütün projeyi tek seferde yükleme. Önce yalnızca sensörü okuyup Seri Monitör'e yazan küçük bir kod dene, sonra ekranı, en son buzzer'ı ya da röleyi ekle.
- Seri Monitör ile izle: Önemli noktalara Serial.println() ekleyerek değişkenlerin beklediğin değerleri alıp almadığını gör ve baud hızının koddaki Serial.begin() değeriyle aynı olduğundan emin ol. Ayrıntılar Arduino Serial Monitor yazısında.
- Kodu açıklat: Anlamadığın her satırı "bu satır ne yapıyor, silersem ne olur?" diye sor. Açıklayamadığın bir kodu karta yükleme.
Sık hata 1: Olmayan kütüphane fonksiyonları
Yapay zekanın en sinsi hatası, gerçekte var olmayan ama adı çok mantıklı görünen fonksiyonlar yazmasıdır. Örneğin standart Servo kütüphanesinde attach(), write(), writeMicroseconds(), read() ve detach() vardır ama hız ayarlayan bir setSpeed() fonksiyonu yoktur; model "servo yavaş dönsün" isteğine bunu uydurabilir. Bazen fonksiyon gerçekten vardır ama başka bir kartta: Serial.printf() ESP32'de çalışır, Arduino Uno'da ise derlenmez. Bazen de fonksiyon eski bir sürümde kalmıştır: ESP32 Arduino çekirdeğinin 2024'te çıkan 3.x sürümünde ledcSetup() ve ledcAttachPin() kaldırıldı, ama modellerin çoğu hâlâ bunlarla kod yazar. Bir de aynı başlık dosyasını kullanan farklı kütüphaneler var: LiquidCrystal_I2C.h adlı bir kütüphanede ekran lcd.init() ile, aynı adı taşıyan bir başkasında lcd.begin() ile başlatılır. Derleme çıktısında "Multiple libraries were found" uyarısı görürsen bu karışıklıktan şüphelen.
| Yapay zekanın yazdığı | Derleyici mesajı ya da belirti | Gerçek çözüm |
|---|---|---|
| Uno'da Serial.printf("%d", x) | 'class HardwareSerial' has no member named 'printf'; did you mean 'print'? | Serial.print() ile parça parça yaz ya da metni önce snprintf() ile hazırla |
| Uno'da sprintf(buf, "%.1f", t) | Derlenir ama sayının yerine ? yazar | AVR'de printf ailesi ondalık sayıyı desteklemez; dtostrf(t, 4, 1, buf) kullan |
| servo.setSpeed(10) | 'class Servo' has no member named 'setSpeed' | Açıyı bir döngüde küçük adımlarla değiştir |
| ESP32 3.x'te ledcSetup(0, 5000, 8) | 'ledcSetup' was not declared in this scope | ledcAttach(pin, frekans, çözünürlük) ve ledcWrite(pin, değer) kullan |
| Yalnızca DHT kütüphanesi kurulu | fatal error: Adafruit_Sensor.h: No such file or directory | Adafruit Unified Sensor kütüphanesini de kur |
| Kurulu kütüphaneye uymayan lcd.begin() | no matching function for call to 'LiquidCrystal_I2C::begin()' | Kurulu kütüphanenin kendi örneğini aç ve onun başlatma komutunu (lcd.init() gibi) kullan |
| Uno'da analogReadResolution(12) | 'analogReadResolution' was not declared in this scope | Uno'nun ADC'si 10 bittir; satırı sil, değerler 0–1023 arasındadır |
ESP32'de eski fonksiyon tuzağı: ledcSetup yerine ledcAttach
ESP32 ile LED parlaklığı ya da motor hızı ayarlayan bir kod istediğinde yapay zeka büyük ihtimalle ledcSetup(kanal, frekans, çözünürlük), ledcAttachPin(pin, kanal) ve ledcWrite(kanal, değer) üçlüsünü yazar. Bu kod çekirdeğin 2.x sürümünde çalışır. 3.x sürümünde ise kanallar otomatik atanır: ledcAttach(pin, frekans, çözünürlük) pini tek seferde hazırlar, ledcWrite(pin, değer) de artık kanal yerine pin numarası alır. Hangi sürümün kurulu olduğunu Kart Yöneticisi'nde esp32 paketinin yanında görebilirsin. Aşağıdaki kod sürümü derleme sırasında kontrol eder, böylece iki çekirdekte de çalışır:
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}Buradaki ders yalnızca ESP32'ye özgü değil: isteminde çekirdek ve kütüphane sürümünü yazarsan model doğru fonksiyonları seçme şansı bulur. Sürümü belirttiğin hâlde eski fonksiyonlar kullanıyorsa kütüphanenin Dosya > Örnekler menüsündeki resmi örneklerinden birini aç ve "bu örnekteki fonksiyonlarla yeniden yaz" diyerek isteme yapıştır. Resmi örnekler her zaman kurulu sürümle uyumludur. PWM'in nasıl çalıştığını merak ediyorsan PWM nedir? yazısına göz at.
Sık hata 2: Yanlış pin seçimi
Kod derlenip yüklense bile yanlış pin, sessizce çalışmayan bir devre ya da yanan bir modül demektir. Derleyici bunu yakalayamaz, çünkü onun için pin numarası yalnızca bir sayıdır. Yapay zekanın en sık yaptığı pin hataları kartlara göre şöyle:
| Kart | Yapay zekanın sık hatası | Ne olur? | Doğrusu |
|---|---|---|---|
| Arduino Uno | analogWrite() için PWM olmayan bir pin (ör. D7) | LED kısılmaz; 128'in altında söner, 128 ve üstünde tam yanar | PWM pinleri: 3, 5, 6, 9, 10, 11 |
| Arduino Uno | Modülü D0 ya da D1'e bağlamak | Kod yüklenemeyebilir, Seri Monitör bozuk karakter gösterebilir | D0 ve D1 USB seri hattıdır; D2'den başla |
| Arduino Nano | A6 ve A7'yi dijital pin olarak kullanmak | digitalRead() ve digitalWrite() çalışmaz | A6 ve A7 yalnızca analog giriştir |
| ESP32 | GPIO 6–11'i kullanmak | Kart çöker ya da sürekli yeniden başlar | Bu pinler flaş belleğe bağlıdır; GPIO 4, 5, 16–19, 21–23 gibi güvenli pinleri seç |
| ESP32 | GPIO 34–39'u çıkış yapmak | LED yanmaz; buton dahili pull-up olmadan kararsız okunur | Bu pinler yalnızca giriştir ve dahili pull-up dirençleri yoktur |
| ESP32 | Wi-Fi açıkken ADC2 pinlerinden analog okumak | analogRead() okuma yapamaz ya da anlamsız değer döndürür | Analog sensörü ADC1 pinlerine (GPIO 32–39) bağla |
| Raspberry Pi Pico W | Dahili LED için Pin(25) | LED yanmaz | Pico W'da LED kablosuz yongaya bağlıdır; Pin("LED") kullan |
Sık hata 3: delay() kilitlenmesi
İnternetteki Arduino örneklerinin çoğu delay() ile yazıldığı için yapay zeka da varsayılan olarak delay() kullanır. delay(1000) çalışırken işlemci bir saniye boyunca başka hiçbir şey yapmaz: butonları okumaz, sensörlere bakmaz, ekranı güncellemez. Tek iş yapan bir kodda bu sorun değildir. Ama "LED yanıp sönsün, butona basınca da buzzer ötsün" gibi iki işi birlikte isteyince çoğu zaman aşağıdaki gibi bir kod çıkar:
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}Bu kod hatasız derlenir, ama butona bastığında çoğu zaman hiçbir şey olmaz. loop() turunun yaklaşık 2 saniyesi iki delay() içinde geçer ve buton yalnızca bu beklemelerin arasındaki birkaç mikrosaniyelik anda okunur. Kısa bir basış neredeyse her zaman bu anı kaçırır; buzzer'ın kesin ötmesi için butonu 2 saniyeden uzun basılı tutman gerekir. Çözüm beklemek değil, saati kontrol etmektir: millis() kartın açılışından beri geçen milisaniyeyi verir, her iş kendi zamanının gelip gelmediğine bakar ve loop() saniyede binlerce kez döner:
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}Bu sürümde LED, buton ve buzzer birbirini beklemeden çalışır. simdi - ledZaman >= LED_ARALIK biçimindeki çıkarma, millis() yaklaşık 49,7 günde bir sıfıra döndüğünde bile doğru sonuç verir; yapay zekanın bazen yazdığı millis() > hedefZaman karşılaştırması ise bu taşmada bozulur. Butonun HIGH'tan LOW'a geçtiği anı yakalamak, buton basılı tutulduğunda buzzer'ın tekrar tekrar ötmesini önler; 30 ms'lik bekleme de kontak sıçramasını (debounce) süzer. Konunun tamamı için Arduino millis() ve delay() rehberine, buton bağlantısı için Arduino'ya buton nasıl bağlanır? yazısına bakabilirsin.
Derleme hatasını yapıştırıp düzelttirmek
Yapay zeka derleme hatalarını açıklamakta gerçekten iyidir; yeter ki ona hatanın tamamını ve bağlamını ver. Yalnızca "kod çalışmıyor" yazmak, modeli tahmin yürütmeye zorlar. Şu sırayı izle:
- Arduino IDE 2'de derleme hatası çıktığında sağ altta beliren bildirimdeki Hata mesajlarını kopyala düğmesine bas ya da çıktı panelindeki metnin tamamını seçip kopyala. Son satırdaki exit status 1 tek başına işe yaramaz; asıl sebep yukarıdaki error: satırındadır.
- İsteminde sırasıyla şunlar olsun: kart ve çekirdek sürümü, kodun tamamı, hata mesajının tamamı, kurulu kütüphanelerin adları ve sürümleri.
- Düzeltme istemeden önce "Önce hatanın sebebini açıkla, sonra yalnızca değişmesi gereken satırları göster" diye yaz. Böylece model bütün kodu baştan yazıp yeni hatalar eklemez, sen de neyin neden değiştiğini öğrenirsin.
- Önerilen değişikliği uygula ve yeniden derle. Yeni bir hata çıkarsa yine en üstteki error: satırını yapıştır; her seferinde tek bir hatayı çöz.
- Aynı hata iki üç turdan sonra hâlâ düzelmiyorsa döngüyü kır ve kütüphanenin resmi örneğini derle. Örnek de derlenmiyorsa sorun kodda değil kurulumdadır: yanlış kart seçimi, eksik kütüphane ya da aynı adlı iki kütüphanenin çakışması.
Hata derlemede değil yükleme aşamasındaysa ("avrdude: stk500_recv(): programmer is not responding" ya da ESP32'de "Failed to connect to ESP32" gibi), kodu değiştirmenin faydası olmaz; port, kablo, sürücü ve kart seçimine bakman gerekir. Bu durumlar için Arduino kod yüklenmiyor yazısı adım adım çözüm sunuyor. Yapay zekaya yükleme hatasını sorarken de mesajın tamamını ve kullandığın işletim sistemini yaz.
Raspberry Pi Pico ve MicroPython kodu yazdırırken
MicroPython kodu isterken de aynı kurallar geçerlidir, ama burada yapay zeka bir de platformları karıştırabilir. Raspberry Pi bilgisayarlar için yazılmış RPi.GPIO ya da gpiozero kodları Pico'da çalışmaz; Pico'da MicroPython'un machine modülü kullanılır. CircuitPython'a ait board ve digitalio modülleri de MicroPython'da yoktur. Bu yüzden istemine "Raspberry Pi Pico W, MicroPython, Thonny" gibi net bir bilgi yaz. Aşağıdaki kod hem Pico'da hem Pico W'da çalışır ve beklemek yerine ticks_ms() ile zamanlar:
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)Kod Thonny ile çalıştırıldığında dahili LED yarım saniyede bir yanıp söner ve butona her basışta Shell penceresine artan bir sayı yazılır. time.ticks_diff() zaman sayacı başa döndüğünde bile doğru farkı verir; yapay zekanın sık yazdığı düz time.ticks_ms() - son çıkarması ise uzun süre çalışan bir kodda yanlış sonuç verebilir. Pico'ya yeni başlıyorsan Raspberry Pi Pico nedir? yazısından başlayabilirsin.
220 V ile çalışırken yapay zekaya güvenme
Şebekeyle çalışacak bir proje yapıyorsan önce düşük gerilimde dene: lamba yerine bir LED, priz yerine 12 V'luk bir LED şerit kullan. Sistem gerçekten 220 V'u anahtarlamak zorundaysa bazı kurallar pazarlık konusu değildir. Devre üzerinde çalışırken fişi çek. Röle nötrü değil fazı (L) kessin. Röle modülünün üzerinde yazan akım ve gerilim sınırını (çoğu modülde 10 A 250 VAC) aşma ve yüksek gerilim tarafını kapalı, yalıtkan bir kutuya al. Ucuz röle modüllerinde düşük ve yüksek gerilim tarafları arasındaki mesafe çoğu zaman yetersizdir; mümkünse hazır ve sertifikalı akıllı priz ya da röle kutularını tercih et. Röle modülünün bağlantısını Röle modülü nedir? yazısında ayrıntılı bulabilirsin.
Öğrenmeyi bırakmadan yapay zekayı kullanmak
Yapay zeka her kodu senin yerine yazarsa, kod çalışmadığı ilk gün ne yapacağını bilemezsin. Amacın elektronik ve programlama öğrenmekse onu bir kod makinesi gibi değil, sabırlı bir öğretmen gibi kullan:
- Önce kendin yaz: Kodu kendin dene, sonra yapay zekadan "hataları göster ama düzeltilmiş kodu verme" diyerek incelemesini iste.
- Cevap değil ipucu iste: Takıldığında "bana yalnızca bir sonraki adım için ipucu ver" de.
- Satır satır açıklat: Gelen kodu açıklattıktan sonra aynı mantığı kendi cümlelerinle anlatmayı dene; anlatamadığın yer, henüz öğrenmediğin yerdir.
- Kopyalamak yerine yaz: Kodu yapıştırmak yerine elle yazmak, söz dizimini ve fonksiyon adlarını çok daha hızlı öğretir.
- Tahmin et, sonra dene: Bir değeri değiştirmeden önce ne olacağını tahmin et (ör. LED_ARALIK 200 olursa), sonra karta yükleyip kontrol et.
- Kendini sınat: Yapay zekadan öğrendiğin konu hakkında sana beş soru sormasını iste; temelleri tazelemek için Arduino programlama temelleri yazısını kullan.
- Kurallara uy: Okul ödevlerinde ve TÜBİTAK gibi yarışmalarda yapay zeka kullanımıyla ilgili kurallara uy ve kullandıysan bunu açıkça belirt.
Yapay zekayla deneyebileceğin ilk projeler
- Sıcaklık göstergesi: DHT11 ile ölçülen değerleri I2C LCD ekrana yazdır; isteminde LCD adresini ve kütüphanenin yazarını belirt.
- Park sensörü: HC-SR04 ile mesafeyi ölç ve engel yaklaştıkça buzzer'ı hızlandır; zamanlamayı millis() ile yapmasını iste.
- Gece lambası: LDR ile ortam karardığında LED'i yak; eşik değerini önce Seri Monitör'den okuyup isteminde sayı olarak ver.
- Wi-Fi ile LED kontrolü: ESP32 ile telefondan açılan bir sayfadan LED'i yak ve söndür; isteminde çekirdek sürümünü belirt.
- Kendi fikrin: Arduino proje fikirleri listesinden bir proje seç ve bu rehberdeki istem şablonuyla yapay zekaya anlat.
Yapay zeka, Arduino öğrenirken elinin altındaki en hızlı yardımcı olabilir; yeter ki ona doğru bilgiyi ver, gelen kodu derle, pinleri kontrol et, parça parça test et ve anlamadığın hiçbir satırı karta yükleme. Yapay zekanın yazdığı kodu karşılaştırabileceğin güvenilir örnekler arıyorsan, BlueGrays uygulamasında LED, buton, DHT11, ESP32 PWM ve Pico projelerini adım adım devre şemaları ve test edilmiş kodlarıyla bulabilirsin.
Sıkça sorulan sorular
Yapay zeka ile Arduino kodu yazılır mı?
Evet. ChatGPT, Gemini, Claude ve Copilot gibi asistanlar Arduino, ESP32 ve Raspberry Pi Pico için basit projelerin çoğunda çalışan kod üretebilir. Ancak kodu karta yüklemeden önce derleyip pinleri, kütüphaneleri ve gerilim seviyelerini kendin kontrol etmelisin; yapay zeka devreni göremez ve yanılabilir.
Arduino kodu yazmak için en iyi yapay zeka hangisi?
Tek bir doğru cevap yok; güncel büyük modeller basit Arduino kodlarında birbirine yakın sonuç verir. Fark çoğu zaman modelden değil istemden gelir: kartı, pin bağlantılarını, kütüphaneleri ve beklenen davranışı net yazan bir istem, hangi asistanı kullanırsan kullan daha iyi kod getirir.
ChatGPT'nin yazdığı Arduino kodu neden çalışmıyor?
En sık sebepler var olmayan ya da başka bir karta ait fonksiyonlar, kütüphanenin farklı bir sürümüne göre yazılmış kod, yanlış pin seçimi ve her şeyi bekleten delay() kullanımıdır. Önce kodu derle; hata varsa mesajın tamamını kart ve sürüm bilgisiyle birlikte yapıştır. Kod derleniyor ama çalışmıyorsa Seri Monitör'e ara değerler yazdırarak sorunun yerini bul.
Arduino derleme hatası yapay zekaya nasıl sorulur?
Kart adını, çekirdek ve kütüphane sürümlerini, kodun tamamını ve çıktı panelindeki hata mesajının tamamını tek mesajda ver. "Önce sebebini açıkla, sonra yalnızca değişecek satırları göster" diye eklersen hem doğru düzeltmeyi alırsın hem de hatanın nedenini öğrenirsin.
Yapay zekanın verdiği 220 V röle bağlantısına güvenilir mi?
Hayır, tek başına güvenilmez. Kod çoğu zaman sorunsuzdur ama tehlike bağlantıdadır; yapay zeka devreni göremez ve tarifinin doğruluğunu garanti edemez. 220 V tarafını yalnızca bilgili biriyle, fiş çekiliyken, fazı kesen ve kapalı kutuda duran bir röle düzeneğiyle kur; mümkünse hazır ve sertifikalı bir akıllı priz kullan.
Yapay zeka kullanmak Arduino öğrenmeye zarar verir mi?
Kodu anlamadan kopyalarsan evet; ilk hatada ne yapacağını bilemezsin. Önce kendin yazıp yapay zekaya incelettiğinde, satır satır açıklattığında ve cevap yerine ipucu istediğinde ise öğrenmeyi hızlandırır. Kural basit: açıklayamadığın bir satırı karta yükleme.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Led Yakma
Elektroniğin ilk merhabası: tek bir LED'i yakıp söndürmek. Arduino LED'i çok kısa aralıklarla yakıp söndürür, ışık hızlı hızlı göz kırpar. Kartın bir ışığı nasıl yönettiğini en sade haliyle görür, son

Buton İle Led Yakma (Push)
Kapı zili gibi: bastığın sürece ışık yanar, bırakınca söner. Arduino butonu sürekli dinler; butona basılıyken LED'i yakar, elini çektiğin an söndürür. Kartın dışarıdan gelen bir dokunuşu nasıl hissett

DHT11 İle Sıcaklık Ve Nem
Odan kaç derece, hava nemli mi, kuru mu? DHT11 sensörü sıcaklığı ve nemi ölçer, Arduino da bu değerleri iki satırlık LCD ekrana yazar ve birkaç saniyede bir yeniler. Sensöre bir şey olursa ekranda hat

ESP32 ile LED Yakma
ESP32 ile temel GPIO çıkışı kullanımını öğretir. Bir LED'i dijital pinden açıp kapatarak yanıp sönme efekti elde ederiz. Arduino UNO'daki klasik blink projesinin ESP32 versiyonu; Arduino ortamındaki temel blink komutları aynıdır, ancak ESP32'nin pin yerleşimi ve 3,3 V GPIO seviyeleri Arduino UNO'dan farklıdır.

Raspberry Pi Pico Dahili LED Yakma (Pico ve Pico W)
Raspberry Pi Pico serisinin açılış projesi! Pico'nun üzerindeki yeşil dahili LED'i yakıp söndürerek kartın çalıştığını doğruluyoruz — klasik "Hello World" tarzı ilk deney. Harici bileşene ihtiyaç YOK, sadece Pico ve USB kablosu yeterli. Kod MicroPython ile yazıldı (Raspberry Pi Vakfı'nın resmi olarak desteklediği dil). Thonny IDE ile Pico'yu programlarken machine.Pin sınıfı, Pin.OUT mode, led.on()/off() metodları ve time.sleep() fonksiyonlarını kavrarsın. Seri

ESP32 PWM ile LED Soldurma (Fade)
LED'in parlaklığını yumuşak şekilde 0'dan max'a, max'tan 0'a değiştirme. Arduino'daki gibi analogWrite() ile PWM kontrolü yapıyoruz — ESP32 Arduino Core 3.0+ ile aynı syntax sorunsuz çalışır. Pin tanımı + pinMode + analogWrite yeterli.

Raspberry Pi Pico PWM ile LED Fade (Nefes Efekti)
LED artık sadece yanıp sönmüyor — nefes alıyor! Raspberry Pi Pico'nun PWM (Pulse Width Modulation — darbe genişlik modülasyonu) özelliğiyle LED'in parlaklığı yavaş yavaş artar, sonra yavaş yavaş azalır. Uyku modundaki MacBook ışığı gibi sakin bir "nefes" efekti. Öğrenme: machine.PWM sınıfı (pini PWM çıkışına çevirme), duty_u16() (0–65535 arası 16-bit parlaklık değeri), PWM frekansı (freq(1000) — saniyede 1000 kez aç-kapa, göz titremeyi görmez), range() ile adım adım döngü

I2C İle LCD Ekran Kullanımı
Arduino'ya kendi ekranını kazandır ve ilk mesajını yazdır. İki satırlık LCD ekran yalnızca birkaç kabloyla bağlanır; önce üst satıra bir selam, ardından alt satıra ikinci bir yazı gelir, ekran temizle
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

