Rehberler · 11 dk okuma

Arduino Uno R4 Minima ve WiFi: R3 Farkları ve İlk Proje

Arduino Uno R4 Minima ve WiFi nedir, R3'ten farkı ne? 32 bit RA4M1, 12 bit DAC, 8 mA pin sınırı, eski kod uyumu ve LED matris ile Wi-Fi'li ilk proje rehberi.

Arduino Uno R4, dünyanın en çok kullanılan geliştirme kartı Uno'nun dördüncü sürümüdür ve Uno ailesinde ilk kez 8 bitlik AVR yerine 32 bitlik bir işlemci kullanır. Kartın iki modeli vardır: sade ve daha ucuz Uno R4 Minima ile Wi-Fi, Bluetooth ve 12x8 LED matrisli Uno R4 WiFi. İkisi de R3 ile aynı boyutta, aynı pin diziliminde ve aynı 5 V gerilimde çalışır; yani shield'lerin ve devrelerinin çoğu olduğu gibi takılır. Buna karşılık program belleği 8 kat, işlemci hızı 3 kat artmış; gerçek analog çıkış (DAC), CAN hattı, dahili saat (RTC) ve USB klavye-fare desteği eklenmiştir.

Bu rehberde R4'ün R3'ten tam olarak hangi noktalarda ayrıldığını, Minima ile WiFi arasında nasıl seçim yapacağını, eski kodların ve kütüphanelerin hangilerinin sorunsuz çalıştığını, hangilerinin derlenmediğini ve neden pin başına 8 mA sınırına dikkat etmen gerektiğini öğreneceksin. Sonunda da R4 WiFi'nin LED matrisini ve Wi-Fi'sini birlikte kullanan, telefondan kontrol edilen ilk projeni kuracağız.

Arduino Uno geliştirme kartı
Uno ailesinin kart boyutu ve pin dizilimi R4'te de korunur; R4 Minima ve R4 WiFi, R3 için yapılmış shield'leri aynı başlıklardan kabul eder.

Arduino Uno R4 nedir? Minima ve WiFi modelleri

İki modelin kalbinde de Renesas firmasının RA4M1 (R7FA4M1AB3CFM) mikrodenetleyicisi bulunur: 48 MHz'te çalışan, kayan nokta birimi (FPU) olan bir Arm Cortex-M4 çekirdek. Bu yonga, 32 bitlik kartların çoğunun aksine 5 V ile çalışır; Arduino'nun R4 için RA4M1'i seçmesinin en önemli nedeni de budur. Minima yalnızca bu yongayı taşır. WiFi modelinde ise ek olarak bir ESP32-S3-MINI-1 modülü vardır: hem Wi-Fi ve Bluetooth'u sağlar hem de bilgisayarla USB üzerinden konuşan köprü görevini üstlenir. ESP32-S3 3,3 V ile çalıştığı için iki yonganın arasına bir seviye dönüştürücü yerleştirilmiştir.

ÖzellikUno R4 MinimaUno R4 WiFi
Ana işlemciRA4M1, 32 bit, 48 MHzRA4M1, 32 bit, 48 MHz
Wi-Fi ve BluetoothYokESP32-S3: Wi-Fi 4 (2,4 GHz) ve Bluetooth 5 LE
LED matrisYok12x8, 96 kırmızı LED
Qwiic konnektörüYokVar (Wire1, yalnızca 3,3 V)
USB bağlantısıRA4M1'in kendi USB'siESP32-S3 üzerinden köprü
CAN pinleriD4 (TX), D5 (RX)D10 (TX), D13 (RX)
Hata ayıklama başlığıSWD konnektörüESP32-S3 başlığı (3,3 V)
Ek pinlerYokOFF (kartı kapatma) ve VRTC (saat pili)
3,3 V piniRA4M1'in dahili USB regülatöründen, düşük akımAyrı 3,3 V regülatör

Uno R3 ile Uno R4 arasındaki farklar

ÖzellikUno R3Uno R4 (Minima ve WiFi)
İşlemciATmega328P, 8 bit, 16 MHzRA4M1 Cortex-M4, 32 bit, 48 MHz, FPU
Flash (program belleği)32 KB256 KB
SRAM2 KB32 KB
EEPROM1 KB8 KB (veri flaşı)
Çalışma gerilimi5 V5 V
Pin başına akım20 mA önerilen, 40 mA mutlak sınır8 mA
Analog giriş (ADC)6 kanal, 10 bit6 kanal, 14 bite kadar (varsayılan 10 bit)
Analog çıkış (DAC)Yok1 kanal, 12 bit (A0)
Op-ampYokDahili (A1, A2, A3)
CAN hattıYokVar (harici alıcı-verici gerekir)
Gerçek zaman saati (RTC)YokDahili
USBUSB-B, ATmega16U2 köprüUSB-C, klavye ve fare (HID) desteği
VIN giriş gerilimi7–12 V önerilen6–24 V
Seri portSerial: USB ve D0/D1 ortakSerial: USB, Serial1: D0/D1

Tablodaki en önemli satırlar bellek ve hızdır. R3'teki 2 KB'lık SRAM, birkaç String değişkeni ve bir ekran tamponuyla dolar; OLED ekran, uzun diziler ya da JSON işleyen projelerde kart rastgele donmaya ya da yeniden başlamaya başlar. R4'teki 32 KB bu sorunu neredeyse ortadan kaldırır. FPU sayesinde float işlemleri (sensör kalibrasyonu, PID, trigonometri) donanımda yapılır ve R3'e göre kat kat hızlanır. Besleme tarafında da büyük bir değişiklik var: R3'teki doğrusal regülatör 12 V'ta ısınırken R4'te anahtarlamalı bir buck dönüştürücü kullanılır; bu yüzden kart 24 V'a kadar giriş kabul eder ve çok daha az ısınır.

R4 ile gelen yeni donanımlar

  • 12 bit DAC (A0): PWM'in aksine gerçek bir analog gerilim üretir; ses, sinüs dalgası ve basit sinyal üreteci için kullanılır. Kart paketindeki analogWave kütüphanesi sinüs, kare ve testere dişi dalgayı tek satırla üretir.
  • 14 bit ADC: analogReadResolution(14) ile 0–16383 arası okursun; 5 V referansta bir adım yaklaşık 0,3 mV'tur, R3'te ise 4,9 mV'tur. Eski kodlar bozulmasın diye varsayılan çözünürlük yine 10 bittir.
  • Dahili op-amp: A1 (+), A2 (–) ve A3 (çıkış) pinlerinde; küçük sensör sinyallerini ek entegre kullanmadan yükseltebilirsin. Temel bilgiler için Op-amp Nedir? yazısına bak.
  • CAN hattı: Otomobillerde ve endüstride kullanılan dayanıklı haberleşme hattıdır; SN65HVD230 ya da TJA1050 gibi bir alıcı-verici modülü ve kart paketindeki Arduino_CAN kütüphanesiyle kullanılır.
  • RTC: Ek modül olmadan tarih ve saat tutar (RTC.h kütüphanesi). R4 WiFi'de VRTC pinine 1,6–3,6 V arası bir pil bağlarsan saat, kartın beslemesi kesildiğinde de çalışmaya devam eder.
  • USB HID: Kart bilgisayara klavye ya da fare olarak tanıtılabilir; eskiden bunun için Leonardo gerekirdi (Arduino Leonardo ile USB klavye).
  • Kapasitif dokunma: Bazı pinler, Arduino_CapacitiveTouch kütüphanesiyle ek modül olmadan dokunmatik düğme gibi çalışabilir.

Bu özelliklerden ikisini hemen deneyebilirsin. Aşağıdaki kod DAC'tan sırayla artan gerilimler üretir ve aynı gerilimi 14 bitlik ADC ile geri okur. A0 ile A1 pinlerini bir jumper kabloyla birleştirmen yeterli; Seri Monitör'ü 115200 baud hızında aç:

C++ (Arduino IDE)
1// A0 (DAC) ile A1'i bir jumper kabloyla bağla / connect A0 (DAC) to A1 with a jumper wire
2
3void setup() {
4  Serial.begin(115200);
5  while (!Serial) {}            // USB seri port açılana kadar bekle / wait for the USB serial port
6  analogWriteResolution(12);    // DAC: 0–4095
7  analogReadResolution(14);     // ADC: 0–16383
8}
9
10void loop() {
11  for (int value = 0; value < 4096; value += 512) {
12    analogWrite(DAC, value);              // A0'dan gerçek analog gerilim / true analog voltage on A0
13    delay(10);
14    int raw = analogRead(A1);             // 14 bit okuma / 14-bit reading
15    float volts = raw * 5.0 / 16383.0;    // 5 V referans / 5 V reference
16    Serial.print("DAC: ");
17    Serial.print(value);
18    Serial.print("  ADC: ");
19    Serial.print(raw);
20    Serial.print("  V: ");
21    Serial.println(volts, 3);
22    delay(500);
23  }
24}

Çıktıda DAC değeri her 512 arttığında okunan değerin yaklaşık 2048 arttığını görürsün: 12 bitlik çıkışın bir adımı, 14 bitlik girişte 4 adıma karşılık gelir. Hesapta 5,0 V kullandık; ama kart USB'den beslendiğinde koruma diyodu yüzünden 5 V hattı yaklaşık 4,7 V'a düşer. Hassas ölçüm istiyorsan 5V pinini multimetreyle ölç ve formüldeki 5.0 yerine bu değeri yaz. Koddaki while (!Serial) satırı, Seri Monitör açılmadan gönderilen ilk satırların kaybolmasını önler; kart bilgisayara bağlı olmadan çalışacaksa bu satırı sil, yoksa program orada bekler. Analog okumanın temellerini ADC ve analog-dijital dönüşüm yazısında bulabilirsin.

Pin akım sınırı: R4'te neden 8 mA?

R4'e geçenlerin en çok gözden kaçırdığı fark budur. R3'ün ATmega328P'si pin başına 20 mA'i rahatça verir (mutlak sınır 40 mA); bu yüzden internetteki örneklerin çoğu LED'i 220 Ω dirençle doğrudan pine bağlar. Arduino ise R4 için pin başına en fazla 8 mA çekilmesini söyler. Ohm kanunuyla hesaplayalım: 5 V'luk pinden kırmızı bir LED (yaklaşık 2 V) sürerken 220 Ω dirençte akım (5 − 2) / 220 ≈ 13,6 mA olur; bu, R4'ün sınırının neredeyse iki katıdır. LED büyük ihtimalle yanar ama pin zamanla zarar görebilir ve bu hasar çoğu zaman fark edilmeden birikir.

LED için akım sınırlama direnci
R4'te LED direncini büyütmek pinleri korur: 470 Ω ile akım yaklaşık 6,4 mA'e iner ve 8 mA sınırının altında kalır.
LED direnciAkım (kırmızı LED, 5 V)Uno R3Uno R4
220 Ω≈ 13,6 mAUygunSınırın üstünde
330 Ω≈ 9,1 mAUygunSınırın biraz üstünde
470 Ω≈ 6,4 mAUygunUygun
1 kΩ≈ 3 mAUygunUygun, LED hâlâ net görünür
R4'te LED'ler için en az 470 Ω kullan; doğru değeri LED direnci hesaplayıcı ile bulabilirsin. Röle bobini, motor, buzzer ya da çok sayıda LED gibi daha fazla akım isteyen yükleri asla doğrudan pine bağlama; araya bir transistör ya da MOSFET koy (MOSFET kullanımı). Servo motorları da kartın 5V pininden değil ayrı bir kaynaktan besle.

Eski kodlar ve kütüphaneler R4'te çalışır mı?

Kısa cevap: çoğu evet. digitalWrite, analogRead, millis, Serial, Wire (I2C), SPI, EEPROM, Servo ve tone gibi standart Arduino komutlarıyla yazılmış kodlar R4'te değişiklik yapmadan derlenir. Sorun, doğrudan ATmega328P'nin donanımına erişen kodlarda çıkar: PORTB, DDRD gibi kayıtlarla yapılan hızlı pin işlemleri, Timer1 ayarları, avr/ ile başlayan başlık dosyaları ve bunları kullanan kütüphaneler R4'te derlenmez. Örneğin PORTB kullanan bir kod 'PORTB' was not declared in this scope hatası verir.

Kütüphane ya da kodR4'te durumNot
Servo, Wire, SPI, EEPROM, SoftwareSerialÇalışırR4 desteği resmi olarak vardır
Adafruit NeoPixel, FastLEDÇalışırGüncel sürümleri kur
DHT sensor libraryÇalışırAdafruit kütüphanesi
IRremoteKısmen çalışır4.x sürümleri R4'te IR alıcıyı okur; kütüphane belgesine göre R4 WiFi'de gönderme çalışmıyor
LiquidCrystal I2C, MFRC522Çalışır, uyarı verirMimari uyarısı zararsızdır
TimerOneDerlenmezYerine kart paketindeki FspTimer sınıfı
PORTB, DDRD, PIND kayıtlarıDerlenmezdigitalWrite ve digitalRead kullan
serialEvent()Çağrılmazloop içinde Serial.available() kontrol et

Kütüphane derlenirken WARNING: library LiquidCrystal I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on renesas_uno architecture(s). gibi bir uyarı görebilirsin. Bu bir hata değildir; kütüphanenin yazarı desteklenen mimariler listesine yalnızca AVR'yi yazmıştır. Kod yükleniyor ve çalışıyorsa sorun yok. Gerçek bir hata alırsan önce kütüphanenin güncel sürümünü kur (Arduino'ya kütüphane ekleme), yine olmazsa R4 desteği olan bir alternatif ara.

Dikkat edilmesi gereken bir fark daha var: R3'te tek bir seri port vardır ve hem USB'ye hem de D0/D1 pinlerine bağlıdır. R4'te ise Serial yalnızca USB'dir; D0 ve D1 pinleri Serial1 adıyla ayrı çalışır. HC-05 Bluetooth ya da GPS gibi bir modülü D0/D1'e bağlayıp Serial ile okuyan eski bir kod R4'te hiçbir veri almaz. Aşağıdaki köprü kodu modülden gelen veriyi Seri Monitör'e, Seri Monitör'e yazdıklarını da modüle aktarır:

C++ (Arduino IDE)
1// R4'te Serial = USB, Serial1 = D0 (RX) ve D1 (TX) / on the R4, Serial = USB, Serial1 = D0 (RX) and D1 (TX)
2
3void setup() {
4  Serial.begin(115200);   // bilgisayar (Seri Monitör) / computer (Serial Monitor)
5  Serial1.begin(9600);    // D0/D1'e bağlı modül, örn. HC-05 / module on D0/D1, e.g. HC-05
6}
7
8void loop() {
9  if (Serial1.available()) {
10    Serial.write(Serial1.read());   // modülden bilgisayara / module to computer
11  }
12  if (Serial.available()) {
13    Serial1.write(Serial.read());   // bilgisayardan modüle / computer to module
14  }
15}
İşin iyi tarafı şu: R4'te modül D0/D1'e bağlıyken de kod yükleyebilir ve Seri Monitör'ü kullanabilirsin; R3'teki "modülü çıkar, kodu yükle, tekrar tak" derdi kalmaz. Bu kod R3'te derlenmez, çünkü Uno R3'te Serial1 yoktur. Modül bağlantısının ayrıntıları için HC-05 Bluetooth modülü yazısına bakabilirsin.

Arduino IDE'ye Uno R4 kurulumu

  1. Arduino IDE 2'yi kur ya da güncelle (Arduino IDE kurulumu).
  2. Soldaki Kart Yöneticisi'ni aç, UNO R4 yaz ve Arduino UNO R4 Boards paketini kur. Bu resmî bir paket olduğu için ek bir URL eklemen gerekmez.
  3. Kartı veri taşıyan bir USB-C kablosuyla bağla ve Araçlar > Kart menüsünden Arduino UNO R4 Minima ya da Arduino UNO R4 WiFi seç.
  4. Araçlar > Port menüsünden kartın portunu seç, Dosya > Örnekler > 01.Basics > Blink örneğini aç ve yükle. D13'e bağlı dahili LED yanıp sönmeye başlar.
  5. Port görünmüyorsa ya da yükleme yarıda kalıyorsa RESET düğmesine hızlıca iki kez bas: kart önyükleyici (bootloader) moduna geçer ve port yeniden belirir. Yükleme sorunlarının tamamı için Arduino kod yüklenmiyor rehberine bak.

Uno R4 WiFi: ESP32-S3 ve 12x8 LED matris

R4 WiFi'deki ESP32-S3, varsayılan olarak Arduino'nun yüklediği bir ara yazılımla çalışır ve RA4M1'den gelen komutları Wi-Fi ve Bluetooth işlemlerine çevirir. Sen kodu yine RA4M1 için yazarsın: Wi-Fi için kart paketiyle gelen WiFiS3, Bluetooth için ArduinoBLE kütüphanesini kullanırsın. İki önemli sınır var: modül yalnızca 2,4 GHz ağlara bağlanır ve anteni ortak kullandığı için Wi-Fi ile Bluetooth'u aynı anda çalıştıramazsın. Bazı yeni özellikler ESP32-S3 yazılımının güncel olmasını ister; IDE'deki Araçlar > Firmware Updater menüsüyle bu yazılımı güncelleyebilirsin.

Kartın ön yüzündeki matris, 8 satır ve 12 sütundan oluşan 96 kırmızı LED'dir. Kutudan ilk çıktığında üzerinde Tetris animasyonu oynar. LED'ler charlieplexing denen yöntemle RA4M1'in 11 iç pinine bağlıdır; bu pinler başlıklara çıkmaz, yani matrisi kullanmak D0–D13 ya da A0–A5 pinlerinden hiçbirini harcamaz. Kart paketindeki Arduino_LED_Matrix kütüphanesi bir kareyi (frame) iki biçimde kabul eder: 8x12'lik bir bayt dizisi ya da üç tane 32 bitlik sayı. Dizi yöntemi daha okunaklıdır, çünkü 1'lerin oluşturduğu şekli kodun içinde görürsün:

C++ (Arduino IDE)
1#include "Arduino_LED_Matrix.h"   // kart paketiyle gelir / ships with the board package
2
3ArduinoLEDMatrix matrix;
4
5// 8 satır x 12 sütun: 1 = LED yanar / 8 rows x 12 columns: 1 = LED on
6uint8_t kalp[8][12] = {
7  { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
8  { 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
9  { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
10  { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
11  { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 },
12  { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 },
13  { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
14  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
15};
16
17void setup() {
18  matrix.begin();
19}
20
21void loop() {
22  matrix.renderBitmap(kalp, 8, 12);          // kendi çizimin / your own drawing
23  delay(1000);
24  matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY);   // kütüphanedeki hazır kare / ready-made frame from the library
25  delay(1000);
26  kalp[7][11] = 1;                           // tek bir LED'i yak: satır 7, sütun 11 / turn on one LED: row 7, column 11
27}

renderBitmap() kendi çizdiğin diziyi gösterir, loadFrame() ise kütüphanedeki hazır kareleri yükler: LEDMATRIX_HEART_BIG, LEDMATRIX_EMOJI_HAPPY, LEDMATRIX_EMOJI_SAD ve LEDMATRIX_DANGER bunlardan birkaçıdır. loadSequence() ve play() ile LEDMATRIX_ANIMATION_TETRIS ya da LEDMATRIX_ANIMATION_WIFI_SEARCH gibi hazır animasyonları oynatabilirsin. Matrise yazı yazmak ve kaydırmak için Kütüphane Yöneticisi'nden ArduinoGraphics kütüphanesini kurman gerekir. Daha büyük bir ekran istersen MAX7219 LED matris ve WS2812B NeoPixel yazılarına göz at.

İlk proje: LED matrisi telefondan kontrol etmek

Şimdi iki özelliği birleştirelim. Kart ev ağına bağlanırken matriste Wi-Fi arama animasyonu oynar, bağlanınca IP adresini kayan yazıyla gösterir. Bu adresi aynı ağa bağlı telefonunun tarayıcısında açtığında karşına çıkan düğmelerle matriste kalp, mutlu ya da üzgün yüz gösterebilir, IP adresini yeniden kaydırabilir ya da matrisi kapatabilirsin. Bunun için kart dışında hiçbir malzeme gerekmez.

  1. Kütüphane Yöneticisi'nden ArduinoGraphics kütüphanesini kur; WiFiS3 ve Arduino_LED_Matrix kart paketiyle gelir.
  2. Koddaki ağ adını ve şifreyi kendi bilgilerinle değiştir; büyük-küçük harfe dikkat et.
  3. Kart olarak Arduino UNO R4 WiFi seç, kodu yükle ve Seri Monitör'ü 115200 baud hızında aç.
  4. Matriste kayan ya da Seri Monitör'de yazan IP adresini telefonunun tarayıcısına yaz.
  5. Sayfadaki düğmelere bas; matris anında değişir.
C++ (Arduino IDE)
1#include "ArduinoGraphics.h"      // Arduino_LED_Matrix'ten ÖNCE eklenmeli / must come BEFORE Arduino_LED_Matrix
2#include "Arduino_LED_Matrix.h"
3#include "WiFiS3.h"
4
5char ssid[] = "AgAdi";            // Wi-Fi adın / your Wi-Fi name
6char pass[] = "Sifre123";         // Wi-Fi şifren / your Wi-Fi password
7
8ArduinoLEDMatrix matrix;
9WiFiServer server(80);
10
11void scrollText(String text) {
12  matrix.beginDraw();
13  matrix.stroke(0xFFFFFFFF);
14  matrix.textScrollSpeed(60);             // her adım 60 ms / 60 ms per step
15  matrix.textFont(Font_5x7);
16  matrix.beginText(0, 1, 0xFFFFFF);
17  matrix.print("   " + text + "   ");
18  matrix.endText(SCROLL_LEFT);            // yazıyı sola kaydır / scroll the text to the left
19  matrix.endDraw();
20}
21
22void sendPage(WiFiClient &client) {
23  client.println("HTTP/1.1 200 OK");
24  client.println("Content-Type: text/html; charset=utf-8");
25  client.println("Connection: close");
26  client.println();
27  client.println("<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width'></head><body>");
28  client.println("<h2>UNO R4 WiFi</h2>");
29  client.println("<p><a href='/kalp'><button>Kalp / Heart</button></a></p>");
30  client.println("<p><a href='/mutlu'><button>Mutlu / Happy</button></a></p>");
31  client.println("<p><a href='/uzgun'><button>Uzgun / Sad</button></a></p>");
32  client.println("<p><a href='/ip'><button>IP</button></a></p>");
33  client.println("<p><a href='/kapat'><button>Kapat / Off</button></a></p>");
34  client.println("</body></html>");
35}
36
37void setup() {
38  Serial.begin(115200);
39  matrix.begin();
40
41  if (WiFi.status() == WL_NO_MODULE) {               // ESP32-S3 yanıt vermiyor / ESP32-S3 not responding
42    Serial.println("WiFi modulu bulunamadi / WiFi module not found");
43    matrix.loadFrame(LEDMATRIX_DANGER);
44    while (true) {}
45  }
46
47  matrix.loadSequence(LEDMATRIX_ANIMATION_WIFI_SEARCH);   // bağlanırken animasyon / animation while connecting
48  matrix.play(true);
49
50  while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
51    Serial.println("Baglaniyor / connecting...");
52    delay(5000);
53  }
54  while (WiFi.localIP() == IPAddress(0, 0, 0, 0)) {   // DHCP adresini bekle / wait for the DHCP address
55    delay(100);
56  }
57
58  server.begin();
59  Serial.print("IP: ");
60  Serial.println(WiFi.localIP());
61  scrollText(WiFi.localIP().toString());     // IP adresini matriste göster / show the IP on the matrix
62  matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY);
63}
64
65void loop() {
66  WiFiClient client = server.available();
67  if (!client) {
68    return;
69  }
70
71  String request = client.readStringUntil('\n');   // ör. "GET /kalp HTTP/1.1" / e.g. "GET /kalp HTTP/1.1"
72  while (client.available()) {
73    client.read();                                 // kalan başlıkları at / discard the remaining headers
74  }
75
76  bool showIp = false;
77  if (request.indexOf("GET /kalp") >= 0) {
78    matrix.loadFrame(LEDMATRIX_HEART_BIG);
79  } else if (request.indexOf("GET /mutlu") >= 0) {
80    matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY);
81  } else if (request.indexOf("GET /uzgun") >= 0) {
82    matrix.loadFrame(LEDMATRIX_EMOJI_SAD);
83  } else if (request.indexOf("GET /kapat") >= 0) {
84    matrix.clear();
85  } else if (request.indexOf("GET /ip") >= 0) {
86    showIp = true;
87  }
88
89  sendPage(client);
90  delay(10);
91  client.stop();                                   // bağlantıyı kapat / close the connection
92
93  if (showIp) {
94    scrollText(WiFi.localIP().toString());         // sayfa gittikten sonra kaydır / scroll after the page is sent
95  }
96}

Kodun mantığı basit: WiFi.begin() bağlantı kurulana kadar tekrar denenir, ardından DHCP'nin IP adresi vermesi beklenir ve 80 numaralı portta bir web sunucusu başlatılır. Telefondan gelen isteğin ilk satırı (örneğin "GET /kalp HTTP/1.1") okunur, indexOf() ile hangi düğmeye basıldığı anlaşılır ve uygun kare matrise yüklenir. endText(SCROLL_LEFT) yazı kayarken programı bekletir; bu yüzden IP adresini yeniden kaydırma işini sayfayı gönderip bağlantıyı kapattıktan sonra yapıyoruz. Matris tehlike simgesini gösterip duruyorsa ESP32-S3 yanıt vermiyordur; kartın USB kablosunu çıkarıp tak ve ara yazılımı güncelle. Bağlantı hiç kurulmuyorsa ESP32 Wi-Fi'ye bağlanmıyor yazısındaki 2,4 GHz ve şifre kontrolleri burada da geçerlidir.

Güç beslemesi: VIN, 5V ve 3,3 V pinleri

R4, DC jakından ya da VIN pininden 6–24 V arası gerilim kabul eder; kart üzerindeki buck dönüştürücü bunu 5 V'a indirir. Arduino'nun R4 WiFi belgelerine göre kart VIN'den beslenirken 5V pininden yaklaşık 1,2 A çekilebilir; USB'den beslenirken kart 2 A'e kadar dayanır ama gerçek sınırı bilgisayarının USB portu belirler. Bu akım sensörler ve küçük modüller içindir, motorlar ve servolar için değil. Minima'nın 3,3 V pini RA4M1'in dahili regülatöründen beslendiği için yalnızca küçük sensörlere yeter; ESP-01 ya da PA+LNA antenli nRF24L01 gibi yüksek akım çeken modülleri buradan besleme. R4 WiFi'de ayrıca OFF pini (GND'ye bağlanınca kartın 5 V beslemesini keser) ve RTC pili için VRTC pini bulunur. Besleme seçeneklerinin tamamı için Arduino nasıl beslenir? yazısına bak.

Uno R4 ile proje fikirleri

  • Wi-Fi hava istasyonu: DHT11 ile ölçtüğün sıcaklığı hem matriste kayan yazıyla hem de telefondan açılan bir sayfada göster.
  • Matris oyunları: 12x8 matriste yılan, Tetris ya da zıplayan top; daha fazla fikir için Arduino oyun projeleri yazısına bak.
  • İnternet saati: Saati internetten (NTP) alıp dahili RTC'ye yaz, VRTC pinine pil takarak elektrik kesilse de saati koru.
  • USB makro klavyesi: Dört düğmeyle bilgisayarda kısayol tetikleyen bir tuş takımı yap; R4'ün HID desteği sayesinde Leonardo'ya gerek kalmaz.
  • DAC ile ses: analogWave kütüphanesiyle A0'dan sinüs dalgası üret, bir ses yükselteci ve hoparlörle basit bir synthesizer kur.
  • Telefondan lamba kontrolü: Bu yazıdaki web sunucuyu bir röle modülüyle birleştirip lambayı uzaktan aç.

Sık yapılan hatalar ve çözümleri

BelirtiNedenÇözüm
'PORTB' was not declared in this scopeKod AVR kayıtlarını doğrudan kullanıyordigitalWrite ve digitalRead ile yeniden yaz
'class TimerOne' has no member named 'initialize'TimerOne yalnızca AVR zamanlayıcılarını tanıyorKart paketindeki FspTimer sınıfını kullan
'class ArduinoLEDMatrix' has no member named 'beginDraw'ArduinoGraphics eksik ya da matris kütüphanesinden sonra eklenmişArduinoGraphics'i kur ve Arduino_LED_Matrix'ten önce ekle
WiFiS3 dosyalarında 'D24' was not declared gibi hatalarKart olarak R4 Minima seçiliAraçlar > Kart menüsünden R4 WiFi seç
D0/D1'deki modülden veri gelmiyorR4'te Serial yalnızca USB'dirSerial yerine Serial1 kullan
Port görünmüyor ya da yükleme yarıda kalıyorÇalışan kod USB'yi kilitledi ya da kablo yalnızca şarj kablosuRESET'e iki kez bas, veri kablosu kullan
Bir pin çalışmayı bıraktıPin 8 mA sınırının üstünde zorlandıLED'lerde 470 Ω–1 kΩ kullan, büyük yükleri transistörle sür
Qwiic'e takılan sensör bulunamıyorQwiic ikinci I2C hattına (Wire1) bağlıKodda Wire yerine Wire1 kullan
Eski bir projeyi R4'e taşırken en sağlıklı yol, onu küçük parçalarla denemektir: önce Blink, sonra sensör, sonra ekran. Derleme hatası alırsan hata satırındaki kütüphane adını not et ve Arduino derleme hataları rehberindeki adımları uygula. R3'te olduğu gibi R4'te de A4 ve A5 pinleri I2C hattına bağlıdır; I2C kullanırken bu iki pini analog giriş olarak kullanma.

Hangisini almalısın: R3, R4 Minima mı, R4 WiFi mı?

  • Uno R4 WiFi: İnternete, telefona ya da Bluetooth'a bağlanacak projeler yapacaksan ve kartın üzerinde hazır bir gösterge istiyorsan en iyi seçimdir. Yeni başlayanlar için de eğlencelidir, çünkü kodunun çalıştığını matriste hemen görürsün.
  • Uno R4 Minima: Kablosuz bağlantıya ihtiyacın yoksa ve daha fazla bellek, hız, DAC ve USB-C istiyorsan uygundur. SWD konnektörü sayesinde harici bir hata ayıklayıcı bağlayıp kodu adım adım çalıştırmak isteyenler için de iyi bir seçenektir.
  • Uno R3 ya da uyumlu klonu: Elinde AVR'ye özel kütüphaneler kullanan eski projeler varsa, ders kitabındaki örnekleri birebir izlemek istiyorsan ya da en düşük maliyeti arıyorsan hâlâ mantıklıdır; pinleri 20 mA'i rahatça taşır.
  • ESP32: Wi-Fi'yi daha fazla pin ve daha düşük fiyatla istiyorsan bir ESP32 kartı da düşünülebilir; ancak 3,3 V ile çalıştığını unutma (Arduino mu ESP32 mi?).

Kısacası Uno R4, Uno'nun alıştığın kolaylığını koruyup belleği, hızı ve yeni donanımları ekleyen bir yükseltmedir; yeter ki 8 mA sınırını ve Serial1 farkını aklında tut. Kartın pinlerini ayrıntılı tanımak için Arduino Uno pinleri yazısına göz at. BlueGrays uygulamasında LED, buton, sensör, LCD ve LED matris projelerini Arduino Uno için adım adım devre şeması ve kodlarıyla bulabilirsin; standart komutlarla yazılan bu projeler R4'te de çalışır, yalnızca LED dirençlerini 470 Ω'a yükseltmen yeterlidir.

Sıkça sorulan sorular

Arduino Uno R4 ile R3 arasındaki fark nedir?

Uno R4, R3'teki 8 bitlik ve 16 MHz'lik ATmega328P yerine 48 MHz'te çalışan 32 bitlik Renesas RA4M1 kullanır. Flash bellek 32 KB'tan 256 KB'a, SRAM 2 KB'tan 32 KB'a çıkar; ayrıca 12 bit DAC, 14 bit ADC, CAN, RTC, USB-C ve USB klavye-fare desteği gelir. Kart boyutu, pin dizilimi ve 5 V çalışma gerilimi aynı kalır.

Arduino Uno R3 kodları R4'te çalışır mı?

Standart Arduino komutlarıyla yazılmış kodların ve kütüphanelerin çoğu değişiklik yapmadan çalışır. PORTB gibi AVR kayıtlarına, Timer1 ayarlarına ya da avr/ başlık dosyalarına doğrudan erişen kodlar ise derlenmez. Ayrıca D0/D1 pinlerine bağlı modülleri okuyan kodlarda Serial yerine Serial1 yazman gerekir.

Arduino Uno R4 WiFi mi Minima mı almalıyım?

Wi-Fi, Bluetooth ya da telefondan kontrol gerektiren projeler yapacaksan R4 WiFi al; hazır LED matris ve Qwiic konnektörü de cabası. Kablosuz bağlantıya ihtiyacın yoksa Minima daha ucuzdur ve aynı işlemciyle aynı performansı verir.

Arduino Uno R4 pininden kaç mA akım çekilebilir?

Arduino, Uno R4 için pin başına en fazla 8 mA çekilmesini önerir; R3'te bu değer 20 mA idi. Bu yüzden LED'lerde 220 Ω yerine en az 470 Ω direnç kullanmalı, röle, motor ve buzzer gibi yükleri transistör ya da MOSFET üzerinden sürmelisin.

Arduino R3 shield'leri Uno R4'e takılır mı?

Evet. R4 Minima ve R4 WiFi, R3 ile aynı kart boyutuna, aynı başlık yerleşimine ve aynı 5 V lojik seviyesine sahiptir; motor sürücü, röle ve sensör shield'lerinin çoğu doğrudan takılır. Yalnızca shield'in kütüphanesi AVR'ye özel kod içeriyorsa yazılım tarafında güncelleme gerekebilir.

Arduino Uno R4 WiFi Bluetooth destekler mi?

Evet, kart üzerindeki ESP32-S3 modülü Bluetooth 5 LE destekler ve ArduinoBLE kütüphanesiyle kullanılır. Ancak Wi-Fi ile Bluetooth aynı anteni paylaştığı için ikisi aynı anda çalışmaz. HC-05'teki gibi klasik Bluetooth seri port bağlantısı desteklenmez; telefon uygulamasının BLE kullanması gerekir.

Tüm projeleri gör
Led Yakma
#1Başlangıç

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

4.6(188)
1127
Trafik Lambası
#3Başlangıç

Trafik Lambası

Her gün yolda gördüğün trafik ışığının minik bir kopyası. Kırmızı iki saniye yanar, sarı kısa bir an parlar, yeşil iki saniye yanar, ardından yine sarı üzerinden kırmızıya dönülür ve döngü hiç durmaz.

4.8(131)
397
Buton İle Led Yakma (Push)
#9Başlangıç

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

4.8(113)
229
HC-SR04 Mesafe Ölçme (Serial Ekran)
#27Başlangıç

HC-SR04 Mesafe Ölçme (Serial Ekran)

Yarasalar karanlıkta yollarını nasıl buluyorsa HC-SR04 sensörü de öyle çalışır: duyamadığın bir ses gönderir, yankısını dinler ve önündeki cismin ne kadar uzakta olduğunu ölçer. Arduino bu mesafeyi sa

4.6(46)
71
DHT11 İle Sıcaklık Ve Nem
#55Orta

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

4.7(47)
73
Dot Matrix Saat ve Takvim (MAX7219, DS1307)
#84Orta
Premium

Dot Matrix Saat ve Takvim (MAX7219, DS1307)

Masada ya da duvarda duran, saati ve tarihi kayan yazıyla gösteren ışıklı bir pano. 8x32 LED ekranda iki noktası her saniye yanıp sönen büyük rakamlı saat durur; her dakika başında günün adı ve tarih

5.0(37)
59
Piksel Yılan: 8x8 Matris
#88İleri
Premium

Piksel Yılan: 8x8 Matris

Klasik yılan oyununu kendi ellerinle kur ve oyna. Renkli 8x8 ışık matrisinde yeşil yılanı oyun çubuğuyla yönlendirip kırmızı elmaları yersin; her elmada yılan uzar, biraz daha hızlanır ve puanın küçük

4.7(39)
57
4x 32x8 Matrix LED Animasyon Ve Yazı
#90Orta
Premium

4x 32x8 Matrix LED Animasyon Ve Yazı

Dört uzun LED matris modülü üst üste dizilince binden fazla ışık noktası olan kare bir ekran çıkar. Önce filmlerdeki gibi yukarıdan harfler yağmur gibi düşer, ardından bir perde açılır ve iki satırda

4.6(40)
66