Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Arduino Hesap Makinesi: 4x4 Keypad ve I2C LCD

Arduino Hesap Makinesi: 4x4 Keypad ve I2C LCD
Kısa cevap

Arduino hesap makinesi, 4x4 keypad'den girilen iki sayıyı ve işlemi okuyup sonucu 16x2 I2C LCD ekranda gösteren bir öğrenci projesidir. Rakam tuşları sayıyı yazar; A toplama, B çıkarma, C çarpma, D bölme yapar; # eşittir, * silme tuşudur. Devre USB'den beslenir ve lehim gerektirmez.

Cebinizdeki hesap makinesinin içinde ne olduğunu hiç merak ettiniz mi? Bu projede Arduino Uno, 16 tuşlu bir keypad ve iki satırlı bir LCD ekranla dört işlem yapan bir hesap makinesi kuruyoruz. Proje; tuş takımı okuma, ekrana yazma ve programda karar verme konularını tek bir çalışmada birleştirir. Ortaokul ve lise kodlama dersleri, meslek lisesi atölyeleri ve TÜBİTAK 4006 bilim fuarları için uygundur.

Arduino hesap makinesi nedir?

Arduino hesap makinesi, tuş takımından girilen sayıları ve işlem işaretini okuyan, sonucu mikrodenetleyicide hesaplayıp ekranda gösteren basit bir elektronik hesaplayıcıdır. Gerçek hesap makinelerinde bu işi tek bir özel çip yapar; bizim projemizde aynı görevleri Arduino Uno üstlenir.

Sistem üç parçadan oluşur: keypad giriş birimidir, Arduino işlem birimidir, LCD ekran ise çıkış birimidir. Bu üçlü, bilgisayarların temel yapısını (giriş, işlem, çıkış) anlatmak için de iyi bir örnektir.

Hangi malzemeler gerekir?

Arduino hesap makinesi için Arduino Uno, 4x4 keypad, I2C arayüzlü 16x2 LCD ve jumper kablolar yeterlidir. Pasif buzzer isteğe bağlıdır; her tuşta kısa bir bip sesi verir.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino Uno R3 (CH340, USB kablolu)1Tuşları okur, işlemi hesaplar
4x4 push buton keypad1Rakam ve işlem girişi (16 tuş, 8 uç)
2x16 mavi LCD, I2C modüllü1İşlemi ve sonucu gösterir
Pasif buzzer 17 mm1Tuş sesi (isteğe bağlı)
Şeffaf breadboard, orta boy1Buzzer ve GND bağlantıları
140 parça kutulu jumper kablo seti1Bağlantılar

Arduino IDE'de Kütüphane Yöneticisi'nden "Keypad" (Mark Stanley, Alexander Brevig) ve "LiquidCrystal I2C" kütüphanelerini kurun. Keypad'in çalışma mantığını 4x4 keypad Arduino bağlantısı yazısında, ekranı ise 16x2 LCD ekran bağlantısı yazısında ayrıntılı anlattık.

Devre nasıl bağlanır?

Keypad'in 8 ucu D9'dan D2'ye sırayla, LCD'nin SDA ve SCL uçları A4 ve A5'e, buzzer ise D10'a bağlanır. Bağlantıyı yaparken USB kablosu takılı olmasın.

  1. Keypad'i tuşlar size bakacak şekilde tutun. Uçların ilk dördü satırlar (R1-R4), son dördü sütunlardır (C1-C4); sıra kartın üzerinde yazar.
  2. Satırlar: R1 → D9, R2 → D8, R3 → D7, R4 → D6.
  3. Sütunlar: C1 → D5, C2 → D4, C3 → D3, C4 → D2.
  4. LCD: GND → GND, VCC → 5V, SDA → A4, SCL → A5.
  5. Pasif buzzer: artı → D10, eksi → GND.
  6. USB kablosunu takıp kodu yükleyin. Ekran boş görünüyorsa LCD arkasındaki mavi trimpotu çevirerek kontrastı ayarlayın.
Arduino hesap makinesi bağlantı şeması: 4x4 keypadin satır uçları R1, R2, R3, R4 sırasıyla Arduino Uno D9, D8, D7, D6 pinlerine, sütun uçları C1, C2, C3, C4 sırasıyla D5, D4, D3, D2 pinlerine bağlı; keypadde A toplama, B çıkarma, C çarpma, D bölme, # eşittir ve * silme tuşu; pasif buzzerın artı ucu D10'a bağlı; 16x2 I2C LCD'nin SDA ucu A4'e, SCL ucu A5'e bağlı ve ekranda 12+8 ile = 20 yazıyor
Keypad satırları D9-D6'ya, sütunları D5-D2'ye, buzzer D10'a, LCD A4 ve A5'e bağlanır; A, B, C ve D tuşları dört işlemi seçer.

Hesap makinesi kodu nasıl çalışır?

Kod, işlem tuşuna basılana kadar gelen rakamları birinci sayıya, sonra gelenleri ikinci sayıya ekler; # tuşunda iki sayıyı seçilen işlemle hesaplayıp sonucu alt satıra yazar.

#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const byte SATIR = 4, SUTUN = 4;
char tuslar[SATIR][SUTUN] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte satirPin[SATIR] = {9, 8, 7, 6};
byte sutunPin[SUTUN] = {5, 4, 3, 2};
Keypad tus = Keypad(makeKeymap(tuslar), satirPin, sutunPin, SATIR, SUTUN);
LiquidCrystal_I2C lcd(0x27, 16, 2);    // ekran boşsa 0x3F deneyin
const byte BUZZER = 10;

String sayi1 = "", sayi2 = "";
char islem = 0;                         // '+', '-', 'x' ya da '/'
bool bitti = false;

String metin(float x) {                 // tam sayıysa ondalıksız yaz
  if (x == (long)x) return String((long)x);
  return String(x, 2);
}

void ustSatir() {
  lcd.clear();
  lcd.print(sayi1);
  if (islem) { lcd.print(islem); lcd.print(sayi2); }
}

void temizle() {
  sayi1 = ""; sayi2 = ""; islem = 0; bitti = false;
  lcd.clear();
  lcd.print("0");
}

void hesapla() {
  float a = sayi1.toFloat(), b = sayi2.toFloat(), s = 0;
  bitti = true;
  lcd.setCursor(0, 1);
  if (islem == '/' && b == 0) { lcd.print("Sifira bolunmez"); sayi1 = ""; return; }
  if (islem == '+') s = a + b;
  if (islem == '-') s = a - b;
  if (islem == 'x') s = a * b;
  if (islem == '/') s = a / b;
  if (fabs(s) > 9999999) { lcd.print("Cok buyuk sayi"); sayi1 = ""; return; }
  lcd.print("= ");
  lcd.print(metin(s));
  sayi1 = metin(s);                     // sonuç yeni işlemin ilk sayısı olabilir
}

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.print("Hesap makinesi");
  lcd.setCursor(0, 1);
  lcd.print("A+ B- Cx D/ #=");
}

void loop() {
  char t = tus.getKey();
  if (!t) return;
  tone(BUZZER, 2000, 30);               // kısa tuş sesi
  if (t == '*') { temizle(); return; }
  if (t >= '0' && t <= '9') {
    if (bitti) temizle();               // sonuçtan sonra rakam: yeni hesap
    if (!islem && sayi1.length() < 6) sayi1 += t;
    else if (islem && sayi2.length() < 6) sayi2 += t;
    ustSatir();
  } else if (t == '#') {
    if (islem && sayi2.length() > 0) hesapla();
  } else if (sayi1.length() > 0) {      // A, B, C, D: işlem seçimi
    if (bitti) { sayi2 = ""; bitti = false; }
    if (sayi2.length() == 0) {
      islem = (t == 'A') ? '+' : (t == 'B') ? '-' : (t == 'C') ? 'x' : '/';
      ustSatir();
    }
  }
}

Sonuç ekrandayken bir işlem tuşuna basarsanız hesap o sonuçla devam eder: 12 + 8 = 20 gördükten sonra C ve 3 tuşlayıp # basarsanız 60 sonucunu alırsınız. Her sayı en çok 6 hane olabilir.

Tuşlar hangi işlemi yapar?

Rakam tuşları sayıyı yazar, A-B-C-D harf tuşları dört işlemi seçer, # sonucu hesaplar ve * ekranı temizler.

TuşGörevÖrnekLCD'de görünen
0-9Sayının hanelerini yazar1, 212
AToplama12 A 8 #Üst: 12+8, alt: = 20
BÇıkarma5 B 9 #Üst: 5-9, alt: = -4
CÇarpma25 C 4 #Üst: 25x4, alt: = 100
DBölme10 D 3 #Üst: 10/3, alt: = 3.33
#Eşittir; sonucu hesaplar-Alt satırda sonuç
*Her şeyi siler-0

Neden bazı sonuçlar yuvarlanır?

Arduino Uno'daki float türü yaklaşık 6-7 anlamlı basamak tutabildiği için büyük ya da çok ondalıklı sonuçlar yuvarlanır. Örneğin 10 / 3 işleminin sonucu ekranda 3.33 olarak görünür, çünkü kod iki ondalık basamak yazdırır.

Bu yüzden kod, mutlak değeri 9.999.999'u geçen sonuçlarda "Cok buyuk sayi" uyarısı verir. Sıfıra bölme matematikte tanımsız olduğu için "Sifira bolunmez" mesajı çıkar. Ondalık ayırıcı olarak virgül değil nokta görünür; bu, programlama dillerinin ortak kuralıdır.

Hangi güvenlik kurallarına dikkat edilmeli?

Hesap makinesi USB'den 5V ile çalıştığı için güvenli bir projedir; yine de şu kurallara uyun:

  • Devreyi bilgisayarın USB çıkışından, USB powerbank'tan ya da en çok 12V'luk bir adaptörden besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
  • Kabloları değiştirmeden önce USB kablosunu çıkarın; 5V ile GND'yi doğrudan birbirine değdirmeyin.
  • Kutu yaparken maket bıçağını öğretmen ya da yetişkin gözetiminde kullanın.
  • Arduino'yu metal bir yüzeye koymayın; alt yüzdeki lehim noktaları kısa devre yapabilir.

Ödevinizi nasıl sunarsınız?

Ödevinizi, jüriden bir işlem isteyip hesap makinenizle canlı olarak çözerek ve aynı işlemi telefonun hesap makinesiyle karşılaştırarak sunabilirsiniz.

  • Problem: "Bir hesap makinesi tuşa basıldığını nasıl anlar ve sonucu nasıl bulur?"
  • Gösteri: Dört işlemi, sıfıra bölmeyi ve 10 / 3 gibi yuvarlanan bir sonucu gösterin.
  • Bilgi: Keypad'in 16 tuşu yalnızca 8 kabloyla okur, çünkü Arduino satırları sırayla tarar ve basılan tuşu satır ile sütunun kesişiminden bulur.
  • Rapor: Bağlantı şemasını, tuş tablosunu ve kodun akış şemasını ekleyin.
  • Geliştirme: Ondalık nokta tuşu, karekök ya da yüzde işlemi eklemeyi önerin.

Sık sorulan sorular

LCD ekranda yazı görünmüyorsa ne yapmalıyım?

Önce LCD'nin arkasındaki I2C kartında bulunan trimpotu küçük bir tornavidayla yavaşça çevirin; yazı çoğu zaman yalnızca kontrast düşük olduğu için görünmez. Arka ışık yanıyor ama hâlâ yazı yoksa koddaki 0x27 adresini 0x3F yapın. Adresi kesin öğrenmek için bir I2C tarayıcı kodu çalıştırabilirsiniz.

Keypad yanlış rakam yazıyorsa ne yapmalıyım?

Yanlış rakam, satır ve sütun kablolarının sırası karıştığında görülür. Kabloları sökmek yerine koddaki satirPin ve sutunPin dizilerindeki sayıların sırasını değiştirin. Örneğin 1 yerine A yazıyorsa sütun sırası ters bağlanmıştır; diziyi {2, 3, 4, 5} yapmak sorunu çözer.

Negatif ya da ondalıklı sayı girilebilir mi?

Bu sürümde doğrudan girilemez; ama işlem sonucu olarak elde edilebilir. Örneğin 5 - 9 işlemi -4 verir ve bu sonuçla hesaba devam edebilirsiniz. Ondalık giriş için tuşlardan birini, örneğin * tuşunu, nokta olarak tanımlayıp sayı metnine "." eklemek ve silme görevini başka bir tuşa taşımak gerekir.

Hesap makinesi pille çalışır mı?

Evet, 4 kalem pil (yaklaşık 6V) ya da 9V pil Arduino'nun VIN ve GND uçlarına bağlanarak çalıştırılabilir. LCD arka ışığı akımın büyük kısmını harcadığı için 9V pil uzun dayanmaz. Taşınabilir kullanımda USB powerbank daha pratik ve uzun ömürlü bir seçenektir.

Özet

  • Arduino hesap makinesi; keypad (giriş), Arduino Uno (işlem) ve 16x2 I2C LCD'den (çıkış) oluşur.
  • Bağlantı: keypad satırları D9-D6, sütunları D5-D2; LCD A4 ve A5; buzzer D10.
  • A toplar, B çıkarır, C çarpar, D böler; # sonucu verir, * siler.
  • float türü 6-7 anlamlı basamak tuttuğu için sonuçlar yuvarlanabilir; sıfıra bölme uyarı verir.
  • Devre USB'den 5V ile çalışır; 220V hiçbir şekilde kullanılmaz.

Bu yazıdaki ürünler

Diğer yazılar

11 Kasım 20266 dk okuma

Pense Çeşitleri: Yan Keski, Kargaburun ve Kombine Pense

Pense çeşitleri arasında seçim işe göre yapılır: tel ve komponent bacağı kesmek için yan keski, dar alanda tutmak ve bükmek için kargaburun,...

Devamını oku →
11 Kasım 20267 dk okuma

Işık Takip Eden Robot Yapımı: Arduino, LDR ve L298N

Işık takip eden robot, önüne takılan iki LDR ile hangi tarafın daha aydınlık olduğunu ölçüp tekerleklerini o yöne süren bir Arduino projesid...

Devamını oku →
11 Kasım 20266 dk okuma

İzoleli Tornavida ve 1000V VDE El Aletleri Nedir?

İzoleli tornavida, IEC 60900 (EN 60900) standardına göre 1000V AC ve 1500V DC gerilime kadar yalıtım için test edilmiş ve üzerinde çift üçge...

Devamını oku →
11 Kasım 20267 dk okuma

ESP8266 Hava Durumu Ekranı: NodeMCU, OLED ve Open-Meteo

ESP8266 hava durumu ekranı, NodeMCU kartının Wi-Fi ile internete bağlanıp Open-Meteo servisinden anlık sıcaklık, nem, rüzgâr ve hava durumu...

Devamını oku →
11 Kasım 20266 dk okuma

Havya Ucu Çeşitleri ve Bakımı: Konik, Keski, Bıçak

Havya ucu, lehimlenecek noktanın boyutuna göre seçilir: ince SMD ve sık bacaklar için konik (I), genel THT lehim için keski (D) ya da eğik k...

Devamını oku →
11 Kasım 20266 dk okuma

Ultrasonik Theremin Projesi: HC-SR04 ile Elle Müzik

Ultrasonik theremin, HC-SR04 sensörüyle elinizin uzaklığını ölçüp bu mesafeyi ses frekansına çeviren bir Arduino projesidir. El sensöre yakl...

Devamını oku →