Rehberler · 14 dk okuma

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 ile programlanan Arduino Uno R3 kartı
mBlock'ta en sorunsuz çalışan kart Arduino Uno'dur; pin 13'e bağlı dahili L LED'i sayesinde ilk denemeler için hiçbir ek parça gerekmez.

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.

ÖzellikmBlock 5
GeliştiriciMakeblock
Temel aldığı ortamScratch 3.0 (Scratch ve mBlock 3 projelerini açabilir)
FiyatÜcretsiz
SürümlerWindows 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 diliArduino kartlarında Arduino C, Makeblock kartlarında ve sahnede Python
Proje dosyası.mblock
Arayüz diliTürkçe dahil onlarca dil

mBlock kurulumu: masaüstü ve web sürümü

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

ÖzellikMasaüstü sürümWeb sürümü
KurulumGerekir (Windows, macOS)Gerekmez, tarayıcıda açılır
Tarayıcı şartıYokChrome ya da Edge (seri port desteği için)
Arduino bağlantısıUSB kablosu ve sürücü yeterliDoğrudan bağlantı ya da mLink
Leonardo, Micro, YunDesteklenirYalnız mLink ile
Chromebook ve LinuxMasaüstü sürümü yokChrome ile çalışır
Projeyi kaydetmeBilgisayara .mblock dosyasıHesaba ya da bilgisayara indirerek
Okul için uygunlukYavaş ya da kısıtlı ağlarda daha sorunsuzKurulum yetkisi olmayan bilgisayarlarda pratik

Cihaz ekleme: Arduino Uno'yu mBlock'a bağlamak

  1. Arduino'yu USB kablosuyla bilgisayara tak; kartın ON (güç) LED'i yanmalı.
  2. 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.
  3. + 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.
  4. 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.
  5. 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.

mBlock ile kullanılan Arduino Nano kartı
Klon Arduino Nano'larda genellikle CH340 USB yongası ve eski önyükleyici bulunur; mBlock'ta Arduino Nano (old) seçeneğiyle program yüklenir.
En sık yaşanan bağlantı sorunu yanlış kablodur. Telefon şarjından kalan bazı USB kabloları yalnızca güç taşır, veri hattı yoktur: kartın ışığı yanar ama bilgisayar portu hiç görmez. Kabloyu bir telefona takıp dosya aktarabiliyorsan veri kablosudur. Ayrıca kartı USB çoklayıcı (hub) yerine doğrudan bilgisayarın USB girişine tak.

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.

ÖzellikCanlı mod (Live)Yükleme modu (Upload)
Program nerede çalışır?Bilgisayarda, komutlar USB ile giderArduino'nun kendi işlemcisinde
Başlangıç bloğuwhen green flag clicked, tuşa basılınca gibi olaylarwhen Arduino Uno starts up
USB kablosuSürekli takılı olmalıYalnız yükleme sırasında gerekir
Arduino'daki yazılımmBlock firmware'iSenin derlenmiş programın
ZamanlamaHer komut USB'den gidip geldiği için daha yavaş ve düzensizMilisaniye, hatta mikrosaniye hassasiyetinde
Kuklalarla etkileşimDeğişken ve yayın (broadcast) bloklarıyla doğrudanYalnız destekleyen cihazlarda Upload Mode Broadcast uzantısıyla
En uygun kullanımDeneme, hata ayıklama, sahne oyunlarıRobot, alarm, pille çalışan bitmiş proje

Firmware yükleme: Arduino'yu canlı moda hazırlamak

  1. Arduino'yu bağla (Connect) ve mod anahtarını Live (canlı) konumuna getir.
  2. 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.
  3. 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.
  4. 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.
Canlı modun firmware'i ile senin programın aynı flaş belleği paylaşır. Yükleme modunda bir program yüklediğinde (ya da Arduino IDE'den bir kod attığında) firmware silinir. Sonradan canlı moda dönersen bloklar tepki vermez; bu durumda firmware'i yeniden yüklemen yeterlidir. Derste iki mod arasında sık geçiş yapıyorsan bu adımı unutmamak için tahtaya not et.

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 upYükleme modunda programın başladığı şapka blokKarta yüklenen her program
set digital pin (13) output as (high)Pini HIGH (5 V) ya da LOW (0 V) yaparLED, aktif buzzer, röle
read digital pin (2)Pindeki seviyeyi doğru ya da yanlış olarak okurButon, PIR, kızılötesi engel sensörü
read analog pin (A) (0)A0–A5 pinlerindeki gerilimi 0–1023 arası bir sayıya çevirirLDR, potansiyometre, toprak nem sensörü
set pwm pin (5) output as (128)0–255 arası PWM sinyali üretirLED parlaklığı, DC motor hızı
set servo pin (9) angle as (90)Servoyu 0–180 derece arasında bir açıya götürürSG90 bariyer, robot kol
play pin (8) with note (C4) for (0.25) beatPasif buzzerdan nota çalarMelodi, kapı zili
forever / repeat (10) / if … then … elseDöngü ve koşul bloklarıSürekli kontrol, sayma, karar verme
wait (1) secondsProgramı belirtilen süre bekletirYanıp sönme, trafik lambası
LED
LED
Push buton
Push buton
LDR ışık sensörü
LDR ışık sensörü
Potansiyometre
Potansiyometre
SG90 servo motor
SG90 servo motor
Buzzer
Buzzer
HC-SR04 mesafe sensörü
HC-SR04 mesafe sensörü

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çaArduino UnoESP32Raspberry Pi PicoNot
LED + 220 Ω dirençD5GPIO 18GP14Uzun bacak (anot) pine, kısa bacak GND'ye
Buton + 10 kΩ pull-downD2GPIO 4GP2Butonun diğer ucu Uno'da 5V'a, ESP32 ve Pico'da 3V3'e
LDR + 10 kΩ dirençA0GPIO 34GP26 (ADC0)LDR besleme ile pin arasına, direnç pin ile GND arasına
Potansiyometre (orta uç)A1GPIO 35GP27 (ADC1)Kenar uçlar beslemeye ve GND'ye
SG90 servo (sinyal)D9GPIO 13GP16Kırmızı kablo 5 V (ESP32'de VIN, Pico'da VBUS), kahverengi GND
Pasif buzzerD8GPIO 25GP15Diğer ucu GND'ye
HC-SR04 Trig / EchoD11 / D12GPIO 26 / 27GP17 / GP18ESP32 ve Pico'da Echo hattı gerilim bölücüyle 3,3 V'a indirilmeli
Arduino Uno'da Servo kütüphanesi Timer1'i kullandığı için servo çalışırken D9 ve D10 pinlerinde PWM (analogWrite) çalışmaz; buzzerdan nota çalan tone() fonksiyonu da Timer2'yi kullandığından D3 ve D11'deki PWM'i bozar. Bu yüzden tabloda LED'i D5'e koyduk. ESP32 ve Pico 3,3 V ile çalışır: butonu ya da sensörleri bu kartların pinlerine 5 V ile besleyerek bağlama.

İlk program: Yükleme moduyla LED yakıp söndürmek

  1. Mod anahtarını Upload (yükleme) konumuna getir.
  2. Events kategorisinden when Arduino Uno starts up bloğunu çalışma alanına sürükle.
  3. Altına Control kategorisinden forever (sürekli tekrarla) bloğunu ekle.
  4. 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.
  5. 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.
  6. 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.

C++ (Arduino IDE)
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.

BlokArduino C karşılığı
when Arduino Uno starts upvoid setup() { … } içindeki kod
foreverwhile(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.

DersEtkinlikKullanılan bloklarÖğrenilen kavram
1Yanıp sönen sinyal lambası (D13 ya da D5)set digital pin, wait, foreverSıralı işlem, sonsuz döngü
2Trafik lambası (D5, D6 ve D7'de üç LED)set digital pin, waitZamanlama, durum sırası
3Butonla LED açma kapamaread digital pin, if … elseGiriş ve çıkış, koşul
4Otomatik gece lambasıread analog pin, küçüktür operatörüAnalog değer, eşik
5Potansiyometreyle LED dimmerread analog pin, set pwm pin, bölmeÖlçekleme, PWM
6Servo bariyer kapısıset servo pin, çarpma ve bölmeOrantı, açı
7Kapı zili ve melodiplay pin with note, repeatFrekans, nota, tekrar
8Park sensörü (HC-SR04 uzantısı)Uzantı bloğu, if … else, buzzerUzantı ekleme, mesafe ölçme
9Potansiyometreyle sahnede raket oyunuCanlı mod, değişken, kukla hareketiDonanı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.

Ders için küçük ama işe yarayan alışkanlıklar: projeyi her öğrencinin adıyla .mblock dosyası olarak kaydettir, çalışma alanına sağ tıklayıp blokları resim olarak dışa aktararak tahtada ya da çalışma kâğıdında paylaş, yeni sürümlerdeki blok arama ve blok devre dışı bırakma özelliğiyle hatalı bir parçayı silmeden geçici olarak kapat. Öğrencileri ikişerli çalıştırmak (biri blokları dizer, diğeri devreyi kontrol eder) hem hata ayıklamayı hızlandırır hem de kablo karmaşasını azaltır.

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.

  1. mBlock'ta Arduino C panelindeki kodu seçip kopyala; Arduino IDE'de yeni bir taslak (sketch) açıp yapıştır.
  2. 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ı.
  3. 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.
  4. float değişkenleri ihtiyaca göre int ya da bool yap ve pin numaralarına const int ile anlamlı adlar ver.
  5. 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.

C++ (Arduino IDE)
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.

C++ (Arduino IDE)
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.

MicroPython
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

BelirtiOlası sebepÇözüm
Port listesi boşYalnız şarj taşıyan kablo ya da CH340 sürücüsü yokVeri 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ıyorPort başka bir program tarafından kullanılıyorArduino IDE'nin Seri Monitör'ünü, ikinci mBlock penceresini ya da web sekmesini kapat
Bağlantı var, yükleme başarısızCihaz kütüphanesinde yanlış kart seçiliKartın tam modelini seç; klon Nano'da Arduino Nano (old) dene
Web sürümünde port listesi açılmıyorTarayıcı seri portu desteklemiyorChrome ya da Edge'in güncel sürümünü kullan
Leonardo web sürümünde bağlanmıyorDoğrudan bağlantı Leonardo, Micro ve Yun'u desteklemiyormLink kur ya da masaüstü sürümü kullan
Canlı modda bloklar tepki vermiyorFirmware yok ya da yüklenen bir programla silinmişSetting > Update Firmware ile firmware'i yeniden yükle
Yükleme bitti ama program çalışmıyorBloklar when Arduino Uno starts up altında değilProgramı şapka bloğuna bağla; boşta duran bloklar koda çevrilmez
Program donuyor ya da kart kendini resetliyorServo ya da motor USB'den fazla akım çekiyorServo ve motorları harici 5 V kaynaktan besle, GND'leri birleştir
mLink kurulmuyor ya da açılmıyorAntivirüs ya da güvenlik duvarı engelliyorKuruluma 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.

Canlı modda bir bloğa ya da blok grubuna tıklamak onu tek seferlik çalıştırır. Bir sorunu ararken programın tamamını değil, blokları tek tek tıklayarak dene: LED bloğu çalışıyor ama buton bloğu hep aynı değeri veriyorsa sorun bloklarda değil devrededir. Bazı okuma bloklarının yanında bir onay kutusu bulunur; işaretlersen okunan değer sahnede canlı olarak görünür.

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.

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 (On Off)
#10Başlangıç

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

4.8(100)
167
Ldr İle Gece Lambası
#12Başlangıç

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

4.8(102)
205
Buzzer Kullanımı
#13Başlangıç

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

4.7(89)
161
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
Potansiyometre İle Servo Motor Kullanım
#36Başlangıç
Premium

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

4.6(37)
52
HC-SR04 ile Park Sensörü
#28Orta
Premium

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ı

4.8(64)
85