SHARP GP2Y0A21YK0F — это простой в использовании ИК-датчик расстояния с диапазоном 10-80 см. Это отличный датчик для автономных роботов или бесконтактных оптических переключателей.
В этом руководстве вы узнаете, как работает датчик и как использовать его с Arduino. Я включил схему подключения и пример кода, чтобы вы могли начать экспериментировать с вашим датчиком.
Если вы ищете более доступный или водонепроницаемый датчик расстояния, обратите внимание на HC-SR04 или JSN-SR04T. В статьях ниже я объясняю, как работают эти датчики расстояния / приближения и как вы можете использовать их с Arduino.
Как работает ИК-датчик расстояния?
ИК-датчик расстояния использует луч инфракрасного света для отражения от объекта для измерения расстояния до него. Расстояние вычисляется с помощью триангуляции луча света. Датчик состоит из ИК-светодиода и детектора света или PSD (устройства определения положения). Когда луч света отражается от объекта, отраженный луч достигает детектора света, и на PSD-файле формируется ‘оптическое пятно’.
При изменении положения объекта также изменяется угол отраженного луча и положение пятна на PSD. Смотрите точки A и B на изображении ниже.
Датчик имеет встроенную схему обработки сигнала. Эта схема обрабатывает положение оптического пятна на PSD для определения положения (расстояния) отражающего объекта. Он выдает аналоговый сигнал, который зависит от положения объекта перед датчиком.
Как считывать ИК-датчик расстояния?
ИК-датчики расстояния выдают аналоговый сигнал, который изменяется в зависимости от расстояния между датчиком и объектом. Из таблицы данных вы можете видеть, что выходное напряжение SHARP GP2Y0A21YK0F колеблется от 2,3 В, когда объект находится на расстоянии 10 см, до 0,4 В, когда объект находится на расстоянии 80 см. На графике также показано, почему полезная дальность обнаружения начинается с 10 см. Обратите внимание, что выходное напряжение объекта, находящегося на расстоянии 2 см, совпадает с выходным напряжением объекта, находящегося на расстоянии 28 см. Таким образом, полезная дальность обнаружения начинается после пика примерно на 10 см или 2,3 В.
На графике также показан недостаток этих датчиков — нелинейный отклик. Другими словами, большое изменение выходного напряжения не всегда соответствует большому изменению дальности действия. Чтобы определить расстояние между датчиком и объектом, вам нужно найти функцию, которая преобразует выходное напряжение в значение диапазона.
Это можно сделать с помощью MS Excel и получить следующую формулу для расстояний > 10 см:
Расстояние (см) = 29,988 X Мощность (Вольт, -1,173)
Эта функция используется в библиотеке SharpIR, которую мы будем использовать позже. Обратите внимание, что эта функция основана только на данных из таблицы данных SHARP. Выходные характеристики датчика будут незначительно отличаться от датчика к датчику, поэтому вы можете получить неточные показания.
Если вы хотите повысить точность своих показаний, вы можете попробовать измерить и построить множество точек данных в Excel и провести кривую через эти точки. Как только у вас появится новая функция для вашего конкретного датчика, вам нужно будет изменить формулу, используемую в файле SharpIR.cpp.
Технические характеристики GP2Y0A21YK0F
Рабочее напряжение | От 4,5 до 5,5 В |
Рабочий ток | 30 мА |
Диапазон измерения | от 10 до 80 см |
Тип выходного сигнала | Аналоговый |
Размеры | 29,5 x 13 x 13,5 мм |
Монтажные отверстия | 2x 3,2 мм, расстояние 37 мм |
Стоимость | Уточнить цену |
Подключение ИК–датчика GP2Y0A21YK0F к Arduino
На приведенной ниже схеме подключения показано, как подключить ИК-датчик расстояния GP2Y0A21YK0F к Arduino.
Датчики расстояния такого типа, как правило, немного шумят, поэтому рекомендуется добавить конденсатор между Vcc и GND. В техническом описании предлагается конденсатор емкостью 10 мкФ или более (я использовал 220 мкФ). Подключите положительный вывод конденсатора к проводному соединению Vcc, а отрицательный вывод — к проводному соединению GND (см. Рисунок). Конденсаторы часто помечены полосой, которая указывает на отрицательный вывод. Положительный вывод часто длиннее отрицательного.
Подключения GP2Y0A21YK0F
GP2Y0A21YK0F | Arduino |
---|---|
1 (Желтый) | A0 |
2 (Черный) | GND |
3 (Красный) | 5V |
Если ваш датчик поставляется с проводами другого цвета, обязательно проверьте вывод ниже. Вывод Vo подключен к аналоговому входу Arduino (A0).
Теперь, когда вы подключили датчик, пришло время взглянуть на несколько примеров кода.
Установка библиотеки SharpIR Arduino
Библиотека SharpIR, написанная Гийомом Рико и Тибо Мооном, значительно упрощает работу с ИК-датчиками SHARP. Оно включает формулы, необходимые для преобразования измеренного выходного напряжения в расстояние в сантиметрах. В настоящее время библиотека поддерживает следующие датчики: GP2Y0A02YK0F, GP2Y0A21YK0F, GP2Y0A710K0F и GP2YA41SK0F. Последнюю версию библиотеки можно загрузить здесь, на GitHub, или нажать на кнопку ниже.
Вы можете установить библиотеку, перейдя в Sketch> Включить библиотеку> Добавить .ZIP-библиотека в Arduino IDE.
Автор библиотеки заметил, что показания датчика могут довольно сильно колебаться. Библиотека решает эту проблему, снимая несколько показаний подряд, отбрасывая отклонения и принимая среднее значение для получения более стабильного значения расстояния. В настоящее время библиотека принимает среднее значение из 25 показаний, что занимает примерно 53 мс.
Пример кода для SHARP GP2Y0A21YK0F IR distance sensor с Arduino
Приведенный ниже пример кода может использоваться с датчиком GP2Y0A21YK0F и отображает измеренное расстояние в сантиметрах на последовательном мониторе.
/*SHARP GP2Y0A21YK0F IR distance sensor with Arduino and SharpIR library example code. More info: https://www.makerguides.com */ // Include the library: #include "SharpIR.h" // Define model and input pin: #define IRPin A0 #define model 1080 // Create variable to store the distance: int distance_cm; /* Model : GP2Y0A02YK0F --> 20150 GP2Y0A21YK0F --> 1080 GP2Y0A710K0F --> 100500 GP2YA41SK0F --> 430 */ // Create a new instance of the SharpIR class: SharpIR mySensor = SharpIR(IRPin, model); void setup() { // Begin serial communication at a baudrate of 9600: Serial.begin(9600); } void loop() { // Get a distance measurement and store it as distance_cm: distance_cm = mySensor.distance(); // Print the measured distance to the serial monitor: Serial.print("Mean distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(1000); }
Обратите внимание, что в этом примере мы назвали датчик mySensor. Если вы хотите использовать несколько ИК-датчиков расстояния, вы можете создать другой объект датчика с другим именем: SharpIR mySensor2 = SharpIR(IRPin2, model);
Обратите внимание, что в этом случае вы также используете другой входной вывод для второго датчика.
Вы должны получить следующий вывод на последовательном мониторе (Ctrl + Shift + M):
Заключение
в этой статье я показал вам, как работает ИК-датчик расстояния SHARP GP2Y0A21YK0F и как вы можете использовать его с Arduino. Надеюсь, вы нашли его полезным и информативным. Если вы сделали это, пожалуйста, поделитесь им с другом, который тоже любит электронику!