Buzer etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Buzer etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

16 Ocak 2018 Salı

R-bot


Robot deyince aklınıza insan görünümlü otomatlar olan androidler gelmesin. Bu tür uygulamalar için otomatik kontrol sistemleri henüz emekleme aşamasında olduğu için pahalı yatırımlar ve araştırmalar gerektirmektedir, ki  bol sıfırlı kazancı olan şirketler ve para kazanma amacı gütmeyen üniversite gibi araştırma için üzerrinde çalışmalar yapılabilir olmaktadır. Bu alanda bizim payımıza düşen nispeten daha yapılabilir ve kullanıcıya ulaşılabilir tekerlekli robotlar.

Düşünürsek, NASA'nın Mars gezegeni üzerindeki Curiosty, Opportunity. Spirit gibi robotları bizim o beklediğimiz insansı robotlar yerine çek çek arabaları andıran tekerlekli makinelerdi. Kaldı ki, engelden kaçma, yolunu bulma ve gerektiğinde analiz yapabilme kapasitesi olan makinelerdi. Çünkü  Mars ile dünya arasındaki haberleşme 25 dakikalık bir gecikme içeriyordu. Aynı şekilde Amazon internet pazarlama şirketi ürün taşımasında akıllı robotlar kullanmakta. ki robotları tekerlekli taşıma arabalarıdır.
Resimde paket içeriği görülmektedir. Rbot gövde, pil yuvası,Rbot kontrol kartı, Ardunio UNO, motorları (tekerlekleri ile birlikte, serbest tekerleği, hatta pilleri ile birlikte.

Burada anlatmaya çalıştığımız otomat olarak (robot diyelim) giriş seviyesinde üzerinde çalışmalar gerçekleştirebileceğimiz bir platform sunmayı amaçladık. Mikrokontroller tabanlı bile olsa en azından yönlendirme ve kontrol için temel araçları barındıran bir donanım sunduk.
Alüminyum gövde için çok fazla renk seçeneği (eloksal) olmadığı için ve de  stok maliyeti açısında iki renk üzerinde sınırladık

Robotik uygulamalar açısından üç tekerlek ki bunlardan iki tanesi kontrol edilerek R-bot, hareketi kontrol edilebilir olmaktadır. Üçüncü tekerlek  kadar önemli olmayıp sadece  R-bot' un dengede durmasını sağlamak amaçlanmaktadır.. 3 tekerlek aslında bir yüzeyin statik olarak dengede durması için gereken minimum tekerlek sayısını belirtmektedir. (Hali hazırda 2 veya tek tekerlek ile dengede durabilen sistemler var ise de bunlar ya sürekli olarak kontrol gerektirir ya da dinamik denge kurallarının uygulanmasını gerektirir) Matematik deki bir yüzey en az 3 noktadan geçer yaklaşımından gelmektedir.
Rbot Kontrol kartına monte edilmiş Arduino UNO. Bağlantıları gerçeleştirilip Rbot'un çalıştırılması için hazır.

Kontrol yaklaşımı olarak Arduino UNO tarafından sağlanmaktadır,  dolayısı ile Arduino programı ile programlanabileceği gibi scratch gibi görsel bir dil kullanılarak da programlanması mümkündür.
(Bacak uyumluluğu olduğu sürece daha güçlü bir işlemci içeren bir kartın takılması da mümkündür)
Elektrikli aletler için enerji vazgeçilmez. Burada 4 adet kalem pil kullanımı için pil yuvası hazır. Sadece pilleri bekliyor.

NOT: Ürün tanıtımları esnasında  ürünün neden şarjlı pil kullanılmadığı veya lipo pil olarak bilinen ürünlerin kullanılmadığını sordular. Fakat bu ürünü tasarlarken hedef kitlemizin hata yapması durumunda çıkabilecek sorunları minimum düzeyde tutmayı hedefledik.  Ürünü kullanırken siz, istediğiniz tipte pili kullanmayı elbette seçebilirsiniz.

Dolayısı ile anlaşılacağı gibi motor kontrol, bluetooth haberleşme , çizgi izleme ve ultrasonik sensörlerin bağlantılar Arduino UNO için uyumlu olacak şekilde oluşturulmuştur. Hali hazırda besleme 4 adet kalem pile yapılabilmektedir. Bu da pil bitince kolaylıkla yenisi ile değiştirilebileceği anlamını taşır.
Rbot çizgi izleme testinde.

Rbot'un tablet ile bluetooth üzerinden kontrolu. (tablet arayüzü)

Bluetooth haberleşme olduğu için android cep telefonu veya tablet ile  R-bot kontrolü mümkün olabilmektedir. (isteyen kendi kontrol cihazını kolaylıkla yapabilir)

Motor sürücüler kontrol kartı üzerine monte edildiği için, ek bir sürücü gerektirmez.

Proje açısından gözden geçirilecek olursa;

  • Bluetooth üzerinden bilgisayar, cep telefonu veya tablet ile haberleşme. (Cep telefonu veya tablet için Android işletim sistemi ile sınırlanmıştır)
  • Kontrol kartı üzerindeki butonların kullanımı  ile kontrol veya programlama seçeneği
  • Arduino programlanması ile otonom işlemlerin gerçeklenmesi
  • Çizgi izleme sensörü kullanımı ile çizgi izleme özelliği
  • Ultrasonik sensör kullanımı ile mesafe algılama ve gerekirse, nesnelerden kaçırma
  • Ek servo motor desteği ile gerektiğinde kıskaç gibi ek donanımlara izin verme özelliği


Elbette bunlar hali hazırda desteklenen yapılar olup, gerektiğinde paletli sistem, veya ayak yapıları eklenerek kullanım esnekliğinin artırılabilir.

Cep telefonu kontrolu ile veya tablet ile kolaylıkla yönlendirilebilir. Kameralı olsun isterseniz, size kim engel olabilir ki.(Maliyet açısından ürünün fiyatını artırmamak için üzerinde çalışılmamıştır. Elbette güzel olacağının bizde farkındayız, ama kabul edersiniz ki, özellikle hitap etmek istediğimizi kitle açısından fiyatının fazla yükseltilmemesi önemlidir.)

Programlama olayına gelince; birçok seçeneğiniz olabileceği gibi, en başta Arduino  geliştirme ortamı ve özellikle görsel kodlama açısından kullanılan scratch kodlama kullanılabilir.(mbot programı kullanılmaktadır).

Ürün tanıtımı esnasında birçok arkadaşımız gelip neler yaptığını sormaktaydı. Ürün özelliklerine anlattığımızda hayal kırıklığı yaşamaktalar. Oysa ki burada asıl anlatmaya çalıştığımız bu ürünün kod geliştirme sonrası kodların deneneceği bir ortam sunmasıdır. Yani kodlamanın sonucunun fiziksel bir ortamda karşılığının olmasını sağlamaktadır.

Cep telefonu ile kontrol edilebilir, hızı ayarlanabilir. Rbot destek amacı ile üretilmiştir.

Asıl önemli olan şu, bu robot üzerinde kodlama öğrenildiğinde ne olacak? Bu sorunun cevabını da çeşitli etkinliklerde vermeye çalıştık. En basitinden bu robot gibi bir Arduino/Genuino üzerinde kodların çalıştığı tekerlekli sandalye oldu. Burada sadece cep telefonundan kontrol edilen bir sandalye değil, aynı zamanda üzerine binip dolaşabileceğiniz bir sandalye olduğunu belirtmeye çalışıyoruz. Ama mantık aynı!

Rbot Montajı

Rbot esas olarak alüminyom bir gövde üzerine monte edildiği ve dolayısı ile kesme , delme gibi işlemler gerektirmediğinden, sadece bir pense veya karga burun ve bir yıldız tornavida ile monte edilebilmektedir. Kablo montajları birkaç geçme konnektör olduğundan montaj işini bir çocuğun yapabileceği ölçeğe indirmektedir. (Amacımız  Rbot ürünün Kodlama dersine destek olması idi)


Rbot montajı...

Ürünü monte ettikten sonra neler yapabileceğiniz hayal gücünüze kalmış...

24 Nisan 2017 Pazartesi

Haydi Başla



Kitapları ortaya piyasaya sürünce, Arduino öğrenmek isteyen kullanıcılarlardan, set olarak ürünümüzün olup olmadığı öğrenmek istedikler. Set olarak bir Arduino ürünümüz olmadığı için bu yönde bir tasarıma yöneldik.

İlk olarak Arduino UNO olarak bilinen modelin işlemcisi üzerinden gitmek istediğimizde gördük ki bacak sayısı oldukça yetersizdi ve birçok donanım yerleştirmek istediğimizde anahtarla uğrammaız gerekiyordu. Tabii bu donanımları bir arada kullanmak istediğimizde oldukça sınırlayıcı olacaktı. Bunun üzerine bizde Arduino Mega (ATMEGA2560) işlemcisi üzerine yönelmeyi tercih ettik. Donanımın geniş olanaklarına rağmen bazı noktalarda yine de anahtar kullanmak durumunda kaldık. Çünkü aynı anda iki donanım takılı ise iletişim sorunlarına yol açacaktı. Anahtar kullanılan modüllerden biri RGB sürücüsü, diğeri ise Wifi modüllerin bulunduğu bölüm idi.

Proje üzerine eklenen modüllere ek olarak, İşlemcinin bulunduğu bölüm Arduino UNO bacak bağlantılarına eş değer olarak yerleştirilmiş olarak (elbette MEGA formatında) düzenlenmiştir.

Modülleri

  • Rotay encoder
  • Buzer
  • DS18B20 dijital ısı sensörü 
  • DHT11 Dijital nem sensörü 
  • NTC ısı ile direnci değişen eleman 
  • PTC ısı ile direnci değişen eleman
  • LDR ışık ile direnci değişen eleman 
  • Hall manyetik alan sensör 
  • Potansiyometre
  • 4 adek LED çıkış izleme 
  • 4 Adet buton giriş 
  • LCD ekran için bağlantı (arkaplan aydınlatma aç/kapa seçeneği ile)
  • 2x16 Karakter LCD için bağlantı ( boyutları farklı olsa da, 1x8,1x16,1x20,2x8, 2x20 gibi karakter LCD'ler de kullanılabilir. Fakat soket farklılığı olabilir.)
  •  24C04 EEPROM bağlantı. (aynı sokete diğerinin yerine 24C02 de takılabilir.)
  •  7x4 seman LED ekran DS1307 gerçek zaman saati. (yedekleme pili desteği ile) 
  • MikroSD kart yuvası 
  • HC06 veya HC05 için bağlantı. (5V ile beslenen modeller için) 
  • ESP8266-01 için bağlantı klemensi 
  • ESP8266-07 bağlantı klemensleri 
  • NRF24C01 Mesh bağlantı 
  • RGB LED modül. 
  • Nextion bağlantı için port 
  • Kendi devrenizi kurabileceğiniz BreadBord Arduino 
  • UNO bacak bağlantısıyla uyumlu konnektörler. 
  • Tüm kartı besleyebilecek ve gerektiğinde dışarı besleme verebilen modül.(Doğru akım ile beslenmesi girilse de bağlantı yönü önemli değildir.) 


Dikkatinizi çekmiştir, kartın alt tarafında eklenti gibi duran bir bölümü var. Bu bölümdekiler gerektiğinde veya istediniz de, ayrı bir yerde kullanmak üzere eklenmiş devrelerdir. İstediğiniz zaman bu bölümleri ana devre üzerinden kırıp kullanabilirsiniz.
Bu devreler soldan sağa doğru olmak üzere;

  • wifi üzerinden haberleşmeli Anne zili;
  • bipolar step motor sürücü;
  • wifi veya bluetooth haberleşmeli oyuncak araba kontrol devresi;
  • wifi modül programlama devresi;
Wifi Programlama
Bu modül USB – ESP Wİ-Fİ - Arduino Programlayıcı başlığı ile paylaşılan modül ile aynı olup temelde 1. kitap (Sen de Yap Arduino) konusu içinde yer almaktadır.

wifi üzerinden haberleşmeli Anne Zili

Bu modül aslında bebeğin olan annelerin en büyük sorunu üzerine oluşturuldu.

Bir bebeğiniz var ve onu uyuttunuz.  Kimse uyandırmasın diye de zilin üzerine "bebek uyuyor, lütfen zile basmayın" yazdınız. Peki insanlar sizin bu uyarınızı dikkate alır mı?  (Hiç sanmıyorum) Pek çok hanımın sıkıntısı işte bu noktada  ortaya çıkıyor. "Lütfen zile basmayın bebek uyuyor"uyarısının dikkate almaması sonucu, bebeğin uyanması garanti. (Anlatıldığına göre bu çok yaşanılan bir sorunmuş)
İşte bu noktada kapı zilini devre dışı bırakıp  devreye  bu modül alınıyor, telefonunuza yöneldirilmiş zili isterseniz, telefonunuzun sesini kısıp, titreşim ile de kapıda birinin varlığını anlayabilirsiniz.

Kod örnekleri

Karakter LCD

Kart üzerindeki 2x16, 2x20 ,4x16 veya 4x20 karakter LCD bağlantısı için kullanılabilecek kod örneği aşağıda verilmiştir. (örnek 2x16 LCD üzerinde gösterilmiştir)


  • LCD kart üzerine uygun şekilde yerleştirilir . 
  • USB kablosu bilgisayar ile bağlantısı yapılır
  • Program yüklenir,
  • trimpot yardımı ile ekrandaki görüntü kontrastı ayarlanır.

KOD:
const int LCD_LED = 13;

#include <LiquidCrystal.h>
const int LCD_RW = 11;
//RS,E,D4,D5,D6,D7
LiquidCrystal lcd(12, 10, 43, 44, 45, 46);//lcd bacak tanımları

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(38, OUTPUT);
  pinMode(LCD_LED, OUTPUT); //lcd arkplan aydınlatma bacağı
  pinMode(LCD_RW, OUTPUT);//lcd yazma izni kontrol hep lojik-low

  digitalWrite(LCD_LED, HIGH); //arka plan aydınlatması açılır

  digitalWrite(LCD_RW, LOW);
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Elektronik");
  lcd.setCursor(0, 1);
  lcd.print("Kontrol");
}

// the loop function runs over and over again forever
void loop() {
 ;
}

Yukarıda verilen kodun 2x16 karakter LCD üzerindeki görünümü

Karakter LCD üzerinde sayıcı
Haydi Başla projesinde Karakter LCD ile ilgi örnek bir önceki başlık altında verilmişti.
Burada LCD üzerinde 1 saniyelik adımlarla sayan bir sayıcının değerini ekran üzerinde görüntülenmesi örneği verilecektir. İlk satırda "Saniye Sayaci:" (LCD üzerinde "ı" karakteri yer almadığı için) gösterilirken, ikinci satırda sayılan değer gösterilmektedir.

KOD:
//1 saniyelik LCD sayıcı
//Arduino sürümü:1.6

const int LCD_LED = 13;

#include <LiquidCrystal.h>
const int LCD_RW = 11;
//RS,E,D4,D5,D6,D7
LiquidCrystal lcd(12, 10, 43, 44, 45, 46);//lcd bacak tanımları

unsigned long EskiSaat=0;   //mills() için sayaç
const long interval = 1000;   //1 saniye için zamanlayıcı aralığı
int sayac = 0; //sayıcı için

            // the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(38, OUTPUT);
  pinMode(LCD_LED, OUTPUT); //lcd arkplan aydınlatma bacağı
  pinMode(LCD_RW, OUTPUT);//lcd yazma izni kontrol hep lojik-low

  digitalWrite(LCD_LED, HIGH);

  digitalWrite(LCD_RW, LOW);
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Saniye Sayaci:");
  lcd.setCursor(0, 1);
  lcd.print("0");
}
// the loop function runs over and over again forever
void loop() {
  unsigned long Saat = millis();
  if (Saat - EskiSaat >= interval) {
    // son saati kaydet
    EskiSaat = Saat;
    sayac++;//sayıcı değerini 1 artır
    if (sayac == 1000)
    {
      sayac = 0;
    }
    lcd.setCursor(0, 1);
    lcd.print(sayac);
  }

}


şeklinde bir koddur.

LCD'nin örnek görünümü. Alttaki satırda görülen değer sayıcının o anki değerini göstermektedir.


programın çalışması esnasında ekranda görüler birkaç değeri kapsamaktadır.

Karakter LCD üzerinde Scratch programı ile "Kontrol Cepte" yazdırma
Scratch programı görsel olarak (blokların sürüklenme ile)  ve düzenlenerek  programlama yapabilme imkanına sahiptir. Dolayısı ile kullanıcı olarak temel kodlama dili bilinmese de bloklar yardımı ile istenilen işlemin gerçekleştirilmesi mümkündür.

Scratch üzerindeki program için bu grup yeterlidir. Program 1. satırda "Kontrol" yazdırırken, 2. satırda "Cepte" yazdıracaktır. Görünüm sürekli yenilenecektir. (istenirse son satıra bir tanede 5 saniyelik gecikme eklenebilir.
 Programın nasıl yapıldığı ve Haydi başla üzerinde çalışmasını gösterir.

LED Ekran (4x7 segman) üzerinde bir değer gösterme
2x7 segman ekran üzerinde rakamları gösteren iki örnek içerir. 
Birincisi rakamlar doğrudan registerlere yazılır.
KOD:

//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 1,2,3,4 gösterilmesi
//arduino sürüm: 1.6 
//MAX7219 için hazır kütüphane kullanılmamıştır.

#include <SPI.h>
const int max7219_en = 47; //max7219 çip izni
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(max7219_en, OUTPUT);    //max7219 çip enable bacağına çıkış
  //max7219 başlangıç kodları
  digitalWrite(max7219_en, HIGH); //max7219 izin yok
  //spi başlangıç rutinleri
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  // MAX7219 başlama rutinleri
  SPI.begin();
    MAX7219Transfer(0x0F, 0x01);  //tüm segmanlar aktif
  delay(500);
  MAX7219Transfer(0x0F, 0x00);  //tüm segmenler sönük..
  // Enable mode B
  MAX7219Transfer(0x09, 0xFF);//rakamsal kodlama.
  // Use lowest intensity
  MAX7219Transfer(0x0A, 0x01);//LED ışık yoğunluğu
  // Only scan one digit
  MAX7219Transfer(0x0B, 0x03); //sadece a6 dijit 
  for (int i = 1; i < 5; i++) {
    MAX7219Transfer(i, 0x7F);
  }
  // Turn on chip
  MAX7219Transfer(0x0C, 0x01);
  MAX7219Transfer(0x01, 0x00);
  MAX7219Transfer(0x02, 0x00);
  MAX7219Transfer(0x03, 0x00);
  MAX7219Transfer(0x04, 0x00);

//ekrana yazılan değerler
  MAX7219Transfer(0x01, 1);
  MAX7219Transfer(0x02, 2);
  MAX7219Transfer(0x03, 3);
  MAX7219Transfer(0x04, 4);
}
// the loop function runs over and over again forever
void loop() {
;
}

void MAX7219Transfer(uint8_t address, uint8_t value) {
  //max7219'a veri gönderme adımları
  // max7219 izni ver
  digitalWrite(max7219_en, LOW);
  // register adresi gönder
  SPI.transfer(address);
  // değeri gönder
  SPI.transfer(value);
  // max7219 erişime kapalı.
  digitalWrite(max7219_en, HIGH);
}


Registerler doğrudan 1,2,3,4 yazılır ve program yüklendiğinde ekranda görülen.
 
ikincisinde registerlere yazma işi bir fonksiyon üzerinden çağrılır. (kendi programını geliştirenler için daha kolay)
KOD:
//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 1,2,3,4 gösterilmesi
//arduino sürüm: 1.6
//MAX7219 için hazır kütüphane kullanılmamıştır.

#include <SPI.h>
const int max7219_en = 47; //max7219 çip izni
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(max7219_en, OUTPUT);    //max7219 çip enable bacağına çıkış
  //max7219 başlangıç kodları
  digitalWrite(max7219_en, HIGH); //max7219 izin yok
  //spi başlangıç rutinleri
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  // MAX7219 başlama rutinleri
  SPI.begin();
  MAX7219Transfer(0x0F, 0x01);  //tüm segmanlar aktif
  delay(500);
  MAX7219Transfer(0x0F, 0x00);  //tüm segmenler sönük..
  // Enable mode B
  MAX7219Transfer(0x09, 0xFF);//rakamsal kodlama.
  // Use lowest intensity
  MAX7219Transfer(0x0A, 0x01);//LED ışık yoğunluğu
  // Only scan one digit
  MAX7219Transfer(0x0B, 0x03); //sadece a6 dijit
  for (int i = 1; i < 5; i++) {
    MAX7219Transfer(i, 0x7F);
  }
  // Turn on chip
  MAX7219Transfer(0x0C, 0x01);
  MAX7219Transfer(0x01, 0x00);
  MAX7219Transfer(0x02, 0x00);
  MAX7219Transfer(0x03, 0x00);
  MAX7219Transfer(0x04, 0x00);

  //ekrana yazılan değerler
  LEDekrana_yaz (5,6, 7, 8);
}
// the loop function runs over and over again forever
void loop() {
  ;
}

void LEDekrana_yaz (uint8_t hane1, uint8_t hane2, uint8_t hane3, uint8_t hane4)
{
  //ekrana değerleri yazdırmak için...
  MAX7219Transfer(0x01, hane1);
  MAX7219Transfer(0x02, hane2);
  MAX7219Transfer(0x03, hane3);
  MAX7219Transfer(0x04, hane4);
}

void MAX7219Transfer(uint8_t address, uint8_t value) {
  //max7219'a veri gönderme adımları
  // max7219 izni ver
  digitalWrite(max7219_en, LOW);
  // register adresi gönder
  SPI.transfer(address);
  // değeri gönder
  SPI.transfer(value);
  // max7219 erişime kapalı.
  digitalWrite(max7219_en, HIGH);
}
Register fonksiyon üzerinden yazılır. LEDekrana_yaz (5,6, 7, 8);


LED ekran üzerinde sayıcı
Burada önceki örnekte yer alan LED ekranda gösterilen rakamların 1 saniyelik adımlarla sayan sayıcının (0 ile 9999 aralığı) değerinin LED ekranda gösterilmesi hedeflenmektedir.
Ekran üzerindeki hanelerin soldaki değer 0 olduğu zaman hane söndürülmektkedir.
KOD:

//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 4 hane sayıcı gösterilmesi
//arduino sürüm: 1.6
//MAX7219 için hazır kütüphane kullanılmamıştır.

#include <SPI.h>
const int max7219_en = 47; //max7219 çip izni

unsigned long EskiSaat = 0; //mills() için sayaç
const long interval = 1000;   //1 saniye için zamanlayıcı aralığı
int sayac = 0; //sayıcı için


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(max7219_en, OUTPUT);    //max7219 çip enable bacağına çıkış
  //max7219 başlangıç kodları
  digitalWrite(max7219_en, HIGH); //max7219 izin yok
  //spi başlangıç rutinleri
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  // MAX7219 başlama rutinleri
  SPI.begin();
  MAX7219Transfer(0x0F, 0x01);  //tüm segmanlar aktif
  delay(500);
  MAX7219Transfer(0x0F, 0x00);  //tüm segmenler sönük..
  // Enable mode B
  MAX7219Transfer(0x09, 0xFF);//rakamsal kodlama.
  // Use lowest intensity
  MAX7219Transfer(0x0A, 0x01);//LED ışık yoğunluğu
  // Only scan one digit
  MAX7219Transfer(0x0B, 0x03); //sadece a6 dijit
  for (int i = 1; i < 5; i++) {
    MAX7219Transfer(i, 0x7F);
  }
  // Turn on chip
  MAX7219Transfer(0x0C, 0x01);
  MAX7219Transfer(0x01, 0x00);
  MAX7219Transfer(0x02, 0x00);
  MAX7219Transfer(0x03, 0x00);
  MAX7219Transfer(0x04, 0x00);

  //ekrana yazılan değerler
  LEDekrana_yaz (0x0f, 0x0f, 0x0f, 0);
}
// the loop function runs over and over again forever
void loop() {
  //1 saniye oluşturma
  unsigned long Saat = millis();
  if (Saat - EskiSaat >= interval) {
    // son saati kaydet
    EskiSaat = Saat;
    sayac++;//saniye sayıcı değerini 1 artır
    if (sayac == 10000)
    {
      sayac = 0;
    }
    //  haneler için değişkenler
    uint8_t h1 = 0;
    uint8_t h10 = 0;
    uint8_t h100 = 0;
    uint8_t h1000 = 0;
    //sayac değerini hanelere ayırma
    h1 = sayac % 10;
    h10 = (sayac / 10) % 10;
    h100 = (sayac / 100) % 10;
    h1000 = (sayac / 1000) % 10;
    //soldaki haneler "0" ise söndür
    if (h1000 == 0)
    {
      h1000 = 0x0f;
      if (h100 == 0)
      {
        h100 = 0x0f;
        if (h10 == 0)
        {
          h10 = 0x0f;
        }
      }
    }
    // oluşturulan değerleri LED ekrana gönderme
    LEDekrana_yaz (h1000, h100, h10, h1);
  }
}

void LEDekrana_yaz (uint8_t hane1, uint8_t hane2, uint8_t hane3, uint8_t hane4)
{
  //ekrana değerleri yazdırmak için...
  MAX7219Transfer(0x01, hane1);
  MAX7219Transfer(0x02, hane2);
  MAX7219Transfer(0x03, hane3);
  MAX7219Transfer(0x04, hane4);
}


void MAX7219Transfer(uint8_t address, uint8_t value) {
  //max7219'a veri gönderme adımları
  // max7219 izni ver
  digitalWrite(max7219_en, LOW);
  // register adresi gönder
  SPI.transfer(address);
  // değeri gönder
  SPI.transfer(value);
  // max7219 erişime kapalı.
  digitalWrite(max7219_en, HIGH);
}

sayıcı çalışırken resmi çekilmiş birkaç değer görünümü.
HaydiBaşla projesinde projesinde 1 saniye aralıkla sayan sayıcının LED ekran üzerinde görütülenmesi.