Arduino İle Asansör Maketi Yapımı

Hiç her gün gördüğünüz asansörlerin nasıl çalıştığını merak ettiniz mi? Nasıl sesli olarak hangi katta olduğunu bize söylüyor? Hangi katta olduğumuzu bize nasıl gösteriyor? gibi soruları kendinize sordunuz mu? Bu yazımızda bu düşünlerinizi acaba arduino ile gerçekleştirebilir miyiz bunu öğreneceğiz. Bu yazımızda “Arduino İle Asansör Maketi” yapacağız. Hadi projemize başlayalım.

İlk olarak projemizi bitirdiğimizde aşağıdaki gibi bir maket yapmış olacağız.

Arduino Asansör Maketi
Arduino Asansör Maketi
Arduino Asansör Maketi2
Arduino Asansör Maketi2

Solidworks çizimi sonradan çizmiştim. Benim hoparlörüm ve lambalarım solda ama siz bu çizime göre yaparsanız sağda olur. Bu problem değil arkadaşlar. Maketiniz yinede çalışır.

Malzeme Listesi

Asansör Projesinin Stl Dosyaları

Projenin stl dosyalarını dosyalarını aşağıdaki likten indirebilirsiniz ve 3d yazıcı ile basabilirsiniz veya 3mm mdf ile de yapabilirsiniz.

  • Asansör projesinin stl dosyalarını indirmek için tıklayın!
  • Ses dosyalarını indirmek için tıklayın!

Proje Yapılırken Dikkat Edilmesi Gereken Kısımlar

Adım 1

İç yüzeydeki, asansörün kenarındaki mdfler alt tabandan 10cm yüksek olmalıdır.

Arduino Asansör Maketi Alttan Yükseklik
Arduino Asansör Maketi Alttan Yükseklik

Adım 2

Asansörün girdiği kenarlar birbirinden 6.7cm uzak olmalılar.

Asansör mesafesi
Asansör mesafesi

Adım 3

Bir iç duvarın asansör boşluğuna olan uzaklığı 3.5mm olmalıdır.

İç duvarın asansör boşluğuna olan uzaklığı
İç duvarın asansör boşluğuna olan uzaklığı

Adım 4

Yüzeyleri birbirine yapıştırırken hangi yüzeyin hangi yüzeye yapıştırıldığına dikkat edin.

Yüzeylerin yapıştırılma şekli
Yüzeylerin yapıştırılma şekli

Elektronik kısma geçmeden önce bu projede kullanılan komponentlerin kullanımını ilk olarak aşağıdaki linklerden bilmediğiniz konuları öğrenmenizi tavsiye ederim.

Arduino Asansör Maketi Devre Şeması

Maketin elektronik bağlantı şeması aşağıdaki gibidir.

Arduino Asansör Maketi Devre Şeması
Arduino Asansör Maketi Devre Şeması

Devre Şeması Pin Bağlantıları

ModülArduino
Kat 1 Buton4
Kat 2 Buton12
Kat 3 Buton13
Kat 1 SensörA0
Kat 2 SensörA1
Kat 3 SensörA2
Kat 1 Led5
Kat 2 Led7
Kat 3 Led6
Motor Pin 18
Motor Pin 29
Motor Pin 310
Motor Pin 411
DFPlayer Mini TX2
DFPlayer Mini RX3
Oled Ekran SDAA4
Oled Ekran SCLA5
Arduino Asansör Maketi Bağlantı Pinleri
DFPlayer MiniModül
SPK1Hoparlör 1
SPK2Hoparlör 2
DFPlayer Mini Hoparlör Bağlantı Pini

Not: Bütün sesnsörlerin ve komponentlerin VCC ve GND’si arduinonun 5V ve GND’sinde birleştirilmiştir.

Dikkat: Arkadaşlar kodu yüklemeden önce mutlaka TCRT5000 modülünün asansörünü algılaması için potansiyometre ayarını yapmanız gerekmektedir. Bunuda şu şekilde yapmalısınız. Asansörün tcrt5000 modülünün önüne gelince ışığının yanması gerekmektedir. Eğer yanmıyorsa bunu tcrt5000 modülü üzerinde bulunan mavi renkli potansiyometreyi döndürerek ayarlanız lazım.

Arduino Asansör Maketi Kodu

Bu projede 3 kütüphane kullandık. Kullanılan kütüphaneler; SoftwareSerial,DFRobotDFPlayerMini ve U8glib kütüphanesidir. Eğer bu kütüphaneler sizde yüklü değil ise aşağıdaki linklerden indiriniz.

  • SoftwareSerial kütüphanesi, Arduino IDE ile beraber gelmektedir ama sizde yok ise indirmek için tıklayın!
  • DFRobotDFPlayerMini kütüphanesini indirmek için tıklayın!
  • U8glib kütüphanesini indirmek için tıklayın!

Bu arada ben 28BYJ-48 step motorunu sürmek için herhangi bir kütüphane kullanmadım. Çünkü arduino ide ile gelen Stepper kütüphanesi bazen çalışmıyordu. Bunu çözmek için sürme kodunu kendim yazdım. Bu yüzden step motorun adım 360 derece için dönmesi gereken adım sayısı değişti. Bunları aşağıdaki videoda detaylı olarak açıkladım. İzlemenizi tavsiye ederim.

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include "U8glib.h"
#define buton1 4
#define buton2 12
#define buton3 13
#define kat1 A0
#define kat2 A1
#define kat3 A2
int kat1led=5;
int kat2led=7;
int kat3led=6;
//-----------------Step Motor Global Kodları-------------------
const int motorPin1 = 8;
const int motorPin2 = 9;
const int motorPin3 = 10;
const int motorPin4 = 11;
const int birturadimsayisi = 540;
int bekleme =3;
//-------------------------------------------------------
//------------------Oled Ekran Global Kodları------------------

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);
//-------------------------------------------------------
//------------------Ses Çalma Kodu---------------------------

// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 2; // Connects to module's RX 
static const uint8_t PIN_MP3_RX = 3; // Connects to module's TX 
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);

// Create the Player object
DFRobotDFPlayerMini player;
//-------------------------------------------------------------
int hangikat=0;
int atilacakadimsayisi=120;
int geriatilacakadimsayisi=100;
bool katikisoyle=false;
bool katikitetik=false;

void setup() {
  pinMode(buton1,INPUT);
  pinMode(buton2,INPUT);
  pinMode(buton3,INPUT);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(kat1led,OUTPUT);
  pinMode(kat2led,OUTPUT);
  pinMode(kat3led,OUTPUT);
  Serial.begin(9600);
  softwareSerial.begin(9600);
  //--------------Ses Çalma Kodu----------------------
    // Start communication with DFPlayer Mini
  if (player.begin(softwareSerial)) {
   Serial.println("OK");

    // Set volume to maximum (0 to 30).
    player.volume(25);
    // Play the first MP3 file on the SD card
    player.play(1);
  } else {
    Serial.println("Connecting to DFPlayer Mini failed!");
  }
  //-----------------------------------------------------

}

void loop() {
int buton1kontrol=digitalRead(buton1);
int buton2kontrol=digitalRead(buton2);
int buton3kontrol=digitalRead(buton3);
if(buton1kontrol==HIGH){
  birincikatagit();
  Serial.println("1. kata basildi.");
}else if(buton2kontrol==HIGH){
  ikincikatagit();
  Serial.println("2. kata basildi.");
}else if(buton3kontrol==HIGH){
  ucuncukatagit();
  Serial.println("3. kata basildi.");
}else{
  //Serial.println("Beklenmeyen problem var.");
}
}
void birincikatagit(){
  int kat1mi=analogRead(kat1);
  int kat2mi=analogRead(kat2);
  int kat3mi=analogRead(kat3);
  if(kat1mi<100){
    digitalWrite(kat1led,HIGH);
    digitalWrite(kat2led,LOW);
    digitalWrite(kat3led,LOW);
    player.play(2);
  }
  if(kat2mi<100){
        digitalWrite(kat2led,HIGH);
        player.play(3);
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat1);
        if(hangikat<100){
          player.play(2);
          break;
        }else{
        Serial.println("1. kata iniyor...");
        yaz("Mert-Kaan","1. kata iniyor");
        geriadimat(atilacakadimsayisi);
        }
    }
    digitalWrite(kat1led,HIGH);
    digitalWrite(kat2led,LOW);
    digitalWrite(kat3led,LOW);
    yaz("Mert-Kaan","1. kata indi.");
    Serial.println("1. kata indi.");
  }
  if(kat3mi<100){
        digitalWrite(kat3led,HIGH);
        player.play(4);
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat1);
        kat2mi=analogRead(kat2);
        if(hangikat<100){
          break;
        }else{
          if(kat2mi<100 && katikisoyle==false){
            digitalWrite(kat3led,LOW);
            digitalWrite(kat2led,HIGH);
            player.play(3);
            katikisoyle=true;
          }
        Serial.println("1. kata iniyor...");
        yaz("Mert-Kaan","1. kata iniyor");
        geriadimat(atilacakadimsayisi);
        }
        }
        player.play(2);
        digitalWrite(kat1led,HIGH);
        digitalWrite(kat2led,LOW);
        digitalWrite(kat3led,LOW);
        yaz("Mert-Kaan","1. kata indi.");
        Serial.println("1. kata indi.");
        katikisoyle=false;
  }
}
void ikincikatagit(){
  int kat1mi=analogRead(kat1);
  int kat2mi=analogRead(kat2);
  int kat3mi=analogRead(kat3);
  if(kat1mi<100){
        digitalWrite(kat1led,HIGH);
        player.play(2);
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat3);
        if(hangikat<100){
          break;
        }else{
        Serial.println("2. kata cikiyor...");
        yaz("Mert-Kaan","2. kata cikiyor");
        ileriadimat(atilacakadimsayisi);
        }
        }
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat2);
        if(hangikat<100){
          break;
        }else{
        Serial.println("2. kata cikiyor...");
        yaz("Mert-Kaan","2. kata cikiyor");
        geriadimat(atilacakadimsayisi);
        }
        }
        player.play(3);
        digitalWrite(kat1led,LOW);
        digitalWrite(kat2led,HIGH);
        digitalWrite(kat3led,LOW);
        yaz("Mert-Kaan","2. kata cikildi.");
        Serial.println("2. kata cikildi.");
  }
  if(kat2mi<100){
    digitalWrite(kat1led,LOW);
    digitalWrite(kat2led,HIGH);
    digitalWrite(kat3led,LOW);
    player.play(3);
  }
  if(kat3mi<100){
        digitalWrite(kat3led,HIGH);
        player.play(4);
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat2);
        if(hangikat<100){
          break;
        }else{
        Serial.println("2. kata iniyor...");
        yaz("Mert-Kaan","2. kata iniyor");
        geriadimat(atilacakadimsayisi);
        }
    }
    player.play(3);
    digitalWrite(kat1led,LOW);
    digitalWrite(kat2led,HIGH);
    digitalWrite(kat3led,LOW);
    yaz("Mert-Kaan","2. kata indi.");
    Serial.println("2. kata indi.");
  }
}
void ucuncukatagit(){
  int kat1mi=analogRead(kat1);
  int kat2mi=analogRead(kat2);
  int kat3mi=analogRead(kat3);
  if(kat1mi<100){
        digitalWrite(kat1led,HIGH);
        player.play(2);
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat3);
        kat2mi=analogRead(kat2);
        if(hangikat<100){
          break;
        }else{
          if(kat2mi<100){
            katikitetik=true;
          }
          if(kat2mi>100 && katikisoyle==false && katikitetik==true){
            digitalWrite(kat1led,LOW);
            digitalWrite(kat2led,HIGH);
            player.play(3);
            katikisoyle=true;
          }
        Serial.println("3. kata cikiyor...");
        yaz("Mert-Kaan","3. kata cikiyor");
        ileriadimat(atilacakadimsayisi);
        }
        }
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat3);
        if(hangikat>100){
          break;
        }else{
        Serial.println("3. kata cikiyor...");
        yaz("Mert-Kaan","3. kata cikiyor");
        ileriadimat(atilacakadimsayisi);
        }
        }
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat3);
        if(hangikat<100){
          break;
        }else{
        Serial.println("3. kata cikiyor...");
        yaz("Mert-Kaan","3. kata cikiyor");
        geriadimat(atilacakadimsayisi);
        katikisoyle=false;
        katikitetik=false;
        }
    }
    player.play(4);
    digitalWrite(kat1led,LOW);
    digitalWrite(kat2led,LOW);
    digitalWrite(kat3led,HIGH);
    yaz("Mert-Kaan","3. kata cikildi.");
    Serial.println("3. kata cikildi.");
  }
  if(kat2mi<100){
        digitalWrite(kat2led,HIGH);
        player.play(3);
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat3);
        if(hangikat<100){
          break;
        }else{
        Serial.println("3. kata cikiyor...");
        yaz("Mert-Kaan","3. kata cikiyor");
        ileriadimat(atilacakadimsayisi);
        }
        }
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat3);
        if(hangikat>100){
          break;
        }else{
        Serial.println("3. kata cikiyor...");
        yaz("Mert-Kaan","3. kata cikiyor");
        ileriadimat(atilacakadimsayisi);
        }
        }
        for(int i=0;i<10000;i++){
        hangikat=analogRead(kat3);
        if(hangikat<100){
          break;
        }else{
        Serial.println("3. kata cikiyor...");
        yaz("Mert-Kaan","3. kata cikiyor");
        geriadimat(atilacakadimsayisi);
        }
    }
    player.play(4);
    digitalWrite(kat1led,LOW);
    digitalWrite(kat2led,LOW);
    digitalWrite(kat3led,HIGH);
    yaz("Mert-Kaan","3. kata cikildi.");
    Serial.println("3. kata cikildi.");
  }
  if(kat3mi<100){
    digitalWrite(kat1led,LOW);
    digitalWrite(kat2led,LOW);
    digitalWrite(kat3led,HIGH);
    player.play(4);
  }
}

void draw(String mesaj,String mesaj2) { // Ekran görsel yerleşimini ve yazdırılacak metnin düzenlendiği bölüm.
  u8g.setFont(u8g_font_profont12); // Yazının Fontu belirlendi.
  u8g.setPrintPos(0, 28); // Yazının ekrandaki yeri belirlendi.
  u8g.print(mesaj);
  u8g.setFont(u8g_font_profont12);
  u8g.setPrintPos(0, 56);
  u8g.print(mesaj2);
}
void yaz(String mesaj1, String mesaj2){
  u8g.firstPage();
  do {
  draw(mesaj1,mesaj2);
  } while (u8g.nextPage());
  delay(25);
}
void adim1() {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(bekleme);
}
void adim2() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(bekleme);
}
void adim3() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(bekleme);
}
void adim4() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(bekleme);
}
void ileriadimat(int adim){
  for (int i = 0; i < adim ; i++){
    adim1();
    adim2();
    adim3();
    adim4();
  }
}
void geriadimat(int adim){
  for (int i = 0; i < adim ; i++){
    adim4();
    adim3();
    adim2();
    adim1();
  }
}

Projenin videosunu aşağıdan izleyebilirsiniz. Kanalımıza abone olarak destek olabilirsiniz.

Arduino İle Asansör Maketi Yapımı