back to top

Arduino ile Akıllı Ayakkabı Yaptık!

Selam makerlar. Bugün, heyecan verici bir proje olan ve ayarladığımız moda göre bağırıp sinirlenen, konuşan veya adım takibi yapıp spor yapabileceğimiz bir akıllı ayakkabı projesi ile karşınızdayız. Bu ayakkabı adımlarınızı ölçebilecek ve size motivasyon sağlayacak.Bu projede ayakkabı, eğlence ve motivasyon olmak üzere 2 farklı moda sahip olacaktır. Motivasyon modunda adımlarınız ölçülecek, belirlediğiniz veya attığınız adım sayısına göre sizlere motivasyon cümleleri söyleyecektir. Eğlence modunda ise uygulanan kuvvete göre sesli mesaj gönderilmesi sağlanacaktır. Projemizi yapabilmek için ihtiyacımız olan malzemeleri inceleyerek başlayalım.

Akıllı Ayakkabı
Akıllı Ayakkabı

Akıllı Ayakkabı Projesi için Gerekli Malzemeler

Bu projede ivme sensörü yerine kuvvet sensörü kullanacağız. Adımları hem kuvvet sensöründen algılayabileceğiz hem de ayakkabıya uygulanan kuvveti ölçebilmek için kuvvet sensörünü kullanacağız.

Devrenin Ayakkabıdaki Konumunu Belirleme

Estetik olması amacıyla ayakkabıda LCD ekranın konumunun aşağıdaki şekilde olmasına karar verdik. Bu hazırladığımız bölüme LCD ekranı yerleştireceğiz.

Kuvvet sensörünü ise aşağıda görüldüğü şekilde yerleştirebilirsiniz.

Akıllı Ayakkabı Devre Şeması

İlk olarak LCD ekranı ve IIC modülü lehimleyerek işleme başlayabilirsiniz. Daha sonra gerekli diğer lehimleme işlemlerini de yaparak tamamlayabilirsiniz.

Akıllı Ayakkabı Devre Şeması
Akıllı Ayakkabı Devre Şeması

Kurulumu yaptıktan sonra devreyi istediğiniz ve uygun bir şekilde ayakkabıya yerleştirebilirsiniz.

Akıllı Ayakkabı Proje Kodları

#include <LiquidCrystal_I2C.h>
#include <SimpleSDAudio.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int kuvvet = A1;
bool ses_oynat = false;
int buton_mod = 6;
int mode = 1;
int adim = 1;
int buton_degisim = 2;
bool temas = false;
bool hedef = false;
bool hedef_ses = false;
bool mode1,mode2=false;
bool rnd_normal_durum=false;
bool motivasyon_ses=false;
int rnd,rnd_normal;
int motivasyon_icin_adim;

void setup()
{
  pinMode(buton_mod, INPUT_PULLUP);
  pinMode(buton_degisim, INPUT_PULLUP);

  lcd.begin();
  lcd.setCursor(0, 0); // İlk satırın başlangıç noktası
  //ayakkabı açılış animasyonu:
  lcd.print("Akilli Ayakkabi");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Robotistan");
  delay(1000);
  lcd.clear();
  lcd.print("Emre Kulce");
  delay(1000);
  lcd.clear();
  lcd.print("TAKIPTE KAL");
  delay(1000);
  lcd.clear();

  Serial.begin(9600);
  SdPlay.setSDCSPin(4);

  if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER))
  {
    while (1);
  }

}

void loop()
{
  Serial.println(digitalRead(buton_degisim));
  if(digitalRead(buton_degisim)<1)
  {
    mode++;
    delay(100);
  }
  if (mode == 1) 
  {
    adim_azalt_arttir();
    mode2 = false;
  }
  else if (mode == 2) 
  {
    eglence_modu();
    mode1 = false;
  }
  else{mode = 1;mode2=true;};
}

void adim_azalt_arttir()
{
  int buton_tiklama = digitalRead(buton_mod);
  int kuvvet_sensor = analogRead(kuvvet);

  //Serial.println(adim)
  Serial.println(motivasyon_icin_adim);
  switch(rnd_normal)
  {
    case 1:
      if (!SdPlay.setFile("tebrik.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 2:
      if (!SdPlay.setFile("m1.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 3:
      if (!SdPlay.setFile("m2.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 4:
      if (!SdPlay.setFile("m22.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 5:
      if (!SdPlay.setFile("m3.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 6:
      if (!SdPlay.setFile("m4.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 7:
      if (!SdPlay.setFile("m5.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;    
  }
  
  if (buton_tiklama < 1)
  {
    lcd.setCursor(1, 1);
    lcd.print("  ");
    lcd.setCursor(1, 1);
    adim++;
    lcd.print(adim);
    delay(50);
  }

  if(kuvvet_sensor<100&&rnd_normal_durum==false){rnd_normal=random(1,8);rnd_normal_durum=true;}
  
  if(kuvvet_sensor <= 400 && temas == true)
  {
    lcd.setCursor(1, 1);
    lcd.print("  ");
    lcd.setCursor(1, 1);
    adim--;
    motivasyon_icin_adim++;
    lcd.print(adim);
    temas = false;
  }
  else if (kuvvet_sensor > 400 && temas == false)
  {
    temas = true;

    rnd_normal_durum=false;
  }

  if(hedef == false)
  {
    hedef_ses=true;
  }
  if(motivasyon_icin_adim>9){motivasyon_ses=true;}
  if (motivasyon_icin_adim == 10 && motivasyon_ses == true){SdPlay.play();while (!SdPlay.isStopped()){;motivasyon_ses = false;}motivasyon_icin_adim=0;}
   
  if(adim < 0){adim=0;lcd.setCursor(1, 1);lcd.print("  ");lcd.setCursor(1, 1);lcd.print(adim);}
  if(adim==0){hedef=true; Serial.println("Tebrikler Hedefinize Ulaştınız."); lcd.setCursor(1, 0); lcd.print("Tebrikler Hedefe");lcd.setCursor(1, 1);lcd.print("Ulasildi.");}
  else{if(hedef==true){lcd.clear();lcd.setCursor(1, 0); lcd.print("Adim Takip");lcd.setCursor(1, 1);lcd.print("Modu");delay(4000);lcd.clear();hedef=false;}lcd.setCursor(1, 0);lcd.print("Kalan Adim:");}
  if(mode1 == false){lcd.clear();lcd.setCursor(1, 0); lcd.print("Adim Takip");lcd.setCursor(1, 1);lcd.print("Modu");delay(4000);lcd.clear();mode1=true;};
  if(adim == 0 && hedef_ses == true){if (!SdPlay.setFile("tebrik.wav")){while (1);}SdPlay.play();while (!SdPlay.isStopped()){;hedef_ses=false;}}
}



void eglence_modu()
{ 
  //EGLENCE MODU
   
  if (mode2==false){lcd.clear();lcd.setCursor(1, 0);lcd.print("EGLENCE MODU");lcd.setCursor(1, 1);lcd.print("KEYFINI CIKAR");mode2=true;rnd = random(1,12);} 
  int sensor_bilgi = analogRead(kuvvet);
  Serial.println(sensor_bilgi);
  Serial.println(rnd);
  
  switch(rnd)
  {
    case 1:
      if (!SdPlay.setFile("bagirma1.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 2:
      if (!SdPlay.setFile("bagirma2.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 3:
      if (!SdPlay.setFile("bagirma3.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 4:
      if (!SdPlay.setFile("bagirma4.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 5:
      if (!SdPlay.setFile("emaneman.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 6:
      if (!SdPlay.setFile("k.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 7:
      if (!SdPlay.setFile("k2.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 8:
      if (!SdPlay.setFile("k3.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 9:
      if (!SdPlay.setFile("ooh.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 10:
      if (!SdPlay.setFile("pirt.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
    case 11:
      if (!SdPlay.setFile("sitem.wav")) //Müzik Dosya Adı
      {
        while (1);
      }
      break;
  }
  
  if (sensor_bilgi > 500)
  {
    ses_oynat = true;
  }

  if (ses_oynat == true)
  {
    rnd = random(1,12);
    SdPlay.play();
    while (!SdPlay.isStopped())
    {
      ;
      ses_oynat = false;
    }
  }
}

Motivasyon Modu:

Projede bir hedef adım belirlemeniz gerekmektedir. Belirlediğiniz hedef adıma göre size bir motivasyon cümlesi söyleyecektir. Biz hedef adımımızı 13 olarak belirledik. Her 10 adımda bir ise motivasyon cümlesini duyacaksınız. Her adım atıldığında ise hedef adımınızdan bir adım eksiltilecektir. 

Eğlence Modu: 

Eğlence modunda ise her adım atıldığında ise rastgele bir ses dosyası oynatacaktır. Tüm detaylara ulaşabileceğiniz ve projenizi kolaylıkla yapmanızı sağlayacak proje videomuza hemen göz atabilirsiniz.

Son Çıkan Yazılar

CEVAP VER

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