цифровая электроника
вычислительная техника
встраиваемые системы

 



Arduino и датчик линии QTR-1RC

Автор: Mike(admin) от 1-04-2020, 06:35

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


Arduino и датчик линии QTR-1RC

Сегодня мы рассмотрим датчик обнаружения линии QTR-1RC компании Pololu. Он принадлежит к семейству датчиков QTR, за этой аббревиатурой в данном случае следует 1RC, где 1 означает считыватель (вместо 3 или 8), а RC обозначает цифровой выход вместо аналогового выхода серии A.


Для данного датчика есть специальная библиотека (https://www.pololu.com/docs/0J19), которую также можно подключить через менеджер библиотек.


Arduino и датчик линии QTR-1RC

Для проверки работы датчика подготовьте лист бумаги с оранжевой полосой и черной полосой.


Arduino и датчик линии QTR-1RC

Скетч Arduino, поставляемый с библиотекой и приведенный в конце материала, определяет время калибровки, за которое загорается встроенный светодиод Arduino (A13). Нужно перемещать датчик по линиям, и датчик будет «учиться» в течение этого времени и отображать определенные значения в последовательном мониторе в качестве контрольного значения.


При абсолютно точном обнаружении лог выдает 1000, при уверенности в отсутствии линии лог выдает 0. Также есть промежуточные значения. Скетч универсален – можно также подключить до 8 датчиков линии.


Arduino и датчик линии QTR-1RC


#include <QTRSensors.h>

QTRSensors qtr;

const uint8_t SensorCount = 8;
uint16_t sensorValues[SensorCount];

void setup()
{

  qtr.setTypeRC();
  qtr.setSensorPins((const uint8_t[]){3, 4, 5, 6, 7, 8, 9, 10}, SensorCount);
  qtr.setEmitterPin(2);

  delay(500);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);

  for (uint16_t i = 0; i < 400; i++)
  {
    qtr.calibrate();
  }
  digitalWrite(LED_BUILTIN, LOW);

  Serial.begin(9600);
  for (uint8_t i = 0; i < SensorCount; i++)
  {
    Serial.print(qtr.calibrationOn.minimum[i]);
    Serial.print(' ');
  }
  Serial.println();

  for (uint8_t i = 0; i < SensorCount; i++)
  {
    Serial.print(qtr.calibrationOn.maximum[i]);
    Serial.print(' ');
  }
  Serial.println();
  Serial.println();
  delay(1000);
}

void loop()
{

  uint16_t position = qtr.readLineBlack(sensorValues);

  for (uint8_t i = 0; i < SensorCount; i++)
  {
    Serial.print(sensorValues[i]);
    Serial.print('\t');
  }
  Serial.println(position);

  delay(250);
}



© digitrode.ru


Теги: Arduino, датчик линии




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий