Arduino Esplora ile Güzel Bir Termometre Projesi

Paylaş
Arduino Esplora ile Güzel Bir Termometre Projesi
Arduino Esplora ile şık bir termometre yapımı

Arduino Esplora Thermometer Herkese Merhaba! ArduinoTürkiye.com’daki ikinci yazımı Arduino Esplora ile şık bir termometre yapımı üzerine yazmak istedim.

Dün biraz boş vaktim olunca masamın üzerindeki Esplora’ya takıldı gözlerim. Peşinden Esplora’nın TFT ekranının da bir köşede durduğunu görünce, boş vakti değerlendirmek adına bir dijital-görsel termometre yapayım dedim.

Adafruit’in GFX ve ST7735 LCD Kütüphanesi olduğu da aklıma gelince, yapımının oldukça basit olacağını düşünerek giriştim çalışmaya.

Termometrenin tamamlanması yaklaşık 50 dakika sürdü. Hatalarını gidermek ve biraz da makyaj için 2 saat ayırmak gerekti.

Gelelim nasıl yapıldığına. Öncelikle Adafruit’in GFX ve ST7735 kütüphanelerini indirip Arduino’nun “libraries” klasörüne eklememiz gerekiyor.

Aşağıdaki linklerden bu kütüphaneleri edinebilirsiniz:
https://github.com/adafruit/Adafruit-ST7735-Library
https://github.com/adafruit/Adafruit-GFX-Library

GitHub sayfasının sağ sütunundaki “Download ZIP” butonuna tıklayarak ZIP dosyası olarak indiriniz.

Arduino yazılımındaki Sketch > Import Library > Add Library… menüsünden, indirdiğiniz zip dosyalarını seçerek kütüphaneleri Arduino derleyicisine ekleyebilirsiniz.

GFX kütüphanesinin kullanım klavuzu için aşağıdaki PDF dosyasını inceleyin:
http://learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf

Termometre kodlarını aşağıda sizlerle paylaşıyorum. Kod satırlarında gerekli açıklamarı yapmaya çalıştım. Deneme yanılma yöntemiyle de keşfetmeniz mümkün. Termometremiz 0 ile 99 santigrad derece arasını ölçebiliyor. İsterseniz kodlar üzerinde biraz oynamalar yapıp -40 ile +150 santigrad derece arasında ölçüm yapabilirsiniz. LCD küçük olduğundan ben 0-99 derece arasını tercih ettim.

Sorularınız için aşağıdaki yorum bölümünü kullanabilirsiniz. Yanıtlamaya çalışacağım. Herkese başarılar. Sağlıcakla!

/**
 * @file   Esplora_Termometre.ino
 * @author M. Hamit YANIK (hamityanik@hotmail.com)
 * @date   Eylül, 2013
 * @brief  Arduino Esplora ile şık bir termometre.
 *
 * Arduino Esplora + TFT LCD ile Adafruit kütüphaneleri kullanılarak
 * yapılmış şık bir termometre.
 * www.arduinoturkiye.com
 */

#include <Esplora.h>// Esplora hazır fonksiyonlarını kullanmak için
#include <Adafruit_GFX.h>// Çekirdek grafik kütüphanemizi dahil edelim
#include <Adafruit_ST7735.h>// Esplora LCD'sinin sürücüsünü dahil edelim
#include <SPI.h>// Esplora LCD'sini SPI haberleşme kullanarak daha hızlı
                             // kullanmak için SPI.h dosyasını dahil edelim

// Esplora LCD'sinin pin bağlantılarını ayarlıyoruz
#define sclk 15 // Arduino'nun 15. pini: SCK clock pini
#define mosi 16 // Arduino'nun 16. pini: Master Output Slave Input (MOSI) data pini
#define cs   7
#define dc   0
#define rst  1

// RGB565CONVERT fonksiyonu 32 bit rgb renk kodunu 16 bit rgb renk koduna cevirir
// Photoshop, Adobe Fireworks gibi tasarım programları 32bit rgb renk kodları ile çalışır.
// Parlak kırmızı renk kodu bilgisayarda #FF3300 iken, bunu 16 bit renk koduna çevirmek
// için RGB565CONVERT fonksiyonundan geçirmeliyiz: RGB565CONVERT(0xFF, 0x33, 0x00)
#define RGB565CONVERT(red, green, blue)\
(uint16_t)((( red   >> 3 )<< 11 )| \
(( green >> 2 )<< 5  )| \
( blue  >> 3 ))

// renk tanımlamalarımız
#define  kirmizi  RGB565CONVERT(0xFF, 0x33, 0x00)// parlak kırmızı
#define  gri      RGB565CONVERT(0xCC, 0xCA, 0xCF)
#define  koyu_gri RGB565CONVERT(127, 127, 135)
#define  yesil    RGB565CONVERT(0x66, 0xcc, 0x00)// parlak yesil
#define  sari     RGB565CONVERT(0xFF, 0xFF, 0x00)// sari
#define  siyah    0

// Seçenek 1: herhangi bir giriş-çıkış pinini kullanarak LCD ile haberleşebiliriz.
// ama bu biraz yavaş olacak.
//Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);

// Seçenek 2: SPI donanım pinlerini kullanarak LCD ile haberleşelim.
// İşte bu LCD'yi kullanmanın en hızlı yolu!
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);

int celsius = 0;
int old_celsius=0;
long previousMillis = 0;

void setup(void) {
  // Eğer LCD'niz düzgün çalışmıyorsa aşağıdaki farklı tanımlamaları deneyin.
  // If your TFT's plastic wrap has a Black Tab, use the following:
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
  // If your TFT's plastic wrap has a Red Tab, use the following:
  //tft.initR(INITR_REDTAB);   // initialize a ST7735R chip, red tab
  // If your TFT's plastic wrap has a Green Tab, use the following:
  //tft.initR(INITR_GREENTAB); // initialize a ST7735R chip, green tab

  // LCD'yi yatay kullan
  tft.setRotation(1);

  // LCD'yi siyah renkle doldur
  tft.fillScreen(siyah);

  tft.setCursor(10, 5);   // imleci X:10, Y:5 koordinatlarına getir
  tft.setTextSize(2);     // yazı boyutunu 2 yap
  tft.println("Termo");   // Önceden ayarladığımız koordinatlara Termo yaz
  tft.setCursor(14, 18);  // imleci X:14, Y:18 koordinatlarına getir
  tft.println("metre");   // metre yaz

  // termometre gövdemizi çiziyoruz
  tft.drawRoundRect(130, 4, 10, 10, 5, gri);
  tft.drawRoundRect(125, 104, 20, 20, 10, gri);
  tft.drawRect(130, 9, 10, 100, gri);
  tft.fillRect(131, 10, 8, 4, siyah);
  tft.fillRect(131, 104, 8, 4, siyah);

  tft.fillRoundRect(131, 5, 8, 8, 4, siyah);
  tft.fillRoundRect(126, 105, 18, 18, 9, siyah);
  tft.fillRoundRect(127, 106, 16, 16, 8, kirmizi);

  // termometre çizgilerini ve 0'dan 100'e kadar sayıları yazıyoruz
  // yazı boyutlarını küçük olarak ayarla
  tft.setTextSize(1);
  for( int i=0; i<11; i++ ) {
    switch( i ) {
      case 0: // Eğer 100'ü yazıyorsan biraz sola yaz
      tft.setCursor(98, (i*10)+3);
      break;

      case 10: // Eğer 0'ı yazıyorsan biraz sağa yaz
      tft.setCursor(108, (i*10)+3);
      break;

      default: // diğerlerini bu hizada yaz
      tft.setCursor(103, (i*10)+3);
    }

    // yazılarda mavi'den kırmızıya geçiş efekti
    tft.setTextColor(RGB565CONVERT(map(i,0,10,255,0), 55, map(i,0,10,0,255)));

    // çizgi yazılarını yaz
    tft.println(100-(i*10));

    // çizgileri çiz
    tft.drawLine(120, (i*10)+6, 125, (i*10)+6, yesil);
  }

  // derece yazdığımız alanın köşeleri yuvarlatılmış gri ile doldurulması
  tft.fillRoundRect(10, 44, 80, 34, 4, koyu_gri);  

  // başlangıçta 00°C yaz
  tft.setCursor(16,50);
  tft.setTextSize(3);
  tft.setTextColor(gri);

  tft.print("00");
  tft.print("\xF7");
  tft.print("C");

  tft.setCursor(4,116);
  tft.setTextSize(1);
  tft.setTextColor(gri);
  tft.print("\x41\x72\x64\x75\x69\x6e\x6f\x54\x75\x72\x6b\x69\x79\x65\x2e\x63\x6f\x6d");

  // bundan sonraki yazıların boyutunu 3 ve rengini sari olarak ayarla
  tft.setTextSize(3);
  tft.setTextColor(sari);
}

void loop() {
  unsigned long currentMillis = millis();

  // Yarım saniyede bir sıcaklık oku
  if(currentMillis - previousMillis > 500) {
    previousMillis = currentMillis;

    celsius = Esplora.readTemperature(DEGREES_C);

    if( celsius > 99 ) {
      celsius = 99;
    }
    
    if( celsius < 0 ) {
      celsius = 0;
    }
    
  }
  // eğer sıcaklık değişmişse
  if( celsius != old_celsius ) {
    // Derece değerini yazacağımız yeri önce koyu gri ile temizliyoruz
    tft.fillRect(16, 50, 34, 22, koyu_gri);

    // Derece değerini yaz
    tft.setCursor(16,50);
    tft.print(celsius);

    // termometre barını güncelle
    tft.fillRect(132, 102-(celsius), 6, 4, siyah);
    tft.fillRect(132, 106-(celsius), 6, celsius, kirmizi);

    old_celsius = celsius;
  }
}

Devamını oku

Project Aslan, Arduino DUE Kullanan Bir Robot İşaret Dili Çevirmeni

Project Aslan, Arduino DUE Kullanan Bir Robot İşaret Dili Çevirmeni

Genellikle robotikleri endüstriyel veya araştırma alanlarına uygulandığı zaman görüyoruz, ancak günlük yaşamda da yardımcı olabilecekleri çok yol var: Örneğin, görme engelli insanlar için kişisel rehber görevi gören mutfak botu, engellilerin yemek yapmasına yardımcı olabilir. Veya – ve bu gerçek – işaret dili çevirmeni işlevi gören robot kolu. Sınıflarda, mahkemelerde ve evde, bu

Arduino Turkiye tarafından
Arduino DUE ile Yaşayabileceğiniz Sorunların Çözümleri

Arduino DUE ile Yaşayabileceğiniz Sorunların Çözümleri

Elinizden hatırı sayılır miktarda Arduino DUE geçtiyse (veya sadece şanssız gününüzdeyseniz), düzgün çalışmayan en az bir tane cihazla karşılaşma olasılığınız yüksek. Bunun için her zaman cihazı çöpe atmanız gerekmeyebilir. Birçok Arduino DUE sorununu çözmek için çeşitli yöntemler var. Diyelim ki Arduino DUE ile çalışmaya başlayacaksınız. Bunun için Arduino’yu açtınız

Arduino Turkiye tarafından
STM32 Mikro Denetleyiciler Arduino

STM32 Mikro Denetleyiciler Arduino Dünyasında Ne Anlama Geliyor?

Arduino ile tanışanlar genellikle uzun bir yolun başlangıcında oluyor. Çünkü Arduino dünyası vazgeçmesi zor maceralarla dolu. Arduino’yu tanıdıkça bu heyecanınız da artacak. Bu nedenle Arduino dünyasıyla sizi buluşturmak için biz de heyecan duyuyoruz. Çok ucuza elde edebileceğiniz Arduino kiti ve ihtiyaç duyacağınız diğer malzemeler uzun soluklu projeler için yeterli

Arduino Turkiye tarafından