Monday, July 6, 2020

Wednesday, June 3, 2020

Kodlama B - Ders 1 - Breakout oyunu

Blockly Games bilmecelerini çözerek kodlama giriş (A) seviyesini tamamlamıştık. Kodlama orta (B) seviye ilk derslerinde Breakout oyununun basit bir halini geliştirecek ve bu sayede JavaScript programlama diline eğlenceli bir giriş yapacağız.

index.html kodu

Visual Studio Code'u çalıştırdığında siyah bir ekranla karşılaşırsan şu iki yöntemden birini kullanman gerekli:

Yöntem 1: Windows start butonuna bas, arama kutusuna cmd yazıp enter tuşuna bas, açılan siyah ekranda code --disable-gpu yaz, enter tuşuna bas, Visual Studio açılır.


Yöntem 2: Her seferinde yukarıdaki işlemi yapmak istemiyorsan Windows masa üstündeki Visual Studio Code ikonuna mouse ile sağ tıkla, Properties (Özellikler) seç, Target (Hedef) kutusunun sonuna bir boşluk bırakıp --disable-gpu ekle, OK (Tamam) tuşuna basıp ekranı kapat. Şimdi Visual Studio Code ikonuna mouse ile çift tıkladığında Visual Studio Code açılır.


Sunday, April 19, 2020

Arduino ile 23 Nisan Kutlu Olsun şarkısı

Arduino ve buzzer ile 23 Nisan Kutlu Olsun şarkısı için aşağıdaki kodu kullanabilirsiniz:

Friday, March 27, 2020

Başlangıç seviye dönem sonu değerlendirme

Engelden sakınan robotla birlikte çocuklar için kodlama ve robotiğin başlangıç seviyesini (seviye A) bitirdik. İlk 10 ders blockly games'te kod bloklarını kullanarak problem çözdük, ikinci 10 derste robotiğe ve elle kod yazmaya giriş yaptık. Videolarını hazırladığım ancak Coronavirüs salgını nedeniyle yüz yüze yapamadığımız son 3 dersi sınıfta tekrar edeceğiz. Çocuklara robotik kodlama öğretmenin faydası ve önemi için daha önceki yazıma bakabilirsiniz.

Farklı yaşlardaki farklı meziyetlere sahip çocuklar aynı şekilde ilerleyemeyeceğinden mümkün olduğunca her çocuğun dersleri kendi hızında takip etmesini sağlayacak bir sistem oluşturduk: Çocuklar ders videolarını evlerinde izliyor, yüz yüze derste o videoda anlamadıkları kısımları soruyorlar. Videoyu defalarca başa sarıp izleme şansına sahip olunuyor, sınıftaki zaman da daha verimli geçiriliyor. Anlatılanların hepsini anlamalarını beklemiyordum, yarısını anlasalar yeterliydi, maksat çocukları kodlama ve robotikle tanıştırmak ve ilgilerini çekmekti, bu hedefe ulaştığımızı düşünüyorum.

Önümüzdeki dönemde orta seviye (B) derslere başlayacağız. Yaklaşık 10 ders kodlama, 10 ders robotik olarak planlıyoruz. Orta seviye müfredatı öğrencilerin başlangıç seviyesine göre daha fazla çaba göstermesini gerektirecek, bu çaba daha ilginç problemlerin üstesinden gelebilme becerileri ile donanmalarını sağlayacak. Başlangıç (A) seviyesi derslerini de tekrar açacağız. Böylece hem yeni çocuklara yardımcı olabiliriz, hem de mevcut öğrencilerden isteyenler başlangıç derslerine tekrar katılarak bilgilerini pekiştirebilir, hatta her iki seviye dersini birden takip edebilirler.

Kişisel öğretmenlik deneyimi tek öğrenciye birkaç kez ders anlatmaktan ibaret olan benim için de öğretici bir süreç oldu. 13 çocuktan oluşan bir sınıfa ders anlatmanın zorluklarını gördüm, üstelik de ortalamanın üstünde ve motive çocuklar olmalarına rağmen. Okullardaki öğretmenlerin ne zor bir iş yaptıklarını artık daha iyi anlıyorum. Neyse ki zorluklar baş edemeyeceğim boyutlara varmadı ve sağ salim dönemi bitirdik.

Bugüne kadarki 6 aylık amatör öğretmenlik tecrübesi mevcut eğitim sisteminin handikapları, teoriden ziyade pratik bilgiye odaklanarak çocukların nasıl motive edilebileceği, sürenin nasıl daha etkin kullanılabileceği, ideal bir eğitim sisteminin nasıl olabileceği üzerine bol bol düşünmemi sağladı. Ümidim kurduğumuz hayalleri zamanla gerçekleştirebilmek...

Saturday, March 21, 2020

Robotik Ders 10 - Engelden sakınan robot

Ultrasonic sensör (HC-SR04) + servo motor = Basit sonar
  • Servo test 1 kodu.
  • Servo test 2 kodu.
  • Servo + sensör test kodu.
  • Engelden sakınan robot kodu.

Monday, March 2, 2020

Robotik Ders 9 - Cep Telefonu ile Robot Kontrolü


  1. HC-05 ismini değiştirme kodu
  2. Arduino Bluetooth RC Car uygulamasını Android telefona indir.
  3. Bluetooth test kodu
  4. Bluetooth ile robot motor kontrol kodu
Bilgisayarla kontrol (bilgisayarda bluetooth varsa): Windows Putty

Sorular:
  1. Ne kadar uzaktan robot kontrol edilebiliyor?
  2. Mesafe sensörünü (HC-SR04) kullanarak engele gelince durmasını nasıl sağlayabiliriz?
  3. Çizgi takiple birleştirip robot garsonun ilk halini oluştur: Sol oka basınca birinci pozisyona gidecek, sağ oka basınca ikinci pozisyona gidecek, 3 saniye bekleyip geri gelecek.

Thursday, February 27, 2020

Robotik Ders 8 - Çizgi İzleyen Robot


Çizgi takip sensörü test kodu.
Çigi takip eden robot kodu.
Sorular:
  1. Koddaki speed değerini en düşük kaç yapabiliriz, kodu değiştirip deneyerek bulalım.
  2. Daha keskin dönüşler yapmasını nasıl sağlayabiliriz? Yöntem1: Dönüşlerdeki speed değerini düşük tut. Yöntem2: Dönüşlerde dönüş miktarını azaltmak için daha düşük hızla ters yöne de dön.
  3. Speed değerini arttırınca ne oluyor, kodu değiştirip deneyerek bulalım.
  4. Robot hangi durumlarda siren sesi çıkarır?
  5. Robotu beyaz çizgi takip eder hale nasıl getiririz?

Wednesday, February 26, 2020

Robotik Ders 7 - Işık Takip Eden Robot

Robot montajı, önemli not: Çizgi takip sensörlerinden çıkan kabloları dMoto kartına takarken sensörün VCC pinine takılı kablo dMoto 5V pinine, GND kablosu GND'ye, DO kablosu da A0/1/2 pinlerine takılmalı. Buna dikkat edilmezse sensör yanabilir:




Robotu birleştirdikten sonra yapılacak testler:



LDR test kodu.

Motor test kodu.

LDR ve motor test kodu (ışığa yönelen robot).

Sorular:
  1. Sağ ve sol LDR fener tutmadığımızda dahi neden farklı değerler okuyor?
  2. Koddaki if(valDiff > 80) koşulunu kaldırırsak ne olur?
  3. Robotu ışığı takip etmek yerine ışıktan kaçınır hale nasıl getiririz?

Wednesday, February 12, 2020

Robotik Ders 6 - Sensör

Bir robot sensör, beyin (yazılım), güç kaynağı (pil) ve motorlardan oluşur. Bu dersimizde sensörlere giriş yapacağız.



Gece lambası: LDR ışık parlaklığını algılıyor. Işık azaldıkça LED parlaklığı artacak şekilde kodumuzu yazıyoruz. Not: LDR A6/A7, dMoto kartının üstüne ters yazılmış, A7 yazan yer aslında A6!

Mesafe ölçer: Bir cisim yaklaştıkça LED parlaklığı artacak. Çalışma prensibi: Sensör ses yayıp sesin yansımasını dinliyor. Yansıma geldiğinde ne kadar zaman geçtiğini hesaplıyor. Bu zamanı sesin hızı ile çarparsak sesin ne kadar yol gittiğini buluruz. Örneğin bir araba saatte 30km hızla yarım saat giderse 15km yol gider. Sesin havadaki hızı yaklaşık 340m/s (0.034cm/us), bir saniyede 340m gidiyor. Eğer sesin yansıma süresi 0.5 saniye olsa sesin gittiği toplam yol 170m olur. Sesin yansıdığı nesnenin uzaklığını bulmak için bu yolu ikiye bölmemiz gerekir, 170/2=85m cismin uzaklığı olur. Kod.

Soru: Mesafe sensörünü araba park sensörüne nasıl dönüştürebiliriz? LED'in parlaklığının yanında buzzer'dan ses çıkarmalıyız. Cisme yaklaştıkça buzzer sesi tizleşmeli. Daha önce yazdığımız buzzer koduna bakabiliriz.

Thursday, February 6, 2020

Robotik Ders 5 - Analog

Bu ders için gerekli parçalar:
  1. dMoto + Arduino Nano + Mini USB kablo
  2. Breadboard
  3. LED
  4. Potansiyometre
  5. 330R direnç
  6. Bir tane erkek-dişi jumper kablo
  7. Beş tane erkek-erkek jumper kablo

Şu ana kadar buton/LED aç/kapa işlemlerini digitalRead/Write (HIGH, LOW) ile yaptık. Eğer LEDin parlaklığını ayarlamak gibi işlemler yapmak istersek analogRead/Write fonksiyonlarını kullanmamız gerekir. Digital/Analog read ile dış dünyada neler olduğunu (butona basılma, sıcaklık ölçme) anlar, write ile dış dünyada iş yapar (LEDi yakma, motoru çalıştırma). Robot yapmak isteyenin bu fonksiyonların nasıl çalıştığını anlaması önemli.
  • Digital: 0V = 0 (LOW), 5V = 1 (HIGH), 2V = 0 (LOW), 3V = 1 (HIGH)
  • Nanonun analog pinleriyle kullanılabilir (read: A0...A7, write: 3, 5, 6, 9, 10, 11).
Fade.
Kodun kağıt üstünde çalıştırılması:
  1. İlk başta brightness = 0, change = 5
  2. brightness <= 0 doğru olduğundan bu if bloğuna girilir, Serial Monitor'e Increasing yazılır, change = 5 olur.
  3. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  4. brightness = brightness + change --> brightness = 0 + 5 = 5 olur.
  5. analogWrite(ledPin, brightness) --> LED pinine 5 değeri yazılır, LED parlaklığı artar.
  6. delay(30): Nano 30ms (0.03s) bekler
  7. Loop'un başına dönülür. Şimdi brightness = 5, change = 5
  8. brightness <= 0 yanlış olduğundan bu if bloğuna girilmez.
  9. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  10. brightness = brightness + change --> brightness = 5 + 5 = 10 olur.  
  11. analogWrite(ledPin, brightness) --> LED pinine 5 değeri yazılır, LED parlaklığı artar.
  12. delay(30): Nano 30ms (0.03s) bekler
  13. Bu şekilde loop tekrar eder ve brightness 255 olana kadar artar.
  14. Brightness = 255 olup loop'un başına dönülür.
  15. Brightness = 255, change = 5.
  16. brightness <= 0 yanlış olduğundan bu if bloğuna girilmez.
  17. Brightness 255 olduğunda brightness >= 255 doğru olduğundan bu if bloğuna girilir, Serial Monitor'e Decreasing yazılır, change = -5 olur.
  18. brighness = brightness + change --> brightness = 255 + (-5) = 255 - 5 = 250 olur.
  19. analogWrite(ledPin, brightness) --> LED pinine 250 değeri yazılır, LED parlaklığı azalır.
  20. delay(30): Nano 30ms (0.03s) bekler
  21. Loop'un başına dönülür. Şimdi brightness = 250, change = -5
  22. brightness <= 0 yanlış olduğundan bu if bloğuna girilmez.
  23. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  24. brightness = brightness + change --> brightness = 250 + (-5) = 250 - 5 = 245 olur. 
  25. analogWrite(ledPin, brightness) --> LED pinine 245 değeri yazılır, LED parlaklığı azalır.
  26. delay(30): Nano 30ms (0.03s) bekler
  27. Bu şekilde loop tekrar eder ve brightness 0 olana kadar azalır.
  28. Brightness = 0 olup loop'un başına dönülür.
  29. Brightness = 0, change = -5.
  30. brightness <= 0 doğru olduğundan bu if bloğuna girilir, Serial Monitor'e Increasing yazılır, change = 5 olur.
  31. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  32. brightness = brightness + change --> brightness = 0 + 5 = 5 olur. LED parlaklığı artar.
  33. analogWrite(ledPin, brightness) --> LED pinine 5 değeri yazılır, LED parlaklığı artar.
  34. delay(30): Nano 30ms (0.03s) bekler
  35. Bundan sonrası adım 11 ile aynı. Nano'nun eletriği kesilinceye kadar LED parlaklığı artıp azalarak böyle sürer gider...
Sorular:
  1. if (brightness <= 0) satırındaki "0" yerine "150" yazarsak ne olur?
  2. delay(30) satırını silersek ne olur? 
  3. delay(200) yaparsak ne olur?
  4. change değerini 1 yaparsak ne olur, 20 yaparsak ne olur?
Fade + pot. Kod.  LED'e 0..255 arasında değer yollanır, analogRead() 0..1024 arasında değer okur, bu değeri LED'in aralığına çekmemiz gerekir. map(val, 0, 1023, 0, 255): 0..1023 arasındaki val değerini 0..255 arasında bir değere çevirir. Örneğin val 512 ise map() fonksiyonu 128 değerini döndürür.


Friday, January 31, 2020

Robotik Ders 4 - Digital

Bu ders için gerekli parçalar:
  1. dMoto + Arduino Nano + Mini USB kablo
  2. Breadboard
  3. Buton
  4. LED
  5. 330R direnç
  6. 10K direnç
  7. 5 erkek-erkek jumper kablo
dMoto kartı üzerine monteli Arduino Nano kullanarak buton ile LED yakıp söndüreceğiz. Dersten önce aşağıdaki video izlenmiş, breadboard ile devre yapılmış ve kod yazılmış olmalı.



Sınıftaki dersin başında videoyu henüz izlememiş olanlardan kendi laptoplarında videoyu izlemeleri istenecek. Anlaşılmayan bir şey olduğunda videoda nereyi anlamadıkları sorulacak.

Videoda anlatılanları tam olarak yapabilenlere sorular:
  1. #define satırları ne işe yarıyor?
  2. setup() fonksiyonu ne zaman çalışmaya başlar, kaç kez çalışır?
  3. pinMode(..., OUTPUT) ne yapar?
  4. pinMode(..., INPUT) ne yapar?
  5. loop() fonksiyonu kaç kez çalışır, ne zaman durur?
  6. digitalRead() fonksiyonu ne yapar?
  7. if ... else ne yapar?
  8. digitalWrite() fonksiyonu ne yapar?
  9. Serial.println() fonksiyonu ne yapar?
Nano + buton + buzzer:
  • LEDi yakmak yerine buzzerdan ses çıkarmak istesek kodu nasıl değiştirmeliyiz? 10 dakika süre.
  • Serial monitöre LED HIGH/LOW yerine BUZZER ON/OFF yazmak için kodu nasıl değiştirmeliyiz? 5 dakika süre.
  • Kod.

Nano + buton basılıyken LED blink:
  • Buton basılıyken LEDin sürekli yanıp sönmesini sağlamak için kodu nasıl değiştirmeliyiz? delay(). 10 dakika süre.
  • Kod.

Wednesday, January 22, 2020

Robotik Ders 3 - Elektrik Devresi

Bu ders için gerekli parçalar:
  1. dMoto + Arduino Nano + Mini USB kablo
  2. Breadboard
  3. Pil kutusu + 4 AA pil
  4. 330R direnç
  5. LED
  6. Buton
Arduino IDE'de do re mi mi kodunu yaz, çalıştır.

Elektrik devresi nedir?

Breadboard ne işe yarar?


Kaynak: https://www.nutsvolts.com/magazine/article/smileys_workshop_an_avr_c_programming_series_part_11
Basit LED devresi:

Butonlu LED devresi:


Monday, January 13, 2020

Robotik Ders 2

Bu ders için gerekli parçalar:
  1. Üzerine Arduino Nano monteli dMoto kartı
  2. Mini USB kablo
Siren kodunu açıkla:
  • Kod C++ programlama dilinde yazıldı. C++ elektronikte yaygın olarak kullanılır.
  • #define: Yanındaki isim ve rakam çiftini rakamı isimle çağırabilmek için kullanmamızı sağlar. Örneğin #define NOTE_C4  262 ile kodda NOTE_C4 yazarak 262 yazmakla aynı sonucu elde ederiz. Rakam yerine isimleri daha kolay aklımızda tutabildiğimiz için yararlıdır. Kodda 262 gördüğümüzde bunun C4 notası olduğunu bilemeyebilir, şarkıyı koda bakarak anlayamayız.
  • Fonksiyonlar (setup(), play(), loop())
    • Blockly Games, Müzik, İşlevler'de yaptığımız şey fonksiyon tanımlamaktı.
    • setup(): Karta güç verildiğinde bir kez çalışır. Bir kez yapılması yeterli ayarlamalar için kullanılır.
      • pinMode()
        • buzzerPin, LED_BUILTIN (13): Arduino Nano'nun hangi numaralı bacaklarına buzzer (basit hoparlör) ve LED bağlı olduğunu gösterir
        • OUTPUT: Nano'nun bu bacaklara elektrik vereceğini ifade eder.
    • loop(): Sürekli çalışır, kartın elektriğini kesene kadar tekrar tekrar (saniyede 117bin kezi bulabilir) çağrılır.
      • digitalWrite(): Nano'nun hangi bacağında ne işlem yapılacağını belirler
        • Pin numarası = LED_BUILTIN
        • HIGH: Elektrik ver = LED'i yak.
        • LOW: Elektriği kes = LED'i söndür.
      • play(): Buzzer'dan ses çıkar
        • freq_Hz, duration_ms. Frekans örneği: Elin bir aşağı yukarı hareket süresi = period, frekans = 1/period. Elimin aşağı yukarı hareket süresi 2 saniye ise frekans 0.5Hz olur.
        • Ses dalgaları havanın titreşmesi ile olur, insan 20Hz ile 20kHz arasını duyabilir. 1kHz = 1000Hz, 1kg = 1g gibi.
        • tone(): frekans, Hz, süre, 1000 milisaniye [ms] = 1 saniye. Arduino Nano 16MHz'te çalışıyor, saniyede 16 milyon işlem yapabilir.
        • delay(): Girilen ms kadar bekler.
Kodda değişiklik yaparak sonuçlarını gözle:
  • loop() içerisindeki kodu kes ve setup() içerisine yapıştır, kodu karta yükle, öncekine göre ne farkı var?
  • play()'e girdi olarak verdiğin duration_ms değerlerini azalt, hangi değerde LED'in yanıp sönmesi ayırt edilemez oluyor?
  • NOTE_C4 değerini azalt, ne zaman ses bozuluyor? Aynısını arttırarak dene.
  • digitalWrite() fonksiyonuna LED_BUILTIN yerine buzzerPin'i girdi olarak verince ne oluyor?

Sunday, January 5, 2020

Robotik Ders 1

Bu ders için gerekli parçalar:
  1. dMoto kartı
  2. Arduino Nano
  3. Mini USB kablo
Elektronik kartları yanlardan tut, yoksa vücudundaki statik elektrik karttaki devrelere zarar verebilir.

Kırmızı dMoto kartını ve mavi Nano'yu poşetlerinden dikkatlice yanlardan tutarak çıkart. Nano küçük boyutlarına rağmen laptoplarımız gibi bir bilgisayardır, sadece kapasitesi daha düşüktür. Nano üzerindeki USB (metal kısım) ile kart üzerindeki iki ok aynı yöne bakmalı. dMoto kartının üzerine Arduino Nano'yu oturt, Nano'nun bacakları sokete tamamen girmeli. Buzzer üzerindeki beyaz etiketi çıkart.

Mavi kablonun bir ucunu Nano'ya diğer ucunu bilgisayara tak. Nano üzerinde ışığın yandığını gör.

Windows 10 kurulu bilgisayarlara Arduino IDE kur.
Arduino IDE'yi çalıştır. Eğer editör dili Türkçe ise dili İngilizce (English) yap, programı kapatıp aç:

Diğer ayarları yap:
Tools menüsünden Nano'yla ilgili ayarları yap:
  1. Board = Nano
  2. Processor = ATmega328P (Old Bootloader)
  3. Port = Kartın takılı olduğu COM portu. Not1: Bilgisayarda daha önceden tanımlı bir COM portu yoksa Nano'yu bağlayınca COM portu oluşur, o port IDE'den seçilir. Birden fazla COM portu varsa kartın COM port numarası Windows aygıt yöneticisinde Bağlantı noktaları (COM ve LPT) altında, yanında CH340 yazan portun numarasıdır. Not2: Eğer bilgisayarda Windows 10 değil de Windows 7 varsa CH340 driver kurmak gerekebilir.

Blink örneğini aç:


Upload (sağ ok) butonuna bas:

Programın Nano'ya yüklenmesi tamamlanınca Arduino IDE'nin ortasındaki yeşil kısımda "Done uploading" ve alt tarafta kırmızı "Thank you" mesajı görünür:

Program Nano'da çalışır ve Nano üzerindeki küçük kırmızı  LED saniyede bir yanıp sönmeye başlar.
Siren kodunu elle yaz. Kodu yazarken pek kullanmadığımız "#", "{" (süslü parantez), "[" gibi karakterlerin klavyeyle nasıl yazılacağı öğreniliyor. Not: Çift tırnak (") yerine tek tırnağı (apostrof) iki kez yazanlar oluyor.

Kodu kaydet ve Nano'ya yükle. İlk denemede kodda muhtemelen yazım hatası olacağından hata mesajı çıkacaktır. Örnek hata mesajı (kırmızı işaretli satırda buzzerPin yerine küçük p harfi ile buzzerpin yazılmış):

Hataları düzelt, tamamı düzelene kadar yükleme denemelerine devam et. Yükleme tamamlandıktan sonra Nano üzerinde LED yanıp sönerken dMoto kartı üzerindeki buzzer siren sesi çıkarır.

Nano'yu her bilgisayara bağladığında (yani elektrik verdiğinde) içinde yüklü olan program çalışır, programı tekrar yüklemen gerekmez.

Robotiğe giriş

Robotiğe giriş derslerinin sonunda çocuklar okul projelerinin yazılım ve elektronik kısımlarını kendi başlarına yapabilir hale gelecekler. Robotik derslerinin odağında yazılım var, robotik/elektronik projelerini kodlamayı ilginç kılmak ve bilgisayarın dış donanımlarla nasıl etkileşebileceğini göstermek için kullanıyorum.

Windows 10 kurulu bilgisayar olması ve aşağıdaki bileşenlerin alınması gerekiyor.
  1. Rodeo Kodlama Robotu BT
  2. Arduino Nano
  3. Çizgi takip sensörü, 3 adet
  4. Ultrasonik sensör
  5. Breadboard - 8.5*5.5 cm, 2 adet
  6. Direnç 330R, 100K, 10K, 1K
  7. 2K potansiyometre2 adet
  8. Servo SG902 adet
  9. Sg90 Servo Motor Bağlantı Aparatı
  10. Ultrasonik sensör tutucu
  11. 5mm Kırmızı Led, Sarı, Yeşil
  12. 4 Pinli Push Buton, 5 adet
  13. 40 Pin Ayrılabilen Jumper Kablo-100mm, Dişi-Dişi, Dişi-Erkek, Erkek-Erkek
  14. 40 Pin Ayrılabilen Jumper Kablo-200mm, Dişi-Erkek
  15. 4 adet kalem pil
Blockly Games'te sürükle bırak yöntemiyle kodlamaya giriş yapmıştık, artık elle kod yazmayı öğrenme zamanı. Geliştirme ortamı olarak Arduino IDE kullanıyoruz. İdeali VS Code + PlatformIO kullanmak olurdu ancak çocukların ellerindeki laptopların bir kısmında Win7 olunca Python da kurmak gerekiyor, bu da kurulum aşamasını uzatıyor, şimdilik Arduino IDE yeterli.

Kodlamaya giriş

Çocuklarda Windows 7 (tercihen Windows 10) işletim sistemi ve Chrome browser kurulu laptop olması gerekiyor. Kodlamaya giriş için incelediğim eğitim sistemleri içerisinde en iyisi Blockly Games. Bedava, Türkçe dil seçeneği var, offline olarak da kullanılabiliyor, web tabanlı olduğu için herhangi bir kurulum gerektirmiyor.

Kodlama oyun/puzzle şeklinde kurgulanmış, öğrenciler soruları çözerken temel yazılım kavramları ile tanışıyor. Derste ben beş dakika konuya giriş yapıyorum, sonra çocuklar kendi laptop'larında soruları çözmeye başlıyorlar. Her çocuk kendi hızında ilerliyor, öğretmen olarak rolüm takıldıkları yerde onlara yardımcı olmak. Tipik bir dersten ziyade atölye çalışması yapıyoruz. Blockly Games ile igili bir video (tüm videolar):

Dikkat edilmesi gereken konu bölümlerin son sorularının genellikle çok zor olabilmesi. Örneğin ilk bölümün onuncu sorusunu çocuğun çözebilme olasılığı sıfıra yakın, en fazla 10 dakika uğraşıp çözemese dahi bir sonraki bölüme geçmek lazım. Her bölüm kolay sorularla başlıyor.

Derslerimi 8-13 yaş arası 12 çocuğa iki ayrı grup halinde her hafta C.tesi sabah birer saat veriyorum. Blockly Games'te bir bölümü bitirmemiz genellikle iki ders saati, yani iki hafta sürüyor. Tüm bölümlerin tamamlanması 10 haftayı buluyor. Bir gruptaki çocuk sayısının 10'un altında, tercihen 5 civarında olması gerekli.

Kodlama bilgisayar gibi düşünebilmeyi gerektirdiği ve bu düşünce biçimi çocuklar için yeni olduğundan bazen aynı kavramı beş kez tekrar etmeniz gerekebiliyor. Sınıf mevcudu fazla olduğunda en fazla bir iki kez anlatabilirsiniz ve çocuklar konuyu tam anlamayabilirler.

Neden çocuklar için kodlama ve robotik?

Bu bloğu ilk-ortaokul dönemindeki çocukların kodlama ve robotik öğrenmesine yardımcı olmak için oluşturdum.

Yazılımı robotların beyni gibi düşünebiliriz. Robotlar sensörleri ile etraflarını algılar, beyinlerindeki yazılım ile karar verir ve motorları ile uygularlar:

Kodlama ve robotik neden önemli:
  • Otomasyon çağında yaşıyoruz, kodlama ve robotik gittikçe daha yaygın hale geliyor. Çocuk ileride mühendis olmayacaksa bile temel kavramları bilirse teknolojiyi kendi ihtiyaçları için kolayca kullanabilir.
  • Kodlama ciddi dikkat gerektirdiğinden çocukların dikkatini geliştirmek için iyi bir antrenman. Dikkat başta matematik olmak üzere hayatın her alanında gerekli.
  • Çocuk fen ve matematik konularını soyut, sıkıcı formüller halinde ezberlemek yerine projelerde uygular. Örneğin robotun etrafa çarpmaması için gerekli mesafe sensörünü kullanırken ses dalgalarını ve yol = hız * zaman denklemini öğrenir.
  • Bir problemi bilgisayarın/robotun çözebileceği hale getirmek problem tanımlama, alt parçalara ayırma (analiz) ve çözüm adımlarına dönüştürme (algoritma) becerilerini geliştirir.
  • Karşılaştığı sorunları basit adımlara ayırarak çözme becerisi gelişir. Örneğin robot bluetooth komutlarına yanıt vermiyorsa önce bluetoothu basit şekilde test etmesi gerekir.
  • Başta hiç anlamadığı karmaşık problemleri çözebilir hale gelmek kendine güveni ve daha zorlu işlerle uğraşma isteğini arttırır.
  • Çocuk bilgisayar okur yazarı olur. Örnekler: USB bellekten bir dosyayı masa üstüne alma, web sayfasındaki yazıyı kopyalama, pencereyi minimize etme, büyütme.
Robotik kodlama için matematik bilgisine ihtiyaç yok, lazım olduğu kadarını ben anlatıyorum. Çocuğun ilgisinin ve azminin olması yeterli. İlgisi yoksa eziyete dönüşür, çünkü özellikle 3. aydan sonraki dersler kolay değil. İlgisi olup olmadığı birkaç dersten sonra belli olur.

Ben makine mühendisliği mezunu bir yazılımcı olduğum için çocukların derslerde öğrendikleri konuların gerçek hayatta nerelerde uygulandığını anlatarak onları motive edebilir, yazılım ve mühendislik mesleğinin neye benzediği ve kariyer seçimi konusunda yardımcı olabilir, bilimsel/rasyonel düşünme becerilerini geliştirebilirim. Çocuklara ne seviyeye kadar yardımcı olabileceğim soruluyor zaman zaman; Çocukların yanısıra üniversitedeki bilgisayar mühendisliği öğrencilerine de rehberlik ediyorum. Yazılımı meslek olarak yaptığımdan konuya ilgisi olanlara mühendis oldukları güne kadar destek verebilirim. Yazılım eğitimi hobim olduğu için herhangi bir maddi karşılık beklemiyorum, yararlı olmak ve onların da büyüdükleri zaman çevrelerine yardım ettiklerini hayal etmek benim için yeterince tatmin edici.

Dersleri haftada birer saatten 3-4 ay kodlama, 3-4 ay robotik olmak üzere kurguladım. Çocuklar derse konuyla ilgili videoyu seyrederek hazırlıklı gelmeliler, yoksa haftada 1 saatle ilerlemek mümkün olmaz. Giriş seviyesini 6 ayda tamamladıktan sonra benzer şekilde orta ve ileri düzey derslerle devam edeceğim.

Ders seviyeleri:
  1. Seviye A1 (3-4 ay): Blockly Games
  2. Seviye A2 (3-4 ay): İlk robot, okul projesi yapabilir hale gelme
  3. Seviye B1 (3-4 ay): Javascript ile oyun programlama 1, GitHub/Gist
  4. Seviye B2 (3-4 ay): IoT (NodeJS, ESP32, glitch), PID'ye giriş, magnetic levitation, daha iyi çizgi takibi.
  5. Seviye C1 (3-4 ay): Javascript ile oyun programlama 2: Pathfinding
  6. Seviye C2 (3-4 ay): Robot yarışmalarına katılım (TeknofestODTÜ, İTÜ)
  7. İleri seviye: Yüz tanıma, simülasyon, oto rotalama, blockchain vb. uygulama alanı odaklı çalışma. Her uygulama 3-4 ay.
O anki seviyenin hedefine doğrudan hizmet etmeyen ayrıntılarla zaman kaybetmekten kaçınmalı, ilgiyi canlı tutmalıyım. Derslerde çocukların anlayamayacağı karmaşıklıkta konulara girmemem ancak ilerlemeyecek kadar da basitleştirmemem gerekli (zone of proximal development). Örneğin A2 seviyesinde Ohm Kanunu'ndan bahsetmezken B2 seviyesinde voltage divider'ı anlatabilirim.