Arduino Eğitim Kiti – Tüm Yıl İçin Arduino Müfredatı: Ders 29 Tepki Süresi Oyunu – Termometre Uygulaması için isterseniz sunu şeklinde alt taraftaki kutucuğu büyüterek takip edebilir, isterseniz de tüm sunu sayfalarının makale haline dönüştürülmüş versiyonu takip edebilirsiniz. İçerikler büyük oranda aynıdır. Sınıf ortamında kolaylık olması açısından sunu şeklinde de sunulmuştur.

Ders İçeriği:

Tepki Süresi Oyunu – Termometre Uygulaması

Ders Kazanımları:

  • Ses Şiddetine Göre Emojiler programını yardım almadan başarılı bir şekilde tasarlar.
  • Random Sayı Üretme programını yardım almadan başarılı bir şekilde tasarlar.

Oluşabilecek Hatalar:

Aşağıdaki programları çalıştırırken birtakım hatalarla karşılaşabilirsiniz. Bu hataların kodların yazımında meydana gelen hatalar dışında başka sebeplerle ortaya çıkması muhtemeldir. Bu hatalardan sık karşılaşılanlara aşağıda değinilmiştir.

Kart Seçilmesinden Kaynaklı Hata:

Arduino kurulumu gerçekleştirildikten sonra araçlar menüsünden doğru kartın seçilmesi gerekmektedir. Kart seçilmediğinde “Karta yüklenirken bir sorun oluştu.” benzeri bir hata alabilirsiniz.

USB Portun Seçilmesiyle İlgili Hatalar:

Arduino kurulumu gerçekleştirildikten sonra araçlar menüsünden doğru portun seçilmesi gerekmektedir. Bu port Arduino Uno’nun bilgisayara bağlandığı usb porttur. Farklı şekilde bilgisayarınızda usb driver yüklenmemiş olabilir. Bu gibi hatalarda “Port bulunamadı.” gibi hatalar almanız muhtemeldir.


Uyarı:

Aşağıdaki programı tasarlayıp çalıştırdığınızda LCD ekranda sadece parlaklık varsa ve bilgi alamıyorsanız bunun sebebi LCD ekranın kontrast ayarının düşük olması olabilir.

Bu ayar LCD ekranın arka kısmında (LCD ekranı yıldız tornavida ile sökmeniz gerekecek) I2C modülünün üzerindeki potansiyometre ile yapılabilir. Tornavida yardımı ile potansiyometreyi çevirerek kontrast düzeyini ayarlayabilirsiniz.

Ayrıca kodları yazarken I2C modülün adresini kendi modülünüzün adresine göre düzeltmeyi unutmayın!

(I2C modülünüzün adresini bilmiyorsanız 15. derste tarif edildiği şekilde bulabilirsiniz.)


Uygulama 1: Tepki Süresi Oyunu

Kullanılacak Malzemeler:

Bağlantı Şeması:

Bağlantılar şekildeki gibi yapılır.

  1. Arduino üzerindeki 5V pini breadboard üzerinde “+” hatta, GND pini ise breadboard üzerinde “-” hatta bağlanır.
  2. LCD ekranın bağlantıları aşağıdan yukarı doğru sırasıyla, “-” hatta, “+” hatta, A4 numaralı analog pine, A5 numaralı analog pine bağlanır.
  3. Buzzer breadboarda takıldıktan sonra kısa bacağı “-” hatta , uzun bacağı 13 nolu pine bağlanır.
  4. RGB LEDin ortak pini “-” hatta, kırmızı renk pini 8 nolu pine, yeşil renk pini 6 nolu pine, mavi renk pini 7 nolu pine bağlanır.
  5. Buton şekilde ki gibi yerleştirilir. Bir bacağına direnç bağlanır. direncin boşta kalan bacağı “+” hatta, direncin diğer bacağı 9 nolu pine, butonun boşta kalan bacağı ise “-” hatta bağlanır.

Kodlar:

Uygulamanın “.ino” dosyasını (kod dosyasını) ve kütüphanelerini buradan indirebilirsiniz.

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
int ledr=8;//ledin kırmızı bacağına bağlı pin
int ledb=7;//ledin mavi bacağına bağlı pin
int ledgr=6;//ledin yeşil bacağına bağlı pin
int buton=9;//push butona bağlı pin
int color;
int Beep;
int pse;//değişken bekleme
int tme;//süre
int rtme=0;//tepki süresi
void setup() {
lcd.begin();
pinMode(ledr,OUTPUT);
pinMode(ledb,OUTPUT);
pinMode(ledgr,OUTPUT);
pinMode(buton,INPUT);
digitalWrite(ledr,HIGH);
digitalWrite(ledr,HIGH);
digitalWrite(ledr,HIGH);
}
void loop() {
lcd.clear();
lcd.print("Basmaya hazırlan");
lcd.setCursor(0,1);
lcd.print("BAŞLA");
while(digitalRead(buton)==LOW)
{ tone(13,1200,30);
delay(1400);
noTone(13);
}
lcd.clear();
digitalWrite(ledr,LOW);
digitalWrite(ledgr,LOW);
digitalWrite(ledb,LOW);
randomSeed(analogRead(0));
color=random(1,4);
pse=random(500,1200);
while(color!=1 && digitalRead(buton)==HIGH){
digitalWrite(ledgr,LOW);
digitalWrite(ledb,LOW);
delay(pse);
randomSeed(analogRead(0));
Beep=random(1,4);
pse=random(750,1200);
if(Beep=1)
{
tone(13,1600,350);
delay(750);
noTone(13);
}
if(color=2)
{digitalWrite(ledgr,HIGH);
}
if(color=3)
{digitalWrite(ledb,HIGH);
}
delay(pse);
randomSeed(analogRead(0));
color=random(1,4);
}
if(color==1 && buton==HIGH){
digitalWrite(ledgr,LOW);
digitalWrite(ledb,LOW);
delay(pse);
tme=millis();
digitalWrite(ledr,HIGH);
while(digitalRead(buton)==HIGH){
delay(1);
}
lcd.display();
rtme=millis()-tme;
lcd.print("Tepki Süresi:");
lcd.setCursor(0,1);
lcd.print(rtme);
}
if(color!=1){
lcd.print("Released too");
lcd.setCursor(0,1);
lcd.print("soon!!");
tone(13,3000,1500);
delay(500);
noTone(13);
}
while(digitalRead(buton)==LOW){
delay(10);}
digitalWrite(ledr,HIGH);
digitalWrite(ledgr,HIGH);
digitalWrite(ledb,HIGH);
lcd.clear();
lcd.print("Basmaya hazırlan");
lcd.setCursor(0,1);
lcd.print("BAŞLA");
int Time=0;
delay(1000);
}

  • Yukarıdaki bağlantı yapıldığında ve kodlar Arduino Uno’ya yüklendiğinde çalışma tamamlanmış olacaktır.
  • Bu uygulama butona basmanızla başlar.
  • Buzzer dikkatinizi dağıtmak için ara sıra öterken sizin LED kırmızı yandığında butona basmanız beklenir.
  • Kırmızı ledin yanması ile butona basmanız arasında geçen süre ise (tepki süreniz) LCD ekranda size gösterilir.

Uygulama 2: Termometre

Kullanılacak Malzemeler:

Bağlantı Şeması:

Bağlantılar şekildeki gibi yapılır.

  1. Arduino üzerindeki 5V pini breadboard üzerinde “+” hatta, GND pini ise breadboard üzerinde “-” hatta bağlanır.
  2. RGB LED’in ortak pini “-” hatta, kırmızı renk pini 11 nolu pine, yeşil renk pini 10 nolu pine, mavi renk pini 9 nolu pine bağlanır.
  3. Isı ve Nem Sensörü’nün VCC pini “+” hatta, GND pini “-” hatta, DATA pini ise 3 nolu dijital pine bağlanır.

Kodlar:

Uygulamanın “.ino” dosyasını (kod dosyasını) ve kütüphanelerini  buradan indirebilirsiniz.

int RedPin=11; //rgb ledin bağlandığı bacaklar
int GreenPin=10;
int BluePin=9;
#include <DHT.h> //dht.h kütüphanesi tanımlanması
#define DHTPIN 3 //DHT ısı ve nem sensörünün bağlandığı pin
#define DHTTYPE DHT11 //DHT modelinin tanımlanması
DHT dht(DHTPIN, DHTTYPE); //dht değişkeninin tanımlanması
void setup() {
Serial.begin(9600); //serial ekranın başlatılması
pinMode(RedPin, OUTPUT); //pinlere çıkış sinyalinin verilmesi
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
pinMode(3,INPUT); //dht sensörün bağlandığı pin
dht.begin();
}
void loop()
{
float t=dht.readTemperature(); //sıcaklık değerinin ölçülmesi
if(t<15) //sıcaklık değeri 15den küçükse
{
Serial.println(t); //değeri yaz
renkAyarla(0,0,255); //mavi, ledi mavi renkte yaz
delay(500); //500 milisaniye bekle
}
else if (15<t and t<20)//sıcaklık değeri 15 den büyük 20den küçükse
{
Serial.println(t); //değeri yaz
renkAyarla(0,255,0); //yeşil , ledi yeşil renkte yaz
delay(500); //500 milisaniye bekle
}
else if (t>20)//sıcaklık değeri 20 den büyükse
{
Serial.println(t); //değeri yaz
renkAyarla(255,0,0); //kırmızı , ledi kırmızı renkte yaz
delay(500); //500 milisaniye bekle
}
}
void renkAyarla(int kirmizi,int yesil, int mavi) //renkAyarla adında bir fonksiyon tanımlandı
{
analogWrite(RedPin,kirmizi);
analogWrite(GreenPin,yesil);
analogWrite(BluePin,mavi);
}

  • Yukarıdaki bağlantı yapıldığında ve kodlar Arduino Uno’ya yüklendiğinde çalışma tamamlanmış olacaktır.
  • Bu uygulamada Isı ve Nem Sensörü ortamdaki sıcaklığı ölçecektir.
  • Ölçüm değerine göre RGB LED renk değiştirecektir.
  • Eğer sıcaklık 15 derecenin altındaysa mavi, 15 ile 20 arasında ise yeşil, 20 den büyük ise kırmızı renk ışık verecektir.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz