Первая конфигурация первого робота

Тема в разделе "Arduino & Shields", создана пользователем tverdiy, 25 янв 2013.

  1. tverdiy

    tverdiy Нуб

    Спасибо)
     
  2. tverdiy

    tverdiy Нуб

    а вы не подскажете, через какие пины идет какой сигнал на этом мотр шилде?
     
  3. nailxx

    nailxx Официальный Нерд Администратор

    Заходили на страницу этого шилда у Леди Ады? Есть готовая библиотека, которая позволит при желании не думать о подобных низкоуровневых вещах.
     
  4. tverdiy

    tverdiy Нуб

    Скачал, понял команды)) но у меня проблема в том, что к ардуине не только он должен быть под соединен, а он занимает все разъемы(((
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    А что ещё нужно подключить? Занимает он не всё на самом деле. Пины просто пробрасываются.
     
  6. tverdiy

    tverdiy Нуб

    Мне нужно радиоаппаратуру 3 пина, 4 пина на 2 ультразвуковых дальномеров.
    На мотор шилде 2 сервы, два двигателя) как сервы подключается понял, там все просто, а вот с движками непонятно(
    Я не пойму, где в проге можно пропивать пины и куда втыкать((
    Я имел ввиду все, если его на плату ставить, а не проводами подключать
    на самом деле можно изменить эти выходы в файле библиотеки же, да?


    // Arduino pin names for interface to 74HCT595 latch
    #define MOTORLATCH 12
    #define MOTORCLK 4
    #define MOTORENABLE 7
    #define MOTORDATA 8


    тут в библиотеке нужно что-то менять, да?
     
  7. tverdiy

    tverdiy Нуб

    в общем мне достаточно определиться, какие пины на ардуине к каким пинам на мотор шилде нужно подключить, чтобы я могу управлять вторым и третьим и четвертым двигателем)

    как это сделать я не представляю, надеюсь на вашу помощь))

    заранее спасибо)
     
  8. tverdiy

    tverdiy Нуб

    All 6 analog input pins are available. They can also be used as digital pins (pins #14 thru 19)
    Это правда? Как их использовать будто они pwm?
     
  9. tverdiy

    tverdiy Нуб

    есть такая проблема: если все подключать напрямую (передатчик - воздух - приемник - ардуино - мотор шилд - движки) то все работает отлично, а если вставлять проверку расстояния, то все очень тормозит и машина неадекватно реагирует на сигналы точнее идет с огромнейшей задержкой, в чем проблема?

    Код (Text):
    #include <AFMotor.h>
    const int FrBc = 18;
    const int RgLf = 19;
    const int Trig = 16;
    const int Echo = 15;
     
    int SpeedDC , Turn , Angle ;
    AF_DCMotor motor(4);
    AF_DCMotor motoRL(3);
     
    void setup() {
      Serial.begin(9600);         // set up Serial library at 9600 bps
      pinMode(FrBc, INPUT);
      pinMode(RgLf, INPUT);
      pinMode(Trig, OUTPUT);
      pinMode(Echo, INPUT);
      motor.setSpeed(200);
      motoRL.setSpeed(200);
    }
    unsigned int DIS()
    {
      unsigned int time_us = 0;
      digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера
      delayMicroseconds(10); // Удерживаем 10 микросекунд
      digitalWrite(Trig, LOW); // Затем убираем
      time_us = pulseIn(Echo, HIGH); // Замеряем длину импульса
      return time_us / 58;
    }
    void FBway()
    {
      SpeedDC = (pulseIn(FrBc, HIGH) - 1000) / 3;
      if (SpeedDC >= 255)
      {
          motor.run(FORWARD);
          SpeedDC = 255;
      }
      else if (SpeedDC < 255 && SpeedDC > 175 )
      {
          motor.run(FORWARD);
      }
      if (SpeedDC < 175 && SpeedDC > 140)
      {
        motor.run(RELEASE);
        SpeedDC = 0;
      }
      else if (SpeedDC < 140 && SpeedDC > 50)
      {
        motor.run(BACKWARD);
        SpeedDC = 305 - SpeedDC;
      }
      else if (SpeedDC < 50)
      {
        motor.run(BACKWARD);
        SpeedDC = 255;
      }
    // Serial.println(SpeedDC);
      motor.setSpeed(SpeedDC);
    }
     
    void RLturn()
    {
      Turn = (pulseIn(RgLf, HIGH) - 1000) / 3;
      if (Turn > 145 && Turn < 165)
      {
        motoRL.run(RELEASE);
        Angle = 0;
      }
      else if(Turn < 145)
      {
        motoRL.run(FORWARD);
        Angle = 150;
      }
      else if (Turn > 165)
      {
        motoRL.run(BACKWARD);
        Angle = 150;
      }
      motoRL.setSpeed(Angle);
    // Serial.println(Angle);
    }
    int i = 0, Dis = 0;
    void loop()
    {
     
        //FBway();
        RLturn();
        if (i % 100 == 0)
        {
          Dis = DIS();
          if (Dis < 2 || Dis > 10) FBway();
          i = 0;
        }
        else FBway;
        i++;
      // Serial.println(i);
    }
    в коде уже даже сделано проверять расстояние не постоянно, а с периодом, но все равно тормозит...
    что делать?
     
  10. hibiki

    hibiki Гик

    если у вас сенсор тот, который указан в первом посте - попробуйте в другом режиме с ним пообщаться.
    ибо
    или просто расстояние слишком большое до препятствия. или он ловит переотражения, а там 50мс на сантиметр - вот и тормозит.

    по-хорошему, вообще стоит сначала "потестить" датчик с выводом значений куда-нибудь.. мало ли
     
  11. tverdiy

    tverdiy Нуб

    Дальномер вот такой
     

    Вложения:

    • image.jpg
      image.jpg
      Размер файла:
      818,8 КБ
      Просмотров:
      301
  12. hibiki

    hibiki Гик

    черт знает, даташит у него какой-то скудный.
    попробуйте вывести значения с него в консоль
     
  13. tverdiy

    tverdiy Нуб

    а можно как-то сделать, что если он в течении опреденного времени не получил значение, пропускать функцию?
     
  14. hibiki

    hibiki Гик

    мм.. не совсем понял, что вы хотите сделать