Şimdi Ara

Bluetooth ile Ultrasonik Mesafe Sesnrörü Birlikte Çalışmıyor

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

    Projem: HC-05 Bluetooth kontrollü ve Ultrasonik Mesafe Sensörlü (park sensörlü) araba.
    Malzemelerim
    Ardunio UNO R3 Klon
    HC-05 Bluetooth Modülü
    HC-SR04 Ultrasonik Mesafe Sensörü

    Projemde hem bluetooth ile rc arabamı kontrol etmek istiyorum hem de park sensörü olarak ultrasonik mesafe sensörünü kullanmak istiyorum. Fakat ikisi aynı anda çalışmıyor. Mesafe ölçme kodunu loop'tan hemen sonra yazarsam ultrasonik sensör mesafeyi ölçüyor ama bu sefer Bluetooth'tan sinyal gelmiyor. Mesafe ölçme kodunu Bluetooth'tan gelen bir değer ile çalıştırmak isteyince de bu sefer Bluetooth'tan gelen sinyal kopuyor veya gelen sinyaller de 1 dakika civarında bir gecikme oluyor. Bu arada mesafe park sensörü kodunu şuanda kullanmıyorum sadece mesafe ölçüyorum aynı anda ikisini çalıştırabilmek için deniyorum. Kodum aşağıdaki gibidir. İnceleyip yardımcı olursanız sevinirim.

    Tahminim muhtemelen Bluetooh ile Ultrasonik sensör aynı seri haberleşmeyi kullanmaması gerekli.Bunun için softSerial kütüphanesini kullanarak 2 farklı seri haberleşme başlatsam da yine çalışmadı.

    KOD:


    //L298N Bağlantısı
    const int motorA1 = 5; // L298N'in IN3 Girişi
    const int motorA2 = 6; // L298N'in IN1 Girişi
    const int motorB1 = 10; // L298N'in IN2 Girişi
    const int motorB2 = 9; // L298N'in IN4 Girişi
    int state; //Bluetooth cihazından gelecek sinyalin değişkeni
    int vSpeed = 255; // Standart Hız, 0-255 arası bir değer alabilir

    int trigPin = 3;
    int echoPin = 4;
    long sure;
    long uzaklik;

    void setup()
    {
    pinMode(motorA1, OUTPUT);
    pinMode(motorA2, OUTPUT);
    pinMode(motorB1, OUTPUT);
    pinMode(motorB2, OUTPUT);
    pinMode(trigPin, OUTPUT); /* trig pini çıkış olarak ayarlandı */
    pinMode(echoPin, INPUT); /* echo pini giriş olarak ayarlandı */
    Serial.begin(9600);
    }

    void loop() {

    sensor();

    //Gelen veriyi 'state' değişkenine kaydet
    if (Serial.available() > 0)
    {
    state = Serial.read();
    }

    // Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)
    if (state == '0') {
    vSpeed = 0;
    }
    else if (state == '1') {
    vSpeed = 100;
    }
    else if (state == '2') {
    vSpeed = 180;
    }
    else if (state == '3') {
    vSpeed = 200;
    }
    else if (state == '4') {
    vSpeed = 255;
    }
    /***********************İleri****************************/
    //Gelen veri 'F' ise araba ileri gider.
    if (state == 'B')
    {
    ileri();
    Serial.println("İleri");
    }
    /**********************İleri Sol************************/
    //Gelen veri 'G' ise araba ileri sol(çapraz) gider.
    else if (state == 'G')
    {
    ilerisolcapraz();
    }
    /**********************İleri Sağ************************/
    //Gelen veri 'I' ise araba ileri sağ(çapraz) gider.
    else if (state == 'I')
    {
    ilerisagcapraz();
    }
    /***********************Geri****************************/
    //Gelen veri 'B' ise araba geri gider.
    else if (state == 'F')
    {
    geri();
    Serial.println("Geri");
    }
    /**********************Geri Sol************************/
    //Gelen veri 'H' ise araba geri sol(çapraz) gider
    else if (state == 'H')
    {
    gerisol();
    }
    /**********************Geri Sağ************************/
    //Gelen veri 'J' ise araba geri sağ(çapraz) gider
    else if (state == 'J')
    {
    gerisag();
    }
    /***************************Sol*****************************/
    //Gelen veri 'L' ise araba sola gider.
    else if (state == 'L')
    {

    Serial.println(" SOL");
    sol();
    }
    /***************************Sağ*****************************/
    //Gelen veri 'R' ise araba sağa gider
    else if (state == 'R')
    {
    sag();
    Serial.println(" SAG");
    }
    /************************Stop*****************************/
    //Gelen veri 'S' ise arabayı durdur.
    else if (state == 'S')
    {
    dur();
    }
    }

    void sensor()
    {
    digitalWrite(trigPin, LOW); /* sensör pasif hale getirildi */
    delayMicroseconds(5);
    digitalWrite(trigPin, HIGH); /* Sensore ses dalgasının üretmesi için emir verildi */
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW); /* Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi */
    sure = pulseIn(echoPin, HIGH); /* ses dalgasının geri dönmesi için geçen sure ölçülüyor */
    uzaklik = sure / 29.1 / 2; /* ölçülen sure uzaklığa çevriliyor */
    Serial.print("Uzaklik ");
    Serial.print(uzaklik); /* hesaplanan uzaklık bilgisayara aktarılıyor */
    Serial.println(" CM olarak olculmustur.");
    delay(500);
    }

    //MOTORKOMUTLARI
    void ileri()
    {
    analogWrite(motorA1, vSpeed);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, vSpeed);
    analogWrite(motorB2, 0);
    }
    void ilerisolcapraz()
    {
    analogWrite(motorA1, vSpeed );
    analogWrite(motorA2, 0);
    analogWrite(motorB1, 100);
    analogWrite(motorB2, 0);
    }
    void ilerisagcapraz()
    {
    analogWrite(motorA1, 100);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, vSpeed);
    analogWrite(motorB2, 0);
    }
    void geri()
    {
    analogWrite(motorA1, 0);
    analogWrite(motorA2, vSpeed);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, vSpeed);
    }
    void gerisol()
    {
    analogWrite(motorA1, 0);
    analogWrite(motorA2, 100);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, vSpeed);
    }
    void gerisag()
    {
    analogWrite(motorA1, 0);
    analogWrite(motorA2, vSpeed);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, 100);
    }
    void sol()
    {
    analogWrite(motorA1, vSpeed);
    analogWrite(motorA2, 150);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, 0);
    }
    void sag()
    {
    analogWrite(motorA1, 0);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, vSpeed);
    analogWrite(motorB2, 150);
    }
    void dur()
    {
    analogWrite(motorA1, 0);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, 0);
    }







  • Aynı uart pini 2 iş için kullanılamaz. Ancak RX pinini hc-05 için, TX pinini de pc haberleşmesi için kullanabilirsiniz. Tabi bu durumda haberleşme tek yönlü olur, yani bluetooth tan sadece okuma, serial monitore de sadece yazma yapabilirsiniz.

    sensor() fonksiyonundaki delay() ise tamamen zarar.
  • HC-05'in özel bir pine bağlanmasına gerek yok. Artı, eksi ve bir data kablosu olması lazım. Datayı duruma göre analog veya dijital pinlerden birine takacaksınız zaten.
    Bluetooth modülü ise rx,tx portlarına TERS OLARAK takılacak. tx-rx'e takılırken rx-tx'e takılacak.
    Karta kod yükelemek istediğinizde bluetooth modülünü sökeceksiniz.

    Bunun haricinde bilmeniz gereken bir şey yok. Bol bol araştırın ve okuyun. softSerial kütüphanesine sizin projede ihtiyaç yok. Çalışmıyorsa kod yazarken fark etmediğiniz bir yerde hatanız vardır emin olun. Kodu baştan sonra anlamaya çalışın. Kopyala yapıştır yaparak olmaz
  • elektro_gadget_ E kullanıcısına yanıt
    Cevap için teşekkürler. Serial monitor'u projemde kullanmıyorum aslında sadece sinyalin gelip gelmediğini sinyal gonderdiğimde gecikme oluyor mu onu kontrol ediyorum.RX ve TX pinlerini doğru kullandığımdan eminim."Aynı uart pini 2 iş için kullanılamaz." dediniz pek anlayamadım açıklayabilirseniz memnun olurum.
    Ultrasonik sensörde seri haberleşme kullanılmıyorsa sanırım kod kısmında bir sorun var ama nasıl çözümleyeceğim bilmiyorum :/



    < Bu mesaj bu kişi tarafından değiştirildi baris5259 -- 7 Mayıs 2019; 2:30:8 >
  • zwanzig kullanıcısına yanıt
    Cevap için teşekkürler. Bluetooth'un RX-TX pinlerini ters olarak doğru takıyorum. Data kablosu derken o kısmı anlayamadım açıklayabilir misiniz ?
    Kod kısmını kopyala-yapıştır kullandım ama çoğu yeri kendim düzenledim.
  • baris5259 B kullanıcısına yanıt
    Data yokmuş pardon yanlış hatırlamışım.
  • HC-05 haberleşme için uart modülünü, yani seri bağlantı kullanır. Fakat arduinoya program yüklemek ve pc ile haberleştirmek için de aynı modül kullanılıyor. Dolayısıyla bunlar aynı anda kullanılamaz.

    Zaten şu modülleri sadece uart arayüzü ile çalışacak şekilde yapanları bi temiz dövmek lazım. O modüller ayrı bir mikrodenetleyici ile çalışıyor, isteseler her çeşit arayüz çıkartabilirler oradan. Mis gibi i2c dururken...
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.