Bu uygulamada Cumhuriyetimizin 100. Yılı’nı kodlarla ifade etmek istedik. Etkinlik iki bölümden oluşacaktır. Birinci bölüm sadece web üzerinden yapılabilecek ve bu uygulamayı yapmak için internet erişimi olan bir bilgisayar veya etkileşimli tahta yeterli olacaktır. İkinci bölüm ise elinde Micro:Bit olanlar için servo motor ile yapılacaktır. Servo motora bir adet Türk Bayrağı takılarak, Micro:Bit’in bu bayrağı sallaması için kodlar yazılacaktır.
Bestesi Sefai ACAY’a ait olan “Cumhuriyet Hürriyet Demek” müziğinin notalarını macecode.microbit.org sitesi üzerinden kodlayacağız. Aynı zamanda Micro:Bit’in ekranında kayan yazı şeklinde “CUMHURİYET 100 YASINDA!” yazısı görünecektir.
Biz müziğin kontrolünün bizde olması için “A” butonu ile müziği başlatacağız, sizler burada başlanğıç kodunu “program başladığında” şeklinde kullanabilirsiniz. Bu durumda program başladığı anda müzik başlayacaktır.
Micro:Bİt’in müzik çalması için Müzik menüsünü kullanacağız. Gerekli olan kod bloğu aşağıda verilmiştir. Ayrıca Simülatöre tıklayarak kodları deneyebilir ve indirebilirsiniz.
Öncelikle ekranda kayan yazı şeklinde “CUMHURİYRT 100 YAŞINDA!” yazdıralım. Bunun için aşağıdaki kodları yazıyoruz.
Ardından “Cumhuriyet Hürriyet Demek” müziğinin notalarını kodlar ile bir araya getiriyoruz.Bunun için aşağıdaki kodları yazıyoruz.
Bu bölümde Micro:Bit’e bir adet servo motor bağlanacaktır. Servo motorun açı değerleri kodlar ile sürekli olarak değiştirilecektir. Böylece Micro:Bit ,motora bağlanan Türk Bayrağı’nı devamlı olarak sallama hareketini gerçekleştirecektir. Bu bölümü simülasyon üzerinde de yapabilirsiniz.
Servo motor sayısı artırılarak, bayrak sayısı artırılabilir.
Başlayalım. Önce Tinkercad sitesine giriş yapın. Bu siteyi 3D tasarımlar içinde kullanabilirsiniz.
Devre tasarımı seçiyoruz ve aşağıdaki malzeme listesini sol taraftaki alana sürüklüyoruz.
Yukarıdaki kodları yazdıktan sonra simülasyonu başlat diyerek aşağıdaki gibi çalışmasını gözlemleyiniz. Eğer yapamazsanız sayfanın altında yapılmış uygulama linki bulunmaktadır
Uygulama Yapılmış Hali: https://www.tinkercad.com/things/gN72P2899sn
]]>int trigPin = 12;
int echoPin = 13;
long sure, mesafe;
void setup () {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(2, OUTPUT);
Serial.println("Arduino İle Mesafe Sensörü Uygulaması Başlatılıyor...");
delay(3000);
}
void loop () {
mesafeFonk();
Serial.print(mesafe);
Serial.println(" cm uzaklıkta");
if (mesafe <= 20 && mesafe >= 15) {
digitalWrite(2, HIGH);
}
else if (mesafe <= 14 && mesafe >= 10) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
else if (mesafe <= 9 && mesafe >= 5) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
else if (mesafe <= 4) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
buzerSinyal();
}
else {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
}
void buzerSinyal() {
digitalWrite(6, HIGH);
delay(200);
digitalWrite(6, LOW);
delay(200);
}
void mesafeFonk() { // Mesafeyi ölçmek için fonksiyon.
digitalWrite(trigPin, LOW);
delayMicroseconds(3);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
mesafe = (sure / 29.1) / 2;
return mesafe; // Mesafeyi döndürüyoruz
}
İlk olarak değişkenler ve Mesafe Sensörünün Trig ve Echo pinleri tamamlanmıştır.”mesafeFonk()” Fonksiyonu ile mesafe değeri alınmıştır. Mesafe azaldıkça ledler sırasıyla yanacak ve son kısımda 5 ten küçükse tüm ledler yanacak ve Buzzer ses çıkartmaya başlar mesafenin yakınlığına göre yanan ledlerin sayısı artar.
]]>Simülatöre ulaşmak için tıklayınız.
Micro:bit’in led ekranında taş-kağıt-makas sembollerinden birinin görünmesini istiyoruz. Bu nedenle 3 seçeneğimiz mevcut. Amacımız led ekranda bu bu 3 seçeneğin rastgele çıkması. Bunu sağlamak için “rastgele deger seçimi (pick random)” kod bloğunu kullanacağız. Bu kod bloğu ile Micro:bit her sallandığında 0 ile 2 arasında rastgele bir değer (0-1-2) ürettireceğiz. Üretilen değeri saklamak amacıyla “sayi” adında bir de değişken oluşturuyoruz.
Üretilen bu değeri kontrol ederek, aldığı her bir değeri taş, kağıt veya makas görsellerinden biri ile eşleştireceğiz. Benim algoritmama göre üretilen değer :
“0” ise “Taş”,
“1” ise “Kağıt”
“2” ise “Makas”
görsellerini göstermesi yönünde. Siz sıralamayı kendinize göre tercih edebilirsiniz.
Bu oyunu kendinize göre ses ekleyerek ve başlangıç yönergeleri vererek geliştirebilirsiniz.
]]>#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 DHT11;
LiquidCrystal_I2C lcd(0x3f, 16, 2); // LCD Ekran özelliklerini tanımladık.
void setup()
{
lcd.begin(); // LCD Ekranı çalıştır.
DHT11.attach(2);
Serial.begin(9600); // Seri iletişimi başlatıyoruz.
Serial.println("DHT11 Test Programi");
}
void loop()
{
// Bir satır boşluk bırakıyoruz serial monitörde.
Serial.println();
// Sensörün okunup okunmadığını konrol ediyoruz.
// chk 0 ise sorunsuz okunuyor demektir. Sorun yaşarsanız
// chk değerini serial monitörde yazdırıp kontrol edebilirsiniz.
int chk = DHT11.read();
// Sensörden gelen verileri serial monitörde yazdırıyoruz.
Serial.print("Sicaklik (Celcius): ");
Serial.println((float)DHT11.temperature, 2);
Serial.print("Nem (%): ");
Serial.println((float)DHT11.humidity, 2);
lcd.setCursor(0, 0); // ilk satır
lcd.print("Sicaklik: ");
lcd.setCursor(10, 0); // ilk satıra 11. karekterden sonra yazdık.
lcd.print((float)DHT11.temperature, 2);
lcd.setCursor(0, 1); // ikinci satır
lcd.print("Nem: ");
lcd.setCursor(5, 1); // ikinci satıra 6. karekterden sonra yazdık.
lcd.print((float)DHT11.humidity, 2);
// 2 saniye bekliyoruz. 2 saniyede bir veriler ekrana yazdırılacak.
delay(2000);
}
]]>Malzemeler:
+ —> 5v Pin
– —> GND Pin
S –> 2 Dijital pin
DHT11 in 5v, Gnd ve Sinyal bağlantılarını yaptıktan sonra kod kısmına geçmeden dht11 modülünü kolaylıkla kullanmamızı sağlayan kütüphaneyi Arduino programının içine yüklemeliyiz. Aşağıdan indireceğiniz DHT11.zip dosyasını Arduino programı içinden Taslak -> Zip Kitaplığı ekle diyerek kolayca ekleyebilirsiniz.
#include <dht11.h>
dht11 DHT11;
void setup()
{
DHT11.attach(2);
Serial.begin(9600); // Seri iletişimi başlatıyoruz.
Serial.println("DHT11 Test Programi");
}
void loop()
{
// Bir satır boşluk bırakıyoruz serial monitörde.
Serial.println();
// Sensörün okunup okunmadığını konrol ediyoruz.
// chk 0 ise sorunsuz okunuyor demektir. Sorun yaşarsanız
// chk değerini serial monitörde yazdırıp kontrol edebilirsiniz.
int chk = DHT11.read();
// Sensörden gelen verileri serial monitörde yazdırıyoruz.
Serial.print("Nem (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Sicaklik (Celcius): ");
Serial.println((float)DHT11.temperature, 2);
Serial.print("Sicaklik (Fahrenheit): ");
Serial.println(DHT11.fahrenheit(), 2);
Serial.print("Sicaklik (Kelvin): ");
Serial.println(DHT11.kelvin(), 2);
// Çiğ Oluşma Noktası, Dew Point
Serial.print("Cig Olusma Noktasi: ");
Serial.println(DHT11.dewPoint(), 2);
// 2 saniye bekliyoruz. 2 saniyede bir veriler ekrana yazdırılacak.
delay(2000);
}
]]>#include <SoftwareSerial.h> // Software Serial kütüphanesini ekledik. SoftwareSerial bluetooth(10, 11); // Bluetooth TX, RX pinler const int solileri = 7; const int solgeri = 6; const int sagileri = 4; const int saggeri = 5; const int solHiz = 9; // Pwn pini hız ayarı için Jumperları sökünce const int sagHiz = 3; // Pwn pini hız ayarı için Jumperları sökünce int hiz = 175; void setup() { Serial.begin(9600); // Bilgisayar haberleşmesi başlat bluetooth.begin(9600); // Bluetooth haberleşmesi başlat pinMode(solileri, OUTPUT); pinMode(solgeri, OUTPUT); pinMode(solHiz, OUTPUT); //Motorlarımızı çıkış olarak tanımlıyoruz. pinMode(sagileri, OUTPUT); pinMode(saggeri, OUTPUT); pinMode(sagHiz, OUTPUT); } void loop() { if (bluetooth.available() > 0) { /*Bluetooth’tan veri bekliyoruz */ char tus = (char)bluetooth.read(); if ( tus == 'w' ) { ileri(); } if ( tus == 's' ) { geri(); } if ( tus == 'a' ) { sol(); } if ( tus == 'd' ) { sag(); } if ( tus == 'x' ) { dur(); } if ( tus == '+' ) { hiz = hiz + 25; Serial.println(hiz); // Serial ekranda Araç hızı görmek için if (hiz > 255) { hiz = 255; } } if ( tus == '-' ) { hiz = hiz - 25; Serial.println(hiz); // Serial ekranda Araç hızı görmek için if (hiz < 0) { hiz = 0; } } } } void ileri() { // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz. digitalWrite(sagileri, HIGH); // Sağ motorun ileri hareketi aktif digitalWrite(saggeri, LOW); // Sağ motorun geri hareketi pasif analogWrite(sagHiz, hiz); // Sağ motorun hızı 150 digitalWrite(solileri, HIGH); // Sol motorun ileri hareketi aktif digitalWrite(solgeri, LOW); // Sol motorun geri hareketi pasif analogWrite(solHiz, hiz); // Sol motorun hızı 150 } void sag() { // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz. digitalWrite(sagileri, HIGH); // Sağ motorun ileri hareketi aktif digitalWrite(saggeri, LOW); // Sağ motorun geri hareketi pasif analogWrite(sagHiz, 0); // Sağ motorun hızı 0 (Kapalı) digitalWrite(solileri, HIGH); // Sol motorun ileri hareketi aktif digitalWrite(solgeri, LOW); // Sol motorun geri hareketi pasif analogWrite(solHiz, hiz); // Sol motorun hızı 150 } void sol() { // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz. digitalWrite(sagileri, HIGH); // Sağ motorun ileri hareketi aktif digitalWrite(saggeri, LOW); // Sağ motorun geri hareketi pasif analogWrite(sagHiz, hiz); // Sağ motorun hızı 150 digitalWrite(solileri, HIGH); // Sol motorun ileri hareketi aktif digitalWrite(solgeri, LOW); // Sol motorun geri hareketi pasif analogWrite(solHiz, 0); // Sol motorun hızı 0 (Kapalı) } void geri() { // Robotun geri yönde hareketi için fonksiyon tanımlıyoruz. digitalWrite(sagileri, LOW); // Sağ motorun ileri hareketi pasif digitalWrite(saggeri, HIGH); // Sağ motorun geri hareketi aktif analogWrite(sagHiz, hiz); // Sağ motorun hızı 150 digitalWrite(solileri, LOW); // Sol motorun ileri hareketi pasif digitalWrite(solgeri, HIGH); // Sol motorun geri hareketi aktif analogWrite(solHiz, hiz); // Sol motorun hızı 150 } void dur() { // Robotun geri yönde hareketi için fonksiyon tanımlıyoruz. digitalWrite(sagileri, HIGH); // Sağ motorun ileri hareketi aktif digitalWrite(saggeri, LOW); // Sağ motorun geri hareketi pasif analogWrite(sagHiz, 0); // Sağ motorun hızı 0 (Kapalı) digitalWrite(solileri, HIGH); // Sol motorun ileri hareketi aktif digitalWrite(solgeri, LOW); // Sol motorun geri hareketi pasif analogWrite(solHiz, 0); // Sol motorun hızı 0 (Kapalı) }]]>
5110 LCD modülü 84×48 piksel çözünürlüğe sahiptir. Çalışma gerilimi Vcc = 3.3V’tur. Üzerinde Philps PCD8544 sürücü bulunmaktadır. LCD modül üzerinde pin bağlantı isimleri görülmektedir.
Arduino 5110 LCD ekran kütüphanesi buradan indirebilirsiniz.
#include <LCD5110_Basic.h> LCD5110 myGLCD(8, 9, 10, 11, 12); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; extern uint8_t MediumNumbers[]; void setup() { myGLCD.InitLCD(); } void loop() { myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("Bafra", CENTER, 0); myGLCD.print("Kodlama", CENTER, 8); myGLCD.print("Merkezi", CENTER, 16); myGLCD.print("KodlaBafra", CENTER, 45); delay(1000); myGLCD.setFont(MediumNumbers); for (int i =0; i<=20; i++) { myGLCD.printNumI(i,CENTER,24); delay(500); } myGLCD.enableSleep(); delay(1000); myGLCD.disableSleep(); myGLCD.setFont(SmallFont); myGLCD.print("", CENTER, 0); myGLCD.print("Hemen", CENTER, 16); myGLCD.print("Harekete", CENTER, 24); myGLCD.print("Gec", CENTER, 32); delay(5000); }
LCD5110_Basic kütüphanesinde bulunan diğer komutlar ise aşağıda görüldüğü gibidir.
myGLCD.InitLCD(); | Ekranı başlatır. |
myGLCD.setContrast(a); | a; 0-127 aralığında kontrast girilir. |
myGLCD.clrScr(); | Ekranı siler. |
myGLCD.setFont(SmallFont); | 6×8 piksel büyüklüğünde font |
myGLCD.setFont(MediumNumbers); | 12×16 piksel büyüklüğünde font |
myGLCD.setFont(BigNumbers); | 14×24 piksel büyüklüğünde font |
myGLCD.print(“a”,b,c); | a; metin girilir, b,c; koordinat |
myGLCD.printNumI(a,b,c); | a; sayı değeri ya da değişken, b, c; koordinat |
myGLCD.drawBitmap(a,b,c,d,e); | a, b; koordinat, c; resim adı, c, d; çözünürlük |
myGLCD.enableSleep(); | Uyku moduna geçer. |
myGLCD.disableSleep(); | Uyku modundan çıkar. |
İhtiyacınız olan malzemeler;
Devreyi hazırladıysak kartımızı bilgisayara bağlıyor ve IDE ye aşağıdaki kodları yazıp derleyip kartımıza yüklüyoruz.
void setup() { pinMode(4,OUTPUT); // led bağlantımız. Serial.begin(9600); } void loop() { int sensorValue = analogRead(A0); //A0 pininden tcrt değerini okuyoruz. Serial.print(sensorValue); //Serial Ekrana sensör değerini yazıyoruz. if (sensorValue < 900){ digitalWrite(4,HIGH); } else{ digitalWrite(4,LOW); } delay(10); }]]>
RC522 RFID kartı, NFC frekansı olan 13,56 MHz frekansında çalışan tagler üzerinde okuma ve yazma işlemeni yapabilen, düşük güç tüketimli, ufak boyutlu bir karttır.
Not: 125 KHz frekansında çalışan RFID kartlarını desteklememektedir. Yalnızca 13,56 MHz frekansında çalışan kartları desteklemektedir. NFC modülleri bu frekansta çalıştığı için NFC kartları ile beraber kullanılabilir.
Arduino Uno Bağlantıları aşağıdaki gibi olmalıdır.
Arduino’ya Rfid kütüphanemizi zip olarak kitaplığa eklemek için buradan indirebilirsiniz.
Arduino uygulamamızı iki aşamalı olarak yapıyoruz. Birinci aşamada arduino kodlarımız ile rfid kart ve rfid anahtarlığımızın seri numaraları bilgilerini okuyoruz. Daha sonra önce ikinci aşamada bu kartların seri numara bilgilerini kullanarak ledlerimiz kontrol edeceğiz.
Arduino Kodlarımız – Rfid Kart Okuma
#include <SPI.h> // SPI haberleşme kütüphanesi ekliyoruz. #include <RFID.h> // Rfid kütüphanemizi ekliyoruz. RFID rfid(10,9); //SDA, RST pini void setup() { Serial.begin(9600); //Serial port kanalımızı açıyoruz. SPI.begin(); // SPI çalıştır. rfid.init(); // Rfid okumaya hazır. } void loop() { if(rfid.isCard()) // Kart algılandı mı? { if(rfid.readCardSerial()) // Kart seri numaraları bilgileri okunuyor. { // Seri numarasını dizi olarak öğreniyoruz. Hexadecimal'a çeviriyoruz. Serial.print("Kart ID: "); Serial.print(rfid.serNum[0],HEX); Serial.print(rfid.serNum[1],HEX); Serial.print(rfid.serNum[2],HEX); Serial.print(rfid.serNum[3],HEX); Serial.println(rfid.serNum[4],HEX); } rfid.halt(); // Kart yeninden okumaya hazır. } }
Buradaki kodlarımız ile rfid kart ve rfid anahtarlığımızı okutuyoruz. Rfid Kartlarımızın seri numaralarını öğreniyoruz.
Şimdi uygulamamızı geliştiriyoruz. Burada hem kart okuyoruz hem de okuduğumuz kartlarla ledlerimizi yakıyoruz.
#include <SPI.h> #include <RFID.h> RFID rfid(10,9); //SS veya SDA pini, RST pini void setup() { Serial.begin(9600); SPI.begin(); rfid.init(); pinMode(2, OUTPUT); // yeşil led bağlantısı pinMode(3, OUTPUT); // kırmızı led bağlantısı } // yukarıda öğrendiğimiz Rfid seri kart numarasını buraya girebiliriz. byte kartim[5] = {0x14,0x42,0x68,0xEB,0xD5}; void loop() { boolean gecerlikart = true; if(rfid.isCard()) { if(rfid.readCardSerial()) { Serial.print("Kart ID: "); Serial.print(rfid.serNum[0],HEX); Serial.print(rfid.serNum[1],HEX); Serial.print(rfid.serNum[2],HEX); Serial.print(rfid.serNum[3],HEX); Serial.println(rfid.serNum[4],HEX); } for(int i=0; i<5; i++) { if(rfid.serNum[i] != kartim[i]) { gecerlikart = false; } } if(gecerlikart==true) { Serial.println("Merhaba"); digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); } else { Serial.println("Eslesme Saglanamadi!"); digitalWrite(3, HIGH); delay(1000); digitalWrite(3, LOW); } rfid.halt(); } }
Daha önce okuttuğumuz rfid kartların seri numaralarını burada birini geçerli kart olarak tanımladık. Geçerli kartı okuttuğumuzda devremize bağladığımız yeşil led yanacak ve serial ekranda “Merhaba” diyecek. Diğer rfid kartı okuttuğumuzda ise kırmızı led yanacak ve “Eşleşme Sağlanamadı” diyecek.
]]>