Датчик линии

Под датчиком линии подразумевается датчик, способный определить яркость поверхности, над которой расположен этот датчик. Данный датчик основан на фоторезисторе. Фоторезистор – устройство с двумя выводами, сопротивление между которыми меняется в зависимости попадаемого света на ее поверхность.

Рисунок 24. Фоторезистор

Чтобы показания датчика линии как можно меньше зависели от внешнего освещения, необходимо создать для него собственное освещение с помощью светодиода. Наиболее подходящий цвет светодиода – красный. Для еще большего исключения влияния внешнего света на результат измерений следует разработать следующий алгоритм:

  1. Измерить сопротивление фоторезистора с выключенным светодиодом;
  2. Включить светодиод;
  3. Измерить сопротивление фоторезистора с включенным светодиодом;
  4. В качестве результата передать разность измерений.

Для измерения сопротивления фоторезистора средствами Arduino необходимо подключить его последовательно с заведомо известным сопротивлением. Например, с 10 К. Далее, следует подать 5 Вольт на конец данной схемы со стороны фоторезистора и GND со стороны постоянного резистора:

Рисунок 25. Подключение фоторезистора к Arduino

Подключение светодиода производится к цифровому порту без использования сопротивления. Так как светодиод будет включаться на короткое время, он не успеет перегореть. Короткую ножку следует подключить к GND на Arduino, а более длинную к любому цифровому порту.

Ниже приведена функция для чтения показаний датчика линии. В данном примере, в качестве аналогового порта выбран порт A0, а в качестве цифрового порта для управления светодиодом – 4.

int LineSensor(int AnalogPort, int digitalPort) { //Описание функции считывания датчика линии
  pinMode(digitalPort, OUTPUT);//Настройка порта на управление светодиодом
  digitalWrite(digitalPort, LOW);//Выключение светодиода
  int a = analogRead(AnalogPort);//Считывание показаний фоторезистора при выключенном светодиоде
  digitalWrite(digitalPort, HIGH);//Включение светодиода
  delay(1);//Небольшая задержка
  int b = analogRead(AnalogPort);//Считывание показаний фоторезистора при включенном светодиоде
  digitalWrite(digitalPort, LOW);//Выключение светодиода
  return (b  a); //Возвращение разности показаний при включенном и выключенном светодиоде
}
void setup() {
  Serial.begin(9600);//Настройка последовательного порта
}
void loop() {
  Serial.println(LineSensor(A0, 4), DEC);//Считывание и передача показаний датчика линии в
  //последовательный порт
  delay(500);//Задержка программы
}

На плате фоторезистор должен оставаться в тени светодиода так, чтобы на фоторезистор свет от светодиода попадал только отразившись от измеряемой поверхности.

Скачать плату