Arduino ile Buzz Wire Oyunu Yapımı

Arduino hobi projeleri ve oyunları oluşturmak çok popilerdir. Sizlerle bu yazımızda Buzz Wire Oyunu Yapımına değineceğiz.

Bu proje için Arduino Uno, Buzzer ve iki Alüminyum tel kullanacağız. Oyun durumunu görüntülemek için 16×2 LCD kullanılacaktır. Labirent telin her iki ucu Arduino’nun dijital pim 2 ve 3’üne bağlanacak ve tutamak teli Arduino’nun Toprak pimine bağlanacaktır. Dijital pinler INPUT_PULLUP pinleri olarak tanımlanır. Böylece tutma teli labirent teline dokunduğunda, dijital pim durumunu düşük olarak değiştirir ve zil sesi çalacaktır.

Labirent telinin sonuna bir diyot bağlanır, bu yüzden bu diyotun yanından geçtiğinizde ve labirent teline yuvarlak saplı tel ile dokunduğunuzda, sadece bir pim (Pin 3) alçalır. Bu durumda, LCD’de bir tebrik metni (Kazandınız) görüntülenir.

Gerekli Bileşenler
Arduino Uno
Alüminyum Tel
16×2 LCD
I2C Modülü
Breadboard
Buzzer
Diyot

Arduino ile Buzz Wire Oyunu Yapımı 1
Devre Şeması

Arduino Buzz Tel Oyunu için devre şeması yukarıda verilmiştir. I2C modülünün SCL ve SDA pinleri Arduino’nun A5 ve A4 pinlerine, I2C modülünün VCC ve GND pinleri Arduino’nun 5V ve GND pinlerine bağlanır. Buzzer’ın pozitif rayı Arduino’nun dijital pimi 4’e ve negatif rayı GND’ye bağlıdır. Bir alüminyum tel kesin ve Zig-Zag şeklinde bükün. Telin bir ucuna bir diyot lehimleyin. Daha sonra bir tutamak yapmak için bir tel daha kesin ve bir ucunu bir ilmek içine bükün.

Arduino ile Buzz Wire Oyunu Yapımı 2

Arduino Kodları :

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int startPin = 2;
const int endPin = 3;
const int buzzer = 4;
int start, end_;
void setup(void)
{
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  pinMode(buzzer, OUTPUT);
  pinMode(startPin, INPUT_PULLUP);
  pinMode(startPin, INPUT_PULLUP);
}
void loop(void)
{  
  start = digitalRead(startPin);
  end_ = digitalRead(endPin); 
  Serial.print(start);
  Serial.print("\n");
  Serial.print(end_);  
  if (start == LOW && end_== LOW ){
    digitalWrite(buzzer, HIGH);
    delay(1000); 
    digitalWrite(buzzer, LOW); 
    lcd.setCursor(0,0);
    lcd.print("Try Again");     
    Serial.print("Try Again");        
  }
  else if (start == HIGH && end_== LOW){
    lcd.setCursor(0,0);
    lcd.print("Well Done");
    Serial.print("Well Done");
  }
 delay(500); 
}

Read More

Arduino Kullanarak Akıllı Restoran Menü Sipariş Sistemi

Günümüzün sistemler ev, ofis veya herhangi bir büyük endüstrisi olsun, her yerde otomasyon sistemleri ile donatılmıştır. Restoranlar / Oteller de son otomasyon trendlerini benimsiyor ve sipariş almak için yiyecek dağıtmak için robotlar ve tabletler kullanıyor. Tabletler gibi bu dijital menü kartlarını kullanarak müşteriler öğeleri kolayca seçebilirler ve seçilen ürün mutfağa iletiliyor.

Bu projede Arduino, TFT ekran ve 433MHz RF verici / alıcı modülünü kullanarak Akıllı Restoran Projesi yapıyoruz. Burada verici bölümü, müşterilerin gıda maddelerini seçip sipariş verebilecekleri Arduino Uno, TFT ekran ve bir RF vericiden oluşacaktır. Alıcı bölümü, sipariş öğelerini izlemek için restoran mutfağında kurulacak bir Arduino Uno, LCD modülü, RF alıcısı ve bir Buzzer’den oluşur.

Gerekli Bileşenler

  • Arduino Uno (2)
  • 433MHz RF Transmitter & Receiver
  • 2.4″ TFT LCD Touch shield
  • 16*2 LCD Module
  • I2C Module

Arduino ile arayüz TFT LCD Dokunmatik ekran

2.4 “TFT LCD dokunmatik ekran ve SD kart soketi ile birlikte gelen çok renkli bir Arduino UNO / Mega uyumlu TFT ekrandır. Bu TFT ekran modülü, parlak bir arka ışık ve renkli bir 240X320 piksel ekrana sahiptir. Siyah beyaz ekranlardan çok daha iyi çözünürlük sağlamaktdır.

TFT ekranın Arduino ile arayüzlenmesi çok basittir ve diğer derste açıklanmıştır. TFT ekranını yalnızca aşağıdaki resimde gösterildiği gibi Arduino Uno kartı üzerine monte etmeniz gerekir.

Arduino Kullanarak Akıllı Restoran Menü Sipariş Sistemi 3

Devre şeması

Akıllı Restoran Menü Sipariş Sistemi projesi RF Verici ve Alıcı bölümünden oluşmaktadır. Hem verici hem de alıcı tarafı veri işleme için Arduino Uno’yu kullanır. Verici ve alıcı bölümü için devre şeması aşağıda verilmiştir.

Verici Bölüm Devresi

Bu projenin verici bölümü bir Arduino Uno, RF Verici ve TFT ekran dan oluşuyor. Bu bölüm, TFT ekranında gösterilen menüden sipariş vermek için kullanılır. Arduino Uno, tüm verileri işleyen verici tarafının beynidir ve RF verici modülü, seçilen verileri alıcıya iletmek için kullanılır. RF verici modülünün veri pimi Arduino’nun dijital pimine 12 bağlanırken, VCC ve GND pimleri Arduino’nun 5V ve GND pinine bağlanır.

Arduino Kullanarak Akıllı Restoran Menü Sipariş Sistemi 4
Arduino Kullanarak Akıllı Restoran Menü Sipariş Sistemi 5

Alıcı Bölüm Devresi

Bu projenin alıcı bölümü bir Arduino Uno, RF Alıcı, 16 * 2 LCD modülü ve I2C modülünden oluşur. Verici bölümünden veri almak için RF alıcısı kullanılır ve alınan verileri görüntülemek için LCD modülü kullanılır. Yeni bir sipariş verildiğinde ses çıkarmak için bir zil sesi kullanılır. RF alıcısının veri pimi Arduino’nun dijital pim 11’ine bağlanırken, VCC ve GND pimi Arduino’nun 5V ve GND pimine bağlanır. Buzzer’ın pozitif pimi Arduino’nun dijital pimine 2, negatif pimi Arduino’nun GND pimine bağlanır. I2C modülünün SCL ve SDA pinleri A5 ve A4 Arduino analog pinlerine, VCC ve GND pinleri Arduino’nun 5V ve GND pinlerine bağlanır.

Arduino Kullanarak Akıllı Restoran Menü Sipariş Sistemi 6
Arduino Kullanarak Akıllı Restoran Menü Sipariş Sistemi 7

Proje Kodları :

Restoranda bu Akıllı Sipariş Sistemi için RF Verici ve Alıcı tarafları için tam kod yazının sonunda verilmiştir. Bu projede kullanılan tüm kütüphaneler verilen linklerden indirilebilir.

Code for Transmitter (TFT LCD)

#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile
#include <SPFD5408_Adafruit_GFX.h>    // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPFD5408_TouchScreen.h>
const char *msg ;
RH_ASK driver;
#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin
#define TS_MINX 125
#define TS_MINY 85
#define TS_MAXX 965
#define TS_MAXY 905
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
// optional
#define LCD_RESET A4
#define REDBAR_MINX 80
#define GREENBAR_MINX 130
#define BLUEBAR_MINX 180
#define BAR_MINY 30
#define BAR_HEIGHT 250
#define BAR_WIDTH 30
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
#define BLACK   0x0000
int BLUE = tft.color565(50, 50, 255);
#define DARKBLUE 0x0010
#define VIOLET 0x8888
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define GREY   tft.color565(64, 64, 64);
#define GOLD 0xFEA0
#define BROWN 0xA145
#define SILVER 0xC618
#define LIME 0x07E0
void drawHome()
{
  tft.fillScreen(WHITE);
  tft.drawRoundRect(0, 0, 319, 240, 8, WHITE);     //Page border
  tft.fillRoundRect(30, 40, 100, 40, 8, GOLD);
  tft.drawRoundRect(30, 40, 100, 40, 8, WHITE);  //Dish1
  tft.fillRoundRect(30, 90, 100, 40, 8, GOLD);
  tft.drawRoundRect(30, 90, 100, 40, 8, WHITE);  //Dish2
  tft.fillRoundRect(30, 140, 100, 40, 8, GOLD);   //Dish3
  tft.drawRoundRect(30, 140, 100, 40, 8, WHITE);
  tft.fillRoundRect(10, 190, 190, 40, 8, CYAN);
  tft.drawRoundRect(10, 190, 190, 40, 8, WHITE); //Call Waiter
  tft.fillRoundRect(180, 40, 100, 40, 8, GOLD);
  tft.drawRoundRect(180, 40, 100, 40, 8, WHITE);  //Dish4
  tft.fillRoundRect(180, 90, 100, 40, 8, GOLD);
  tft.drawRoundRect(180, 90, 100, 40, 8, WHITE); //Dish5
  tft.fillRoundRect(180, 140, 100, 40, 8, GOLD);
  tft.drawRoundRect(180, 140, 100, 40, 8, WHITE); //Dish6
  tft.fillRoundRect(210, 190, 100, 40, 8, GREEN);
  tft.drawRoundRect(210, 190, 100, 40, 8, WHITE); //Bill
  tft.setCursor(60, 0);
  tft.setTextSize(3);
  tft.setTextColor(LIME);
  tft.print("   Menu");
  tft.setTextSize(2);
  tft.setTextColor(WHITE);
  tft.setCursor(37, 47);
  tft.print(" Dish1");
  tft.setCursor(37, 97);
  tft.print(" Dish2");
  tft.setCursor(37, 147);
  tft.print(" Dish3");
  tft.setCursor(23, 197);
  tft.print(" Call Waiter");
  tft.setCursor(187, 47);
  tft.print(" Dish4");
  tft.setCursor(187, 97);
  tft.print(" Dish5");
  tft.setCursor(187, 147);
  tft.print(" Dish6");
  tft.setCursor(227, 197);
  tft.print(" Bill");
  //  delay(500);
}
int oldcolor, currentcolor, currentpcolour;
void setup(void) { 
  tft.reset();
  tft.begin(tft.readID());
  Serial.begin(9600);
  Serial.println();
  Serial.print("reading id...");
  delay(500);
  Serial.println(tft.readID(), HEX);  
  tft.fillScreen(BLACK);
  tft.setRotation(1);
  tft.setTextSize(3);
  tft.setTextColor(WHITE);
  tft.setCursor(50, 140);
  tft.print("Loading...");
  tft.setTextColor(tft.color565(255, 255, 0));
  tft.setCursor(30, 70);
  tft.print("By:");
  tft.setCursor(10, 100);
  tft.print("CircuitDigest.Com");
  for (int i; i < 250; i++)
  {
    tft.fillRect(BAR_MINY - 10, BLUEBAR_MINX, i, 10, RED);
    delay(0.000000000000000000000000000000000000000000000000001);
  }
  tft.fillScreen(BLACK);
  if (!driver.init())
      Serial.println("init failed");
  drawHome();
  pinMode(13, OUTPUT);
}
#define MINPRESSURE 10
#define MAXPRESSURE 1000
void transmit()
{  
  driver.send((uint8_t *)msg, strlen(msg));
  driver.waitPacketSent();
  delay(1000);
  }
void loop()
{  
  digitalWrite(13, HIGH);
  TSPoint p = ts.getPoint();
  digitalWrite(13, LOW);
  // if sharing pins, you'll need to fix the directions of the touchscreen pins
  //pinMode(XP, OUTPUT);
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
  //pinMode(YM, OUTPUT);
  if (p.z > ts.pressureThreshhold)
    {
      p.x = map(p.x, TS_MAXX, TS_MINX, 0, 320);
      p.y = map(p.y, TS_MAXY, TS_MINY, 0, 240);      
      if (p.x > 180 && p.x < 280 && p.y > 190 && p.y < 230  && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      {
        Serial.println("Dish1");
        msg = "Dish1 Ordered";
        transmit();
        tft.fillRoundRect(30, 40, 100, 40, 8, WHITE);
        delay(70);
        tft.fillRoundRect(30, 40, 100, 40, 8, GOLD);
        tft.drawRoundRect(30, 40, 100, 40, 8, WHITE);
        tft.setCursor(37, 47);
        tft.println(" Dish1");
        delay(70);
        }
      if (p.x > 180 && p.x < 280 && p.y > 140 && p.y < 180)
      {
        Serial.println("Dish2");
        msg = "Dish2 Ordered";
        transmit();
        tft.fillRoundRect(30, 90, 100, 40, 8, WHITE);
        delay(70);
        tft.fillRoundRect(30, 90, 100, 40, 8, GOLD);
        tft.drawRoundRect(30, 90, 100, 40, 8, WHITE);
        tft.setCursor(37, 97);
        tft.println(" Dish2");
        delay(70);      
      }
      if (p.x > 180 && p.x < 280 && p.y > 90 && p.y < 130)
      {
        Serial.println("Dish3");
        msg = "Dish3 Ordered";
        transmit();
        tft.fillRoundRect(30, 140, 100, 40, 8, WHITE);   //rgb led
        delay(70);
        tft.fillRoundRect(30, 140, 100, 40, 8, GOLD);   //rgb led
        tft.drawRoundRect(30, 140, 100, 40, 8, WHITE);   //rgb led
        tft.setCursor(37, 147);
        tft.print(" Dish3");
        delay(70);       
      }
      if (p.x > 210 && p.x < 310 && p.y > 40 && p.y < 80)
      {
        Serial.println("Call Waiter");
        msg = "CallingWaiter";
        transmit();
        tft.fillRoundRect(10, 190, 190, 40, 8, WHITE);
        delay(70);
        tft.fillRoundRect(10, 190, 190, 40, 8, CYAN);
        tft.drawRoundRect(10, 190, 190, 40, 8, WHITE);
        tft.setCursor(23, 197);
        tft.print(" Call Waiter");
        delay(70);
      }
      if (p.x > 30 && p.x < 130 && p.y > 190 && p.y < 230)
      {
        Serial.println("Dish4");
        msg = "Dish4 Ordered";
        transmit();
        tft.fillRoundRect(30, 40, 100, 40, 8, WHITE);
        delay(70);
        tft.fillRoundRect(30, 40, 100, 40, 8, GOLD);
        tft.drawRoundRect(30, 40, 100, 40, 8, WHITE);
        tft.setCursor(187, 47);
        tft.print(" Dish4");
        delay(70);
      }
      if (p.x > 30 && p.x < 130 && p.y > 140 && p.y < 180 )
      {
        Serial.println("Dish5");
        msg = "Dish5 Ordered";
        transmit();
        tft.fillRoundRect(180, 90, 100, 40, 8, WHITE);
        delay(70);
        tft.fillRoundRect(180, 90, 100, 40, 8, GOLD);
        tft.drawRoundRect(180, 90, 100, 40, 8, WHITE);
        tft.setCursor(187, 97);
        tft.print(" Dish5");
        delay(70);
      }
      if (p.x > 30 && p.x < 130 && p.y > 90 && p.y < 130)
      {
        Serial.println("Dish6");
        msg = "Dish6 Ordered";
        transmit();
        tft.fillRoundRect(180, 140, 100, 40, 8, WHITE);
        delay(70);
        tft.fillRoundRect(180, 140, 100, 40, 8, GOLD);
        tft.drawRoundRect(180, 140, 100, 40, 8, WHITE);
        tft.setCursor(187, 147);
        tft.print(" Dish6");
        delay(70);
      }

      if (p.x > 10 && p.x < 210 && p.y > 40 && p.y < 80)
      {
        Serial.println("Bill");
        msg = "Customer Bill";
        transmit();
        tft.fillRoundRect(210, 190, 100, 40, 8, WHITE);
        delay(70);
        tft.fillRoundRect(210, 190, 100, 40, 8, GREEN);
        tft.drawRoundRect(210, 190, 100, 40, 8, WHITE);
        tft.setCursor(227, 197);
        tft.print(" Bill");
        delay(70);
      }
    }
}

Code for Receiver

#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile
#include <LiquidCrystal_I2C.h>
//String msg;
LiquidCrystal_I2C lcd(0x27, 16, 2);
RH_ASK driver;
#define buzzer 2
void setup()
{
    Serial.begin(9600);  // Debugging only
    pinMode(buzzer, OUTPUT);
    lcd.begin();
    lcd.clear(); 
    if (!driver.init())
         Serial.println("init failed");
}
void loop()
{
    uint8_t buf[17];
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
      int i;
      digitalWrite(buzzer, HIGH);
      delay(1000);
      digitalWrite(buzzer, LOW);
      // Message with a good checksum received, dump it.
      Serial.print("Message: ");
      Serial.println((char*)buf);
      lcd.clear(); 
      lcd.setCursor(0,0);
      lcd.print("T1:");
      lcd.print((char*)buf);            
    }
}

Read More

Arduino ile Kayan Yazı Yapımı

Bu projemizde Arduino ile P10 modülü kullanarak kayan yazı yapacağız. P10 modülünü gelin biraz yakından tanıyalım.

Özellikleri;

– Her bir grafik led panel 32×16 cm ölçülerindedir.

– Her bir grafik led panelde 512 adet led vardır.

– Her bir grafik led panel max. 4A çekmektedir.

– Gündüz ve gece çok daha fazla farkedilebilirlik özelliğine sahiptir.

– Ürün modüllerinde 140 dereceden okunabilen oval ledler kullanılmaktadır.

– Ürün modüler istem bir ürün olduğundan,müdahalede o denli kolay ve pratiktir.

– Bu tabelalar üzerinde basit bir program ve bilgisayar erişimiyle,istediğiniz fontta ve karekterde yazı ekleyip kaldırmanız mümkündür.

– Bunun yanında firma logonuzu,yada sabit ve hareketli giflerle tabelanızın görselliğini artımanız mümkündür.

– Tabelanız satırlara bölerek,birkaç farklı lisanda aynı anda kullanabilme avantajı sağlamaktadır.

Kod için Gerekli Olan Kütüphane  : https://github.com/freetronics/DMD

2×16 lık headerın arduino nano’ya bağlantı şekli:

Arduino ile Kayan Yazı Yapımı 8

Arduino ile kayan yazı

Arduino ile kayan yazı kodları :

#include <SPI.h>       
#include <DMD.h>     
#include <TimerOne.h>  
#include "SystemFont5x7.h"
#include "Arial_black_16.h"
#include "Arial14.h"


#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

void ScanDMD()
{
  dmd.scanDisplayBySPI();
}

void setup(void)
{

  
   Timer1.initialize( 5000 );          
   Timer1.attachInterrupt( ScanDMD );  

   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );  

}

void loop(void)
{
   byte b;
  
  
  
   dmd.clearScreen( true );
   dmd.selectFont(Arial_Black_16);
   //dmd.selectFont(Arial_14);
  

   dmd.drawMarquee("FATIH BASARIS",13,(32*DISPLAYS_ACROSS)-1,1);
   long start=millis();
   long timer=start;
   boolean ret=false;
   while(!ret){
     if ((timer+30) < millis()) {
       ret=dmd.stepMarquee(-1,0);
       timer=millis();
     }
   }
}

 

Read More

Arduino ile EEPROM Okuma ve Yazma

Bu yazımızda sizlere Arduino kullanarak verilerinizi kaydedebilmeniz için EEPROM kullanımına bakacağız.

Her tip arduino türünde içerisinde belli miktarda eeprom bellek vardır. Bu bellek arduinonun kapatıldıktan sonra verilerinizin kaybolmamasını sağlar.

EEPROM fonksiyonarını kullanabilmek için önce EEPROM.h kütüphanesini programınıza eklemeniz gerekir. Bunu yapar yapmaz bir takım EEPROM işlevlerine ulaşma imkanını elde edersiniz.Arduinonun içerisindeki dahili gelen eeprom belleğinin boyutunu öğrenmek için EEPROM.length() komudunu kullanabilirsiniz.

EEPROM.length() komutundan dönen değerde dikkat etmemiz gereken bir nokta aldığımız değerin nasıl kullanılacağıdır. EEPROM adresleri sıfır (0) dan başladığı için geri gelen veri değeri adres olarak kullanıldığında sıfır ile eepromBellek – 1 arası olmalıdır. Örneğin: ARDUINO UNO da EEPROM boyutu 1024 dür. Buna göre adres olarak kullandığımızda bu değer 0 – 1023 arasında olmalıdır.

Tüm eeprom belleğini sıfırlamak :

#include <EEPROM.h>
void setup()  {
  int eepromBellek = EEPROM.length();
  for (int i = 0 ; i < eepromBellek ; i++) {EEPROM.write(i, '\0');}
}

Yukardaki kod ile tüm eeprom belleğini sıfırlayabilirsiniz.Bunu yaparken EEPROM.write() işlevini kullanıyoruz. Burada belleğe yazdığımız değer tamamen bize kalmış bir seçenektir. NUL (\0), SIFIR (0), BOŞLUK ( ), vs gibi herhangi uygun değer kullanılabilir.

EEPROM belleğine veri yazıp okumak için üç tip işlev vardır:

  • EEPROM.read() ve EEPROM.write() : karakter veya bayt olarak okuyup yazma
  • EEPROM.get() ve EEPROM.put() : dizgi veya özel / değişik veri yapılarına göre okuyup yazma
  • EEPROM.update() : Eğer veri bellektekinden değişikse yaz

EEPROM.read() ve EEPROM.write() işlevleri verileri belleğe tek bayt olarak okuyup yazarlar.

EEPROM.get() ve EEPROM.put() işlevleri ise belleğe bir bayttan daha fazla veya uzunlukta veri kaydetmek istediğimiz zaman kullanılır. Örneğin float tipi veriler dört (4) bayt olduğundan bu işlevle kaydedilmesi gerekir. Eğer uzunca bir dizgi veya dizi kaydetmek isterseniz (örneğin: “dosyaadı.txt”) bu işlevleri kullanmanız gerekir.

EEPROM.update() işlevi yazılacak veriyi yazmak istediğimiz adresteki değer ile karşılaştırır ve yalnız aynı değilse yazma işlemini tamamlar.

ARDUINO EEPROM referansına bu bağlantıdan ulaşabilirsiniz.

 

Read More

Arduino ile LCD I2C Protekolü Kullanımı

Arduino ile LCD haberleştirmek için 9 adet kabloya ihtiyacınız var buda hem pin işgali hemde çok fazla kablo işgali ile projenizi karışık bir hale sokmaktadır.Bu sorunu I2C protokolü kullanarak düzeltebilirsiniz.Bazı modüllerin üzerinde geldiği gibi ayrı olarak da satılan IIC i2c modülü ile bu sorunu çözebilirsiniz.

I2C modülü sayesinde enerji pinleri haric 2 tane pin yardımı ile Sda ve Scl üzerinden süre bilmektesiniz.Öncelikle bunun için bir I2C kütüphanesine ihtiyacınız var bu kütüphaneyi aşağıdan web sitemiz aracılığı ile indirebilirsiniz.

I2C Nedir?

I2C haberleşmesinde, haberleşmeyi kontrol eden master cihazı bulunur. Her haberleşmede bir tane master bulunmalıdır. Haberleşmenin sağlanabilmesi için haberleşme hattına en az bir adet slave (köle) cihaz bağlanmalıdır. Hatta bağlanan birden fazla slave cihazlardan hangisinin veri aktaracağına, master cihaz karar verir. Böylece hat sayısında bir değişiklik olmadan birden fazla cihazla haberleşme sağlanır.

i2c_lcdbaglantisi

Arduino türü SDA pini SCL pini
Arduino Uno A4 A5
Arduino Mega 20 21
Arduino Leonardo 2 3
Arduino Due 20 21
Arduino Nano A4 A5
//Kodmek Örnek I2C LCD kodu
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
void setup()
{
// LCD yi çalıştır
lcd.begin();
lcd.backlight();
 
// Ekrana yazdırılacak metin
lcd.print("Proje Hocam");
}
 
void loop()
{
}

 

Read More

Arduino Programlama Yapısı ve Arduino ya giriş

Arduino ile programlama ile yazı dizimizde sizlere elimden geldiğinde programlama yapısından başlayıp yapıları sırası ile tanıtacağız.

Temel bir Arduino program döngüsü, setup () ve loop () adında iki işlevden oluşur.

Arduino IDE’yi açın ve iki işlevi görmek için Dosya → Örnekler → 01.Basics → BareMinimum öğesini seçin. Bu iki işlev artık varsayılan olarak yeni bir Arduino IDE penceresinde göründüğünden, IDE’nin yeni versiyonunda BareMinimum örnek taslağını açmak gerekli değildir.

Function Nedir?

Function daha sonra daha ayrıntılı olarak ele alınacaktır, şimdilik sadece işlevler hakkında aşağıdakileri bilmeniz gerekecektir:

Tüm fonksiyonlar benzersiz bir isme sahip olmalıdır, setup benzersiz bir fonksiyon isminin bir örneğidir (setup ve loop Arduino programlamada özel fonksiyonlardır ve temel yapısının bir parçasını oluşturur).
     İşlev adını, bir şey içerebilen veya içermeyen parantez () açıp kapatarak takip eder.
     Tüm fonksiyonlar bir dönüş tipine sahip olmalıdır. Hem setup hem de loop geçersiz bir dönüş tipine sahiptir.
     Bir fonksiyonun gövdesi bir açılış ve kapanış ayracı ({ve}) oluşur.

Yeni bir programlama dilini öğrenmeye başladığında “merhaba dünya” programı yazmak bir programlama geleneğidir. Bunun İçin bizde bu geleneği yerine getirelim

“Merhaba dünya” programı sadece “Merhaba, dünya!” yazısını ekrana yazdırmaktır. Bu programın amacı, programlama ortamınızın doğru şekilde kurulduğunu ve çalıştığını doğrulamaktır. “Merhaba dünya” programınız çalışıyorsa, yeni programlama dilini öğrenmeye başlayabilirsiniz.

Arduino’nun “merhaba dünya” metnini yazacak bir ekranı yok, ama USB portunu kullanabiliriz ve Serial Monitör kısmına bakınız.

void setup() {
  Serial.begin(9600);
  Serial.println("Hello, world!");
}

void loop() {
}


Dosya → Farklı Kaydet … Arduino IDE menüsünden ve sonra dosyayı hello_world olarak yeniden adlandırın.

Arduino’nuzu bir USB kablosu kullanarak PC’nize takın. Programı Arduino’ya yüklemek için Yükle düğmesine tıklayın.

Şimdi uygulamamızı denemek ve metin mesajını yazdırmak için Arduino IDE Seri Monitör Penceresini açın.

Ekranda Hello World yazını görüyorsanız uygulamanız çalışmaktadır.


Hata bulma
Programlama Hataları

IDE penceresine yanlış yazılan kod satırlarında bir hata derleme hatasına neden olacaktır, bu nedenle yukarıdaki kodda gösterildiği gibi her şeyi yazdığınızdan emin olun. Doğrulama düğmesi (onay simgesi) veya Yükle düğmesi (yatay ok simgesi) tıklandığında program derlenir.

Arduino’ya yüklerken sorun yaşıyorsanız, Araçlar → Kart altında doğru Arduino kartının seçildiğinden ve Araçlar → Seri Bağlantı Noktası altında doğru seri bağlantı noktasının seçildiğinden emin olun.
Baud Hızı Ayar Hatası

Uygulama başarılı bir şekilde yüklendiyse, seri izleme penceresinde metnin gösterilmesini engelleyen tek sorun, seri monitör penceresinin sağ alt tarafındaki baud hızının “Running the hello_world” de gösterildiği gibi 9600 olarak ayarlanmamasıdır.


Setup () işlevi

Setup () işlevindeki ifadeler, taslağın her çalıştırıldığında yalnızca bir kez çalıştırılır. Program daha sonra loop () işlevindeki ifadeleri çalıştırmaya başlar.

Arduino’ya programlandıktan sonra çalışacaktır. Seri monitör penceresini açmak Arduino’yu sıfırlayacak ve taslağı tekrar çalıştırmaya başlayacaktır.

Ayrıca Arduino üzerindeki sıfırlama düğmesine basılarak veya bağlantıyı keserek ve ardından Arduino’ya giden güce yeniden bağlanarak yeniden çalışabilir.

Loop () işlevi

Loop () işlevindeki ifadeler, sürekli olarak yukarıdan aşağıya ve sonra da en üste doğru çalışır.

Loop () işlevi iki deyim içeriyorsa, ilk ifade çalıştırılacak, ardından ikinci deyim, daha sonra ilk ifade tekrarlanacak ve böylece bir döngüde olacaktır.

Merhaba dünya örneğimizde loop () işlevinde hiçbir ifade bulunmadığından, program yürütme döngüde sona erecek ve hiçbir şey yapmadan takılıp kalmaya başlayacaktır.

Boş olsa bile,  loop () işlevine sahip olmak önemlidir, çünkü onsuz, Arduino kartındaki mikro denetleyici, setup () işlevindeki ifadeler sonraki bellekte buldukları her şeyi yürütmeye çalışacaktır. Mikrodenetleyici, bir komut olarak bellekte bulduğu her şeyi yürütmeye çalışacaktır, ancak Loop() işlevi, program yürütmeyi döngüde tutarak bunu yapmasını engeller.

Dersimizin bu bölümü bitmiştir. Diğer bölümde Loop işlevini daha detaylı örnekler ile göreceğiz.

Read More