mBlock Arduino Rehberi: Kurulum, Canlı Mod ve Kod Yükleme
mBlock Arduino rehberi: kurulum, Arduino Uno ekleme ve firmware, canlı mod ile yükleme modu farkı, LED, buton ve sensör blokları, Arduino C kodu, 9 etkinlik.
mBlock ile Arduino programlamak, tek satır kod yazmadan Arduino Uno'ya LED yaktırmanın, buton ve sensör okumanın en kolay yollarından biridir. Makeblock'un ücretsiz olarak geliştirdiği mBlock 5, Scratch 3.0 tabanlı bir blok kodlama ortamıdır: renkli blokları yapboz gibi birleştirirsin, mBlock bunları arka planda Arduino C koduna çevirir, derler ve kartına yükler. İstersen blokları kartta anında çalıştırıp sahnedeki karakterlerle etkileşime de sokabilirsin. Bu yüzden okullardaki robotik kodlama derslerinde, TÜBİTAK proje hazırlıklarında ve Arduino'ya ilk adımda en çok tercih edilen araçlardan biridir.
Bu rehberde mBlock'u bilgisayarına ya da tarayıcına kurmayı, Arduino Uno'yu cihaz olarak ekleyip bağlamayı, canlı mod için firmware yüklemeyi, Canlı mod ile Yükleme modu arasındaki farkı, LED, buton ve sensör bloklarını, blokların hangi Arduino C satırlarına dönüştüğünü, derslerde kullanabileceğin dokuz etkinliği, Arduino IDE'ye geçişi ve en sık karşılaşılan bağlantı sorunlarının çözümlerini adım adım bulacaksın.

mBlock nedir, Arduino ile nasıl çalışır?
mBlock, MIT'de geliştirilen Scratch 3.0'ın üzerine kurulmuş bir programlama ortamıdır. Scratch'ten en büyük farkı, ekrandaki karakterlerin (kuklaların) yanında gerçek donanımları da programlayabilmesidir. Arayüzde iki ayrı sekme bulunur: Sprites (kuklalar) sekmesinde sahnedeki karakterleri, Devices (cihazlar) sekmesinde ise Arduino, micro:bit ya da Makeblock robotları gibi kartları programlarsın. Bir cihaz seçildiğinde blok paletine o karta özel kategoriler eklenir; Arduino Uno için bunlar pin ve seri port bloklarıdır. Yazdığın blok dizisi Yükleme modunda Arduino C'ye çevrilir, derlenip makine koduna dönüştürülür ve USB üzerinden kartın flaş belleğine yazılır. Yani mBlock, Arduino IDE'nin yaptığı işin aynısını blok arayüzüyle yapar; üstelik ürettiği kodu sana gösterdiği için metin koda geçişi de kolaylaştırır.
| Özellik | mBlock 5 |
|---|---|
| Geliştirici | Makeblock |
| Temel aldığı ortam | Scratch 3.0 (Scratch ve mBlock 3 projelerini açabilir) |
| Fiyat | Ücretsiz |
| Sürümler | Windows ve macOS masaüstü, tarayıcı (Chrome ya da Edge), Android ve iOS uygulaması |
| Arduino kartları | Uno, Nano, Nano (old), Mega 2560; Leonardo, Micro ve Yun masaüstü sürümde ya da mLink ile |
| Metin dili | Arduino kartlarında Arduino C, Makeblock kartlarında ve sahnede Python |
| Proje dosyası | .mblock |
| Arayüz dili | Türkçe dahil onlarca dil |
mBlock kurulumu: masaüstü ve web sürümü
- Tarayıcında mblock.cc adresine gir ve indirme (Download) sayfasından işletim sistemine uygun mBlock 5 masaüstü sürümünü indir. Yazının hazırlandığı sırada güncel sürüm V5.6'dır; 64 bit Windows 7 ve sonrası ile macOS 10.12 ve sonrası desteklenir, Apple M serisi Mac'ler için ayrı bir kurulum dosyası vardır.
- Windows'ta kurulum dosyasını çalıştırıp sihirbazı izle. Kurulum sırasında CH340 sürücüsünü kurmayı önerirse kabul et; klon Arduino kartlarının çoğu bu USB-seri yongayı kullanır ve sürücü olmadan port görünmez.
- macOS'ta kurulum dosyası açılmazsa dosyaya sağ tıklayıp Aç seç ya da Sistem Ayarları'ndaki Gizlilik ve Güvenlik bölümünden Yine de Aç düğmesini kullan.
- mBlock'u aç ve üst menüdeki küre simgesinden dili Türkçe yap. Bundan sonra menüler ve blok adları da Türkçe görünür.
- Program kuramadığın okul bilgisayarlarında tarayıcıdan ide.mblock.cc adresini aç; Arduino bağlantısı için Chrome ya da Edge'in güncel sürümünü kullan.
Web sürümü uzun süre mLink adlı küçük bir yardımcı programla karta bağlanıyordu. Yeni sürümlerde varsayılan yöntem, tarayıcının seri port özelliğini kullanan doğrudan bağlantıdır: bağlan dediğinde tarayıcı bir pencere açar, Arduino'nun portunu seçersin ve ek yazılım kurmadan bağlanırsın. Bu yöntem Uno, Nano, Nano (old) ve Mega 2560 ile çalışır; Leonardo, Micro ve Yun gibi USB'yi farklı kullanan kartlar için hâlâ mLink gerekir. mLink çalışırken görev çubuğunda küçük bir panda simgesi görünür. Masaüstü sürümle web sürümünü ya da iki mBlock sekmesini aynı anda açık tutma; ikisi aynı portu kullanmaya çalışır ve bağlantı başarısız olur.
| Özellik | Masaüstü sürüm | Web sürümü |
|---|---|---|
| Kurulum | Gerekir (Windows, macOS) | Gerekmez, tarayıcıda açılır |
| Tarayıcı şartı | Yok | Chrome ya da Edge (seri port desteği için) |
| Arduino bağlantısı | USB kablosu ve sürücü yeterli | Doğrudan bağlantı ya da mLink |
| Leonardo, Micro, Yun | Desteklenir | Yalnız mLink ile |
| Chromebook ve Linux | Masaüstü sürümü yok | Chrome ile çalışır |
| Projeyi kaydetme | Bilgisayara .mblock dosyası | Hesaba ya da bilgisayara indirerek |
| Okul için uygunluk | Yavaş ya da kısıtlı ağlarda daha sorunsuz | Kurulum yetkisi olmayan bilgisayarlarda pratik |
Cihaz ekleme: Arduino Uno'yu mBlock'a bağlamak
- Arduino'yu USB kablosuyla bilgisayara tak; kartın ON (güç) LED'i yanmalı.
- mBlock'ta sahnenin altındaki Devices (cihazlar) sekmesine geç. Varsayılan olarak gelen Makeblock cihazını (sürüme göre Codey Rocky ya da CyberPi) köşesindeki çarpı işaretiyle kaldır.
- + Add (ekle) düğmesine bas, açılan Cihaz Kütüphanesi'nde arama kutusuna "Arduino" yaz, Arduino Uno'yu seç ve OK de. Kartın sol üst köşesindeki yıldıza tıklarsan mBlock onu bir sonraki açılışta hazır getirir.
- Connect (bağlan) düğmesine bas. Açılan penceredeki USB sekmesinde mBlock'un bulduğu portu seç: Windows'ta COM3 ya da COM4 gibi, macOS'ta /dev/cu.usbmodem… ya da CH340'lı kartlarda /dev/cu.wchusbserial… gibi bir ad görürsün. Port listede yoksa Show all connectable devices (tüm bağlanabilir cihazları göster) kutusunu işaretle.
- Tekrar Connect de. "Device connected" (cihaz bağlandı) mesajı görünürse hazırsın; blok paletinde Arduino'ya özel pin ve seri port blokları belirir.
Doğru cihazı seçmek bağlantının yarısıdır. Orijinal ya da klon fark etmeksizin Uno için Arduino Uno, Mega için Arduino Mega2560 seç. Ucuz Arduino Nano klonlarının çoğunda eski önyükleyici (bootloader) bulunur; bu kartlarda Arduino Nano ile yükleme başarısız olur, Arduino Nano (old) seçeneği ise çalışır. Arduino Uno R4 gibi farklı işlemcili yeni kartlar mBlock'un Uno cihazıyla programlanamaz; bu kartlarda doğrudan Arduino IDE kullanmalısın. Hangi kartı alacağına henüz karar vermediysen Hangi Arduino'yu Almalıyım? yazısına, Nano'nun pin düzeni için Arduino Nano pinleri rehberine bakabilirsin.

Canlı mod ile Yükleme modu arasındaki fark
mBlock, cihaz programlarken iki çalışma modu sunar ve Cihazlar sekmesindeki anahtarla aralarında geçiş yaparsın. Canlı modda (Live) program aslında bilgisayarda çalışır: mBlock her bloğu sırayla okur ve USB üzerinden Arduino'ya "pin 13'ü yak" ya da "A0'ı oku ve sonucu gönder" gibi komutlar yollar. Bunun için Arduino'da bu komutları anlayan özel bir firmware yüklü olmalıdır. Sonuç anında görünür, sensör değerlerini sahnede izleyebilir, Arduino'yu sahnedeki kuklalarla konuşturabilirsin; ama USB kablosunu çıkardığın ya da mBlock'u kapattığın an program durur. Yükleme modunda (Upload) ise bloklar Arduino C'ye çevrilip derlenir ve karta kalıcı olarak yazılır; kablo çıksa da program pil ya da adaptörle çalışmaya devam eder. Bu modda program when Arduino Uno starts up (Arduino Uno başladığında) şapka bloğunun altına yazılmalıdır; yeşil bayrak gibi sahne olayları karta aktarılmaz.
| Özellik | Canlı mod (Live) | Yükleme modu (Upload) |
|---|---|---|
| Program nerede çalışır? | Bilgisayarda, komutlar USB ile gider | Arduino'nun kendi işlemcisinde |
| Başlangıç bloğu | when green flag clicked, tuşa basılınca gibi olaylar | when Arduino Uno starts up |
| USB kablosu | Sürekli takılı olmalı | Yalnız yükleme sırasında gerekir |
| Arduino'daki yazılım | mBlock firmware'i | Senin derlenmiş programın |
| Zamanlama | Her komut USB'den gidip geldiği için daha yavaş ve düzensiz | Milisaniye, hatta mikrosaniye hassasiyetinde |
| Kuklalarla etkileşim | Değişken ve yayın (broadcast) bloklarıyla doğrudan | Yalnız destekleyen cihazlarda Upload Mode Broadcast uzantısıyla |
| En uygun kullanım | Deneme, hata ayıklama, sahne oyunları | Robot, alarm, pille çalışan bitmiş proje |
Firmware yükleme: Arduino'yu canlı moda hazırlamak
- Arduino'yu bağla (Connect) ve mod anahtarını Live (canlı) konumuna getir.
- Kartta mBlock firmware'i yoksa mBlock çoğu zaman güncelleme önerir. Önermezse bağlantı düğmelerinin yanındaki Setting (ayarlar) menüsünden Update Firmware (firmware güncelleme) seç ve açılan pencerede güncellemeyi başlat.
- Yükleme sırasında kartın TX ve RX LED'leri hızla yanıp söner; ilerleme çubuğu bitene kadar kabloyu çıkarma ve mBlock'u kapatma.
- Test etmek için pin bloklarından set digital pin (13) output as (high) bloğunu çalışma alanına sürükle ve üzerine bir kez tıkla. Kartın üzerindeki L LED'i hemen yanıyorsa canlı mod çalışıyordur; aynı bloğu (low) seçeneğiyle tıklayınca LED söner.
Temel Arduino blokları: LED, buton ve sensörler
Arduino Uno eklendiğinde blok paletinde Scratch'ten tanıdığın Events (olaylar), Control (kontrol), Operators (operatörler), Variables (değişkenler) ve My Blocks (bloklarım) kategorilerinin yanına karta özel pin ve seri port kategorileri gelir. Türkçe arayüzde bu bloklar Türkçe adlarıyla görünür; aşağıdaki tabloda, hangi blok olduğunu karıştırmaman için İngilizce adlarını ve ne işe yaradıklarını veriyorum. Blok adları sürüme göre küçük farklılıklar gösterebilir; herhangi bir bloğa sağ tıklayıp Help (yardım) seçersen mBlock o bloğun açıklamasını gösterir. Uno'da PWM yalnız 3, 5, 6, 9, 10 ve 11 numaralı pinlerde çalışır; pinlerin tam haritasını Pinout aracında görebilirsin.
| Blok (İngilizce adı) | Ne yapar? | Örnek kullanım |
|---|---|---|
| when Arduino Uno starts up | Yükleme modunda programın başladığı şapka blok | Karta yüklenen her program |
| set digital pin (13) output as (high) | Pini HIGH (5 V) ya da LOW (0 V) yapar | LED, aktif buzzer, röle |
| read digital pin (2) | Pindeki seviyeyi doğru ya da yanlış olarak okur | Buton, PIR, kızılötesi engel sensörü |
| read analog pin (A) (0) | A0–A5 pinlerindeki gerilimi 0–1023 arası bir sayıya çevirir | LDR, potansiyometre, toprak nem sensörü |
| set pwm pin (5) output as (128) | 0–255 arası PWM sinyali üretir | LED parlaklığı, DC motor hızı |
| set servo pin (9) angle as (90) | Servoyu 0–180 derece arasında bir açıya götürür | SG90 bariyer, robot kol |
| play pin (8) with note (C4) for (0.25) beat | Pasif buzzerdan nota çalar | Melodi, kapı zili |
| forever / repeat (10) / if … then … else | Döngü ve koşul blokları | Sürekli kontrol, sayma, karar verme |
| wait (1) seconds | Programı belirtilen süre bekletir | Yanıp sönme, trafik lambası |







Bağlantı tablosu: tüm etkinlikler için tek ders seti
Derslerde her hafta devreyi baştan kurmak zaman kaybettirir. Aşağıdaki bağlantıyı bir kez breadboard üzerine kurarsan dokuz etkinliğin hepsini kablolara dokunmadan yapabilirsin. LED'in önüne koyacağın direnci LED direnci hesaplayıcı ile, LDR'li gerilim bölücünün vereceği gerilimi gerilim bölücü aracıyla kontrol edebilirsin. Parçaları ilk kez kullanıyorsan LED, buton, LDR ve servo motor yazılarında her birinin ayrıntılı bağlantısını bulabilirsin.
| Parça | Arduino Uno | ESP32 | Raspberry Pi Pico | Not |
|---|---|---|---|---|
| LED + 220 Ω direnç | D5 | GPIO 18 | GP14 | Uzun bacak (anot) pine, kısa bacak GND'ye |
| Buton + 10 kΩ pull-down | D2 | GPIO 4 | GP2 | Butonun diğer ucu Uno'da 5V'a, ESP32 ve Pico'da 3V3'e |
| LDR + 10 kΩ direnç | A0 | GPIO 34 | GP26 (ADC0) | LDR besleme ile pin arasına, direnç pin ile GND arasına |
| Potansiyometre (orta uç) | A1 | GPIO 35 | GP27 (ADC1) | Kenar uçlar beslemeye ve GND'ye |
| SG90 servo (sinyal) | D9 | GPIO 13 | GP16 | Kırmızı kablo 5 V (ESP32'de VIN, Pico'da VBUS), kahverengi GND |
| Pasif buzzer | D8 | GPIO 25 | GP15 | Diğer ucu GND'ye |
| HC-SR04 Trig / Echo | D11 / D12 | GPIO 26 / 27 | GP17 / GP18 | ESP32 ve Pico'da Echo hattı gerilim bölücüyle 3,3 V'a indirilmeli |
İlk program: Yükleme moduyla LED yakıp söndürmek
- Mod anahtarını Upload (yükleme) konumuna getir.
- Events kategorisinden when Arduino Uno starts up bloğunu çalışma alanına sürükle.
- Altına Control kategorisinden forever (sürekli tekrarla) bloğunu ekle.
- forever bloğunun içine sırayla set digital pin (13) output as (high), wait (1) seconds, set digital pin (13) output as (low) ve yine wait (1) seconds bloklarını koy.
- Upload (yükle) düğmesine bas. mBlock kodu derleyip karta gönderir; birkaç saniye sonra yüklemenin bittiğini bildiren mesaj görünür.
- Kartın üzerindeki L LED'i saniyede bir yanıp sönmeye başlar. USB kablosunu çıkarıp kartı bir powerbank ya da 7–12 V adaptörle beslersen program yine çalışır; besleme seçeneklerini Arduino'yu pille çalıştırma yazısında anlattık.
Bloklar Arduino C koduna nasıl dönüşür?
Yükleme modunda sağ kenardaki Arduino C kod düğmesine (açılı parantez simgesi) basarsan mBlock, blokların karşılığı olan kodu bir panelde gösterir. Bloklarda yaptığın her değişiklik kodu da anında günceller; bu, "hangi blok hangi satırı üretiyor?" sorusunu öğrenmenin en kolay yoludur. Yukarıdaki Blink programına bir de sayac adında bir değişken ekleyip her turda 1 artırırsan üretilen kodun yapısı aşağıdakine benzer. Açıklama satırlarını biz ekledik; boşluklar ve pinMode gibi bazı satırların yeri sürüme göre biraz değişebilir.
1// generated by mBlock5 for <your product>
2// codes make you happy
3// mBlock'un ürettiği kodun yapısı: Blink + sayaç / Structure of mBlock-generated code: Blink + counter
4
5#include <Arduino.h>
6#include <Wire.h>
7#include <SoftwareSerial.h>
8
9float sayac = 0; // mBlock değişkenleri float olur / mBlock variables become float
10
11void _loop(); // ön bildirim, Arduino IDE de ekler / forward declaration, the Arduino IDE adds it too
12
13void _delay(float seconds) { // "wait (1) seconds" bloğu / the "wait (1) seconds" block
14 long endTime = millis() + seconds * 1000;
15 while (millis() < endTime) _loop();
16}
17
18void setup() { // "when Arduino Uno starts up" altındaki bloklar / blocks under "when Arduino Uno starts up"
19 pinMode(13, OUTPUT);
20 while (1) { // "forever" bloğu / the "forever" block
21 digitalWrite(13, 1); // pin 13 HIGH: dahili L LED'i yanar / pin 13 HIGH: the built-in L LED turns on
22 _delay(1);
23 digitalWrite(13, 0); // pin 13 LOW: LED söner / pin 13 LOW: the LED turns off
24 _delay(1);
25 sayac += 1; // "change sayac by 1" bloğu / the "change sayac by 1" block
26 _loop();
27 }
28}
29
30void _loop() { // uzantıların sürekli çalışan kodu buraya eklenir / extensions add their recurring code here
31}
32
33void loop() {
34 _loop();
35}Bu kodda dikkat etmen gereken dört şey var. Birincisi, forever bloğu Arduino'nun loop() fonksiyonuna değil, setup() içindeki sonsuz bir while(1) döngüsüne dönüşür; loop() yalnızca _loop() fonksiyonunu çağırır. İkincisi, wait bloğu delay() yerine _delay() fonksiyonunu kullanır; bu fonksiyon beklerken _loop() çağırmaya devam eder, böylece bazı uzantıların arka planda yapması gereken işler aksamaz. Üçüncüsü, mBlock'ta oluşturduğun her değişken float (ondalıklı sayı) olarak tanımlanır; Uno'da her biri 4 bayt RAM kaplar ve eşitlik karşılaştırmalarında küçük yuvarlama hatalarına yol açabilir. Örneğin 0,1'er artırdığın bir değişken on adım sonra tam 1 olmayabilir, bu yüzden "eşittir" yerine "büyüktür" ya da "küçüktür" karşılaştırması daha güvenlidir. Dördüncüsü, en baştaki Wire ve SoftwareSerial kütüphaneleri kullanmasan da çoğu zaman eklenir; program yine çalışır ama elle yazdığın sürümden biraz daha fazla yer kaplayabilir.
| Blok | Arduino C karşılığı |
|---|---|
| when Arduino Uno starts up | void setup() { … } içindeki kod |
| forever | while(1) { … _loop(); } |
| repeat (10) | for (int count = 0; count < 10; count++) { … } |
| wait (1) seconds | _delay(1); |
| wait until (koşul) | while (!(koşul)) { _loop(); } |
| if (koşul) then … else … | if (koşul) { … } else { … } |
| set digital pin (13) output as (high) | pinMode(13, OUTPUT); digitalWrite(13, 1); |
| read digital pin (2) | digitalRead(2) |
| read analog pin (A) (0) | analogRead(A0) |
| set pwm pin (5) output as (128) | analogWrite(5, 128); |
| set servo pin (9) angle as (90) | Servo kütüphanesi: attach(9) ve write(90) |
| set [sayac] to (0) / change [sayac] by (1) | sayac = 0; / sayac += 1; |
Robotik kodlama dersleri için örnek etkinlikler
Aşağıdaki dokuz etkinlik, 40 dakikalık derslere göre en basitten zora doğru sıralandı ve hepsi yukarıdaki tek bağlantı setiyle yapılabilir. Her etkinliğe canlı modda başlamak iyi bir yöntemdir: öğrenci bir bloğa tıklayınca sonucu hemen görür, sensör değerlerini sahnede izler ve hatasını kendisi bulur. Program istendiği gibi çalıştığında aynı blokları Yükleme moduna taşıyıp karta kalıcı olarak yazmak ise "bilgisayar olmadan çalışan cihaz" fikrini öğretir. Etkinliklerin altında yatan programlama kavramlarını Arduino programlama temelleri yazısında metin kodla da bulabilirsin.
| Ders | Etkinlik | Kullanılan bloklar | Öğrenilen kavram |
|---|---|---|---|
| 1 | Yanıp sönen sinyal lambası (D13 ya da D5) | set digital pin, wait, forever | Sıralı işlem, sonsuz döngü |
| 2 | Trafik lambası (D5, D6 ve D7'de üç LED) | set digital pin, wait | Zamanlama, durum sırası |
| 3 | Butonla LED açma kapama | read digital pin, if … else | Giriş ve çıkış, koşul |
| 4 | Otomatik gece lambası | read analog pin, küçüktür operatörü | Analog değer, eşik |
| 5 | Potansiyometreyle LED dimmer | read analog pin, set pwm pin, bölme | Ölçekleme, PWM |
| 6 | Servo bariyer kapısı | set servo pin, çarpma ve bölme | Orantı, açı |
| 7 | Kapı zili ve melodi | play pin with note, repeat | Frekans, nota, tekrar |
| 8 | Park sensörü (HC-SR04 uzantısı) | Uzantı bloğu, if … else, buzzer | Uzantı ekleme, mesafe ölçme |
| 9 | Potansiyometreyle sahnede raket oyunu | Canlı mod, değişken, kukla hareketi | Donanım ve yazılım etkileşimi |
Sayısal dönüşümler derslerin en öğretici kısmıdır. Potansiyometre 0–1023 arası değer verirken PWM 0–255 ister; bu yüzden 5. etkinlikte okunan değeri 4'e bölersin (1023 ÷ 4 ≈ 255). Servoda aynı değeri açıya çevirmek için değer × 180 ÷ 1023 işlemini operatör bloklarıyla kurarsın. 9. etkinlikte canlı modda Arduino'ya "when green flag clicked, forever, set [pot] to (read analog pin A1)" dizisini yazarsın; kuklada da aynı değişkeni kullanıp set x to (pot × 480 ÷ 1023 − 240) bloğuyla raketi sahnenin −240 ile 240 arasındaki genişliğine yayarsın. Değişkeni oluştururken "tüm kuklalar için" seçeneğini işaretlemezsen cihaz ile kukla aynı değişkeni göremez. Park sensörü için blok paletinin altındaki + extension (uzantı) düğmesiyle Uzantı Merkezi'ni açıp bir ultrasonik sensör uzantısı ekleyebilirsin; bu uzantıların çoğunu topluluk geliştiricileri hazırladığı için blok adları ve desteklenen pinler uzantıdan uzantıya değişir. Sensörün çalışma mantığını HC-SR04 mesafe sensörü, nota frekanslarını buzzer yazısında bulabilirsin.
Arduino IDE'ye geçiş: bloklardan gerçek koda
Bir noktada bloklar yetmez: program uzadıkça çalışma alanı karmaşıklaşır, Uzantı Merkezi'nde olmayan bir sensör kütüphanesine ihtiyaç duyarsın ya da birkaç işi aynı anda, delay kullanmadan yürütmek istersin. Bu noktada Arduino IDE kurulumu yapıp metin koda geçmenin zamanı gelmiştir; yeni sensörler için kütüphane ekleme de artık senin elinde olur. Geçişi yumuşatmanın en iyi yolu, mBlock'ta yaptığın bir projeyi Arduino IDE'de yeniden yazmaktır; böylece aynı mantığın iki farklı görünümünü yan yana görürsün.
- mBlock'ta Arduino C panelindeki kodu seçip kopyala; Arduino IDE'de yeni bir taslak (sketch) açıp yapıştır.
- Araçlar menüsünden kartı (Arduino Uno) ve portu seç, önce Doğrula, sonra Yükle düğmesine bas. Kod mBlock'taki gibi çalışmalı.
- Sonra kodu sadeleştir: pinMode satırlarını setup() içinde topla, while(1) döngüsünün içini loop() fonksiyonuna taşı, _delay() yerine delay() ya da millis() kullan.
- float değişkenleri ihtiyaca göre int ya da bool yap ve pin numaralarına const int ile anlamlı adlar ver.
- Seri Monitör ile değişkenleri yazdırarak programın ne yaptığını izle; mBlock'taki canlı izlemenin metin koddaki karşılığı budur.
Aşağıda 3. ve 4. etkinliği birleştiren programın, yani butonla açılıp kapanan otomatik gece lambasının Arduino IDE ile yazılmış hâli var. Pin numaraları yukarıdaki bağlantı tablosuyla aynıdır.
1// mBlock gece lambası etkinliğinin Arduino IDE ile yazılmış hali
2// The mBlock night-light activity rewritten for the Arduino IDE
3const int LED_PIN = 5; // LED + 220 ohm direnç (PWM pini) / LED + 220 ohm resistor (PWM pin)
4const int BUTON_PIN = 2; // buton 5V'a, 10k pull-down GND'ye / button to 5V, 10k pull-down to GND
5const int LDR_PIN = A0; // LDR + 10k gerilim bölücü / LDR + 10k voltage divider
6const int ESIK = 400; // bu değerin altı "karanlık" sayılır / below this value counts as "dark"
7
8bool sistemAcik = true; // butonla açılıp kapanır / toggled with the button
9int oncekiButon = LOW; // önceki buton durumu / previous button state
10unsigned long sonYazma = 0; // son Seri Monitör yazma zamanı / last Serial Monitor print time
11
12void setup() {
13 pinMode(LED_PIN, OUTPUT);
14 pinMode(BUTON_PIN, INPUT); // harici pull-down olduğu için INPUT / INPUT because of the external pull-down
15 Serial.begin(9600); // Seri Monitör 9600 baud / Serial Monitor at 9600 baud
16}
17
18void loop() {
19 int buton = digitalRead(BUTON_PIN);
20 if (buton == HIGH && oncekiButon == LOW) { // yalnız basıldığı an / only at the moment of the press
21 sistemAcik = !sistemAcik;
22 delay(30); // basit debounce / simple debounce
23 }
24 oncekiButon = buton;
25
26 int isik = analogRead(LDR_PIN); // 0 karanlık, 1023 aydınlık / 0 dark, 1023 bright
27 if (sistemAcik && isik < ESIK) {
28 int parlaklik = map(isik, 0, ESIK, 255, 40); // karardıkça daha parlak / brighter as it gets darker
29 analogWrite(LED_PIN, parlaklik);
30 } else {
31 analogWrite(LED_PIN, 0);
32 }
33
34 if (millis() - sonYazma >= 500) { // delay olmadan yarım saniyede bir yaz / print every half second without delay
35 sonYazma = millis();
36 Serial.print("Isik: ");
37 Serial.print(isik);
38 Serial.print(" Sistem: ");
39 Serial.println(sistemAcik ? "acik" : "kapali");
40 }
41}mBlock sürümüyle arasındaki farklara bak: setup() yalnız bir kez çalışıp pinleri hazırlar, loop() ise kendiliğinden sürekli tekrarlanır, bu yüzden while(1) gerekmez. Buton, önceki durumla karşılaştırılarak yalnızca basıldığı anda okunur; aksi hâlde parmağın butondayken sistem saniyede yüzlerce kez açılıp kapanırdı. map() fonksiyonu LDR değerini 255 ile 40 arasına ölçekler, böylece ortam karardıkça LED daha parlak yanar. Seri Monitör'e yazma işi delay() yerine millis() ile yarım saniyede bir yapılır; program beklerken butona basılmasını kaçırmaz. Bu tekniğin ayrıntısını millis ve delay farkı, ekrana veri yazdırmayı Arduino Serial Monitor yazısında bulabilirsin.
Aynı program ESP32 ve Raspberry Pi Pico'da
mBlock'un cihaz kütüphanesinde Makeblock'un CyberPi ve HaloCode gibi ESP32 tabanlı kendi kartları bulunur, ancak sıradan bir ESP32 geliştirme kartı ya da Raspberry Pi Pico için resmi bir cihaz yoktur; zaman zaman görülen topluluk uzantıları da sürümden sürüme değişir. İyi haber şu ki blokla öğrendiğin mantık karttan karta değişmez. ESP32'yi Arduino IDE ile programlarken neredeyse aynı kodu kullanırsın; değişen yalnızca pin numaraları, 3,3 V çalışma gerilimi ve ADC'nin 0–4095 arası 12 bitlik ölçeğidir. Bu yüzden karanlık eşiği 400 yerine yaklaşık 1600 olur.
1// Aynı gece lambası ESP32'de (Arduino IDE) / The same night light on the ESP32 (Arduino IDE)
2const int LED_PIN = 18; // LED + 220 ohm direnç / LED + 220 ohm resistor
3const int BUTON_PIN = 4; // buton 3V3'e, 10k pull-down GND'ye / button to 3V3, 10k pull-down to GND
4const int LDR_PIN = 34; // ADC1 girişi, LDR + 10k bölücü (3V3) / ADC1 input, LDR + 10k divider (3V3)
5const int ESIK = 1600; // ESP32 ADC 12 bit: 0-4095 / ESP32 ADC is 12-bit: 0-4095
6
7bool sistemAcik = true; // butonla açılıp kapanır / toggled with the button
8int oncekiButon = LOW; // önceki buton durumu / previous button state
9unsigned long sonYazma = 0; // son yazma zamanı / last print time
10
11void setup() {
12 pinMode(LED_PIN, OUTPUT);
13 pinMode(BUTON_PIN, INPUT); // harici pull-down / external pull-down
14 Serial.begin(115200); // ESP32 için yaygın hız / common speed for the ESP32
15}
16
17void loop() {
18 int buton = digitalRead(BUTON_PIN);
19 if (buton == HIGH && oncekiButon == LOW) { // yalnız basıldığı an / only at the moment of the press
20 sistemAcik = !sistemAcik;
21 delay(30); // basit debounce / simple debounce
22 }
23 oncekiButon = buton;
24
25 int isik = analogRead(LDR_PIN); // 0 karanlık, 4095 aydınlık / 0 dark, 4095 bright
26 if (sistemAcik && isik < ESIK) {
27 analogWrite(LED_PIN, map(isik, 0, ESIK, 255, 40)); // karardıkça daha parlak / brighter as it gets darker
28 } else {
29 analogWrite(LED_PIN, 0);
30 }
31
32 if (millis() - sonYazma >= 500) { // yarım saniyede bir yaz / print every half second
33 sonYazma = millis();
34 Serial.printf("Isik: %d Sistem: %s\n", isik, sistemAcik ? "acik" : "kapali");
35 }
36}Raspberry Pi Pico'da en yaygın yol MicroPython'dur. Thonny editöründe çalıştıracağın aşağıdaki program aynı işi yapar: read_u16() ADC değerini 0–65535 arasında verir, duty_u16() de PWM doluluk oranını aynı ölçekte ister. Python'un blok kodlamadan sonra ikinci adım olarak neden iyi bir seçim olduğunu MicroPython temelleri yazısında anlattık.
1# Aynı gece lambası Raspberry Pi Pico'da (MicroPython) / The same night light on Raspberry Pi Pico (MicroPython)
2from machine import Pin, ADC, PWM
3import time
4
5led = PWM(Pin(14)) # LED + 220 ohm direnç / LED + 220 ohm resistor
6led.freq(1000) # PWM frekansı 1 kHz / PWM frequency 1 kHz
7buton = Pin(2, Pin.IN, Pin.PULL_DOWN) # buton 3V3'e, pull-down / button to 3V3, pull-down
8ldr = ADC(26) # GP26 = ADC0, LDR + 10k bölücü / GP26 = ADC0, LDR + 10k divider
9ESIK = 25000 # 0-65535 arası karanlık eşiği / darkness threshold on 0-65535
10
11sistem_acik = True # butonla açılıp kapanır / toggled with the button
12onceki = 0 # önceki buton durumu / previous button state
13son_yazma = time.ticks_ms() # son yazma zamanı / last print time
14
15while True:
16 b = buton.value()
17 if b == 1 and onceki == 0: # yalnız basıldığı an / only at the moment of the press
18 sistem_acik = not sistem_acik
19 time.sleep_ms(30) # basit debounce / simple debounce
20 onceki = b
21
22 isik = ldr.read_u16() # 0 karanlık, 65535 aydınlık / 0 dark, 65535 bright
23 if sistem_acik and isik < ESIK:
24 # karardıkça daha parlak / brighter as it gets darker
25 led.duty_u16(65535 - isik * 55000 // ESIK)
26 else:
27 led.duty_u16(0)
28
29 if time.ticks_diff(time.ticks_ms(), son_yazma) >= 500: # yarım saniyede bir / every half second
30 son_yazma = time.ticks_ms()
31 print("Isik:", isik, " Sistem:", "acik" if sistem_acik else "kapali")Aynı projeleri telefonda bloklarla açmak
mBlock'ta kurduğun blok mantığını bilgisayar başında değilken de sürdürmek istersen BlueGrays uygulamasına göz atabilirsin. Uygulamadaki 100'den fazla Arduino, ESP32 ve Raspberry Pi Pico projesinin kodu, Blockly tabanlı kendi bloklarımızla da hazır. Bir projede Bloklarla göster anahtarını açtığında kodun yerine aynı programın blok hâli gelir; Blokları anla sekmesi de her bloğun ne yaptığını adım adım anlatır. Bu yazıdaki LED yakma, trafik lambası, butonla LED, LDR gece lambası, buzzer, park sensörü ve potansiyometreli servo etkinliklerinin hepsi orada hem bloklarla hem Arduino C koduyla var; ikisi arasında tek dokunuşla geçebilirsin. mBlock'ta kendi kurduğun diziyi uygulamadaki bloklarla karşılaştırmak, aynı mantığın iki farklı araçta nasıl kurulduğunu görmenin kolay bir yolu.
Yukarıda resmi bir mBlock cihazı olmadığını söylediğimiz ESP32 ve Pico için de uygulamada bloklu projeler var: önce blok hâline bakıp ardından aynı projenin Arduino C ya da MicroPython koduna geçebilirsin. Uygulamanın Kod rehberinde digitalWrite, if/else ve döngüler gibi temel komutların örnekleri de bloklarla gösteriliyor. Öğrendiklerini pekiştirmek istersen Günün soruları her gün A1'den C2'ye seviyelere göre 5 soru, haftalık sıralama ve rozetler sunuyor.
Sık bağlantı sorunları ve çözümleri
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| Port listesi boş | Yalnız şarj taşıyan kablo ya da CH340 sürücüsü yok | Veri kablosu kullan, CH340 sürücüsünü kur; Aygıt Yöneticisi'nde "USB-SERIAL CH340 (COM3)" gibi bir satır görünmeli |
| Port görünüyor ama bağlanmıyor | Port başka bir program tarafından kullanılıyor | Arduino IDE'nin Seri Monitör'ünü, ikinci mBlock penceresini ya da web sekmesini kapat |
| Bağlantı var, yükleme başarısız | Cihaz kütüphanesinde yanlış kart seçili | Kartın tam modelini seç; klon Nano'da Arduino Nano (old) dene |
| Web sürümünde port listesi açılmıyor | Tarayıcı seri portu desteklemiyor | Chrome ya da Edge'in güncel sürümünü kullan |
| Leonardo web sürümünde bağlanmıyor | Doğrudan bağlantı Leonardo, Micro ve Yun'u desteklemiyor | mLink kur ya da masaüstü sürümü kullan |
| Canlı modda bloklar tepki vermiyor | Firmware yok ya da yüklenen bir programla silinmiş | Setting > Update Firmware ile firmware'i yeniden yükle |
| Yükleme bitti ama program çalışmıyor | Bloklar when Arduino Uno starts up altında değil | Programı şapka bloğuna bağla; boşta duran bloklar koda çevrilmez |
| Program donuyor ya da kart kendini resetliyor | Servo ya da motor USB'den fazla akım çekiyor | Servo ve motorları harici 5 V kaynaktan besle, GND'leri birleştir |
| mLink kurulmuyor ya da açılmıyor | Antivirüs ya da güvenlik duvarı engelliyor | Kuruluma izin ver, mLink'i güvenilir listeye ekle |
Sorunun mBlock'tan mı yoksa karttan mı kaynaklandığını anlamanın kısa yolu, aynı karta Arduino IDE ile Blink örneğini yüklemeyi denemektir. Arduino IDE de avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00 gibi bir hata veriyorsa kart ile bilgisayar haberleşemiyor demektir: sorun port, kablo, kart türü ya da önyükleyicidedir. Bu hatanın bütün sebeplerini Arduino kod yüklenmiyor rehberinde ele aldık; CH340 yongası ve sürücüleri hakkında daha fazlası için USB-TTL dönüştürücü yazısına bakabilirsin. Servo bağlıyken kart kendini resetliyorsa Arduino kendini resetliyor yazısındaki besleme önerileri işine yarar.
mBlock ile yapabileceğin proje fikirleri
- Yaya butonlu trafik lambası: Butona basınca araç ışığı kırmızıya döner, yaya yeşili yanar; devre ve kod için Arduino trafik lambası yazısına bak.
- Park sensörü: HC-SR04 ile mesafe azaldıkça hızlanan bir bip sesi ve yanan LED sayısı.
- Engelden kaçan robot: İki motor ve bir mesafe sensörüyle önündeki engeli görüp yön değiştiren araç; ayrıntılar engelden kaçan robot rehberinde.
- Çizgi izleyen robot: Kızılötesi sensörlerle siyah bant üzerinde ilerleyen yarışma robotu (çizgi izleyen robot).
- Sahne kumandası: Potansiyometre ya da joystick ile sahnedeki bir uzay gemisini yöneten canlı mod oyunu.
- Otomatik bitki sulama: Toprak nem sensörü kuru toprak algıladığında küçük bir pompayı çalıştıran sistem.
- Servo radar: Servo üzerine takılı mesafe sensörüyle çevreyi tarayıp sahnede radar ekranı çizen proje (Arduino radar).
- Robot araba: mBlock'ta öğrendiğin motor ve sensör mantığını Arduino robot araba yapımı projesine taşı.
mBlock, blok kodlamanın rahatlığıyla gerçek bir Arduino'yu programlamanın ve hazır olduğunda metin koda geçmenin en yumuşak yoludur. Elinde henüz kart yoksa aynı etkinlikleri Tinkercad Arduino simülasyonu ile tarayıcıda deneyebilirsin. BlueGrays uygulamasında LED yakma, trafik lambası, butonla LED, LDR gece lambası, buzzer, HC-SR04 park sensörü ve potansiyometreli servo projelerinin adım adım devre şemalarını ve kodlarını bulabilir, aynı projeleri bloklarla da açıp mBlock'ta kurduğun her etkinliğin blok ve metin kodlu hâlini tek dokunuşla karşılaştırabilirsin.
Sıkça sorulan sorular
mBlock ücretsiz mi?
Evet. mBlock 5'in masaüstü, web ve mobil sürümleri ücretsizdir ve Arduino'yu programlamak için hesap açman da gerekmez. Yalnızca yapay zekâ ve bulut hizmeti kullanan bazı uzantılarda günlük kullanım sınırı vardır ve bunlar için giriş yapman istenir.
mBlock Arduino'yu neden görmüyor?
En sık sebep yalnızca şarj taşıyan bir USB kablosu ya da eksik CH340 sürücüsüdür; klon kartların çoğu bu yongayı kullanır. Kartı bir veri kablosuyla doğrudan bilgisayara tak, CH340 sürücüsünü kur ve Arduino IDE'nin Seri Monitör'ü gibi portu kullanan programları kapat. Port görünüyorsa bağlantı penceresinde Show all connectable devices kutusunu işaretleyip doğru portu elle seç.
mBlock'ta canlı mod ile yükleme modu arasındaki fark nedir?
Canlı modda program bilgisayarda çalışır ve komutları USB üzerinden Arduino'ya gönderir; sonuç anında görünür ama kablo çıkınca program durur ve kartta mBlock firmware'i yüklü olmalıdır. Yükleme modunda ise bloklar Arduino C'ye çevrilip karta kalıcı olarak yazılır; program kablo olmadan da çalışır ve when Arduino Uno starts up bloğuyla başlamalıdır.
mBlock kodunu Arduino IDE'de kullanabilir miyim?
Evet. Yükleme modunda sağdaki Arduino C kod panelini açıp kodu kopyalayabilir, Arduino IDE'ye yapıştırıp derleyebilirsin. mBlock forever bloğunu setup() içinde bir while(1) döngüsüne çevirir ve değişkenleri float tanımlar; kod bu hâliyle çalışır ama okunabilirlik için loop() yapısına göre sadeleştirmen iyi olur.
mBlock ESP32 ya da Raspberry Pi Pico'yu destekliyor mu?
mBlock'ta Makeblock'un CyberPi ve HaloCode gibi ESP32 tabanlı kartları programlanabilir, ancak sıradan ESP32 geliştirme kartları ve Raspberry Pi Pico için resmi cihaz desteği yoktur. Bu kartlarda ESP32 için Arduino IDE, Pico için Thonny ile MicroPython kullanmak daha sağlıklıdır; blokla öğrendiğin mantık aynen geçerlidir.
mBlock 3 mü mBlock 5 mi kullanmalıyım?
Yeni başlıyorsan mBlock 5'i kullan. mBlock 3'ün Flash tabanlı web editörü güncel tarayıcılarda artık çalışmıyor, 32 bitlik Mac sürümü de macOS 10.15 ve sonrasında açılmıyor. mBlock 5 Scratch 3.0 tabanlıdır, mBlock 3 ve Scratch projelerini açabilir ve yeni kartlarla uzantılar ona ekleniyor.
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

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.

Buton İle Led Yakma (On Off)
Bir butona bir kez basınca ışık yanar, bir daha basınca söner; tıpkı odandaki lamba düğmesi gibi. Arduino her basışı fark edip LED'in durumunu tersine çevirir, düğme içindeki minik titreşimler ışığı k

Ldr İle Gece Lambası
Hava karardığında kendiliğinden yanan, sabah olunca sönen küçük bir gece lambası. Işık sensörü odadaki aydınlığı ölçer; Arduino ortam yeterince karanlıksa LED'i yakar, aydınlanınca söndürür. Sokak lam

Buzzer Kullanımı
Kapı zili ya da alarm sesi nasıl çıkar, hiç merak ettin mi? Arduino küçük bir buzzer'ı kısa aralıklarla öttürür: bip, sus, bip, sus. Sesin elektrikle nasıl üretildiğini görür, ileride melodi çalan pro

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

Potansiyometre İle Servo Motor Kullanım
Potansiyometrenin düğmesini çevirdikçe servo motorun kolu da onunla birlikte döner; düğmenin bir ucu sıfır dereceye, öbür ucu yarım tura karşılık gelir. Arduino düğmenin konumunu sürekli okur ve servo

HC-SR04 ile Park Sensörü
Arabalardaki park sensörünün küçük bir benzeri: bir şey yaklaştıkça bip sesleri hızlanır. Mesafe sensörü önündeki nesneyi ölçer; 20 santimetreden uzaktaysa yeşil LED yanar, daha yakına gelince kırmızı
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ç

