Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие 6 Робот, следующий по линии.doc
Скачиваний:
143
Добавлен:
10.03.2016
Размер:
431.1 Кб
Скачать

Практическое занятие 3. Простое движение по линии на двух фоторезисторах

  1. Опробуйте и при необходимости доработайте приведенную программу, замерьте время прохождения роботом траектории и сообщите преподавателю результаты для занятия 2 и 3

int In1 = 6; // когда на контакт подано HIGH, левое колесо крутится вперед

int In3 = 10; // когда на контакт подана HIGH, правое колесо крутится вперед

int photoPin1 = A0; // первый фоторезистор подключен к аналоговому входу A0

int photoPin2 = A1; // второй фоторезистор подключен к аналоговому входу A1

int val1 = 0; // значение с фоторезистора 1

int val2 = 0; // значение с фоторезистора 2

void setup()

{

Serial.begin(9600);

pinMode(ledPin1, OUTPUT);

pinMode(ledPin2, OUTPUT);

}

void loop() {

val1 = analogRead(photoPin1); // считываем значение с фоторезистора 1

val2 = analogRead(photoPin2); // считываем значение с фоторезистора 2

Serial.print("values: "); // выводим значения в COM-порт

Serial.print(val1);

Serial.print("\t");

Serial.println(val2);

if(val1 == val2) // если значения равны – едем вперед

{

digitalWrite(In1, HIGH);

digitalWrite(In3, HIGH);}

Serial.println("forward");

if(val1 > val2) // если освещённость первого больше – едем влево

{

digitalWrite(In1, HIGH);

digitalWrite(In3, LOW);

Serial.println("left");

}

else // если освещённость первого больше – едем вправо

{

digitalWrite(In1, HIGH);

digitalWrite(In3, LOW);

Serial.println("right"); // едем вправо

}

delay(50);

}

Примечание 1: в случае, если значения с фоторезисторов при одном и том же уровне освещения немного разные, необходимо скорректировать их для сравнения, пример: if(val1 == val2+50), если на одном и том же месте первый фоторезистор показывает 650, а второй 600

Примечание 2: в связи с тем, что использование функций на прошлом занятии привело к «перегрузке» и непониманию кода, решено временно их не использовать. Если есть желание и возможность – исправьте движения в коде с использованием функций, но особой необходимости в данном случае в этом нет

Практическое занятие 4

Более сложные программы для езды робота, в т.ч. с использованием ПИД-регулирования – в процессе разработки

Рекомендуется почитать статью «Робот, ездящий по линии под управлением Arduino» на сайте http://amperka.ru, а также скачать ее и принести на занятие

Скачайте статью «Робот, ездящий по линии под управлением Arduino» (если нет интернета, откройте принесенную на занятие). Скопируйте оттуда код «LineRobot_v1.ino»

Так как используемые в роботах драйверы двигателей (управляются аналогично роботам на Zelectro, если у Вас такой, то вносить изменения, относящиеся к двигателям, не надо) и датчики (цифровые, а не аналоговые, опять же если Вы принесли цифровые датчики, вносить изменения, относящиеся к датчикам, не надо) отличаются, внесем следующие изменения:

Исходный код

Что нужно изменить

добавить в код:

int porog = 600; // найденный порог, см. Практическое занятие 2

#define SPEED_LEFT 6

вместо 6 номер пина, при сигнале на котором левый мотор едет вперед

#define SPEED_RIGHT 5

вместо 5 номер пина, при сигнале на котором правый мотор едет вперед

#define LEFT_SENSOR_PIN 8

номер пина левого датчика линии

#define RIGHT_SENSOR_PIN 8

номер пина правого датчика линии

digitalWrite(DIR_LEFT, HIGH);

digitalWrite(DIR_RIGHT, HIGH)

Убрать этот код во всех функциях, с используемым драйвером в нем нет необходимости

boolean left = !digitalRead(LEFT_SENSOR_PIN);

int LEFT_SENSOR_Value = analogRead(LEFT_SENSOR_PIN);

if (LEFT_SENSOR_Value > porog) { boolean left = HIGH ; }

else { boolean left = LOW ; }

boolean right = !digitalRead(RIGHT_SENSOR_PIN);

аналогично

Код получится очень похожий на используемый в Практическом занятии 3 и результат будет похожий, за исключением того, что можно попробовать подобраться поближе к оптимуму, изменяя значения SPEED и BRAKE_K.