Оптический энкодер QRE1113GR

Оптический энкодер представляет собой инфракрасный датчик, который способен определять положение вала двигателя. Сенсор широко используется в робототехнике и элекронике для определения и управления скоростью вращения мотора в шасси, принтерах, станках с ЧПУ и т.д. 

Принцип работы

Датчик состоит из отпопары: инфракрасных светодиода и фотодиода, а напротив оптопары на валу двигателя размещается диск с черными и белыми секторами. Инфракрасный свтетодиод излучает луч света, далее он отражается от диска в фото-приемник, который измеряет интенсивность отраженного луча. Как известно, черный цвет поглощает, таким образом от черной поверхности интенсивность будет меньше, чем от светлой, зная этот факт энкодер делает вывод о том, что цвет изменился, соответственно, вал двигателя повернулся и сектор прокруитлся вместе с ним.

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

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

Технические характеристики модуля

Напряжение питания: 5 В
Габариты: 28 × 24 мм

Подключение

Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:

VCC - питание
D0 - подключается к цифровому контакту контроллера
A0 - не задействован (NC)
GND - земля (общий)

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050.

Программа

Далее в микроконтроллер необходимо загрузить следующую программу.

#define DIG 11
#define ANALOG A3
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(100);
}

Теперь если открыть монитор порта можно заметить, что когда датчик находится напротив черного сектора, на аналоговый порт приходят значения около 738 и чем темнее поверхность - тем ближе к 1023, а на цифровой порт приходит 0. Обратная ситуация в случае, когда датчик находится напротив белого сектора: аналоговые значения стремятся к нулю (значения около 230), а цифровой порт выдает 1. Чем чаще меняются нули и единицы на цифровом выходе - тем быстрее вращается вал мотора.