Саморобний радар з монітором на Ардуіно
Саморобний радар з монітором на Ардуіно
Не знаю хто як, але я давно хотів зробити радар, такий щоб туди-сюди випромінювач крутився і на екрані видно було наявність і дистанцію до об'єктів. Звичайно в домашніх умовах річ, подібну військовим або авіа службам зробити не вийде - там і потужності, і розміри недосяжні. Але щось схоже, причому зовсім не складне і не дороге (пару тисяч рублів) спорудити можливо. Отже, на основі популярного Ардуіно ви можете зробити таку собі міні РЛС за допомогою ультразвукового детектора і власне плати Arduino. Схема підглянена на сайті "Мехатроніка". Все, що потрібно для цього проекту: ультразвуковий датчик для виявлення об'єктів, маленький серводвигун для повороту датчика і плата Arduino для управління ними. Ну і макетке з проводами.

Спочатку зробимо кріплення для підключення ультразвукового датчика до серводвигунів. Виготовляємо його, як це показано на малюнку нижче, потім він приклеюється і кріпиться до двигуна за допомогою гвинта.

Тепер прикріпіть штирі, на які припаяти 4 дроти для підключення датчика.

Прикріпіть мотор сервоприводу до плати Arduino, використовуючи звичайну гумку для волосся.

Ми підключили ультразвуковий датчик HC-sr04 до висновків 10 і 11, а серводвигун до 12 контакту на платі Arduino.

Вихідний код
Тепер потрібно взяти код і завантажити його на плату Ардуіно, яка дозволить взаємодіяти між Arduino і обробкою сигналу. Тут будемо отримувати значення для кута і відстань, виміряний за допомогою датчика з плати Arduino на обробку IDE за допомогою функції SerialEvent (). яка зчитує дані з послідовного порту, і будемо ставити значення кута і відстані в змінні iAngle і iDistance. Ці змінні будуть використовуватися для побудови лінії виявлення об'єктів.
void drawRadar () pushMatrix ();
translate (960,1000); // moves the starting coordinats to new location
noFill ();
strokeWeight (2);
stroke (98,245,31);
// draws the arc lines
arc (0,0,1800,1800, PI, TWO_PI);
arc (0,0,1400,1400, PI, TWO_PI);
arc (0,0,1000,1000, PI, TWO_PI);
arc (0,0,600,600, PI, TWO_PI);
// draws the angle lines
line (-960,0,960,0);
line (0,0, -960 * cos (radians (30)), - 960 * sin (radians (30)));
line (0,0, -960 * cos (radians (60)), - 960 * sin (radians (60)));
line (0,0, -960 * cos (radians (90)), - 960 * sin (radians (90)));
line (0,0, -960 * cos (radians (120)), - 960 * sin (radians (120)));
line (0,0, -960 * cos (radians (150)), - 960 * sin (radians (150)));
line (-960 * cos (radians (30)), 0,960,0);
popMatrix ();
>
Для малювання лінії, яка рухається вздовж радара, зроблена функція drawLine (). Мінлива iAngle використовується як лінія, що перемальовується для кожного ступеня.
void drawLine () pushMatrix ();
strokeWeight (9);
stroke (30,250,60);
translate (960,1000); // moves the starting coordinats to new location
line (0,0,950 * cos (radians (iAngle)), - 950 * sin (radians (iAngle))); // draws the line according to the angle
popMatrix ();
>
Для прорісовиванія виявлених об'єктів служить функція drawObject (). Вона отримує відстань від ультразвукового датчика, перетворює його в пікселах, і в поєднанні з кутом датчика малює об'єкт на радарі - екрані ЖК монітора.
void drawObject () pushMatrix ();
translate (960,1000); // moves the starting coordinats to new location
strokeWeight (9);
stroke (255,10,10); // red color
pixsDistance = iDistance * 22.5; // covers the distance from the sensor from cm to pixels
// limiting the range to 40 cms
if (iDistance<40) // draws the object according to the angle and the distance
line (pixsDistance * cos (radians (iAngle)), - pixsDistance * sin (radians (iAngle)), 950 * cos (radians (iAngle)), - 950 * sin (radians (iAngle)));
>
popMatrix ();
>
Текст на екрані - функція drawtext (). яка малює смуги на конкретних місцях.

Всі ці функції викликаються в основному функцією Draw (). яка повторюється весь час і малює на екрані картинку навколишнього простору. Також тут використовується імітації розмиття руху і повільне згасання рухається лінії.
fill (98,245,31);
textFont (orcFont);
// simulating motion blur and slow fade of the moving line
noStroke ();
fill (0,4);
rect (0, 0, width, 1010);
fill (98,245,31); // green color
// calls the functions for drawing the radar
drawRadar ();
drawLine ();
drawObject ();
drawText ();
>
Ось остаточний зовнішній вигляд радара. Як бачите, нічого складного немає. І хоч потужність і дальність невеликі, але тут головне зрозуміти сам принцип і змусити хоча б це заробити. А далі, при бажанні, можна експериментувати над збільшенням дальності і чіткості засекания предметів.
А за цим посиланням скачайте повний вихідний код обробки радіолокаційної станції на Ардуіно.