Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
11,210
Evet NodeMcu muz ve 4x4 key pad'imiz geldi. Bende konu hakkında sıfır bilgi var.
Başlıca soru(n)larımız;
1- Bu alet internete nasıl bağlanır?
2- 4x4 key pad nasıl bağlanır ve kullanılır?
3- 2x16 LCD Ekranımız nasıl bağlanır ve kullanılır?
4- Kodlama (EvListem Sistemimize entegre etme, Keypad den girilen sayısal değeri string'e çevirip Veritabanına kayıt ekleme ve LCD Ekrana durum bilgisi yazdırma. )

Bu adımlardan sadece 4x4 key pad'i nasıl tanıtacağımı aşağı yukarı biliyorum. @uyesercan 'ın verdiği linkte anlatılmıştı.
Sırasıyla bütün adımları kurcalayıp öğreneceğiz.

20200909_130528.jpg


20200909_130656.jpg


20200909_130638.jpg
 
İşe NoceMcu'yu arduino idesine tanıtarak başlıyorum.
Bunun için şu kodu "Dosya -->Tercihler" Sekmesine tıklayarak "Ek devre kartları yöneticisi URL'leri" yazan yerin yanındaki boşluğa yapıştırıp "Tamam" butonuna tıklıyoruz.
JSON:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

arduino_tercihler_1.png


arduino_tercihler.png


Ardından "Araçlar --> Kart "XXXX"--> Kart Yöneticisi Sekmesine Tıklıyoruz.
arduino_kart_yoneticisi.png


Şimdi Açılan Sayfada Arama Kısmına "ESP8266" Yazıyoruz ve resimdeki kütüphaneyi yüklüyoruz.
arduino_kart_yoneticisi_kütüphane.png


Ve son olarak "Araçlar --> Kart -->" sekmesi altından NodeMcu kartımızı ve Com Portunu seçiyoruz.

Gerisi bildiğiniz üzere her arduino kartta olduğu gibi içine kodlar yükleme kısmı.
Ben kendi kullanacağım kodları yazdıktan sonra ayrıca yüklemesini de göstereceğim.

arduino_esp8266_kart.png
 
Herhalde ilk önce blink'in çalıştığını görmek istersin :)
 
Bu NodeMCU ile program geliştirmek için kullanılacak IDE hangisidir? Arduino IDE mi kullanılıyor?
 
Herhalde ilk önce blink'in çalıştığını görmek istersin :)
Onu yaptım Bile :D
Edit: Arka plandan kopya çekmişsin şimdi farkettim. :katil1:
Ama artık klişe haline geldi bu iş. Arka plandaki o görsel olmasa da çok zor değil blink ile test edildiğini tahmin etmek :D

Bu NodeMCU ile program geliştirmek için kullanılacak IDE hangisidir? Arduino IDE mi kullanılıyor?
Sanırım Arduino İde si kullanılıyor. Ben internete bağladım bile. Şimdi atıcam ayrıntısını.
 
Son düzenleme:
Şimdi NodeMcu muzu wifi ile internete bağlıyoruz. Bunun için gerekli kodları aşağıdan kopyalaya bilirsiniz.
Kodları önceden yazıp github'a yükleyen JumeJume1 arkadaşımıza teşekkür ederiz :D
Ayrıca bağlantının sağlamasını yapmak için Serial Ekranın yanı sıra pinlerden birine LED bağlayarak test ettim.
nodemcu_wifi_bağlama.png

20200909_142115.jpg



C++:
#include <ESP8266WiFi.h>

const char* ssid="Your SSID";
const char* password = "Your Password";

int ledPin = 13;

void setup() {
 
  pinMode(ledPin,OUTPUT);
  digitalWrite(ledPin,LOW);

  Serial.begin(115200);
  Serial.println();
  Serial.print("Wifi connecting to ");
  Serial.println( ssid );

  WiFi.begin(ssid,password);

  Serial.println();
  Serial.print("Connecting");

  while( WiFi.status() != WL_CONNECTED ){
      delay(500);
      Serial.print(".");       
  }

  digitalWrite( ledPin , HIGH);
  Serial.println();

  Serial.println("Wifi Connected Success!");
  Serial.print("NodeMCU IP Address : ");
  Serial.println(WiFi.localIP() );

}

void loop() {
  // put your main code here, to run repeatedly:

}
 
Şimdi Sıra Geldi KeyPad'i tanıtmaya.
Bunun için İlk Önce Arduino İDE'sinden "Araçlar --> Kütüphaneleri Yönet" Sekmesine Tıklıyoruz.
arduino_keypad_kütüphane.png


Daha Sonra Açılan Sayfada Arama Kısmına "Keypad" yazıp aşağıdaki resimde görünen kütüphaneyi Yüklüyoruz.
arduino_keypad_kütüphane_yükleme.png


Kütüphaneyi yükledikten sonra Keypad'i NodeMcu ya bağlıyoruz.
Bunun için aşağıdaki şemayı göz önünde bulundurarak bağlantı yapmalıyız.
Yalnız burada bir ayrıntı var. Keypad üzerinde olan 10 bacaktan en baştaki ve en sondaki boşta. Bu pinlere birşey bağlamıyoruz.
Geriya kalan 8 Pini NodeMcu'nun D0 pininden D7 Pinine kadar sıra ile bağlıyoruz.

nodemcu-4x4-matrix-keypad-diagram.png


20200909_152747.jpg
 
Dıştaki iki uç nedir? Bu çinliler boşuna uç koymazlar ve oradan mutlaka 0.00001 cent tasarruf ederler :katil2:
 
Şimdi Kodlarımızı NodeMcuya Yüklüyoruz. Yine kodları aşağıdan kopyalayabilirsiniz.

arduino_nodemcu-4x4-matrix-keypad_code.png


C++:
#include <Keypad.h>
 
const byte n_rows = 4;
const byte n_cols = 4;
 
char keys[n_rows][n_cols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 
byte colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
 
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
 
void setup(){
  Serial.begin(115200);
}
 
void loop(){
  char myKey = myKeypad.getKey();
 
  if (myKey != NULL){
    Serial.print("Key pressed: ");
    Serial.println(myKey);
  }
}

Şimdi bu noktada bir sıkıntı yaşadım.
Keypadi şemada verilen şekilde bağlamama rağmen tuşlara bastığım da doğru kombinasyonu yakalayamadım.
2'ye bastığım da 4, 3'e bastığım da 7 çıkıtısını aldım.
Bu durumda yapılacak iki şey vardı. Ya pinleri tek tek tespit edip doğru kabloyu doğru pine bağlayacağız, yada kodlara müdahale ederek doğru kombinasyonu yakalayacağız.
Ben birinci yolu tercih etmeme rağmen keypad'in pcb'tarafını görmek mümkün olmadığından pinleri tespit edemedim. Eminim kolay bir yolu vardır ama henüz ben bilmiyorum. Bu yüzden ikinci yolu tercih edip kodları değiştirdim ve doğru kombinasyonu yakaladım.
O kodları da aşağıya ekliyorum.
arduino_nodemcu-4x4-matrix-keypad_code2.png


C++:
#include <Keypad.h>
 
const byte n_rows = 4;
const byte n_cols = 4;
 
char keys[n_rows][n_cols] = {
  {'1','4','7','*'},
  {'2','5','8','0'},
  {'3','6','9','#'},
  {'A','B','C','D'}
};
 
byte colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
 
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
 
void setup(){
  Serial.begin(115200);
}
 
void loop(){
  char myKey = myKeypad.getKey();
 
  if (myKey != NULL){
    Serial.print("Key pressed: ");
    Serial.println(myKey);
  }
}

Böylelikle Keypad Tanıtma ve Kullanma koşulunu da sağlamış olduk.
 
Dıştaki iki uç nedir? Bu çinliler boşuna uç koymazlar ve oradan mutlaka 0.00001 cent tasarruf ederler :katil2:
Hiç bir yere bağlı değil abi. Bende anlam veremedim. Bir yere bağlıymış gibi yol çizmişler ama bağlı değil. Keypad yerli üretime benziyor. Benim eskiden kullandığım kb plaket var üstünde. Fr4 epoksi bile değil. :D

20200909_160318.jpg
 
Hiç bir yere bağlı değil abi. Bende anlam veremedim. Bir yere bağlıymış gibi yol çizmişler ama bağlı değil. Keypad yerli üretime benziyor. Benim eskiden kullandığım kb plaket var üstünde. Fr4 epoksi bile değil. :D

Hmm tamam. O zaman herhalde ellerinde 10 pinli header vardı stokta. Onu eritmek için onunla yaptılar tasarımı.
 
Zurnanın zırt dediği yere geldik.
2x16 lcd yi takmak için pin yok. Solda "S" ile başlayan pinler var ama ne işe yarıyorlar bilmiyorum.

Keypad den serial ekrana aldığım numaraları nasıl koda dahil edicem?
Php mantığıyla örnek verirsem;
$numara = $_GET['numara'];
gibi bir şey yapmam lazım ama nasıl?
 
i2c donanımları tercih et. io pinleriçok kısıtlı sayıda esp nin
 
3 pin ile de bu keypad'i kullanabilirsin. Ama artık öyle hap gibi al kütüphaneyi kullan yok :D Kodu kendin yazman gerekecek. Aşağıda örnek var:

1599658662830.png


Buradaki çalışma prensibi, keypad'in bir nevi DAC gibi kullanılması. Basılan tuşların durumuna göre bir analog voltaj oluşuyor ve bu voltajı da okuyorsun. Her tuş kombinasyonu için bir voltaj aralığı olacaktır. Tabi bunun çalışması için NodeMCU nun analog girişinin olması lazım (vardır herhalde, ben kullanmadım bilmiyorum).
 
Burada genel bir özet olarak keypad kullanımını da biraz anlatalım. Yaygın kullanılan 2 tane metot var:

1) Taramalı keypad okuma. Bu senin ilk gösterdiğin şemada yapılan iş. Satırları (veya sütunları) çıkışlara bağlıyorsun, sütunları (veya satırları) da girişlere bağlıyorsun. Sonra da çıkışları sırayla HIGH yapıp hangi girişin HIGH olduğuna bakıyorsun. Burada da önemli detaylar var. Taranan çıkışı HIGH yapıyorken, diğer çıkışların HiZ yapılması lazım! Bu metot, genel olarak iyi çalışır. Ama bazı tuş kombinasyonlarında ya tuşun basıldığını kaçırır, yada basılan tuşun bırakıldığını kaçırır. Bunu engellemek için her tuş için satır sütun arasına diyot bağlamak gerekir (mesela 1N4148).

2) Analog olarak okuma. Bu da benim üstteki mesajda gösterdiğim metot. Bu da çoğu durumda iyi çalışır. Direnç değerlerinin uygun bir şekilde seçilmesi, ve ilgilenilen her tuş kombinasyonu için yeterince belirgin ve diğer değerlerden uzak bir voltaj elde edilmesi lazım.

Aslında işin doğrusu, hazır kütüphane kullanmadan, bu metotları birebir programını yazmak, artılarını eksilerini görmek. Yoksa kullandın kütüphaneyi ve bahsettiğim gibi bazı tuş kombinasyonlarında basılma veya salınmayı kaçırıyor. Ne yapacaksın?
 
Tuş matrisleri ile ilgili güzel bir kaynak aşağıda. Bu kayndakta tuş basılması veya bırakılmasını kaçırma sorunu ile ilgili bilgi de "ghosting" ve "masking" başlığı altında anlatılıyor.


1599660143266.png


1599660171345.png


1599660201818.png
 
Burada genel bir özet olarak keypad kullanımını da biraz anlatalım. Yaygın kullanılan 2 tane metot var:

1) Taramalı keypad okuma. Bu senin ilk gösterdiğin şemada yapılan iş. Satırları (veya sütunları) çıkışlara bağlıyorsun, sütunları (veya satırları) da girişlere bağlıyorsun. Sonra da çıkışları sırayla HIGH yapıp hangi girişin HIGH olduğuna bakıyorsun. Burada da önemli detaylar var. Taranan çıkışı HIGH yapıyorken, diğer çıkışların HiZ yapılması lazım! Bu metot, genel olarak iyi çalışır. Ama bazı tuş kombinasyonlarında ya tuşun basıldığını kaçırır, yada basılan tuşun bırakıldığını kaçırır. Bunu engellemek için her tuş için satır sütun arasına diyot bağlamak gerekir (mesela 1N4148).

2) Analog olarak okuma. Bu da benim üstteki mesajda gösterdiğim metot. Bu da çoğu durumda iyi çalışır. Direnç değerlerinin uygun bir şekilde seçilmesi, ve ilgilenilen her tuş kombinasyonu için yeterince belirgin ve diğer değerlerden uzak bir voltaj elde edilmesi lazım.

Aslında işin doğrusu, hazır kütüphane kullanmadan, bu metotları birebir programını yazmak, artılarını eksilerini görmek. Yoksa kullandın kütüphaneyi ve bahsettiğim gibi bazı tuş kombinasyonlarında basılma veya salınmayı kaçırıyor. Ne yapacaksın?
1 Tane Analog çıkış var abi nodemcu da.
 
O zaman mecbur keypad tarama yapan ve çıkışı I2C olarak veren bir entegre kullanman lazım. Onları da Türkiye'de bulabilir misin bilmiyorum. Şimdi birkaç tane arattım ikisi de yok, yurtdışından gelmesi lazım.

 
Veya sana güzel bir proje: En ucuzundan bir PIC al, o yapsın tarama işini ve sonucu I2C olarak versin NodeMCU'ya ;)
 

Forum istatistikleri

Konular
5,790
Mesajlar
99,030
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top