back to top

Sağlığınızı Koruyan İnovasyon: ESP32 ile Dik Oturmanızı Sağlayan Akıllı Sandalye Projesi

Masa başında uzun süre çalışan birçok kişi farkında olmadan öne eğilerek oturuyor. Zamanla alışkanlığa dönüşen bu duruş bozukluğu; boyun, omuz ve sırt bölgesinde rahatsızlığa neden olabiliyor. Biz de bu soruna pratik, uygulanabilir ve eğlenceli bir çözüm üretmek için ESP32 ile dik oturmanızı sağlayan akıllı sandalye projesi geliştirdik.

Hazırladığımız sistemi sıradan bir ofis koltuğunun boyun desteğinin altına yerleştirdik. Sistem, oturan kişinin boyun mesafesini sürekli ölçüyor. Kişi öne doğru fazla eğildiğinde sensör bu değişimi algılıyor ve aktif buzzer yardımıyla uyarı vererek tekrar dik pozisyona dönmesini sağlıyor. Üstelik proje yalnızca fiziksel bir uyarı sistemiyle sınırlı kalmıyor; ESP32’nin Wi-Fi özelliği sayesinde anlık mesafe bilgisi ve sistem durumu web arayüzü üzerinden de takip edilebiliyor.

Hem günlük hayatta kullanılabilecek hem de elektronik ve programlama becerilerini geliştirecek bu çalışma, akıllı sistemler ve gömülü projelerle ilgilenen herkes için oldukça keyifli bir kendin yap projesi sunuyor.

ESP32 ile Dik Oturmanızı Sağlayan Akıllı Sandalye Projesi Ne Yapıyor?

Projemiz basit görünse de arka planda oldukça akıllı bir algoritmaya ve kullanışlı özelliklere sahip:

  • Anlık Mesafe Kontrolü: HC-SR04 ultrasonik sensör sayesinde baş/boyun mesafeniz milisaniyeler içinde ölçülür. Kullanıcı normal ve dik bir pozisyonda otururken mesafe belirlenen aralıkta kalır. Ancak öne doğru fazla eğilme olduğunda bu mesafe artar.
  • Sesli Uyarı Sistemi: Belirlenen mesafenin ötesine eğilirseniz (örneğin ekrana fazla yaklaşırsanız), buzzer devreye girer ve dik oturana kadar “bip bip” sesiyle sizi uyarır. Böylece sistem, yanlış duruş alışkanlığını fark etmeyi kolaylaştırır ve daha sağlıklı bir oturma biçimini destekler.
  • Canlı Web Arayüzü: ESP32’nin Wi-Fi özelliği sayesinde, telefonunuzdan veya bilgisayarınızdan ağa bağlanarak anlık mesafenizi ve sistemin aktiflik durumunu canlı olarak görebilirsiniz.
  • Ergonomik Tasarım: Tüm donanım, ofis koltuğunuzun boyun desteğinin hemen altına gizlenebilir. Dilerseniz 3d yazıcınız ile sandalyeye kolayca entegre olabilecek şık tasarımlar da yapabilirsiniz.

Projenin Öne Çıkan Özellikleri

  • Boyun mesafesini gerçek zamanlı olarak ölçer,
  • Yanlış oturma pozisyonunu algılar,
  • Sesli uyarı ile kullanıcıyı bilgilendirir,
  • Wi-Fi üzerinden web arayüzüyle takip edilebilir,
  • Ofis koltuğuna kolayca uyarlanabilir,
  • Duruş farkındalığı oluşturan işlevsel bir DIY proje sunar.

Kullanılan Malzemeler

Projeyi kendi evinizde veya atölyenizde yapmak için ihtiyacınız olan malzeme listemiz:

Malzeme listesi oldukça sade olduğu için proje hem maliyet açısından erişilebilir hem de kurulum bakımından pratiktir. Özellikle ESP32 kullanılması sayesinde projeye kablosuz bağlantı ve web arayüzü gibi gelişmiş özellikler eklemek çok daha kolay hale gelir.

Devre Şeması

Projede kullanılan bağlantılar temel olarak ultrasonik sensör, buzzer ve ESP32 arasında kurulmuştur. HC-SR04 sensörünün tetikleme ve echo pinleri ESP32 üzerindeki ilgili pinlere bağlanırken, aktif buzzer da tanımlanan çıkış pininden kontrol edilmektedir.

Kodda kullanılan pin tanımları şu şekildedir:

  • HC-SR04 Trig Pini -> ESP32 Pin 5
  • HC-SR04 Echo Pini -> ESP32 Pin 18
  • Buzzer Sinyal Pini -> ESP32 Pin 15
  • VCC ve GND bağlantılarını ESP32’nin ilgili pinlerine yapmayı unutmayın!

Kurduğumuz bağlantı sayesinde sensörden alınan mesafe verisi doğrudan ESP32 tarafından işlenir ve gerekli durumlarda buzzer aktif hale getirilir.

Proje Görselleri ve Tasarım

Hazırladığımız sistemi, sıradan bir ofis koltuğunun boyun desteğinin hemen altına yerleştirdik. Böylece sensör tam olarak ensemizin hizasında kalıyor ve başımızın ekrana doğru ne kadar uzaklaştığını net bir şekilde okuyabiliyor.

Telefon üzerinden bağlandığımız web arayüzünde, sensörün okuduğu mesafeyi ve sistemin “Aktif/Deaktif” durumunu renkli göstergelerle anlık olarak takip edebiliyoruz.

Yazılım Detayları ve Kodlar

ESP32 kartımızı programlamak için Arduino IDE kullanıyoruz. Yazdığımız kod temelde iki iş yapıyor: 

Birincisi, sürekli olarak ultrasonik sensörden veri çekip kullanıcının 20 cm’den fazla uzaklaşıp uzaklaşmadığını kontrol ediyor. Mesafeyi 20 cm olarak belirledik. Siz dilediğiniz ölçüm uzaklığını ayarlayabilirsiniz. 

İkincisi ise bir Web Server başlatarak bir HTML arayüzü sunuyor. AJAX kullanarak sayfayı yenilemeden her 200 milisaniyede bir değerlerin güncellenmesini sağlıyoruz.

Eğer sensör mesafesi 20 cm’yi geçerse (yani öne eğilirseniz), ESP32 bunu algılıyor ve 5 saniye boyunca buzzer’ı kesik kesik çaldırarak sizi uyarıyor.

Aşağıdaki kodu kopyalayarak kendi ESP32 kartınıza yükleyebilirsiniz (Kod içerisindeki ssid ve password kısımlarına kendi Wi-Fi ağınızın bilgilerini yazmayı unutmayın):

#include <WiFi.h>
#include <WebServer.h>

#define TRIG 5
#define ECHO 18
#define BUZZER 15

const char* ssid = "";
const char* password = "";

WebServer server(80);

long duration;
float distance;

bool buzzerState = false;
bool systemActive = false;

unsigned long lastMeasureTime = 0;
unsigned long farStartTime = 0;
unsigned long buzzerToggleTime = 0;

bool farCondition = false;
bool alarmStopped = false;

// --- HTML ve AJAX ---
void handleRoot() {
  String html = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>ESP32 Mesafe Sistemi</title>
<style>
body{font-family:Arial;text-align:center;margin-top:50px;}
.circle{width:30px;height:30px;border-radius:50%;display:inline-block;}
</style>
</head>
<body>
<h1>ESP32 Mesafe Sistemi</h1>
<h2>Mesafe: <span id="mesafe">--</span> cm</h2>
<h2 id="statusText">--</h2>
<div class="circle" id="statusCircle"></div>

<script>
function updateStatus() {
  fetch('/status')
  .then(response => response.json())
  .then(data => {
    document.getElementById('mesafe').innerText = data.distance;
    document.getElementById('statusText').innerText = data.status;
    document.getElementById('statusCircle').style.backgroundColor = data.color;
  })
  .catch(err => console.log('AJAX Hata:', err));
}

// 200ms’de bir güncelle
setInterval(updateStatus, 200);
</script>
</body>
</html>
)rawliteral";

  server.send(200, "text/html", html);
}

// --- JSON endpoint ---
void handleStatus() {
  String statusText = systemActive ? "SISTEM AKTIF (Kullanici Oturuyor)" : "SISTEM DEAKTIF";
  String color = systemActive ? "green" : "red";

  String json = "{";
  json += "\"distance\":" + String(distance) + ",";
  json += "\"status\":\"" + statusText + "\",";
  json += "\"color\":\"" + color + "\"";
  json += "}";
  server.send(200, "application/json", json);
}

// --- Setup ---
void setup() {
  Serial.begin(115200);

  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, LOW);

  WiFi.begin(ssid, password);
  Serial.print("WiFi Baglaniyor");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nBaglandi!");
  Serial.print("IP Adresi: ");
  Serial.println(WiFi.localIP());

  server.on("/", handleRoot);
  server.on("/status", handleStatus);
  server.begin();
}

// --- Loop ---
void loop() {
  server.handleClient();

  unsigned long now = millis();

  // Ölçümü her 200ms’de bir yap
  if (now - lastMeasureTime >= 200) {
    lastMeasureTime = now;

    // HC-SR04 tetikleme
    digitalWrite(TRIG, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIG, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG, LOW);

    duration = pulseIn(ECHO, HIGH, 30000);
    if (duration == 0) {
      distance = -1;
      Serial.println("Olcum hatasi / Nesne algilanmadi");
      buzzerState = false;
      digitalWrite(BUZZER, LOW);
      systemActive = false;
      return;
    }

    distance = duration * 0.0343 / 2;
    Serial.print("Mesafe: ");
    Serial.println(distance);

    // Mesafe mantığı
    if (distance > 20) {
      if (!farCondition) {
        farCondition = true;
        farStartTime = now;
        buzzerToggleTime = now;
        alarmStopped = false;
      }

      // Buzzer bip bip efekti
      if (!alarmStopped) {
        if (now - farStartTime > 5000) { // 5 saniye geçtiyse alarm sustur
          digitalWrite(BUZZER, LOW);
          alarmStopped = true;
        } else {
          if (now - buzzerToggleTime > 300) { // 300ms aralık
            buzzerToggleTime = now;
            buzzerState = !buzzerState;
            digitalWrite(BUZZER, buzzerState);
          }
        }
      }

      // 3 saniye sonra sistem deaktif
      if (now - farStartTime > 3000 && alarmStopped) {
        systemActive = false;
      }

    } else { // ≤ 20 cm
      farCondition = false;
      alarmStopped = false;
      digitalWrite(BUZZER, LOW);
      buzzerState = false;
      systemActive = true;
    }
  }
}

Videolu Anlatım

Projenin yapım adımları izlemek ve sistemin nasıl çalıştığını canlı canlı görmek isterseniz, proje serimizin ilk bölümü için hazırladığımız YouTube videomuza göz atabilirsiniz!

Sen de Yap, Sağlığını Koru!

ESP32 ile dik oturmanızı sağlayan akıllı sandalye projesi, günlük yaşamda gerçekten işe yarayabilecek pratik bir elektronik uygulama ortaya koyuyor. Basit birkaç bileşenle hazırlanan bu sistem, oturma alışkanlıklarını fark etmeyi kolaylaştırırken aynı zamanda sensör kullanımı, mikrodenetleyici programlama, web sunucusu oluşturma ve gerçek zamanlı veri takibi gibi birçok önemli konuyu da bir araya getiriyor.

Jumper kablolarınızı alın, kodunuzu yükleyin ve sandalyenizi akıllandırın! Projeyi yaparken aklınıza takılan bir yer olursa yorumlarda buluşalım.

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz