Şimdi Ara

Adafruit Motor Modülü ve RFID Modülü Senkronizasyon Sıkıntısı

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
1
Favori
373
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar

    RC522 Rfid kart modülü ile açılıp kapanan, kapı kilidi projesi üzerinde çalışıyorum.

    Projenin mekanik aksamını tamamladım, fakat arduino kodlama kısmında ufak bir sorun ile karşılaştım.

    Projede iki adet rfid kart kullanacağım bunlardan birisi kapıyı kilitlerken, diğeri kapıyı açacak.

    l293d motor shield vasıtası ile dc motoru ileri ve geri döndürmek suretiyle kapı açılıp kapanacak, kartlardan birisini okuttuğumda motor dönmeye başlıyor diğer kartı okuttuğumda ise motor diğer yöne doğru dönüyor buraya kadar her şey tam olarak istediğim gibi fakat motorları durduramıyorum en son hangi kartı okuttuysam o yönde dönmeye devam ediyor.

    Benim istediğim şey kartı okutunca 5 saniye dönsün sonra dursun fakat bir türlü beceremedim

    yazdığım if dizininden örnek vermem gerekirse

    ******************************************************************************

    if (rfid == kart1)

    {

    motor.run(BACKWARD);

    Serial.println("Kapi Kapaniyor");

    delay(5000);


    }
    ***************************************************************************

    yukarıdaki şekildeyken motor kart okunduktan 5 saniye sonra dönmeye başlıyor


    aşağıdaki gibi bir değişiklik yaptığımda ise motor dönmeye başlamadan durma komutunu kullanıyor.

    ///////////////////////////////////////////////////////////////////////////

    if (rfid == kart1)

    {

    motor.run(BACKWARD);

    Serial.println("Kapi Kapaniyor");

    delay(5000);

    motor.run(RELEASE);

    }
    ////////////////////////////////////////////////////////////////////////

    Bu durumda ben ne yapmalıyım ki motor 5 saniye çalıştıktan sonra dursun? Nerede hata yapıyor olabilirim acaba?

    Şimdiden yardımlarınız için teşekkürler.



  • Azda olsa modüllerin ne yapmaya çalıştığını anlamak için kodda şöyle bir değişiklik yaptım

    **************************************************************************
    if (rfid == kart1)

    {
    Serial.println("1. kart");
    motor.run(FORWARD);

    delay(7000);

    motor.run(BACKWARD);

    delay(500);

    motor.run(RELEASE);

    delay(1000);

    motor.run(FORWARD);

    delay(300);

    rfid="";
    }

    *********************************************************************
    bu şekilde bir değişiklik yaptığımda şunları gözlemledim:

    1- Seri haberleşmede "1. kart" yazısı kartı okuttuğum gibi ekrana geliyor.

    2- Yazdığım motor.run komutlarından sadece en alta yazılan çalışıyor üsttekilerin herhangi bir işlevi olmuyor. (Kodu değiştirerek tekrar tekrar denedim.)

    3- Delay kodlarından hangisi en uzunsa o çalışıyor

    Mesela üstteki örneği ele alırsak kartı okuttuğumda "1. kart" yazısı anında ekranda beliriyor 7 saniye sonra da motor en altta yazan (FORWARD) yönünde dönmeye başlıyor.

    Bir de şöyle bir şey denedim

    RFID modülünü tamamen projeden söküp a isminde bir değişken oluşturdum ve bu değişkenin 5'e eşit olup olmadığı durumlarda motorun hareketlerini inceledim.

    ***********************************************************************
    {

    if(a==5)
    {
    motor.run(FORWARD);

    motor.setSpeed(200);
    delay(5000);

    motor.setSpeed(100);
    delay(3000);

    motor.run(BACKWARD);

    motor.setSpeed(255);
    delay(7000);

    motor.setSpeed(50);
    delay(3000);

    motor.run(RELEASE);
    delay(5000);
    }
    }
    ************************************************************************

    Bu şekilde yaptığımda hiç bir sorun olmadan kodları sırasıyla gerçekleştirdi.

    Sanırım sorun RFID modülü ile adafruit motor modülü arasındaki bir uyuşmazlıktan yada rfid kodlarındaki bir hatadan kaynaklanıyor.

    Teşekkürler



    < Bu mesaj bu kişi tarafından değiştirildi Komrat16 -- 1 Şubat 2018; 23:14:52 >
  • Uyuşmazlık diye bişey olmaz. Kartı okutunca led yakıp söndürmeyi deneyin.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Tam olarak bilmiyorum.
    Dediğin gibi motor sürücüyü iptal edip led yakıp söndürmeyi deneyeceğim ama şu aralar çalıştığım yerde işler biraz yoğun mesaiye kalmam gerekiyor bu sebeple pek vakit bulamıyorum.

    Ben deneyene kadar kodun tamamını şuraya bırakayım, belki gözüne takılan bir şey olur.

    *****************************************************

    #include <SPI.h>
    #include <MFRC522.h>
    #include <EEPROM.h>

    #define RST_PIN A0
    #define SS_PIN A1



    MFRC522 mfrc522(SS_PIN, RST_PIN);

    String lastRfid = "";
    String kart1 = "";
    String kart2 = "";

    MFRC522::MIFARE_Key key;

    #include <AFMotor.h>

    AF_DCMotor motor(2);

    void setup()
    {
    Serial.begin(9600);
    SPI.begin();
    mfrc522.PCD_Init();

    Serial.println("Kartlar Okunmaya Hazir");
    Serial.println("--------------------------");
    Serial.println();
    //EEPROM'dan kart bilgisini oku
    readEEPROM();

    motor.setSpeed(200);

    motor.run(RELEASE);

    }

    void loop()
    {

    if ( ! mfrc522.PICC_IsNewCardPresent())
    {
    return;
    }
    if ( ! mfrc522.PICC_ReadCardSerial())
    {
    return;
    }

    String rfid = "";
    for (byte i = 0; i < mfrc522.uid.size; i++)
    {
    rfid += mfrc522.uid.uidByte < 0x10 ? " 0" : " ";
    rfid += String(mfrc522.uid.uidByte, HEX);
    }

    rfid.trim();
    rfid.toUpperCase();

    if (rfid == lastRfid)
    return;
    lastRfid = rfid;

    Serial.print("Kart 1: ");
    Serial.println(kart1);
    Serial.print("Kart 2: ");
    Serial.println(kart2);
    Serial.print("Okunan: ");
    Serial.println(rfid);
    Serial.println();

    if (rfid == kart1)

    {
    motor.run(BACKWARD);
    Serial.println("Kapi Aciliyor");
    delay(5000);
    motor.run(RELEASE);
    rfid="";
    }

    if (rfid == kart2)
    {
    motor.run(FORWARD);
    Serial.println("Kapi Kapaniyor");
    delay(5000);
    motor.run(RELEASE);
    rfid="";
    }
    Serial.println();
    delay(200);

    }

    void readEEPROM()
    {

    for (int i = 0 ; i < 4 ; i++)
    {
    kart1 += EEPROM.read(i) < 0x10 ? " 0" : " ";
    kart1 += String(EEPROM.read(i), HEX);
    }

    for (int i = 4 ; i < 8 ; i++)
    {
    kart2 += EEPROM.read(i) < 0x10 ? " 0" : " ";
    kart2 += String(EEPROM.read(i), HEX);
    }

    kart1.trim();
    kart1.toUpperCase();
    kart2.trim();
    kart2.toUpperCase();
    }

    ********************************************************************************



    < Bu mesaj bu kişi tarafından değiştirildi Komrat16 -- 3 Şubat 2018; 0:27:55 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.