Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Датчик линии выполнен в виде модуля KY-033. Представляет собой датчик отражения инфракрасного излучения близко расположенным препятствием. Благодаря работе фотоэлемента в инфракрасном диапазоне излучения восприятие оттенков становится более контрастным, чем в видимом диапазоне света. Это облегчает применение для различения белых и чёрных участков поверхности. Используется в робототехнике – движение вдоль линии на полу.
Если нанести полоски на вращающийся диск, то датчик можно использовать для измерения скорости оборотов вала двигателя, колеса и других вращающихся деталей.
В состав модуля входит компонент TCRT5000L: инфракрасный светодиод и фототранзистор. Его сигнал поступает на вход микросхемы LM393YD. Переменным резистором выполняется настройка. Требуемая чувствительность зависит от расстояния до поверхности, оттенка светлых и тёмных участков. При работе в составе тахометра настройка проводится под ширину линий на вращающейся поверхности.
Контакты модуля: GND - земля, VCC - питание, OUT - сигнал.
KY-033 | Arduino
----------------
GND | GND
VCC | 5V
OUT | D
Выходной сигнал имеет низкий уровень при отражении ИК-излучения и высокий, если отражения нет. При контроле чёрного и белого цветов поверхности происходит отражение белым участком и поглощение чёрным – отражения нет. Настройка схемы для наибольшей разности уровней приводит к смещению напряжения выхода для каждого случая. Поэтому сигнал датчика подают на вход АЦП, а программу настраивают на наиболее надёжное различение высокого и низкого уровней сигнала.
При приёме отражённого излучения на плате модуля включается светодиод.
Скетч, который будет включать светодиод при обнаружении линии. Для опытов достаточно подносить и убирать руку.
int led = 13;
int huntPin = 4; // пин для датчика
int value; // переменная для значения с датчика
void setup ()
{
pinMode (led, OUTPUT);
pinMode (huntPin, INPUT);
}
void loop ()
{
value = digitalRead (huntPin); // чтение значения с датчика
if (value == LOW) // когда датчик определил препятствие, то светодиод включается
{
digitalWrite (led, HIGH);
}
else
{
digitalWrite (led, LOW);
}
}