Şimdi Ara

Mesafe sensörü ile ani durdurma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
3
Cevap
0
Favori
451
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • İnternette bulabileceğiniz Otto robotuna geliştirme yapmak istiyorum.
    Üzerinde bir tane scr-04 mevcut. İkincisini 6 ve 7 pinlere bağladım. Mesafe okuyabiliyorum. loopta eğer mesafe 25 cm üzerinde ise yeni hareketlere başlamıyor. Fakat harekete başladığında masa kenarına gelirse durmasını istiyorum. Ne yazık ki hareket başlayınca döngüler bitene kadar mesafe sensörü okuma bile yapmıyor. Bu hareketler içinde nasıl sensörü aktif tutup değer 25 den büyük çıkarsa durdurabilirim?

    quote:

    //-----------------------------------------------------------------
    #include <Servo.h>
    #include <Oscillator.h>
    #include <US.h>
    #include <Otto.h>
    Otto Otto; //This is Otto!
    //---------------------------------------------------------
    //-- İlk aşama motorların doğru pinlere takıldığından emin olun.
    /*
    ---------------
    | O O |
    |---------------|
    YR 3==> | | <== YL 2
    ---------------
    || ||
    RR 5==> ----- ------ <== RL 4
    |----- ------|


    */
    //Servo motorların shield konumları
    #define PIN_YL 2 //servo[2]
    #define PIN_YR 3 //servo[3]
    #define PIN_RL 4 //servo[4]
    #define PIN_RR 5 //servo[5]
    ///////////////////////////////////////////////////////////////////
    //-- Genel Değişkenler -------------------------------------------//
    ///////////////////////////////////////////////////////////////////
    //-- Hareket Parametleri
    int T = 1000; //Hareket Başlangıç Süresi
    int moveId = 0; //Hareket Numarası
    int moveSize = 15; //Bazı hereketlerin yüksekliği ile ilgili
    int randNumber;
    //--Kenar Sensörü

    int trigPin = 6; /* Sensorun trig pini Arduinonun 6 numaralı ayağına bağlandı */
    int echoPin = 7; /* Sensorun echo pini Arduinonun 7 numaralı ayağına bağlandı */

    long sure;
    long uzaklik;
    //---------------------------------------------------------
    bool obstacleDetected = false;
    bool kenar = false;
    ///////////////////////////////////////////////////////////////////
    //-- Yükleme ------------------------------------------------------//
    ///////////////////////////////////////////////////////////////////
    void setup() {
    pinMode(trigPin, OUTPUT); /* trig pini çıkış olarak ayarlandı */
    pinMode(echoPin, INPUT); /* echo pini giriş olarak ayarlandı */
    Serial.begin(9600); /* Seri haberlesme baslatildi */

    //Set the servo pins
    Otto.init(PIN_YL, PIN_YR, PIN_RL, PIN_RR, true);
    Otto.sing(S_connection); //Otto uyandı!
    Otto.home();
    delay(2000);
    Otto.sing(S_happy); // mutlu otto :)
    }
    ///////////////////////////////////////////////////////////////////
    //-- Ana Döngü ---------------------------------------------//
    ///////////////////////////////////////////////////////////////////

    void loop() {

    if (kenar) {
    hareket();
    dur();
    }
    else {
    dur();

    }
    }

    void dur()
    {
    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 */
    if (uzaklik > 200)
    uzaklik = 200;
    Serial.print("Uzaklik ");
    Serial.print(uzaklik); /* hesaplanan uzaklık bilgisayara aktarılıyor */
    Serial.println(" CM olarak olculmustur.");
    if (uzaklik < 25) {
    kenar = true;
    }
    else {
    kenar = false;
    }

    }


    void hareket() {
    randNumber = random(1, 6); // 1 - 5 hareketten birini seçer

    if (obstacleDetected) { // Mesafe Sensörü okundu

    callAnim(randNumber); // seçilen hareketi çağırır
    }

    else { // Mesafe sensörü pasif
    Otto.home();
    //Otto.sing(S_happy);
    delay(2000);
    obstacleDetector();
    }
    }

    void callAnim(int randNumber) { // Bu bölüme bir şekilde hareketler olurken ani durdurma yapmam lazım??

    // Çağırılan hareketteki animastonlar
    if (randNumber == 1) {
    anim1();
    }
    if (randNumber == 2) {
    anim2();
    }
    if (randNumber == 3) {
    anim3();
    anim4();
    }
    if (randNumber == 4) {
    anim4();
    }
    if (randNumber == 5) {
    anim5();
    anim1();

    }
    }
    //Hareketler
    void anim1() {
    Otto.shakeLeg(2, 2000, -1);
    Otto.shakeLeg(2, 2000, 1);
    Otto.crusaito(10, 900, 20, -1); // ileri yürüme
    Otto.sing(S_sad); // ses
    Otto.home();
    obstacleDetector();
    }

    void anim2() {
    Otto.turn(6, 2000, -1); // sağa dönme
    Otto.jitter(5, 500, 20); // yerde kayma
    Otto.flapping(10, 1000, 20, -1); // geri gitme
    Otto.home();
    obstacleDetector();
    }
    void anim3() {
    Otto.walk(4, 800, -1); // yürüme
    Otto.tiptoeSwing(3, 900, 20); // yerde kayma
    Otto.home();
    obstacleDetector();
    }
    void anim4() {
    Otto.jump(4, 2000); // zıplama
    Otto.jitter(5, 500, 20); // yerde kayma
    Otto.home();
    obstacleDetector();
    }
    void anim5() {
    Otto.bend(5, 1400, -1); // ayak kaldırma
    Otto.home();
    obstacleDetector();
    }

    ///////////////////////////////////////////////////////////////////
    //Mesafe sensörünü okumak ve obstacleDetected değişkenini gerçekleştirmek için Fonksiyon
    void obstacleDetector() {
    int distance = Otto.getDistance();
    if (distance < 25) {
    obstacleDetected = true;
    }
    else {
    obstacleDetected = false;
    }

    }







  • Arduino'ya yeni başladım. Buda benim yaptığım kodlama.Belli aralıkta led yakıp söner.
    Dallanmaya henüz başladım.Pic gibi ise "belli olay sonrası şuradaki komutları işle" diyebilirim. Birde motor kartı beslemesiyle, sensör beslemesini ayırmakta yarar var.

    const int trig = 3; // BAGLI OLAN PİNLER.
    const int echo = 2;
    int led=4;
    int sure = 0;
    int mesafe = 0;

    void setup() {
    pinMode(trig,OUTPUT); // TRİG PİNİ ÇIKIS
    pinMode(echo,INPUT); // ECHO VERİ ALINACAK.
    pinMode(led,OUTPUT);
    pinMode(led,OUTPUT);
    Serial.begin(9600);

    }

    void loop() {

    digitalWrite(trig,HIGH); // SES DALGALARI GÖNDERİLİYOR.
    delayMicroseconds(1000);
    digitalWrite(trig,LOW); // KESİK KESİK DALGA OLUŞTU.
    sure = pulseIn(echo,HIGH);
    mesafe = (sure/2) /29.1;
    Serial.print("Mesafe: ");
    Serial.print(mesafe);
    Serial.println(" cm");
    delay(250);

    if(mesafe == 20)
    {
    digitalWrite(led, HIGH);
    delay(100);
    digitalWrite(led,LOW);
    delay(100);

    }

    else( mesafe <19, mesafe >20);
    {
    digitalWrite(led,HIGH);

    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi Rkx -- 7 Mayıs 2017; 9:2:2 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.