Ana Sayfa dnyARDUINO dnyArduino ile Asansör Uygulaması

dnyArduino ile Asansör Uygulaması

6 min read
10
0
8,508
7 segmend display

Merhabalar arkadaşlar ,

Yine bu yazımızda hayatın içinden duymaya ve görmeye alışkın olduğumuz bir sistemi dnyArduino seti üzerinde uygulamasını yaptık.Bu uygulama ne kadar asansör uygulaması olsada motor vs elemanlar içermemektedir.Bu uygulamanın amacı asansör sisteminin kat numaralarını 7 Segmend display ile görselini gerçekleştirmektir.Asansörlerde genellikle kat tayini için sınır anahtarları yada kızıl ötesi bazı sensörler tercih edilmektedir.Biz bu uygulamada dnyArduino kiti üzerinde bulunan butonlarla bunu yaptık.Bunların tümü aynı mantığı içermektedir.Tetiği verdiğiniz anda lojik 1 komutunu alan ve sensörü görmediğinde yani buton olarak düşünürsek butonu bıraktığımızda lojik 0 değerini göstermektedir.Ancak bu iş uygulamada lojik 0 a düştüğünde bir önceki değeri yani hala 1. katta olduğumuzu göstermesi istenir.Bu durumu sağlamak için PLC derslerinden alışık olduğumuz mühürleme mantığı ön plana çıkar.dnyArduino üzerinde mühürleme mantığını gerçekleştire bilmek için sıra gelen birçok kod kullandım.Belki bu kod trafiği size karışık gelebilir ancak elimden geldiğince sadeleştirmeye çalıştım.Bu işi farklı türde düşünüp farklı yönden çözebilen programlarda yazılabilir bunada saygı gösteririm.

7 SEGMEND DİSPLAY(dnyArduino)

Display
7 segmend

Görüldüğü üzere bizim bildiğimiz 7 segmend displayin dışında dnyArduino tasarımıyla birlikte kolaylıkla displaye hükmedebiliyoruz.

Normalde displayler ortak anat ve ortak katottan oluşmaktadır.Bu setin üzerinde bulunan displayler ise ortak katottur.NK ucuna lojik 0’ı verdikten sonra Karakterlerden herhangi birisine lojik 1 değerini yolladığımızda o karakter yanacaktır.Bu mantığa dayanarak uygulamamızın kodunuda yazmış bulunmaktayız.

Devrenin Şeması:

Şema
Devre şeması

Devrenin Arduino Kodu:

[php]

int lastbutton1=LOW;
int lastbutton2=LOW;
int lastbutton3=LOW;
void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT);//7 segment display çıkışları
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, INPUT);//b1
pinMode(10, INPUT);//b2
pinMode(11, INPUT);//b3

}

void loop() {
// put your main code here, to run repeatedly:
int buttonState1,buttonState2,buttonState3;
buttonState1 = digitalRead(9);
buttonState2 = digitalRead(10);
buttonState3 = digitalRead(11);
if(buttonState2== LOW && buttonState3==LOW){
if((buttonState1!=lastbutton1)||(buttonState1==HIGH)){
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
lastbutton1=HIGH;
lastbutton3=LOW;
lastbutton2=LOW;
}}
if(buttonState3 ==LOW && buttonState1==LOW){
if((buttonState2!=lastbutton2)||(buttonState2==HIGH)){
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
lastbutton2=HIGH;
lastbutton1=LOW;
lastbutton3=LOW;
}}

if(buttonState2 == LOW && buttonState1==LOW){
if((buttonState3!=lastbutton3)||(buttonState3==HIGH)){
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
lastbutton3=HIGH;
lastbutton2=LOW;
lastbutton1=LOW;
}}}
[/php]

Arduino kodunun anlatımı:

Arkadaşlar ilk önce kullanacağım arduino pinlerinin giriş ve çıkışlarını belirledim.Daha sonra butonun dijital durumları kontrol ediliyor.Birinci buton ve birinci kat için 2 ve 3 katlar aktif olmayacak ve ilk durumda butonların durumlarını lojik 0 yaptığım durum değiştimi diye  ve buton 1 basıldımı diye kontrol ediyor ilk şartlar sağlandığında displayimiz 1. katı göstermektedir.Elimizi butondan kaldırsak bile yani sınır anahtarından geçti ve 2 kata çıkıyorken bile hala 1.katta göstermek istiyorum.O yüzden ilk durumda lojik 0 a gitse bile 1. butonun durumunu lojik 1 yapıyorum ve sürekli 1. katta olduğumuzu gösteriyoruz.Aynı durumlar 2. kat ve 3. kat için geçerlidir.

Devrenin videosu:

 

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Burak Ablay
Daha Fazla Göster -  dnyARDUINO

10 Yorumlar

  1. Seyit

    1 Eylül 2015 at 22:20

    Hocam bu calismanizi 4 kablolu step motorumla uygulamaya calistim. 3 katli asansor uygulamasi icin. Bir de kod yazdim fakat istdgm gbi calismadi. Yardimci olurmusunuz?

    Reply

  2. Seyit

    1 Eylül 2015 at 22:23

    Display olayi tamam gayet guzel hocam fakat. Katda durdurucu sensorlerim var. Kat 1 de birinci katin sensorunu gordugunde dger katlardan cagrma yapmiyor. Yada 2 yada 3. Katlarda dursa kat sensorlerni gorunce dger katlardan cagrma yapamayim kodumu paylascam duzeltirsenz sevinirim hocam.

    Reply

  3. Seyit

    1 Eylül 2015 at 22:25

    #include // Stepper Kütüphanesini ekledik
    #define steps 200 //Step Motorumuzun adım sayısını belirledik
    #define stepPin 13 // A4988 Motor sürme Pinimizi belirledik
    #define dirPin 12 // Yön Pinimizi belirledik

    int lastbutton1=LOW;

    int lastbutton2=LOW;

    int lastbutton3=LOW;

    int sensor1=LOW;

    int sensor2=LOW;

    int sensor3=LOW;

    Stepper stepper(steps,stepPin,dirPin);

    void setup() {

    pinMode(5, OUTPUT);//7 segment display çıkışları

    pinMode(4, OUTPUT);

    pinMode(3, OUTPUT);

    pinMode(8, OUTPUT);

    pinMode(7, OUTPUT);

    pinMode(6, OUTPUT);

    pinMode(9, INPUT);//b1

    pinMode(10, INPUT);//b2

    pinMode(11, INPUT);//b3

    pinMode(stepPin, OUTPUT);

    pinMode(dirPin, OUTPUT);

    pinMode(sensor1, INPUT);

    pinMode(sensor2, INPUT);

    pinMode(sensor3, INPUT);

    // Step motorumuzun maximum hızı
    stepper.setSpeed(300); //
    digitalWrite(13,LOW); //Step pinimizin ilk durumunu LOW yaptık
    digitalWrite(12,LOW);// Dir pinimizin ilk durumunu LOW yaptık

     

    }

     

    void loop() {

    int buttonState1,buttonState2,buttonState3,sensorState1,sensorState2,sensorState3;

    buttonState1 = digitalRead(9);

    buttonState2 = digitalRead(10);

    buttonState3 = digitalRead(11);

    sensorState1= digitalRead(0);

    sensorState2= digitalRead(1);

    sensorState3= digitalRead(2);

    if(buttonState2== LOW && buttonState3==LOW){

    if((buttonState1!=lastbutton1)||(buttonState1==HIGH)){

    lastbutton1=HIGH;

    lastbutton3=LOW;

    lastbutton2=LOW;

    stepper.step(100);
    }}

    //
    if(buttonState2== LOW && buttonState3==LOW){

    if((sensorState1!=sensor1)){

    digitalWrite(5,LOW);

    digitalWrite(4,HIGH);

    digitalWrite(3,HIGH);

    digitalWrite(8,LOW);

    digitalWrite(7,LOW);

    digitalWrite(6,LOW);

    sensor1=LOW;

    lastbutton1=LOW;

    lastbutton3=LOW;

    lastbutton2=LOW;

    }}

    //

    if(buttonState3 ==LOW && buttonState1==LOW){

    if((buttonState2!=lastbutton2)||(buttonState2==HIGH)){

    lastbutton2=HIGH;

    lastbutton1=LOW;

    lastbutton3=LOW;

    stepper.step(-100);
    }}
    //
    if(buttonState3 ==LOW && buttonState1==LOW){

    if((sensorState2!=sensor2)){

    digitalWrite(5,HIGH);

    digitalWrite(4,HIGH);

    digitalWrite(3,LOW);

    digitalWrite(8,HIGH);

    digitalWrite(7,HIGH);

    digitalWrite(6,HIGH);

    sensor2=LOW;

    lastbutton2=LOW;

    lastbutton1=LOW;

    lastbutton3=LOW;

    }}

    //
    //

    if(buttonState2 == LOW && buttonState1==LOW){

    if((buttonState3!=lastbutton3)||(buttonState3==HIGH)){

    lastbutton3=HIGH;

    lastbutton2=LOW;

    lastbutton1=LOW;

    stepper.step(100);
    }}

    //
    //
    if(buttonState3 ==LOW && buttonState1==LOW){

    if((sensorState3!=sensor3)){

    digitalWrite(5,HIGH);

    digitalWrite(4,HIGH);

    digitalWrite(3,HIGH);

    digitalWrite(8,HIGH);

    digitalWrite(7,LOW);

    digitalWrite(6,HIGH);

    sensor2=LOW;

    lastbutton2=LOW;

    lastbutton1=LOW;

    lastbutton3=LOW;

    }}}

    Reply

  4. Burak Ablay

    Burak Ablay

    2 Eylül 2015 at 10:19

    Merhaba arkadaşım ,
    İlk önce senin istediğin programı anlatmaya çalışacağım ve düzeltmen gereken yerleri söyleyeceğim.Anladığım kadarıyla program ilk başlatıldığından sonra herhangi bir kattan çağırılabilir çağırıldığı an orda sabit kalmasını ve başka hiç bir kattan müdahale edilmemesini istemişsin umarım doğru anlamışımdır.Bu programda düzeltmeler yapman gerekir senin dediğin gibi onları sana söyleyeceğim şimdi..
    #include // Stepper Kütüphanesini ekledik
    #define steps 200 //Step Motorumuzun adım sayısını belirledik
    #define stepPin 13 // A4988 Motor sürme Pinimizi belirledik
    #define dirPin 12 // Yön Pinimizi belirledik

    int lastbutton1=LOW;

    int lastbutton2=LOW;

    int lastbutton3=LOW;

    int sensor1=LOW;

    int sensor2=LOW;

    int sensor3=LOW;

    Stepper stepper(steps,stepPin,dirPin);

    void setup() {

    pinMode(5, OUTPUT);//7 segment display çıkışları

    pinMode(4, OUTPUT);

    pinMode(3, OUTPUT);

    pinMode(8, OUTPUT);

    pinMode(7, OUTPUT);

    pinMode(6, OUTPUT);

    pinMode(9, INPUT);//b1

    pinMode(10, INPUT);//b2

    pinMode(11, INPUT);//b3

    pinMode(stepPin, OUTPUT);

    pinMode(dirPin, OUTPUT);

    pinMode(sensor1, INPUT);

    pinMode(sensor2, INPUT);

    pinMode(sensor3, INPUT);

    // Step motorumuzun maximum hızı
    stepper.setSpeed(300); //
    digitalWrite(13,LOW); //Step pinimizin ilk durumunu LOW yaptık
    digitalWrite(12,LOW);// Dir pinimizin ilk durumunu LOW yaptık

    }

    void loop() {

    int buttonState1,buttonState2,buttonState3,sensorState1,sensorState2,sensorState3;

    buttonState1 = digitalRead(9);

    buttonState2 = digitalRead(10);

    buttonState3 = digitalRead(11);

    sensorState1= digitalRead(0);

    sensorState2= digitalRead(1);

    sensorState3= digitalRead(2);

    if(buttonState2== LOW && buttonState3==LOW){

    if((buttonState1!=lastbutton1)||(buttonState1==HIGH)){
    if(sensor1==LOW){
    lastbutton1=HIGH;

    lastbutton3=LOW;

    lastbutton2=LOW;

    stepper.step(100);
    }}}

    //
    if(buttonState2== LOW && buttonState3==LOW){

    if((sensorState1==HIGH)){

    digitalWrite(5,LOW);

    digitalWrite(4,HIGH);

    digitalWrite(3,HIGH);

    digitalWrite(8,LOW);

    digitalWrite(7,LOW);

    digitalWrite(6,LOW);

    sensor1=LOW;
    sensor2=HIGH;
    sensor3=HIGH;
    lastbutton1=LOW;

    lastbutton3=LOW;

    lastbutton2=LOW;

    }}

    //

    if(buttonState3 ==LOW && buttonState1==LOW){

    if((buttonState2!=lastbutton2)||(buttonState2==HIGH)){
    if(sensor2==LOW){
    lastbutton2=HIGH;

    lastbutton1=LOW;

    lastbutton3=LOW;

    stepper.step(-100);
    }}}
    //
    if(buttonState3 ==LOW && buttonState1==LOW){

    if((sensorState2==HIGH)){

    digitalWrite(5,HIGH);

    digitalWrite(4,HIGH);

    digitalWrite(3,LOW);

    digitalWrite(8,HIGH);

    digitalWrite(7,HIGH);

    digitalWrite(6,HIGH);

    sensor2=LOW;
    sensor1=HIGH;
    sensor3=HIGH;
    lastbutton2=LOW;

    lastbutton1=LOW;

    lastbutton3=LOW;

    }}

    //
    //

    if(buttonState2 == LOW && buttonState1==LOW){

    if((buttonState3!=lastbutton3)||(buttonState3==HIGH)){
    if(sensor3==LOW){
    lastbutton3=HIGH;

    lastbutton2=LOW;

    lastbutton1=LOW;

    stepper.step(100);
    }}}

    //
    //
    if(buttonState3 ==LOW && buttonState1==LOW){

    if((sensorState3==HIGH)){

    digitalWrite(5,HIGH);

    digitalWrite(4,HIGH);

    digitalWrite(3,HIGH);

    digitalWrite(8,HIGH);

    digitalWrite(7,LOW);

    digitalWrite(6,HIGH);

    sensor3=LOW;
    sensor1=HIGH;
    sensor2=HIGH;
    lastbutton2=LOW;

    lastbutton1=LOW;

    lastbutton3=LOW;

    }}}

    Reply

  5. Seyit

    2 Eylül 2015 at 14:54

    Hocam ilginiz tesekkurler. Tam anlatmak istdgm sey uygulamam normal asansör gbi katlar arasnda gdip gelsin kendi katina bagli olan sensoru gorunce dursun dger katlardanda cagrma yapabiliyim.

    Reply

  6. Burak Ablay

    Burak Ablay

    2 Eylül 2015 at 16:03

    İstediklerini senin attığın kodlar karşılar bir tek altta sensor2=LOW olan yer sensor3=LOW olmalıdır .Nerede problem çıktığını yazarsan sevinirim birde malum herkezin düşündüğü gibi düşünemiyorsunuz tüm detaylarıyla olaya hakim olmak lazım . Yani anlatmak istediğim kodların doğru gözüküyor burdan yazdığın kadarsa istediğin olaylar . Benim gördüğüm 1. kattan 2 . kata geçerken o arada display bir yazı yazmaz bu kodlarla bir o sıkıntı gözüküyor.Yani mühürlemen eksik gibi. İyi günler dilerim..

    Reply

  7. Seyit

    2 Eylül 2015 at 18:01

    Hocam displayin saymasi icin bulundugu katin sensorunu gordugunde aktif oluyor. Problem su hocam. Kat 1 de iken sensordn gelen HIGH sinyali ile durma yapiyor. Kat birdeki sensor Low olmadigi icin dger katlardan cagramym. Birde 1. kattan 3. kata cagrdgmda 2. Kattaki sensoru gorunce de duruyor. Problemim bu hocam. Cozume ulasamadim bir turlu 🙁

    Reply

  8. Burak Ablay

    Burak Ablay

    2 Eylül 2015 at 18:28

    Sorununu çözdüm.. K odda sensor1,sensor2,veya sensor3 gördüğü andan itibaren diğerlerini aktif edemiyorsun çünkü lastbutton1,2,3 leri LOW yapıyorsun buda mühürlemeyi devre dışı bırakıyor istediğini elde edemiyorsun.. Kodu değiştirip atıyorum..İyi çalışmalar..
    #include // Stepper Kütüphanesini ekledik
    #define steps 200 //Step Motorumuzun adım sayısını belirledik
    #define stepPin 13 // A4988 Motor sürme Pinimizi belirledik
    #define dirPin 12 // Yön Pinimizi belirledik

    int lastbutton1=LOW;

    int lastbutton2=LOW;

    int lastbutton3=LOW;

    int sensor1=LOW;

    int sensor2=LOW;

    int sensor3=LOW;

    Stepper stepper(steps,stepPin,dirPin);

    void setup() {

    pinMode(5, OUTPUT);//7 segment display çıkışları

    pinMode(4, OUTPUT);

    pinMode(3, OUTPUT);

    pinMode(8, OUTPUT);

    pinMode(7, OUTPUT);

    pinMode(6, OUTPUT);

    pinMode(9, INPUT);//b1

    pinMode(10, INPUT);//b2

    pinMode(11, INPUT);//b3

    pinMode(stepPin, OUTPUT);

    pinMode(dirPin, OUTPUT);

    pinMode(sensor1, INPUT);

    pinMode(sensor2, INPUT);

    pinMode(sensor3, INPUT);

    // Step motorumuzun maximum hızı
    stepper.setSpeed(300); //
    digitalWrite(13,LOW); //Step pinimizin ilk durumunu LOW yaptık
    digitalWrite(12,LOW);// Dir pinimizin ilk durumunu LOW yaptık

    }

    void loop() {

    int buttonState1,buttonState2,buttonState3,sensorState1,sensorState2,sensorState3;

    buttonState1 = digitalRead(9);

    buttonState2 = digitalRead(10);

    buttonState3 = digitalRead(11);

    sensorState1= digitalRead(0);

    sensorState2= digitalRead(1);

    sensorState3= digitalRead(2);

    if(buttonState2== LOW && buttonState3==LOW){

    if((buttonState1!=lastbutton1)||(buttonState1==HIGH)){

    lastbutton1=HIGH;

    lastbutton3=LOW;

    lastbutton2=LOW;

    stepper.step(100);
    }}

    //
    if(buttonState2== LOW && buttonState3==LOW){

    if((sensorState1!=sensor1)){

    digitalWrite(5,LOW);

    digitalWrite(4,HIGH);

    digitalWrite(3,HIGH);

    digitalWrite(8,LOW);

    digitalWrite(7,LOW);

    digitalWrite(6,LOW);

    sensor1=LOW;

    lastbutton1=LOW;

    }}

    //

    if(buttonState3 ==LOW && buttonState1==LOW){

    if((buttonState2!=lastbutton2)||(buttonState2==HIGH)){

    lastbutton2=HIGH;

    lastbutton1=LOW;

    lastbutton3=LOW;

    stepper.step(-100);
    }}
    //
    if(buttonState3 ==LOW && buttonState1==LOW){

    if((sensorState2!=sensor2)){

    digitalWrite(5,HIGH);

    digitalWrite(4,HIGH);

    digitalWrite(3,LOW);

    digitalWrite(8,HIGH);

    digitalWrite(7,HIGH);

    digitalWrite(6,HIGH);

    sensor2=LOW;

    lastbutton2=LOW;

    }}

    //
    //

    if(buttonState2 == LOW && buttonState1==LOW){

    if((buttonState3!=lastbutton3)||(buttonState3==HIGH)){

    lastbutton3=HIGH;

    lastbutton2=LOW;

    lastbutton1=LOW;

    stepper.step(100);
    }}

    //
    //
    if(buttonState3 ==LOW && buttonState1==LOW){

    if((sensorState3!=sensor3)){

    digitalWrite(5,HIGH);

    digitalWrite(4,HIGH);

    digitalWrite(3,HIGH);

    digitalWrite(8,HIGH);

    digitalWrite(7,LOW);

    digitalWrite(6,HIGH);

    sensor3=LOW;

    lastbutton3=LOW;

    }}}

    Reply

  9. Seyit

    2 Eylül 2015 at 23:25

    Hocam cok tesekkur ederim problemim cözuldu. Bir ricam daha olucakti hocam. Asansor 1.kattan 2. Kata, 2. Kattan 3. Kata ve tekrar 3. Kattan 1. Kata inis gerceklestiriyor fakat 3.katta iken 2. Kat butonuyla cagrma yaptgmda 2. Kata gelmesini ve durmasini nasil saglarim? Bunada yardmci olursaniz hocam lütfen. Kisaca asansor inislerde 3. Kattan 1. Kata gelyor duruyo problem yok. 3.kattan 2. Kata cagrma yapmam icin nasil kod yazmam gerekiyor?

    Reply

  10. Burak Ablay

    Burak Ablay

    3 Eylül 2015 at 07:04

    Şuan için programda bir sıkıntı gözükmüyor dediğin problemle alakalı bir tek son döngünün if lerinde buttonstate 1,2 olması gerekirken buttonstate 3,1 yazılmış yani sensor3 döngüsünde belki bundan dolayıdır dicem ama yinede bir problem gözükmüyor arkadaşım..Sen bağlantılarını veya Step motorla alakalı bir problem yaşanmış olabilir.Bu uygulamada dikkat ettiysen motor kullanılmadı eğer steple alakalı bir durum yaşanıyorsa yapacağımız yeni uygulamalarımızı beklemelisin yada arduino kısmından steple yazılmış yazıları takip edebilirsin..Programda bir sorun gözükmemektedir..İyi çalışmalar diliyorum..

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

Modbus POLL ile Allen Bradley Motor Sürücüsünün Haberleşmesi

Merhabalar arkadaşlar , Bu yazımızda RS485 yada Modbus haberleşmesi ile ilgilenen arkadaşl…