Bir sonraki projenizde bir saat, zamanlayıcı veya sayaç tasarlamak istiyorsanız, 4 basamaklı yedi bölümlü bir ekrana ihtiyacınız olacak. Ancak, çıplak 4 basamaklı 7 segmentli bir ekran genellikle 12 bağlantı pini gerektirir. Bu oldukça fazladır ve diğer modüllere ve sensörlere yer bırakmaz.
Sonuçta, tonlarca kablo olmadan 4 basamaklı yedi segmentli bir ekranı kontrol edebilseydiniz harika olmaz mıydı? TM1637 modülünün devreye girdiği yer burasıdır. TM1637 modülü, pin bağlantılarını dörde düşürür. Güç bağlantıları için iki pin kullanılır ve diğer iki pin segmentleri kontrol etmek içindir.
7 Segmentli Görüntü Temelleri
7 segmentli ekranlar, aslında belirli bir düzende ('8' şekli) sıralanan yedi LED'dir. Yedi LED'in her birine segment adı verilir, çünkü yandığında segment sayısal bir basamağın (hem ondalık hem de onaltılık) bir parçasını oluşturur.
Bu ayrı segmentler, her bir LED'i temsil eden "A" dan "G" ye kadar etiketlenmiştir. Belirli segmenti YÜKSEK veya DÜŞÜK olarak ayarlayarak, istenen bir karakter modeli oluşturulur.
TM1637 Modüle Genel Bakış
Modülün merkezinde, Titan MicroElectronics - TM1637'den ucuz bir seri LED sürücüsü bulunmaktadır .
TM1637, LED'lerin AÇIK / KAPALI ve parlaklık kontrolünün yanı sıra her bir segmente erişim dahil olmak üzere birçok işlevi destekler. Ayrıca, LED'lerin parlaklığını yazılım düzeyinde ayarlamanıza da olanak tanır.
Ve bir başka güzel şey de, ekran mikro denetleyici tarafından güncellendiğinde, TM1637 daha sonra ekranı yenilemek için gereken tüm işi hallediyor. Böylece mikrodenetleyiciden ek yük kaldırılır, bu da diğer önemli şeyleri yapmayabilir.
TM1637 modülü, sensör verilerini veya sıcaklığı görüntülemek için dört adet 0.36 segmentli 7 segmentli ekran içerir. Dört 7 segmente ek olarak, modülün merkezinde saat veya zaman tabanlı projeler oluşturmayı çok kolaylaştıran bir 'kolon' vardır.
TM1637 modülü, 3,3 ila 5 voltluk bir besleme voltajında çalışır ve iki kablolu bir veri yolu üzerinden iletişim kurar, bu nedenle yalnızca iki veri pini artı VCC ve toprak gerektirir. Veri yolu bu cihaza özeldir, ancak Arduino için karmaşıklıkları gizleyen ve ekranla iletişim kurmayı kolaylaştıran kitaplıklar vardır.
TM1637 Modül Bağlantı Düzeni
Modül üzerinde bağlantı yapmak için 4 pinli dik açılı erkek başlık bulunmaktadır.
CLKbir saat giriş pinidir. Arduino'daki herhangi bir dijital pime bağlayın.
DIObir Veri G / Ç pinidir. Arduino'daki herhangi bir dijital pime bağlayın.
VCCpin modüle güç sağlar. 3.3V ila 5V güç kaynağına bağlayın.
GND bir toprak pimidir.
Arduino UNO ile Bağlantı TM1637 Modülü
TM1637'yi bir Arduino'ya bağlamak çok basit. Yalnızca dört kabloyu bağlamanız gerekir: ikisi güç için ve ikisi ekranı kontrol etmek için.
Modül, Arduino'nun 5 voltluk çıkışından güvenli bir şekilde beslenir. CLK ve DIO pinleri, Arduino'nun 2 ve 3 numaralı dijital pinlerine bağlanır.
TM1637 ile deneyler için bağlantı aşağıdadır:
Arduino'da kullanılan pinlerin hiçbiri kritik değildir çünkü modül herhangi bir pime özgü özellik gerektirmez, bu nedenle farklı pinler kullanmak istiyorsanız bunu güvenle yapabilirsiniz. Kablolardaki herhangi bir değişikliği yansıtmak için koddaki pin numaralarını değiştirdiğinizden emin olun.
Kütüphane Kurulumu
TM1637 yongasıyla konuşmak için bir kitaplık kullanmanız gerekir. Avishay Orpaz, TM1637 ekranlar için mükemmel bir kütüphane olan TM1637 Ekran kütüphanesi yazmıştır . Bu kitaplık, ekranı kontrol etmeyi oldukça kolaylaştıran birçok yerleşik işleve sahiptir. Sadece hangi numaranın görüntüleneceğini belirlersiniz ve sizin için işlenir.
Kitaplığı kurmak için Sketch> Dahil Et> Kitaplıkları Yönet'e gidin … Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.
Aramanızı ' tm1637 ' yazarak filtreleyin . Avishay Orpaz'ın kütüphanesini arayın . Bu girişe tıklayın ve ardından Yükle'yi seçin.
Temel Arduino Kodu
Aşağıda, bir dizi farklı rutinden geçen temel bir test programı bulunmaktadır. Devam edin ve Arduino'nuza yükleyin.
// Include the library
#include <TM1637Display.h>
// Define the connections pins
#define CLK 3
#define DIO 4
// Create a display object of type TM1637Display
TM1637Display display = TM1637Display(CLK, DIO);
// Create an array that turns all segments ON
const uint8_t allON[] = {0xff, 0xff, 0xff, 0xff};
// Create an array that turns all segments OFF
const uint8_t allOFF[] = {0x00, 0x00, 0x00, 0x00};
// Create an array that sets individual segments per digit to display the word "dOnE"
const uint8_t done[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
// Create degree celsius symbol
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Degree symbol
SEG_A | SEG_D | SEG_E | SEG_F // C
};
void setup() {
}
void loop() {
// Set the brightness to 5 (0=dimmest 7=brightest)
display.setBrightness(5);
// Set all segments ON
display.setSegments(allON);
delay(2000);
display.clear();
// Show counter 0-9
int i;
for (i = 0; i < 10; i++) {
display.showNumberDec(i);
delay(50);
}
delay(2000);
display.clear();
display.showNumberDec(-12); // Prints _-12
delay(2000);
display.clear();
display.showNumberDec(-999); // Prints -999
delay(2000);
display.clear();
display.showNumberDec(31, false); // Prints __31
delay(2000);
display.clear();
display.showNumberDec(31, true); // Prints 0031
delay(2000);
display.clear();
display.showNumberDec(14, false, 2, 1); // Prints _14_
delay(2000);
display.clear();
display.showNumberDec(-5, false, 3, 0); // Prints _-5_
delay(2000);
display.clear();
// Prints 12:34
display.showNumberDecEx(1234, 0b11100000, false, 4, 0);
delay(2000);
display.clear();
// Prints 15°C
int temperature = 15;
display.showNumberDec(temperature, false, 2, 0);
display.setSegments(celsius, 2, 2);
delay(2000);
display.clear();
// Prints dOnE
display.setSegments(done);
while(1);
}
Kod Açıklaması:
Çizim, kitaplığın dahil edilmesi ve TM1637 ekranını bağlamak için kullanılan pimlerin tanımlanmasıyla başlar.
#include <TM1637Display.h>
#define CLK 3
#define DIO 4
Ardından, işlevle TM1637Display sınıfının yeni bir örneği oluşturulur TM1637Display()
. Bu fonksiyon iki parametre gerektirir, ilki CLK pini ve ikincisi DIO pini.
TM1637Display display = TM1637Display(CLK, DIO);
Ekranın ayrı bölümlerini ayarlamanın iki yolu vardır. Görüntünün ayrı bölümlerini ayarlayan kodun kurulum bölümünden önce birkaç dizi tanımlanır. Fonksiyonu setSegments()
daha sonra ekrana yazmak için kullanacağız.
Ayrı segmentleri ayarlamak için ilk seçenek, onaltılık sayılar kullanmaktır. Onaltılık 0xFF, ikili olarak 11111111'e çevrilir ve tüm segmentleri AÇIK hale getirir. Örneğin 0xEF, 11101111'e çevirir ve E segmenti dışındaki tüm segmentleri AÇIK hale getirir, 0x00 ise tüm segmentleri KAPATIR.
Saymanın sağdan sola gittiğini, bu nedenle 11111111 segmentinin (nokta) GFEDCBA'ya karşılık geldiğini unutmayın.
// Create an array that turns all segments ON
const uint8_t allON[] = {0xff, 0xff, 0xff, 0xff};
// Create an array that turns all segments OFF
const uint8_t allOFF[] = {0x00, 0x00, 0x00, 0x00};
Ayrı segmentleri ayarlamak için başka bir seçenek, açmak istediğiniz segmentleri belirlemektir. Bu seçenek biraz daha kolaydır. Aşağıdaki koda bakın. İlk parçacık "dOnE" sözcüğünün ekranda yazdırılmasına yardımcı olurken, ikinci parçacık ekranda "° C" yazdırılmasına yardımcı olur.
// Create an array that sets individual segments per digit to display the word "dOnE"
const uint8_t done[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
// Create °C symbol
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // °
SEG_A | SEG_D | SEG_E | SEG_F // C
};
Ayarlanacak hiçbir şey olmadığından kurulum bölümü boş tutulur.
Kodun döngü bölümünde birçok kütüphane işlevi kullandık. Onları tek tek öğrenelim.
setBrightness ( parlaklık , açık )
Bu işlev, ekranın parlaklığını ayarlamak için kullanılır. 0 (en düşük parlaklık) ile 7 (en yüksek parlaklık) arasında bir parlaklık seviyesi belirleyebilirsiniz. İkinci argüman isteğe bağlıdır ve ekranı AÇMAK veya KAPATMAK için kullanılabilir. Doğru (ekran AÇIK) veya yanlış (ekran KAPALI) olarak iletebilirsiniz.
Örneğin , ekranı kapatırken display.setBrightness(5)
parlaklığı 5 olarak ayarlar display.setBrightness(5, false)
.
setSegments ( segmentler [] , uzunluk , konum )
Bu işlev, bir ekranın ayrı bölümlerini ayarlamak için kullanılabilir. İlk argüman, segment bilgilerini içeren dizidir. İkinci bağımsız değişken güncellenecek basamak sayısını (0-4) belirtir. "DOnE" kelimesini yazdırmak istiyorsanız, 4 olacaktır, "° C" sembolü için 2 olacaktır. Üçüncü bağımsız değişken, yazdırmak istediğiniz konumu belirler (0-en sol, 3-en sağ) .
İşlevin ikinci ve üçüncü bağımsız değişkeninin isteğe bağlı olduğuna dikkat edin. Bu nedenle, ekranın tüm rakamlarını güncellemek istiyorsanız, bunları atlayabilirsiniz. Örneğin, aşağıdaki kod parçacığı önce ekranın tüm bölümlerini açacak ve ardından "dOnE" yazdıracaktır.
// Set all segments ON
display.setSegments(allON);
// Prints dOnE
display.setSegments(done);
Bununla birlikte, "° C" sembolünü yazdırmak için ekranın yalnızca son iki basamağını güncellemek istiyorsanız, şunu kullanmalısınız:
// Prints __°C
display.setSegments(celsius, 2, 2);
showNumberDec ( sayı , baştaki_ sıfır , uzunluk , konum )
Bu, en çok kullanacağınız işlevdir. İlk argüman, ekranda görüntülemek istediğiniz bir sayıdır. Argümanların geri kalanı isteğe bağlıdır.
Örneğin, aşağıdaki kod parçacığı 0'dan 9'a kadar sayacak ve ardından ekranda -12 ve -999 yazdıracaktır.
// Show counter 0-9
int i;
for (i = 0; i < 10; i++) {
display.showNumberDec(i);
delay(50);
}
display.showNumberDec(-12); // Prints _-12
display.showNumberDec(-999); // Prints -999
İkinci bağımsız değişken, bir sayıyı baştaki sıfırlarla doldurmak için kullanılabilir. Bunu true olarak ayarlamak bir sayıya baştaki sıfırları ekler ve bunu false olarak ayarlamak sayıyı olduğu gibi yazdırır. Örneğin,
display.showNumberDec(31, false); // Prints __31
display.showNumberDec(31, true); // Prints 0031
Üçüncü ve dördüncü argüman, önceki işlevdeki ile aynıdır. uzunluk güncellenecek basamak sayısını (0-4) belirtir ve konum yazdırmak istediğiniz konumu belirler (0-en sol, 3-en sağ).
Bu nedenle, sayıyı ekranın ortasında göstermek isterseniz şunu yazarsınız:
display.showNumberDec(14, false, 2, 1); // Prints _14_
display.showNumberDec(-5, false, 3, 0); // Prints _-5_
showNumberDecEx ( sayı , noktalar , baştaki_ sıfırlar , uzunluk , konum )
Bu, showNumberDec()
işlevin genişletilmiş bir sürümüdür . Sadece ikinci argümanın farklı olduğunu görebilirsiniz. Bu argüman, ekranın noktalarını kontrol etmenizi sağlar. Aşağıdaki değerleri kullanabilirsiniz.
Her rakam arasında noktalar bulunan TM1637 ekranlar için:
0b10000000 | . | 1.234 |
0b01000000 | . | 12.34 |
0b00100000 | . | 123.4 |
0b11100000 | . . . | 1.2.3.4 |
Yalnızca iki nokta üst üste işaretli TM1637 ekranlar için:
Nokta ve iki nokta üst üste bulunan TM1637 ekranlar için:
0b11100000 | . : . | 1.2: 3.4 |
Bu nedenle, orta kolon etkinleştirilmiş bir saat görüntülemek istiyorsanız, aşağıdaki gibi bir şey kullanırsınız:
// Prints 12:34
display.showNumberDecEx(1234, 0b11100000, false, 4, 0);
Arduino Projesi - TM1637 ve DHT11 / DHT22 ile Termometre Oluşturma
TM1637 ekranının en iyi kullanımı sıcaklık, nem, voltaj veya hız gibi sensör okumalarını görüntülemektir. Aşağıdaki proje, TM1637 ekranında DHT11 / DHT22'den sıcaklık okumalarını görüntüler.
DHT11 / DHT22 modülüne aşina değilseniz, bu öğreticiyi okumayı (en azından gözden geçirmeyi) düşünün.
Aşağıdaki bağlantı şeması, DHT11 / DHT22 sensörünü TM1637 ekranıyla birlikte Arduino'ya nasıl bağlayabileceğinizi gösterir.
Aşağıdaki çizim DHT11 / DHT22 sensörüyle iletişim kurar ve ekranda sıcaklık okumalarını gösterir. Sıcaklık, 2 saniye aralıklarla Celius ve Fahrenheit cinsinden görüntülenir. Kod, Adafruit DHT sensörünü ve Adafruit Birleşik Sensör kitaplıklarını kullanır, bu nedenle lütfen bunları da kurun.
// Include the libraries
#include <TM1637Display.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// Define the connections pins
#define CLK 3
#define DIO 4
#define DHTPIN 5
// Create variable
int temperature_celsius;
int temperature_fahrenheit;
// Create °C symbol
const uint8_t celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_D | SEG_E | SEG_F // C
};
// Create °F symbol
const uint8_t fahrenheit[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_E | SEG_F | SEG_G // F
};
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
// Create display object of type TM1637Display
TM1637Display display = TM1637Display(CLK, DIO);
// Create dht object of type DHT:
DHT dht = DHT(DHTPIN, DHTTYPE);
void setup() {
// Set the display brightness (0-7)
display.setBrightness(5);
// Clear the display
display.clear();
// Setup sensor
dht.begin();
}
void loop() {
// Read the temperature as Celsius and Fahrenheit
temperature_celsius = dht.readTemperature();
temperature_fahrenheit = dht.readTemperature(true);
// Display the temperature in celsius format
display.showNumberDec(temperature_celsius, false, 2, 0);
display.setSegments(celsius, 2, 2);
delay(1000);
// Display the temperature in fahrenheit format
display.showNumberDec(temperature_fahrenheit, false, 2, 0);
display.setSegments(fahrenheit, 2, 2);
delay(1000);
}
Arduino Projesi - TM1637 ve DS3231 ile saat oluşturma
TM1637 ekranının diğer bir tipik kullanımı, onu DS3231 RTC modülüyle eşleştirmek ve 24 saatlik bir saat oluşturmaktır.
DS3231 RTC modülüne aşina değilseniz, öğreticiyi okumayı düşünün.
Ardından, aşağıda gösterildiği gibi DS3231'e bir bağlantı yapmamız gerekiyor. TM1637 ekranının öncekiyle aynı şekilde bağlandığını unutmayın.
Aşağıdaki çizim, saati 24 saatlik zaman biçiminde göstermektedir. Kod, ' RTClib ' arayarak Arduino IDE'deki Kitaplık Yöneticisi aracılığıyla kurabileceğiniz Adafruit RTC kitaplığını kullanır .
// Include the libraries
#include "RTClib.h"
#include <TM1637Display.h>
// Define the connections pins
#define CLK 3
#define DIO 4
// Create rtc and display object
RTC_DS3231 rtc;
TM1637Display display = TM1637Display(CLK, DIO);
void setup() {
// Begin serial communication
Serial.begin(9600);
// Check if RTC is connected correctly
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Check if the RTC lost power and if so, set the time
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// The following line sets the RTC to the date & time this sketch was compiled:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date &
ANA SAYFAYA DÖN
Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook robotic.code
instagram @roboticcode
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.