Робот ездящий по линии

Тема в разделе "Arduino & Shields", создана пользователем ИВАН 1454, 5 окт 2017.

  1. ИВАН 1454

    ИВАН 1454 Нерд

    Доброго дня.
    Столкнулся с такой проблемой. Делал робота ездящего по линии. Железо подобрал, код написал, но без подключения к шлейфу он не работает.
    Вот код:
    Код (C++):
    #include <AFMotor.h>

    AF_DCMotor motor_b1(2);
    AF_DCMotor motor_b2(3);

    #define LEFT_SENSOR_PIN  9
    #define RIGHT_SENSOR_PIN 10

    void set_speed(int speed) {
      motor_b1.setSpeed(speed);
      motor_b2.setSpeed(speed);
    }

    // библиотека AFMotor позволяет установить моторы в 3 режима:
    // 1. FORWARD - моторы будут крутиться "вперед", если можно так выразиться :)
    // 2. BACKWARD - моторы будут крутиться "назад"
    // 3. RELEASE - остановка, моторы крутиться не будут
    // и после переключения режима, желательно дать время на переход из одного состояния в другое

    // Ниже реализованы 3 функции, которые позволят переключаться между этими режимами.

    // едем вперед
    void robot_forward() {
      motor_b1.run(FORWARD);
      motor_b2.run(FORWARD);
      delay(1000);
    }

    // едем назад
    void robot_backward() {
      motor_b1.run(BACKWARD);
      motor_b2.run(BACKWARD);
      delay(1000);
    }

    void robot_release() {
      motor_b1.run(RELEASE);
      motor_b2.run(RELEASE);
      delay(1000);
    }

    void turning_to_the_right() {
      motor_b1.run(FORWARD);
      motor_b2.run(BACKWARD);
      delay(1);
    }

    // поворот налево
    void turning_to_the_left() {
      motor_b2.run(FORWARD);
      motor_b1.run(BACKWARD);
      delay(1);
    }
    void setup()
    {
      set_speed(255);
      robot_forward();
    }
    void loop()
    {
      boolean left = !digitalRead(LEFT_SENSOR_PIN);
      boolean right = !digitalRead(RIGHT_SENSOR_PIN);

      if (left == right)
      {
        robot_forward();
      } else if (left) {
        turning_to_the_left();
      } else if (right) {
        turning_to_the_right();
      }
      else
      {
        robot_release();
      }
    }
    Можете подсказать что делать?
     
  2. ostrov

    ostrov Гуру

    Какой шлейф?

    Вот это что должно опознавать?
    Код (C++):
     if (left == right)
    Обе черные быть не могут?
     
  3. ИВАН 1454

    ИВАН 1454 Нерд

    Попробовал убрать, эту часть кода. Стало ещё хуже.
    А про шлейф, который подключается от компьютера к Arduino.
     
  4. ORLENOK

    ORLENOK Гик

    Что именно не работает? Питание у вас как сделано? Через этот кабель стандартно ардуино питается.
     
  5. ARDUIN-щик

    ARDUIN-щик Гик

    Извините за тупой вопрос, но мотор шилд у Вас какой? И есть ли он вообще? (это я в том плане, что китайцы могут "пустышку" продать)
     
  6. ostrov

    ostrov Гуру

    Не надо убирать части кода если не знаете для чего они. И что значит не работает без шлейфа? Как питание осуществляется?
     
  7. ИВАН 1454

    ИВАН 1454 Нерд

    Питание осуществляется через блок питания на 4 батарейки. Управление моторами осуществляется через Motor Control Shield L293D. Мотора всего 2. Также стоят датчики линии от Амперки.
     
  8. Zander

    Zander Нерд

    Что именно "не работает", Как именно "стало еще хуже"
    И сколько еще загадок предложит нам автор темы...

    Зы.
    Будет срабатывать если оба сенсора дают одинаковые показания. Т.е если робота поставить просто на однотонный пол, не важно черный/белый/еще какой, он поедет прямо.
    Т.е. вообще никак толком не выясняется, а есть ли под роботом линия по которой следует ехать.
     
  9. fogary

    fogary Гик

    На какое напряжение ваши батарейки и на какой вход Вы их подключаете?
    Если батарейки на 1,5 В, то добавьте еще 2 и подключите на вход Vin.
     
  10. DIYMan

    DIYMan Guest

    Добавлю - и соедините последовательно. А то вдруг, что называется ;) - и вместо напряжения будем ток увеличивать.