Gelişen mikrokontrol teknolojileri ve artan bilgi birikimi sayesinde geliştirici düzeyinde daha yaygın kullanımına olanak tanımıştır. Burada elimden geldiği kadar bazı örnekler sunmaya çalışacağım... Görüleceği gibi ilk örneklerimizde çoğunlukla ASM üzerinde iken daha sonraları C üzerinde örnekler yer almaktadır. Hatta ilerleyen zamanlarda Arduino örneklerinin yer alması kaçınılmaz olacaktır.

25 Mart 2019 Pazartesi

Arduino UNO ve DS1307 ile 7 segman LED saat


Arduino Uno ve DS1307 ile Saat
Elektronik, hele ki mikrokontroller ile ilgilenen herkesin, öyle ve böyle Arduino konusunda bilgisi vardır. Üzerine gerek shield gerekse kablo bağlantıları ile bağlantılar yapılarak üzerine kod yazılıp çalıştırılabilen geliştirme platformu olarak işlev görmektedir.
Arduino Uno
Şekil-1:Birçok kullanıcı tarafından bilinen Arduino UNO

Aslında proje bu ürün üzerine kurulmuştur ve internet üzerinde Arduino UNO hakkında fazlasıyla bilgi bulunmaktadır.

Not: Üretici firma ile olan çekişmeler sonucu Arduino UNO adı sadece Amerika'da geçerli iken diğer ülkelerde Genino UNO olarak adlandırılmışlardır. Kullanıcıların çoğunluğu, ürünü Arduino adı altında tanındığı için Arduino UNO olarak tanımlanmıştır.

Temelde ATMEL firması (şu anda Mikrochip) üretimi olan ATMEGA238p olan bir çip üzerine kurulu bir yapıdır. Sadece bu çipe USB bağlantısı için değişik çözümler getirilmiş USB-TTL dönüştürücü eklenmiştir.

Avantaj olarak oluşturulan program USB üzerinden ATMEGA328P üzerine yüklenebilmekte ve ek bir programlayıcıya ihtiyaç duymamaktadır. (Sadece işlemcinin ilk programlanması-bootloader esnasında bir programlayıcıya ihtiyaç duymaktadır.)

Yazılım avantajı olarak pin tanımları gibi birçok işlev kütüphanelere yüklenmiş ve kullanıcı çak az bir çalışma ile istediği işlemi yapabilmektedir. Daha fazlası veya ayrıntısı için elbette iyi bir yazılım bilgisi gerekeceği ortadadır.

Programın oluşturulduğu dil C iken, kütüphaneler C++ üzerinde yazılmaktadır.

NOT: Arduino UNO programlanması, kullanımı ve programın yüklenmesi konuları tamamen kullanıcı tarafından bilindiği kabul edilmektedir.

DS1307

Şekil-2: DS1307 çipi bacakları.

DS1307 deyince, akla RTC olarak bilinen gerçek zaman saati gelmektedir. i2c bağlantısı üzerinden işlemci ile haberleşebilen ve 3V pil ile devrenin enerjisi olmasa bile zaman ve tarih takip edebilmekte, az da olsa üzerinde NRAM bulunmaktadır. Elbette normal çalışma esnasında çipin çalıştığı ana besleme olan 5V bağlantısı da vardır.

Ayrıca DS1307 iki bacağı arasına bağlanmış olan 32KHz saat kristali ile işlemciden bağımsız olarak zaman tutmaktadır.

Not: Bu konuda doğrudan Arduino kütüphanesi kullanılacağı için fazla ayrıntıya girilmeyecektir.

Bağlantı olarak i2c kullanılmaktadır. Normalde master olsun slave olsun her ikisi üzerinde lojik1 çekme durumu olmadığı için, saat ve data hatları üzerine birer direnç bağlanmaktadır. Bu dirençler pull up görevi görmektedir.

Diğer önemli nokta aynı i2c hattı üzerine birden fazla i2c çipi bağlanabilmektedir. Bu cipler üzerindeki adreslerin farklı olması sayesinde veriler birbiri ile karışmadan aktarılabilmektedir. Ama iki tane veya daha fazla DS1307 bağlanmak istendiği zaman aynı adreslere sahip olacakları için sorun olacağı ortadadır.

Not:i2c konusunda internette istediğiniz kadar bilgi bulabilirsiniz. Philips firması tarafından bulunmuştur.

Neyse ki Arduino üzerinde i2c hatları yer almaktadır. Data hattı için A4 ve saat hattı için A5 (analog girişler) kullanılmaktadır.

DS1307 üzerinde saat ve tarih bilgisi yer aldığı halde, projemizin konusu nedeniyle sadece saat, dakika ve saniye bilgileri ilgilenilmektedir. Dikkatinizi çektiği üzere tarih gösterecek bir donanım yoktur.
DS1307 ilk çalıştırıldığı anda zamanı saymayacaktır. Bunu sağlamak için saat ayar butonuna bir kez basmak ve zamanı ayarlamak yeterlidir. Elbette burada anlatılan program ile ilgili.

Saat pili 5-10 yıl aralığında sürekli olarak kullanılabilir, elektrik kesildiğinde artık saati tutamadığı zaman değiştirilmesi gerekir. Tabii burada belirtilen zaman dilimi beklememiş piller için geçerlidir.

7 segman LED ekran

Saat, dakika ve saniyenin görüntülendiği LED ekran ortak anottur. Hali ile görüldüğü gibi boyut olarak biraz küçüktür. Bunun nedeni shield olarak düşünülen kartın üzerine ekranların sığabilmesi içindir.

Ekran sürülmesi multiplexer (çoğullama) mantığına dayanmaktadır. Yani zamanın belli bir kesitinde sadece bir LED ekran ışık vermektedir. Sürekli olarak ekranlar sıra ile yakılıp söndürüldüğünde, ve en önemlisi insan gözünün saniyenin 20'de birinden kısa süredeki değişimleri algılayamadığından biz ekranların tümünün yanık olarak algılamaktayız.
Şekil-3: Saat devresi ve Arduino UNO birlikte.
Segmanlar (parçalar) Arduino tarafından doğrudan bir direnç üzerinden sürülürken, ortak uçları bir transistör üzerinden sürülmektedir. (akım ihtiyacından dolayı) LED ekranlar üzerinde bulunan nokta, bu projede kullanım alanı olmadığı için bağlantıları yapılmamıştır.
Şekil-4:Saat ve Arduino UNO yanyana.

Devre
Devre Arduino UNO kartı ile uyumlu olacak şekilde düzenlendiği için, diğer Arduino kartları için devre üzerinde bazı değişiklerin yapılması gerekebilir.

Beslemesini Arduino üzerinden 5V olarak almakta, Arduino da zaten bilindiği gibi ya USB bağlantısı üzerinden bilgisayardan (veya isteyen için USB bağlantısı olan cep telefonu şarjı için yedek enerji kaynağı olan power bank'dan alabilir) veya Arduino üzerindeki besleme girişine bağlanan bir adaptör üzerinden de sağlanabilir.

Devre yapısı nedeni ile uzun soluklu çözüm olarak normal piller pek kullanışlı değildir.(Akım harcaması nedeniyle) Şarj sorunu çözüldüğü takdirde lityum-ion pil kullanımı mümkün olabilir.
Shield Ardinuo'ya kenarında yer alan sıra pinler üzerinden bağlanmaktadır. Doğal olarak Arduino UNO pin uyumluluğu söz konusudur

Şekil-5: Devre Şeması

Devre tasarımı esnasından tek yüzlü PCB üzerine monte edileceği planlanarak devre karışıklığını fazla artırmamak için devre üzerine saat- dakika ve dakika-saniye ayıraçları eklenmemiştir.

Eh geriye saat ve dakikayı ayarlamak için kullanılan butonlar kaldı. Butonlarda 10k pull up direnç bağlantısı ile Arduino pinlerine bağlanmıştır. Anlaşılacağı üzeri sayma işlemini sadece pozitif yönde yapmakta ve butona basıldığı zaman (butona göre saat veya dakika değerini 1 artırmaktadır.

Devrede LED ekranların (DS1...DS6) (ortak anot) segman uçları birleştirilerek 220R seri bir direnç (R7...R13) üzerinden Arduino pinlerine 7 adet olarak bağlanmıştır. Her ekranın ortak uçları ile 5V arasına PNP (Q1...Q6) (ortak uç kollektör ve 5V emetör olmak üzere) transistör bağlanmıştır ve ve Her bir transistörün baz ucu ile Arduino pini arasına (R1..R4,R14,R15) 1k seri direnç bağlanmıştır. (baz akımı sınırlama direnci) ayrıca her transistörün emetör ve baz arasına (R18..R23) 10K direnç bağlanmıştır. (Pull-up direnci). Baz ucu lojik0 çekildiği zaman o display segman uçlarına verilen lojik değerlerine göre ışık verecektir.

Shield üzerinde yer alan tek entegre devre olan DS1307(U1) 8. bacağı 5V ve 4. bacağı 0V(veya GND) bağlıdır.1. ve 2. bacakların Y1 (32KHz) saat kristali bağlıdır. 3. bacağına B1 (+) 3V pil bağlanmıştır. Pilin (-) ucu 0V (veya GND) hattına bağlanımştır). DS1307'nin (SDA) 5.bacağı R5 (10k) pull up direnci bağlı aynı zamanda Arduino UNO SDA pin,DS1307'nin (SCL) 6. bacağı R6 (10k pull up direncine bağlı (direncin diğer ucu 5V olmak üzere) aynı zamanda Arduino UNO SCL pin bağlıdır.

Shield üzerindeki 2 adet buton bulunmaktadır; S1 ve S2. S2 saat ayar butonudur ve kontakların bulunduğu bacaklar arasına C4 (100nF) filtre kondansatörü bağlıdır. S2 butonunun bir bacağı GND hattına bağlıdır. Diğer bacağına R17 (10k) pull up direnci (direncin diğer ucu 5V bağlı olmak üzere) ve Arduino UNO A0 pinine bağlıdır. Aynı şekilde S1 (dakika ayar butonu) kontakların bulunduğu bacakların arasına C3 (100nF) filtre kondansatörü bağlıdır. S1 butonunun bir bacağı GND bağlıdır. Diğer bacak R16 (10k) pull up direnci bağlıdır.

Geriye kalan kondansatörler besleme hatları (5V ile GND arasında) filtre amacı ile bağlanmıştır.

Not: Arduino UNO burada ticari ürün olarak görüldüğü için şeması üzerinde durulmamıştır. Arzu edenler internet üzerinde bulabilirler.

Devre Elemanları

Arduino Shield kartı için Malzeme Listesi

220R 1/4 wattR7...R13
1k 1/4 wattR1...R4, R14, R15
10k 1/4 wattR5, R6, R16, R17
10k (805-SMD)R18...R23
100nFC1, C3, C4
10µF/16VC2
6x6 butonS1, S2
DS1307U1
Dip 8 soketentegre soketi
32KHz saat kristaliY1
BC327Q1...Q6
CR2032 pil soketiB1
CR20323V pil(B1)
3161BSRDIS1...DIS6
1x40 header pin erkek-
Not: Bacakları kaynaklı bulunması halinde soketi ve CR2032 yerine kullanılabilir(soketine gerek kalmaz).Her ne kadar CR2032 olarak belirtilse de aynı sokete uyacak başka bir pilin kullanılmasında sakınca yoktur.

Devre Montajı
PCB olarak tek yüzlüdür. Yani bakırlı yollar tek tarafta yer almaktadır. İsteyenlerin çift yüzlü ve delik içi kaplamaya dönmesinde bir sıkıntı yoktur.(PCB tasarım esnasında kullanıcının kendi tarafından basabilmesi öngörülmüştür).
Şekil-6: PCB yolların olduğu alt yüz. (Görünüm üst yüzden görüldüğü şekildedir.)

Şekil-7: Delik geçişli (dip) elemanların bulunduğu üst yüz.

Şekil-8: Alt yüzdeki elemanlar. (SMD olarak)  Alt yüzden görüldüğü şekildedir. Hani elimde yok diyenler için normal dip dirençlerin kullanımı mümkündür. Sadece arkada biraz kalınlık yapar.

PCB tek yüzlü olarak tasarlandığı için elemanların büyük çoğunluğu (özellikle delik geçişli) üst eleman yüzünde yer almaktadır. Sadece transistörlerin B-E arasındaki dirençler yer nedeni ile SMD olarak kullanılmıştır. Kart üzerinde pek ala normal bacaklı direnç kullanılabilir.

Monte edilirken LED ekran bacaklarını yanındaki yollara kısa devre oluşmayacak şekilde lehimlenmesine dikkat etmek gereklidir.

Şekil-9: Üst yüz elemanları karta monte edilmiş halde. DS1307 entere soketi ile birlikte. Piyasadan temin ettiğim pil soketi biraz farklı idi. PCB'yi bastıktan sonra satın aldığım için  uydurmam gerekti.

Şekil-10: PCB'nin yolları tarafından görünümü.

Montaj sonraki, kısa devre ve açık devre kontrolundan sonra Arduino UNO üzerine takılır ve devre çalıştırılır, program yüklenir ve ilk test yapılır. (saat çalışıp çalışmaması önemli değil) Devrenin enerjisi kesilir. Saat pili takılır. Devreye tekrar enerji verilir.

Not: Ekrandaki saat değeri 500ms aralıklarla DS1307 üzerinden okunarak güncellenir.


Ayarlar
Şekil-11: Saat ayar ve dakika ayar butonları görülebilmektedir.

Devre Arduino üzerinde iken saat butonuna basılarak istenen saat değerine çıkana kadar basılır bırakılır.24'den sonra tekrar sıfırlanacaktır.

Aynı şekilde dakika ayarı, istenilen değere ulaşana kadar dakika butonuna basılıp bırakılarak ayarlanır.

Ayar tamamlandıktan sonra artık sadece kullanmak kalıyor. Enerjisi kesilip tekrar verildiği zaman kısa bir süre (yaklaşık 500ms) ekranda 00:00:00 gösterilir sonra ekranda saat değeri görüntülenir.

Sonuç
Şekil-12: Harici pil ile çalışmaya bir örnek açısından power bank olarak bilinen pil ile çalışırken. Ne kadar çalışır bilemem, henüz denemedim.

Not: Saat destek pili biterse, saat gerçek zamanı göstermeyecektir. O zaman 3V saat pilini değiştirmeniz gerekir.

Burada sadece PCB ve devre ile ilgili bilgiler sunulmuştur. Kutu veya duvarda nasıl durur ya da masamda nasıl duracak gibi soruların cevabını verecek olan sizin hayal gücünüz ve bilginiz olacak.

Saat olarak işinizi görecektir. Belirli aralıklarla zamanda geri kalma veya ileri gitme durumu olabilir. Çünkü saat kristali o veya bu şekilde ortam sıcaklığı gibi parametrelerden etkilenebilir. Saat kristali ile ilgili parametreleri internetten inceleyebilirsiniz.


Bu durumda saatinizi ayarlamanız gerekebilir. Saatlerin şaşmazlığı konusunda şu an için atom saatlerinin gerekliliği ortada.

Program
Program Arduino ide ortamında kodlandı. Gerekli olan kütüphane aşağıdaki bağlantıda verilmiştir. (RTClib-master.zip ismindedir.)  İstediğiniz takdirde internette arayabilirsiniz.

Kod:
#include <Wire.h>

#include "RTClib.h"
#define _I2C_WRITE write
#define _I2C_READ  read

//Arduino ile saat
const int saniye1 = A3;
const int saniye10 = A2;
const int dakika1 = 9;
const int dakika10 = 10;
const int saat1 = 11;
const int saat10 = 12;

const int segE = 2;
const int segC = 3;
const int segG = 4;
const int segB = 5;
const int segF = 6;
const int segD = 7;
const int segA = 8;
const uint8_t rakam0[] = {LOW, LOW, LOW, LOW, LOW, LOW,  HIGH};
const uint8_t rakam1[] = {HIGH, LOW, LOW, HIGH, HIGH, HIGH,  HIGH};
const uint8_t rakam2[] = {LOW, LOW, HIGH, LOW, LOW, HIGH,  LOW};
const uint8_t rakam3[] = {LOW, LOW, LOW, LOW, HIGH, HIGH,  LOW};
const uint8_t rakam4[] = {HIGH, LOW, LOW, HIGH, HIGH, LOW,  LOW};
const uint8_t rakam5[] = {LOW, HIGH, LOW, LOW, HIGH, LOW,  LOW};
const uint8_t rakam6[] = {LOW, HIGH, LOW, LOW, LOW, LOW,  LOW};
const uint8_t rakam7[] = {LOW, LOW, LOW, HIGH, HIGH, HIGH,  HIGH};
const uint8_t rakam8[] = {LOW, LOW, LOW, LOW, LOW, LOW,  LOW};
const uint8_t rakam9[] = {LOW, LOW, LOW, LOW, HIGH, LOW,  LOW};
int say = 0;
int saniye = 0;
int dakika = 0;
int saat = 0;

//butonlar
const int bSaat = A0;
const int bDak = A1;
//butonlar basılmamış durumda
int bsaat_durum = HIGH;
int bdak_durum = HIGH;

RTC_DS1307 rtc;

unsigned long ilkMillis = 0;
const long interval = 500;
static uint8_t bcd2bin (uint8_t val) {
  return val - 6 * (val >> 4);
}
static uint8_t bin2bcd (uint8_t val) {
  return val + 6 * (val / 10);
}


void setup ()
{
  pinMode (saat1, OUTPUT);
  pinMode (saat10, OUTPUT);
  pinMode (saniye1, OUTPUT);
  pinMode (saniye10, OUTPUT);
  pinMode (dakika1, OUTPUT);
  pinMode (dakika10, OUTPUT);
  rakam_son();
  pinMode (bSaat, INPUT);
  pinMode (bDak, INPUT);

  for (int i = 2; i < 9; i++)
  {
//LED ekran segmanlarının çıkış olarak atanması
    pinMode (i, OUTPUT);
    digitalWrite(i, HIGH);
  }
  Serial.begin(9600);

  if (! rtc.begin())
  {
    Serial.print("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning())
  {
    Serial.print("RTC is NOT running!");
  }

}

void loop ()
{
  //saat ayar butonu ve işlemleri
  int buton = digitalRead(bSaat);
  if (buton == LOW) {
    if (bsaat_durum == HIGH)
    {
      bsaat_durum = LOW;
      saat++;
      if (saat > 23)
        saat = 0;
      ayar_saat(saat);      // saat ayarını DS1307'e yükle
      ayar_saniye(saniye);  //saat duruyorken saati başlatmak için
    }
  }
  else {
    bsaat_durum = HIGH;
  }
  //dakika ayar butonu ve işlemleri
  buton = digitalRead(bDak);
  if (buton == LOW) {
    if (bdak_durum == HIGH)
    {
      bdak_durum = LOW;
      dakika++;
      if (dakika > 59)
        dakika = 0;
      ayar_dakika(dakika);    //dakika ayarını DS1307'e yükle
    }
  }
  else {
    bdak_durum = HIGH;
  }
//her 500ms'de bir saat bilgilerinin güncellenmesi
  unsigned long currentMillis = millis();
  if (currentMillis - ilkMillis >= interval) {
    ilkMillis = currentMillis;
    DateTime now = rtc.now();
    saniye = now.second();
    dakika = now.minute();
    saat = now.hour();
  }

  //saat saniye ve dakika bilgilerinin LED ekranda gösterilmesi
  say++;
  if (say == 1)
  {
    //saniya birler hanesi
    rakam_son();
    rakam_yaz(saniye % 10);
    digitalWrite(saniye1, LOW);
    delay(1);
  }
  else if (say == 2)
  {
    //saniya onlar hanesi
    rakam_son();
    rakam_yaz(int (saniye / 10));
    digitalWrite(saniye10, LOW);
    delay(1);
  }
  else if (say == 3)
  {
    //dakika birler hanesi
    rakam_son();
    rakam_yaz(dakika % 10);
    digitalWrite(dakika1, LOW);
    delay(1);
  }
  else if (say == 4)
  {
    //dakika onlar hanesi
    rakam_son();
    rakam_yaz(int (dakika / 10));
    digitalWrite(dakika10, LOW);
    delay(1);
  }
  if (say == 5)
  {
    //saat birler hanesi
    rakam_son();
    rakam_yaz(saat % 10);
    digitalWrite(saat1, LOW);
    delay(1);
  }
  else if (say == 6)
  {
    // saat onlar hanesi
    rakam_son();
    rakam_yaz(int (saat / 10));
    digitalWrite(saat10, LOW);
    say = 0;
    delay(1);
  }
}
void ayar_saniye(int saniye1)
{
    //saniye ayarının DS1307'ye yazılması
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire._I2C_WRITE((byte)0); // başlangıç adresi 0
  Wire._I2C_WRITE(bin2bcd(saniye1));
  Wire.endTransmission();
}

void ayar_saat(int saat1)
{
  //saat ayarının DS1307'ye yazılması
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire._I2C_WRITE((byte)2); // başlangıç adresi 2
  Wire._I2C_WRITE(bin2bcd(saat1));
  Wire.endTransmission();
}

void ayar_dakika(int dakika1)
{
    //dakika ayarının DS1307'ye yazılması
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire._I2C_WRITE((byte)1); // başlangıç adresi 1
  Wire._I2C_WRITE(bin2bcd(dakika1));
  Wire.endTransmission();
}
void rakam_son()
{//hanelerin söndürülmesi
  digitalWrite(saat1, HIGH);
  digitalWrite(saat10, HIGH);
  digitalWrite(dakika1, HIGH);
  digitalWrite(dakika10, HIGH);
  digitalWrite(saniye1, HIGH);
  digitalWrite(saniye10, HIGH);
}
void rakam_yaz(int rakam)
{
  //  rakamların LED ekran üzerinde görüntülenmesi
  if (rakam == 0) {
    digitalWrite(segA, rakam0[0]);
    digitalWrite(segB, rakam0[1]);
    digitalWrite(segC, rakam0[2]);
    digitalWrite(segD, rakam0[3]);
    digitalWrite(segE, rakam0[4]);
    digitalWrite(segF, rakam0[5]);
    digitalWrite(segG, rakam0[6]);
  }
  else if (rakam == 1) {
    digitalWrite(segA, rakam1[0]);
    digitalWrite(segB, rakam1[1]);
    digitalWrite(segC, rakam1[2]);
    digitalWrite(segD, rakam1[3]);
    digitalWrite(segE, rakam1[4]);
    digitalWrite(segF, rakam1[5]);
    digitalWrite(segG, rakam1[6]);
  }
  else if (rakam == 2) {
    digitalWrite(segA, rakam2[0]);
    digitalWrite(segB, rakam2[1]);
    digitalWrite(segC, rakam2[2]);
    digitalWrite(segD, rakam2[3]);
    digitalWrite(segE, rakam2[4]);
    digitalWrite(segF, rakam2[5]);
    digitalWrite(segG, rakam2[6]);
  }
  else if (rakam == 3) {
    digitalWrite(segA, rakam3[0]);
    digitalWrite(segB, rakam3[1]);
    digitalWrite(segC, rakam3[2]);
    digitalWrite(segD, rakam3[3]);
    digitalWrite(segE, rakam3[4]);
    digitalWrite(segF, rakam3[5]);
    digitalWrite(segG, rakam3[6]);
  }
  else if (rakam == 4) {
    digitalWrite(segA, rakam4[0]);
    digitalWrite(segB, rakam4[1]);
    digitalWrite(segC, rakam4[2]);
    digitalWrite(segD, rakam4[3]);
    digitalWrite(segE, rakam4[4]);
    digitalWrite(segF, rakam4[5]);
    digitalWrite(segG, rakam4[6]);
  }
  else if (rakam == 5) {
    digitalWrite(segA, rakam5[0]);
    digitalWrite(segB, rakam5[1]);
    digitalWrite(segC, rakam5[2]);
    digitalWrite(segD, rakam5[3]);
    digitalWrite(segE, rakam5[4]);
    digitalWrite(segF, rakam5[5]);
    digitalWrite(segG, rakam5[6]);
  }
  else if (rakam == 6) {
    digitalWrite(segA, rakam6[0]);
    digitalWrite(segB, rakam6[1]);
    digitalWrite(segC, rakam6[2]);
    digitalWrite(segD, rakam6[3]);
    digitalWrite(segE, rakam6[4]);
    digitalWrite(segF, rakam6[5]);
    digitalWrite(segG, rakam6[6]);
  }
  else if (rakam == 7) {
    digitalWrite(segA, rakam7[0]);
    digitalWrite(segB, rakam7[1]);
    digitalWrite(segC, rakam7[2]);
    digitalWrite(segD, rakam7[3]);
    digitalWrite(segE, rakam7[4]);
    digitalWrite(segF, rakam7[5]);
    digitalWrite(segG, rakam7[6]);
  }
  else if (rakam == 8) {
    digitalWrite(segA, rakam8[0]);
    digitalWrite(segB, rakam8[1]);
    digitalWrite(segC, rakam8[2]);
    digitalWrite(segD, rakam8[3]);
    digitalWrite(segE, rakam8[4]);
    digitalWrite(segF, rakam8[5]);
    digitalWrite(segG, rakam8[6]);
  }
  else if (rakam == 9) {
    digitalWrite(segA, rakam9[0]);
    digitalWrite(segB, rakam9[1]);
    digitalWrite(segC, rakam9[2]);
    digitalWrite(segD, rakam9[3]);
    digitalWrite(segE, rakam9[4]);
    digitalWrite(segF, rakam9[5]);
    digitalWrite(segG, rakam9[6]);
  }
}

//Program sonu

Arduino programı, kütüphanesi ( benim değil) ve  PCB yolların bulunduğu katman PDF olarak rar dosyası içinde bulunmaktadır. Yukarıdaki resimde bu  dosyalar (ve klasör) ve isimleri görülmektedir.

Bağlantı


Güncelleme

Projeyi bazen bir nedenden dolayı veya zaman darlığından bazı eksiklikler veya aklıma sonradan gelen detayların eksikliği ile yayınlayabiliyorum. Belki dikkatinizi çekmiştir, PCB üzerinde saat, dakika ve saniye arasında ayraç yoktu. Güncelleme ile işte bu ayraçlar eklenmiştir.

Seri bağlı 2 LED ve 1 2k2 dirençten oluşan iki yapıdır.
İşte gerçekleştirilen devrenin şeması. +5V  ve GND  saat PCB üzerinden alınmaktadır. Direnç ve LED 805 kılıftır. İsteyen elbette kendi PCB'sini oluşturabilir.  Bir barça bakırlı kartı maket bıçağı ile kazıma ile oluşturuldu. LED'lerin kırmızı olması önemlidir. Eşik gerilimi düşük olduğu için seri bağlantı mümkün kılar. Yoksa her led kendi seri direnci ile  tek tek +5V ile GND arasına bağlanması gerekir.
Elemanlar ve bağlantı bacakları bağlanmış PCB bir parça sünger üzerinde.
Ayraçlardan biri monte edilmiş halde. Sol ve ortadaki LED ekran arasında görülebilir.
Ayraçların her ikisi monte edilmiş halde.
Devre çalışır haldeki görünümü. Belki ayraçlar karttan biraz yüksekte monte edilse biraz daha iyi olabilir. Ama bu hali ile de oldukça iş görür.(flas ışığı biraz LED ışığını bastırmış gibi görünüyor)
Elbette LED olduğu için LED ışıkları daha canlı görünüyor.
Ayraçlar yakından daha bir farklı görünüm sunuyor.
Kartın yandan bir bakış.
Bu biraz daha profesyonel bir çalışma içeriyor, Çift yüzlü delik içi geçişli bir kart üzerine monte edildiği zaman olası görüntüyü veriyor.

Translate

Sayfalar

Etiketler

İzleyiciler