Под датчиком линии подразумевается датчик, способный определить яркость поверхности, над которой расположен этот датчик. Данный датчик основан на фоторезисторе. Фоторезистор – устройство с двумя выводами, сопротивление между которыми меняется в зависимости попадаемого света на ее поверхность.
Рисунок 24. Фоторезистор
Чтобы показания датчика линии как можно меньше зависели от внешнего освещения, необходимо создать для него собственное освещение с помощью светодиода. Наиболее подходящий цвет светодиода – красный. Для еще большего исключения влияния внешнего света на результат измерений следует разработать следующий алгоритм:
- Измерить сопротивление фоторезистора с выключенным светодиодом;
- Включить светодиод;
- Измерить сопротивление фоторезистора с включенным светодиодом;
- В качестве результата передать разность измерений.
Для измерения сопротивления фоторезистора средствами 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);//Задержка программы }
На плате фоторезистор должен оставаться в тени светодиода так, чтобы на фоторезистор свет от светодиода попадал только отразившись от измеряемой поверхности.