Управление светодиодом с помощью датчика линии

В данной статье мы разберем работу датчика линии.

Что требуется:
1. Контроллер DaVinci или любой другой аналог
2. Шилд А050
3. Quatro-модуль светодиод
4. Quatro-модуль датчик линии TRCT5000
5. Соединительные провода

Наш датчик оснащен как аналоговым, так цифровым портом, и, сейчас мы соберем схему и через монитор порта посмотрим как работает датчик.

#define DIG 7
#define ANALOG A1
int dig = 0;

void setup() {
  pinMode(DIG, INPUT);
  pinMode(ANALOG, INPUT);
  Serial.begin(9600);
}

void loop() {
  dig = digitalRead(DIG);
  Serial.print("A:");
  Serial.print(analogRead(ANALOG));
  Serial.print(",  D:");
  Serial.println(dig);
  delay(500);
}

Мы видим, что если датчик поднести к черной границе, то аналоговые значения будут стремиться к цифре 1023, при этом цифровое значение будет равно нулю. А Если датчик поднести к белой границе, то аналоговое значение будет стремиться к нулю, при этом цифровое будет равно единице.
Как вы видите, аналоговый канал работает в большом диопазоне и его можно настроить на то, чтобы датчик различал оттенки серого. Несмотря на то, что цифровой канал выдает только "0" и "1", его тоже можно настроить на распознавание оттенка. Для этого на плате установлен переменный резистор, для настройки чуствительности датчика.
Теперь мы рассмотрим как управлять светодиодом по аналоговому и цифровому каналам.

1. Подключение по аналоговому каналу.
Загрузим скетч:

#define ANALOG A1
#define LED 3

void setup() {
  pinMode(ANALOG, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  int value = analogRead(ANALOG);
  if (value < 500) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

Видим, что на белой границе светодиод загарается, а на черной затухает.

2. Подключение цифрового датчика.
Цифровой датчик линии на выходе дает 1 или 0. Если 1 - белый цвет, если 0 - черный или пустота.
Загрузим скетч:

#define DIG 7
#define LED 3

void setup() {
  pinMode(DIG, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  int value = digitalRead(DIG);
  if (value == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

В и тоге получем тот же эффект, на белой границе светодиод загарается, а на черной - затухает.