SHARP датчик являє собою оптичний датчик, здатний вимірювати відстань між собою і об'єктом за допомогою інфрачервоного передавача і приймача з використанням тріангуляції виміру відстані. Метод тріангуляції для вимірювання одного з кутів, утворених трикутником емітерного об'єкта-приймач, приймач тапозиційно-чутливий детектор.
Датчик ====================== параметр відстані
GP2Y0A21 --------------------------- 10-80 cm
GP2Y0A02 --------------------------- 20 -150 cm
GP2Y0A710 ------------------------- 100 - 550 cm
Вихідний сигнал датчика не є лінійним. Зверніть увагу, що для малих відстаней, показання датчика може бути помилково прийняте за велику відстань. Тому бажано, щоб гарантувати, що об'єкт не занадто близько до датчика для того, щоб уникнути неправильного прочитання. Хороший варіант для розміщення датчика - позаду краю або положення спочатку кривої графіка що ви хочете виміряти (див малюнок). Наприклад, якщо наш датчик GP2Y0A21, то механічно обмежують 10см зону в якій датчик поводиться нестабільно. Підключення датчика між Sahrp і Arduino
SENSOR SHARP ============= ARDUINO
Vout ------------------------------ A0
GND ------------------------------ GND
Vcc ------------------------------ 5V
До з'єднання може бути підключений електролітичний конденсатор 10 мкФ або більше між Vcc і GND, але як можна ближче до датчика, це для того, щоб усунути джерела шуму що генерується датчиком.
SHARP датчик підключається до аналоговий вихід з Arduino, так само, як би ми працювали з потенціометром. Слід зазначити що рівень шумів (хибних показів) є дуже великим.
Для уникнення цього використовуються цифрові фільтри, як на прикладі нижче:
Код: Виділити все
void setup() {
// // Серйозні зв'язку зі швидкістю 9600 бод
Serial.begin(9600);
}
void loop() {
// Ми читаємо середній аналоговий вхід 0
int ADC_SHARP=ADC0_promedio(20);
Serial.println(ADC_SHARP);
delay(10);
}
int ADC0_promedio(int n)
{
long suma=0;
for(int i=0;i<n;i++)
{
suma=suma+analogRead(A0);
}
return(suma/n);
}
Виявлення перешкод: датчик наближення
SHARP датчик найбільш часто використовується для виявлення перешкод Він працює таким так само, як датчик близькості . Але нас цікавить не просто знати, якщо є будь-який об'єкт перед нами, але конкретну відстань до нього. У цьому випадку ми повинні спочатку визначити відстань, на яку ми хочемо вважати, що об'єкт знаходиться поруч. У цьому прикладі ми будемо працювати в якості порога 30 см, але ви можете взяти будь-яку іншу відстань.
Наступним кроком буде використання лінійку і місцезнаходження об'єкта в передній частині датчика точно на 30 см, відстань вимірюється від датчика об'єктива. За допомогою першого прикладу вище ми вивчили читання відповідних даних відстані АЦПА: У нашому випадку значення 195 (30 см) дивитись графік чутливості.
Скет нижче показує приклад використання Sahrp в якості детектора перешкод або безконтактного датчика
Код: Виділити все
void setup() {
// зв'язку зі швидкістю 9600 бод
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
// Ми читаємо середній аналоговий вхід 0:
int ADC_SHARP=ADC0_promedio(20);
if(ADC_SHARP>195)
{
digitalWrite(13, HIGH);
Serial.print("об'єкт Виявлено:");
}
else
{
digitalWrite(13, LOW);
Serial.print("об'єкт відсутній:");
}
Serial.println(ADC_SHARP);
delay(10);
}
int ADC0_promedio(int n)
{
long suma=0;
for(int i=0;i<n;i++)
{
suma=suma+analogRead(A0);
}
return(suma/n);
}
Виконання вимірювання відстані з датчиком Sharp та нелінійність характеристики
В межах ділянки графіку діапазону датчика спостерігається така залежність: Напруги і значення АЦП ми читаємо з Arduino пропорційно. на основі даних (графіку) отримаємо рівняння на основі значення АЦП, це для того, щоб зберегти розрахунок лінійності по Arduino для напруги. Так що для нас, «х» значення АЦП Приклад 1, але врахувавши більшу кількість вимірів, щоб видалити шум, нобхідно взяти мінімум два вимірювання або точки. Ці точки не повинні бути дуже близько, наприклад, 15 см і 50 см показань датчика для SHARP GP2YA021. Ці дві точки виміру є: X1 = 350 до L1 = 15 см та Х2 = L2 = 129 до 50 см Підставляючи ці значення в рівняння, ми можемо сформувати систему рівнянь і знайти змінні «а» і «б»
Математичні перетворення надають формулу залежності відстані від показів датчика SHARP (для моделі GP2YA021) Той самий метод може бути застосований до інших моделей SHARP датчиків.
Скетч Тут щоб відчути дистанцію і час виміру:
Код: Виділити все
void setup() {
// зв'язок зі швидкістю 9600 бод
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
long tiempo=millis(); //час, перш ніж ви почнете читати
int D_cm=distancia(20); //зчитування відстані
tiempo=millis()-tiempo; //мілісекунди, які пішли на читання
Serial.print("час читання: ");
Serial.print(tiempo);
Serial.print("ms Відстань: ");
Serial.print(D_cm);
Serial.println(" cm");
delay(100);
}
float distancia(int n)
{
long suma=0;
for(int i=0;i<n;i++)
{
suma=suma+analogRead(A0);
}
float adc=suma/n;
float distancia_cm = 17569.7 * pow(adc, -1.2062);
return(distancia_cm);
}