Настройка датчика линии новичком

Тема в разделе "Посоветуйте детальки", создана пользователем Эдуард Нер, 27 янв 2018.

  1. Доброго всем дня! Подскажите, пожалуйста, где глянуть, или что сделать, с перепрограммированием датчиков линии.
    Краткое описание проблемы: собрали робота из набора Амперка для езды по черной линии. А он, по какой-то причине, едет по черной поверхности, белый цвет его наоборот останавливает, т.е. едет по белой линии. Скетч проверял на диске, на сайте, в фирменной Книге идущей в комплекте с набором. Все совпадает Результат тот же. Попытки перепрограммирования ничего не дали.
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Вы сами поняли что сказали?
    Почему ан едет, а почему нет?
    Код в студию!
     
    БАРМАТОГРАФ нравится это.
  3. ostrov

    ostrov Гуру

    Поменяйте 0 на 1 приходящий от датчика(датчиков) или наоборот.
     
  4. :) Спасибо за подсказку. Но
    поменять 0 на 1 - это первое, что я сделал.
    Хотите скетчь- пожалуйста:


    int leftLinePin = 10;
    int rightLinePin = 11;

    int leftDirPin = 4;
    int leftSpeedPin = 5;

    int rightDirPin = 7;
    int rightSpeedPin = 6;

    int runSpeed = 50;

    void setupMotorShield()
    {
    pinMode(leftDirPin, OUTPUT);
    pinMode(leftSpeedPin, OUTPUT);
    pinMode(rightDirPin, OUTPUT);
    pinMode(rightSpeedPin, OUTPUT);
    }

    void go()
    {
    analogWrite(leftSpeedPin, runSpeed);
    analogWrite(rightSpeedPin, runSpeed);
    }

    void stop()
    {
    analogWrite(leftSpeedPin, 0);
    analogWrite(rightSpeedPin, 0);
    }

    void goForward()
    {
    digitalWrite(leftDirPin, HIGH);
    digitalWrite(rightDirPin, HIGH);
    go();
    }

    void turnLeft()
    {
    digitalWrite(leftDirPin, LOW);
    digitalWrite(rightDirPin, HIGH);
    go();
    }

    void turnRight()
    {
    digitalWrite(leftDirPin, HIGH);
    digitalWrite(rightDirPin, LOW);
    go();
    }

    void setup()
    {
    setupMotorShield();
    }

    void loop()
    {
    // Считываем данные с сенсоров
    boolean whiteLeft = digitalRead(leftLinePin);
    boolean whiteRight = digitalRead(rightLinePin);

    if (whiteLeft && whiteRight) {
    // Под обоими датчиками белый цвет. Видимо
    // линия прямо под нами. Полный вперёд!
    goForward();
    } else if (!whiteLeft && !whiteRight) {
    // Что-то не то: под обоими датчиками чёрный
    // цвет. Видимо мы выехали за пределы трассы.
    // Лучше остановиться
    stop();
    } else if (whiteRight) {
    // Под левым датчиком — чёрный, под правым —
    // белый. Чтобы выровняться, нужно начать
    // поворот налево
    turnLeft();
    } else {
    // Последний оставшийся вариант. Под левым
    // датчиком — белый, под правым — чёрный.
    // Чтобы выровняться, нужно начать поворот
    // направо
    turnRight();
    }
    }
     
  5. NikitOS

    NikitOS Король шутов Администратор

  6. Код (C++):
    int leftLinePin = 10;
    int rightLinePin = 11;

    int leftDirPin = 4;
    int leftSpeedPin = 5;

    int rightDirPin = 7;
    int rightSpeedPin = 6;

    int runSpeed = 50;

    void setupMotorShield()
    {
    pinMode(leftDirPin, OUTPUT);
    pinMode(leftSpeedPin, OUTPUT);
    pinMode(rightDirPin, OUTPUT);
    pinMode(rightSpeedPin, OUTPUT);
    }

    void go()
    {
    analogWrite(leftSpeedPin, runSpeed);
    analogWrite(rightSpeedPin, runSpeed);
    }

    void stop()
    {
    analogWrite(leftSpeedPin, 0);
    analogWrite(rightSpeedPin, 0);
    }

    void goForward()
    {
    digitalWrite(leftDirPin, HIGH);
    digitalWrite(rightDirPin, HIGH);
    go();
    }

    void turnLeft()
    {
    digitalWrite(leftDirPin, LOW);
    digitalWrite(rightDirPin, HIGH);
    go();
    }

    void turnRight()
    {
    digitalWrite(leftDirPin, HIGH);
    digitalWrite(rightDirPin, LOW);
    go();
    }

    void setup()
    {
    setupMotorShield();
    }

    void loop()
    {
    // Считываем данные с сенсоров
    boolean whiteLeft = digitalRead(leftLinePin);
    boolean whiteRight = digitalRead(rightLinePin);

    if (whiteLeft && whiteRight) {
    // Под обоими датчиками белый цвет. Видимо
    // линия прямо под нами. Полный вперёд!
    goForward();
    } else if (!whiteLeft && !whiteRight) {
    // Что-то не то: под обоими датчиками чёрный
    // цвет. Видимо мы выехали за пределы трассы.
    // Лучше остановиться
    stop();
    } else if (whiteRight) {
    // Под левым датчиком — чёрный, под правым —
    // белый. Чтобы выровняться, нужно начать
    // поворот налево
    turnLeft();
    } else {
    // Последний оставшийся вариант. Под левым
    // датчиком — белый, под правым — чёрный.
    // Чтобы выровняться, нужно начать поворот
    // направо
    turnRight();
    }
    }
     
  7. ostrov

    ostrov Гуру

    Для начала попробуйте так:
    Код (C++):
    boolean whiteLeft = !digitalRead(leftLinePin);
    boolean whiteRight = !digitalRead(rightLinePin);
     
  8. Спасибо! Попробую