- Peki bu QR Kodu Nedir?
- Kendi QR kodunuzu oluşturmak
- PNG'yi BMP formatına dönüştürme
- BMP görüntüsünü bir dizi HEX koduna dönüştürün
- Devre şeması
- Kod Açıklama
"Hızlı Yanıt" kodu veya QR kodu olarak kısaltılmış, dijital yaşamımızın önemli bir parçası haline geldi, muhtemelen şu ana kadar bilinçaltında bunlara aşina olmuşsunuzdur veya belki de yerel bakkalda dolaşıyorsunuzdur. en sevdiğiniz kitabı okuyorsunuz, hatta muhtemelen Google Pay, PhonePe veya Paytm ile çevrimiçi bir ödeme yapıyorsunuz veya internette geziniyorsunuz, vb. (Sanırım örneklerle devam edebilirim ha?) ve geldin bu garip görünen kare şeyin karşısında ve düşündüm ki, bu kare şey nedir ve eğer yapmadıysanız… peki, endişelenmeyin, er ya da geç olacak, bu yüzden konuyu daha iyi anlamak için bir Arduino ve OLED ile eğlenceli küçük bir proje ve aşağıdakileri açıklığa kavuşturun:
- QR kodunun Temel Kavramı.
- Nasıl çalışır.
- Arduino kullanarak kendi QR kodunuzu nasıl oluşturabilirsiniz.
- Ve son olarak, bir OLED (SSD1306) ekranında görüntüleyin.
Peki bu QR Kodu Nedir?
QR kodu (Hızlı Yanıt kodu), Japonya'nın otomotiv endüstrisi için 1994 yılında DENSO WAVE tarafından geliştirilen, yüksek hızda veri okumak için bir matris 2D koddur. QR kodu, verileri standart barkoda kıyasla çok verimli bir şekilde sıkıştırır, bunu başarmak için dört standartlaştırılmış kodlama modu (sayısal, alfanümerik, bayt / ikili ve kanji) kullanır, teknoloji "açık kaynak" haline getirilmiştir, yani herkes tarafından kullanılabilir. QR Kodlarının geleneksel barkodlara göre önemli avantajları, daha büyük veri kapasitesi ve yüksek hata toleransıdır.
QR Kodu Nasıl Çalışır?
QR kodları (ve diğer veri matris kodları) insanlar tarafından değil özel araçlarla okunmak üzere tasarlanmıştır, bu nedenle görsel olarak çalışarak anlayabileceğimiz yalnızca belirli bir miktar vardır, ancak her kod çeşitli şekillerde farklı olsa da birkaç ilginç ortak içerir Circuitdigest.com QR kodunu gözlemleyerek bazı özellikleri inceleyeceğiz.
- Bulucu Desenler: Kodun üç köşesinde içi dolu bir kutu bulunan büyük kare kutular, yalnızca üç tane olduğu için bunun bir QR kodu olduğunu onaylamayı kolaylaştırır, bu nedenle kodun hangi yöne yönlendirildiği oldukça açıktır.
- Hizalama Deseni: Bu, kodun yönü ne olursa olsun okunabilir olmasını sağlar.
- Zamanlama Modeli: Bu, üç bulucu modeli arasında yatay ve dikey olarak çalışır , bu satırları kullanarak okuyucu kodun boyutunu belirleyebilir.
- Sürüm Bilgileri: Şu anda QR kod standardının 40 farklı sürümü vardır, kodun bu bölümü, normal olarak kullanılan pazarlama sürümü 1-7 için kullanılan QR kodu sürümünü belirler.
- Biçim Bilgileri: Biçim ortakları, hata toleransı ve veri maskeleme hakkında bilgilere sahiptir.
- Veri Alanı: Kodun bu bölümü, tüm veri öğelerini ve hata düzeltme kodunu birlikte içerir.
- Çıkma Bölgesi: Kodu çevresinden ayırt etmek için her QR kodundaki boşluk zorunludur.
Aşağıdaki resim size kod hakkında net bir fikir verecektir.
Kodun diğer bölümleri veri ve artıklık kodudur.
Bu eğitimde tartışmayacağım bir dizi başka özellik ve karmaşık konu var, QR kodu hakkında daha fazla ayrıntı okumak isterseniz, lütfen EPCglobal Singapur Konseyi'nden Tan Jin Soon tarafından hazırlanan bu QR Kodu eğitimini izleyin. Sentez Dergisi, 2008.
QR Kodunun Özellikleri
Sembol Boyutu |
Min. 21x21 hücre - Maks. 177x177 hücre (4 hücreli aralıklarla) |
|
Bilgi Tipi ve Hacmi |
Sayısal Karakterler |
Maksimum 7.089 karakter |
Alfabeler, İşaretler |
Maksimum 4.296 karakter |
|
İkili (8 bit) |
Maksimum 2.953 karakter |
|
Kanji Karakterleri |
Maksimum 1.817 karakter |
|
Dönüşüm verimliliği |
Sayısal Karakter Modu |
3,3 hücre / karakter |
Alfanümerik / İşaretler Modu |
5.5 hücre / karakter |
|
İkili (8 bit) Mod |
8 hücre / karakter |
|
Kanji Karakter Modu (13 bit) |
13 hücre / karakter |
|
Hata düzeltme işlevsellik |
Seviye L |
Yaklaşık. Sembol alanının% 7'si maksimumda geri yüklendi |
Seviye M |
Yaklaşık. Sembol alanının% 15'i maksimumda geri yüklendi |
|
Seviye Q |
Yaklaşık. Sembol alanının% 25'i maksimumda geri yüklendi |
|
Seviye H |
Yaklaşık. Sembol alanının% 30'u maksimumda geri yüklendi |
|
Bağlama işlevi |
Maksimum 16 sembole bölünebilir |
Kendi QR kodunuzu oluşturmak
Kendi QR kodunuzu oluşturmak için aşağıda belirtilen adımları izleyin, bu örnekte sevgili Circuit Digest web sitemizin bir QR kodunu yapacağız.
Bir QR kodu oluşturmak için bu web sitesine gidin ve web sitesinin üst tarafına bakarsanız, seçeneklerin bir listesini görebilirsiniz, bu eğitimde bir URL için bir QR kodu oluşturuyoruz, bu yüzden
- URL sekmesine tıklayın ve Devre Özeti için URL'yi URL Girin bölümüne yapıştırın.
- Kaydet'e tıklayın.
- Çıktı dosyası için bir dosya adı verin.
- Tercih edilen dosya formatı olarak PNG'yi seçin.
- ve kaydet'i tıklayın.
Aşağıdaki resim size süreç hakkında net bir fikir verecektir.
En sevgili mikrodenetleyicimiz “Arduino”, ham PNG görüntüsünü derleyip OLED ekranında gösterecek kadar akıllı değil. Bu nedenle, QR kodunu OLED'e görüntülemek için bazı basit adımları izlememiz ve PNG görüntüsünü Arduino tarafından okunabilen bir bitmap dizisine dönüştürmemiz gerekir. Arduino ile SSD1306 OLED arayüzünü kurarken ve Grafik LCD'yi Arduino ile arayüz oluştururken daha önce yaptığımız bu dönüşüm. SSD1306 OLED'i Raspberry Pi, ESP32, NodeMCU ve diğer birçok mikrodenetleyici ile de arayüzledik. Bitmap dizi dönüşümü aşağıdaki iki adımda yapılabilir:
- PNG'yi BMP formatına dönüştürme.
- BMP görüntüsünü bir dizi HEX koduna dönüştürün.
PNG'yi BMP formatına dönüştürme
İndirilen PNG görüntüsünü BMP görüntüsüne dönüştürmek için bu web sitesine ve görüntü dönüştürücü bölümüne gidin ve
- Açılır menüyü tıklayın ve seçin
- BMP biçimine dönüştür
- Git'i tıklayın
Aşağıdaki resim size süreç hakkında net bir fikir verecektir:
Aşağıdaki resme benzeyen yeni bir sayfa ile sunulacaksınız:
- Dosyaları Seç sekmesine tıklayın ve indirilen resmi seçin
- İsteğe bağlı ayarlarda istediğiniz boyutu panel yazın (128x64 OLED kullanıyoruz)
- Dönüşümü başlat düğmesine tıklayın
Aşağıdaki sayfa karşınıza çıkacak ve birkaç saniye sonra, indirme işlemi otomatik olarak başlamazsa, dosyanızı indir seçeneğine tıklayarak dönüştürülen görseliniz indirilecektir:
Harika! Şimdi BMP dosyamızı bir Arduino tarafından okunabilen bir dizi HEX koduna dönüştürme zamanını aldık.
BMP görüntüsünü bir dizi HEX koduna dönüştürün
İndirilen BMP görüntüsünü bir HEX dizisine dönüştürmek için, bu web sitesine gidin ve Araçlar -> image2cpp seçeneğine tıklayın.
Aşağıdaki resim size süreç hakkında net bir fikir verecektir.
Size dört seçenekli bir ekran sunulacak ve bunları ayrıntılı olarak tartışacağız.
- Fotoğraf seç
- Görüntü Ayarları
- Ön izleme
- Çıktı
Görüntü bölümünü seçin
Bu bölümde az önce BMP'ye dönüştürdüğümüz resmi seçeceğiz:
Görüntü Ayarları Bölümü
Bu bölümde tuval boyutunu, arka plan rengini, ölçeklendirmeyi ve merkez seçeneklerini gerekli değerimize göre ayarlayacağız.
- Tuval boyutu (128x64 piksel yoğunluğuna sahip bir OLED kullandığımız için 128x64 olarak ayarladık).
- Bu bölümde OLED'in arka plan rengini ayarlayabiliriz (beyaz olmasını seçiyoruz).
- Ölçekleme, orijinal boyuta ayarlanır.
- Son olarak, ortadaki seçenekte yatay ve dikey onay kutularına tıklayın, bu, görüntünün merkezde görünmesini sağlayacaktır.
Aşağıdaki resim size net bir fikir verecektir
Önizleme Bölümü
Önizleme bölümünde, aşağıda gösterildiği gibi OLED'de görüntülenecek olan görüntünün net bir önizlemesini görebiliriz:
Çıkış Bölümü
Çıktı bölümünde, üretilen kodu oluşturup kopyalayacağız, bunun için aşağıdaki adımları izleyin:
- Kod çıkış formatı (bir tane kullandığımız için Arduino kodu olarak ayarladık).
- Tanımlayıcı (bu seçenek, onu varsayılan olarak bıraktığımız üretilen dizinin adını belirler).
- Çizim modu (Çizim modu seçeneğini yatay olarak ayarlıyoruz).
- Ve son olarak, kod oluştur düğmesine tıklıyoruz, bu son çıktı kodunu oluşturacaktır.
Aşağıdaki resim size net bir fikir verecektir
Devre şeması
Aşağıdaki resimde Arduino Nano ve SSD1306 arasındaki arayüz bağlantıları gösterilmektedir:
Arduino Nano Pimi |
OLED PIN |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Kod Açıklama
Görüntüyü OLED'de göstermek için, bu GitHub deposundan indirilebilen bir Arduino kütüphanesinin yardımına ihtiyacımız var. Kitaplığın U8glib-1.19.1.zip sürümünü indirin ve Arduino IDE'ye içe aktarın. Arduino'da yeniyseniz, bir kitaplığın nasıl içe aktarılacağını açıklayan bu bağlantıdan yardım alın. Aşağıdaki bölümde, önceden oluşturulmuş HEX dizisini OLED'de görüntülemek için kodu değiştireceğiz. Bu makalenin sonunda, çalışan bir video ile birlikte eksiksiz kod verilmiştir. Kodun Detay Açıklaması aşağıda verilmiştir.
İlk olarak, indirilen kitaplığı ekleyin.
#include "U8glib.h" // U8glib kitaplığı dahil
Ardından OLED için gerekli tüm pinleri tanımlayın.
#define OLED_CLK_PIN 13 // Arduino Dijital Pin D13: SCK #define OLED_MOSI_PIN 11 // Arduino Dijital Pin D11: MOSI #define OLED_RES_PIN 10 // Arduino Dijital Pin D10: SS #define OLED_SDC_PIN 9 // Arduino Dijital Pin D9: OC1A #define OLED_CSS_PIN 8 // Arduino Dijital Pin D13: ICP1
U8glib Kitaplığını başlatın.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Ardından, oluşturulan görüntü dizisini ekleyin.
const uint8_t circuitdigest PROGMEM = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x33, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x81, 0x8f, 0x31,0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0x31, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, …….. …… …..0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
Çizim fonksiyonu, u8g.drawBitmapP fonksiyonu yardımıyla OLED üzerine bitmap görüntüsünü (QR kodu) çizmek için kullanılır.
void draw (void) {// ekranın tamamını yeniden çizmek için grafik komutları buraya yerleştirilmelidir u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Son olarak, loop () işlevi, görüntüyü OLED üzerine oluşturmak için gerekli tüm prosedürleri çağırın.
geçersiz döngü () {u8g.firstPage (); // Bu prosedüre yapılan bir çağrı, resim döngüsünün başlangıcını işaret eder. yapmak {draw (); } while (u8g.nextPage ()); // Bu prosedüre yapılan bir çağrı, resim döngüsünün gövdesinin sonunu işaretler. // biraz gecikmeden sonra resmi yeniden oluşturun (1000); }
Kodu tamamladıktan sonra bilgisayarınızın USB portuna Arduino'yu takın, COM portunuzu seçin ve kodu yükleyin. Her şeyi doğru yaptıysanız, OLED'de QR kodlu çalışan bir ekrana sahip olacaksınız.
Umarım bu projeyi sevmişsinizdir ve yeni bir şeyler öğrenmekten zevk almışsınızdır, okumaya devam edin, öğrenmeye devam edin, bir dahaki sefere görüşürüz.