Hayalini kurduğunuz akıllı saat projelerine adım atma vakti geldi! Bu blog yazısında, Arduino Pro Mini, OLED ekran ve Bluetooth modülü kullanarak nasıl kendi akıllı saatinizi yapabileceğinizi adım adım anlattık. Eğer siz de kendi akıllı saatini yapma fikrine ilgi duyuyorsanız doğru yerdesiniz!
Bu Akıllı Saat Neler Yapabiliyor?
- OLED ekranında saati gösteriyor,
- Mobil uygulama ile Bluetooth bağlantısı kurabiliyor,
- 3.7V LiPo pil ile giyilebilir hale geliyor,
- Özel 3D yazıcı kordon ve kasa ile bileğe takılabilir tasarım sunuyor.
Kullanılan Malzemeler
- 0.96 inç I2C OLED Ekran – SSD1306
- PX505060 3.7V 2000 mAh Li-Polymer Pil Devreli-Soketli
- HC05 Bluetooth-Serial Modül Kartı
- Arduino Pro Mini 328 – 3.3 V / 8 MHz (Header’lı)
- TP4056 Type-C 1S 3.7V LiPo, Li-ion Pil Şarj Devresi
- FTDI Programlama Kartı (3.3 V – 5 V Seçilebilir)
Proje Fotoğrafları
Akıllı saatin hazırlanış aşamalarından kareler:






Kendi akıllı saatini yapma fikri, hem donanım hem yazılım meraklıları için inanılmaz bir eğitici fırsat sunuyor. Bluetooth haberleşme, giyilebilir donanım ve mobil kontrol gibi birçok konuyu tek bir projede deneyimleme imkanı yakalıyorsunuz.
3D Modelleri



Projenin dış görünüşünü tamamlayan en önemli detaylardan biri de özel olarak tasarlanmış 3D modellerdir. Saatin kasası, bileğe rahatça oturması için ergonomik olarak tasarlanmış, ekran ve buton yerleşimleri dikkatle konumlandırılmıştır. 3D yazıcı ile üretilen bu parçalar sayesinde proje hem estetik hem de işlevsel bir forma kavuşuyor. Dilerseniz kendi yazıcınızda farklı renklerde bastığınız parçalarla saatinizi kişiselleştirebilir, teknolojiye tarzınızı da katabilirsiniz.
Stl dosyalarını buradan indirebilirsiniz:
Akıllı Saat Stl
Devre Tasarımı

Devremiz temel olarak bir microcontroller (Arduino Pro Mini) üzerine kurulmuş. HC-05 Bluetooth modülü ile haberleşme sağlanırken, OLED ekran ile zaman bilgisi görüntüleniyor. TP4056 devresi ise pili şarj etmek için kullanılıyor.
Mobil Uygulama Desteği
Android için geliştirilen basit bir uygulama sayesinde cihazı Bluetooth ile eşleştirip saat durumunu görebiliyor ve bağlantı komutları gönderebiliyorsunuz.
APK dosyasını buradan indirebilirsiniz:
Akıllı Saat V1 Android APK
Yazılım Detayları
Arduino tarafında Pro Mini ile geleneksel SoftwareSerial kütüphanesi kullanılarak Bluetooth iletişimi kuruluyor. Saat bilgisi için RTC modül kullanmak yerine gelen komutlarla saat bilgisi döngüsel olarak gösteriliyor.
#include <SoftwareSerial.h>
#include <Adafruit_SSD1306.h>
#include <math.h>
SoftwareSerial BTSerial(10, 11);
// OLED ekran boyutu
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
bool state = false;
unsigned long lastReceivedTime = 0;
const unsigned long timeoutDuration = 70000; // 70 saniye (70.000 ms)
int arayuzSayac = 0;
void setup()
{
Serial.begin(9600);
BTSerial.begin(9600);
// OLED ekran başlatma
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
Serial.println("SSD1306 ekran başlatılamadı!");
while (true);
}
oledYazdir("Akilli Saat V1");
delay(2000);
oledYazdir("Hos Geldiniz!!!");
delay(2000);
oledYazdir("Baglanti Bekleniyor..");
}
void loop()
{
if (BTSerial.available())
{
if(!state)
{
oledYazdir("Baglanti Basarili!");
state = true;
delay(1000);
}
String gelenVeri = BTSerial.readStringUntil('\n');
Serial.println("Gelen saat: " + gelenVeri);
if(gelenVeri=="b"){gelenVeri="...";arayuzSayac+=1;}
gelenVeri.replace("\"", ""); // Eğer veride çift tırnak varsa sil
if(arayuzSayac==0)
{
oledYazdir(gelenVeri);
}
else if(arayuzSayac == 1)
{
arayuzIki(gelenVeri);
}
else if(arayuzSayac == 2)
{
arayuzUc(gelenVeri);
}
else if(arayuzSayac == 3)
{
arayuzDort(gelenVeri);
}
else{arayuzSayac=0;}
lastReceivedTime = millis(); // Son veri zamanını güncelle
}
if (state && millis() - lastReceivedTime > timeoutDuration)
{
oledYazdir("Baglanti Koptu!");
state = false;
delay(1000);
oledYazdir("Akilli Saat V1");
}
if(state){oledBluetoothSimgesi();}
}
void oledYazdir(String mesaj)
{
int charWidth = 6;
int charHeight = 8;
int textPixelWidth = mesaj.length() * charWidth;
int textPixelHeight = charHeight;
int cursorX = (SCREEN_WIDTH - textPixelWidth) / 2;
int cursorY = (SCREEN_HEIGHT - textPixelHeight) / 2;
display.display();
display.clearDisplay();
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(cursorX, cursorY);
display.println(mesaj);
display.display();
}
void arayuzIki(String mesaj)
{
int charWidth = 6 * 2;
int charHeight = 8 * 2;
int textPixelWidth = mesaj.length() * charWidth;
int textPixelHeight = charHeight;
int cursorX = (SCREEN_WIDTH - textPixelWidth) / 2;
int cursorY = (SCREEN_HEIGHT - textPixelHeight) / 2;
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(cursorX, cursorY);
display.println(mesaj);
display.display();
}
void arayuzUc(String mesaj)
{
int hour = mesaj.substring(0, 2).toInt();
int minute = mesaj.substring(3, 5).toInt();
display.clearDisplay();
int centerX = SCREEN_WIDTH / 2; // 64
int centerY = SCREEN_HEIGHT / 2; // 16
int radiusX = 25; // yatay yarıçap
int radiusY = 15; // dikey yarıçap
for (int angle = 0; angle < 360; angle++) {
float rad = radians(angle);
int x = centerX + cos(rad) * radiusX;
int y = centerY + sin(rad) * radiusY;
display.drawPixel(x, y, SSD1306_WHITE);
}
// Saat kolu
float hourAngle = ((hour % 12) + minute / 60.0) * 30.0 - 90.0;
float hourRad = radians(hourAngle);
int hourX = centerX + cos(hourRad) * (radiusX * 0.5);
int hourY = centerY + sin(hourRad) * (radiusY * 0.5);
display.drawLine(centerX, centerY, hourX, hourY, SSD1306_WHITE);
// Dakika kolu
float minuteAngle = (minute * 6.0) - 90.0;
float minuteRad = radians(minuteAngle);
int minX = centerX + cos(minuteRad) * (radiusX * 0.8);
int minY = centerY + sin(minuteRad) * (radiusY * 0.8);
display.drawLine(centerX, centerY, minX, minY, SSD1306_WHITE);
display.display();
}
void arayuzDort(String mesaj)
{
int hour = mesaj.substring(0, 2).toInt();
int minute = mesaj.substring(3, 5).toInt();
display.clearDisplay();
// Analog saat için merkez koordinatlar
int centerX = 32; // Sol tarafta
int centerY = SCREEN_HEIGHT / 2;
int radiusX = 25;
int radiusY = 15;
// Elips çiz (analog saat)
for (int angle = 0; angle < 360; angle++) {
float rad = radians(angle);
int x = centerX + cos(rad) * radiusX;
int y = centerY + sin(rad) * radiusY;
display.drawPixel(x, y, SSD1306_WHITE);
}
// Saat kolu
float hourAngle = ((hour % 12) + minute / 60.0) * 30.0 - 90.0;
float hourRad = radians(hourAngle);
int hourX = centerX + cos(hourRad) * (radiusX * 0.5);
int hourY = centerY + sin(hourRad) * (radiusY * 0.5);
display.drawLine(centerX, centerY, hourX, hourY, SSD1306_WHITE);
// Dakika kolu
float minuteAngle = (minute * 6.0) - 90.0;
float minuteRad = radians(minuteAngle);
int minX = centerX + cos(minuteRad) * (radiusX * 0.8);
int minY = centerY + sin(minuteRad) * (radiusY * 0.8);
display.drawLine(centerX, centerY, minX, minY, SSD1306_WHITE);
// Dijital saat (sağda)
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
// Ekranın sağ tarafında konumlandır
int textX = 80;
int textY = (SCREEN_HEIGHT - 8) / 2; // 16 piksel yükseklik
display.setCursor(textX, textY);
display.print(mesaj);
display.display();
}
void oledBluetoothSimgesi()
{
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
// Sağ üst köşe için referans noktası (az biraz içeri alınmış)
int baseX = SCREEN_WIDTH - 10; // 128 - 10 = 118
int baseY = 2; // 2 piksel aşağıdan başlasın
// Küçük Bluetooth simgesi çizimi (12x7 civarı)
display.drawLine(baseX, baseY, baseX, baseY + 10, SSD1306_WHITE); // Dikey çizgi
display.drawLine(baseX, baseY + 5, baseX + 4, baseY + 2, SSD1306_WHITE); // Üst çapraz
display.drawLine(baseX, baseY + 5, baseX + 4, baseY + 8, SSD1306_WHITE); // Alt çapraz
display.drawLine(baseX, baseY, baseX + 4, baseY + 3, SSD1306_WHITE); // Üst dış çapraz
display.drawLine(baseX, baseY + 10, baseX + 4, baseY + 7, SSD1306_WHITE); // Alt dış çapraz
display.display();
}
Videolu Anlatım
Tüm bu adımları videolu olarak izlemek için YouTube kanalımızı ziyaret etmeyi unutmayın!
▶ YouTube Videosunu İzle
Bu proje sayesinde bir saatin içinde neler olduğunu öğrenecek ve Bluetooth ile haberleşme dünyasına adım atacaksınız.
Haydi kendi akıllı saatini yap, teknolojiye zamansız bir dokunuş kat!