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.
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
- 1 adet Arduino Uno
- 3 adet 16mm Push Buton
- 3 adet 5mm Led
- 1 adet 28BYJ-48 Step Motor
- 1 adet ULN2003A Step Motor Sürücü
- 3 adet TCRT5000 Kızılötesi Sensör Modülü
- 1 adet 0.5W 8 ohm 36mm Hoparlör
- 1 adet 128×64 0.96 inch Oled Grafik Lcd Ekran
- 1 adet DFPlayer Mini
- 1 adet Micro SD Kart
- Dişi-Erkek Jumper Kablolar
- 3 adet 10K Ohm Direnç
- 3 adet 330 Ohm Direnç
- 1 m² 3mm Mdf(Hepsini kullanmıyoruz, 0.5 m²’ye yakın artacak)
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.
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.
Adım 2
Asansörün girdiği kenarlar birbirinden 6.7cm uzak olmalılar.
Adım 3
Bir iç duvarın asansör boşluğuna olan uzaklığı 3.5mm olmalıdır.
Adım 4
Yüzeyleri birbirine yapıştırırken hangi yüzeyin hangi yüzeye yapıştırıldığına dikkat edin.
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 İle 28BYJ-48 Step Motor Kullanımı
- Arduino İle DFPlayer Mini Kullanımı
- Arduino İle TCRT5000 Kızılötesi Sensör Kullanımı
- Arduino İle Buton Kullanımında Yapılan Hatalar
- Arduino İle Led Yakma Nasıl Yapılır?
- Arduino İle Analog Veri Nasıl Okunur?
Arduino Asansör Maketi Devre Şeması
Maketin elektronik bağlantı şeması aşağıdaki gibidir.
Devre Şeması Pin Bağlantıları
Modül | Arduino |
Kat 1 Buton | 4 |
Kat 2 Buton | 12 |
Kat 3 Buton | 13 |
Kat 1 Sensör | A0 |
Kat 2 Sensör | A1 |
Kat 3 Sensör | A2 |
Kat 1 Led | 5 |
Kat 2 Led | 7 |
Kat 3 Led | 6 |
Motor Pin 1 | 8 |
Motor Pin 2 | 9 |
Motor Pin 3 | 10 |
Motor Pin 4 | 11 |
DFPlayer Mini TX | 2 |
DFPlayer Mini RX | 3 |
Oled Ekran SDA | A4 |
Oled Ekran SCL | A5 |
DFPlayer Mini | Modül |
SPK1 | Hoparlör 1 |
SPK2 | Hoparlör 2 |
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.