«ШКОЛА РОБОТОВ» УРОК № 5

«ШКОЛА РОБОТОВ» УРОК № 5

На прошлом занятии мы научились программно управлять электродвигателем: менять направление вращения и регулировать скорость его вращения. Без этих знаний не поедет ни один электромобиль нового поколения. Но в современной машине помимо мотора и колес есть еще и много других, вспомогательных систем, облегчающих нашу жизнь. Одна из них — парктроник, или парковочный радар — устройство, помогающее маневрировать во время парковки и предупреждающее водителя о препятствиях в слепой зоне. Как он работает?

Хоть радар и техническое устройство, но его принцип был подсмотрен в живой природе, а точнее — у летучих мышей. Еще в 18 веке ученые обратили внимание, что эти существа могут летать в абсолютно темной комнате и не задевать предметов. А ряд проведенных экспериментов показал, что летучие мыши ориентируются по слуху, улавливая отраженные эхосигналы.

Эхолокатор летучих мышей очень точный навигационный «прибор»: он в состоянии запеленговать даже микроскопически малый предмет-диаметром всего в 0,2 миллиметра!
Эхолокатор летучих мышей очень точный навигационный «прибор»: он в состоянии запеленговать даже микроскопически малый предмет-диаметром всего в 0,2 миллиметра!

Первым об ультразвуке (звуке очень высокой частоты) догадался в 1920 году англичанин X. Хартридж. В последствии звуковая локация была обнаружена у ночных птиц гуахаро, гнездящихся в пещерах Венесуэлы, у стрижей-саланган и у рукокрылых из подотряда крыланов. Настоящую сенсацию вызвали сообщения о наличии таких возможностей у китообразных. Затем этот список дополнили землеройки, мадагаскарский тенрек и некоторые другие из представителей фауны. Основываясь на знаниях, полученных при изучении животных, люди научились пользоваться эхолокацией в практических целях.

Как же устроен ультразвуковой датчик? В приборе находится две мембраны: излучатель и приемник. Ими могут быть, например, динамик и микрофон соответственно. Первый производит звук, а второй принимает его отраженный сигнал — эхо. Звуковой генератор создает короткие ультразвуковые импульсы и запускает таймер. Вторая мембрана регистрирует приход отраженного импульса и останавливает таймер. Скорость звука в воздушной среде — величина постоянная (с учетом температуры, конечно). Следовательно, зная время, можно рассчитать путь, который преодолел звук. А расстояние до объекта, понятно, будет составлять половину этого пути.

Ультразвуковой датчик расстояния-дальномер HC-SR04
Ультразвуковой датчик расстояния-дальномер HC-SR04

С этими знаниями мы можем собрать собственный парктроник. Он проще того, что установлен на автомобилях, но тоже сможет оповещать о препятствиях и показывать расстояние до них. В экспериментах мы будем использовать ультразвуковой дальномер HC-SR04 и многоцветный светодиод в качестве индикатора. В зависимости от того, на каком расстоянии от объекта будет находиться УЗ-датчик, будет меняться цвет его свечения: от 0 до 100 мм — красный, от 110 до 200 мм — синий, от 210 до 1000 мм — зеленый.

Несколько слов о многоцветном светодиоде. Такие элементы называются RGB (Red -красный, Green — зеленый, Blue — синий), и по сути — это три одноцветных светодиода под одним корпусом. При смешивании их цветов получаются другие цвета. То есть, если мы включим в нем зеленый и красный свет, то получим желтый свет. Такая технология применяется в телевидении и в фотографии. RGB-светодиоды бывают с общим анодом или общим катодом. Мы будем использовать версию с общим катодом, а значит, подавая напряжение на аноды, будем включать определенный светодиод.

Вернемся к датчику расстояния. Он испускает звуковые колебания с частотой 40 кГц, которые хорошо отражаются от препятствий. Этот дальномер способен измерить расстояние в диапазоне от 10 мм до 5000 мм с точностью измерения 10 мм. Также дальномер излучает ультразвук в узком направлении. Угол обзора датчика составляет около 60 градусов.

То есть, установленный на движущейся модели электромобиля, например, он может отреагировать на ножку стола и дать сигнал на выключение двигателя или изменение направления движения. Впрочем, есть у прибора и недостатки — в частности, его чувствительность сильно зависит от материала (наружного покрытия) препятствия. Пористая поверхность (пушистый ковер, свитер, трава, листва и другие похожие объекты) будет поглощать ультразвук, и датчик может допустить ошибку. В реальных устройствах необходимая точность достигается установкой нескольких датчиков и совершенствованием ПО, обеспечивающим высокую скорость расчетов.

«ШКОЛА РОБОТОВ» УРОК № 5
Схема соединения элементов на монтажной плате

Рассмотрим схему. Слева на монтажной плате установлен RGB-светодиод, правее него — УЗ-дальномер. У светодиода четыре ножки. Одна из них — общий катод (длинная ножка, она вторая слева). Другие выводы: красный (первый), синий (третий), красный (четвертый). Это аноды, а значит подключаем их к цифровым пинам Arduino. Подавая на управляющий пин сигнал, на светодиоде будет загораться определенный цвет.

У датчика также четыре ножки — это Vcc, Trig, Echo и Gnd. С Vcc и Gnd все очевидно — подключаем их к пинам 5V и Gnd. A Trig и Echo — к любым цифровым пинам, с их помощью будет осуществляться управление дальномером. Наша задача: создать импульс на Trig для начала измерения, а затем замерить длину импульса на Echo, чтобы потом вычислить дистанцию, используя школьную формулу S = V х Т, где S — расстояние в м, V — скорость в м/с, Т — время в с.

Теперь напишем скетч:

int г = 9; // пин красного светодиода

int g = 10; // пин зеленого светодиода

int b = 11;// пин синего светодиода

int ер = 2; // echo пин

int tp = 3; // trig пин

int d; // переменная, которая будет хранить длину импульса

int cm; //переменная, которая будет хранить расстояние до препятствия void uz(){

//создаем импульс на Trig для начала измерения, и замеряем длину импульса на Echo

digitalWrite(tp, LOW);

delayMicroseconds(2);

digitalWrite(tp, HIGH);

delayMicroseconds( 10);

digitalWrite(tp, LOW);

d = pulseln(ep, HIGH);

cm = d / 58;

}

void setup(){

pinMode(tp, OUTPUT); //trig пин работает на выход т.к. создает импульс

pinMode(ep, INPUT); //echo пин работает на вход т.к. принимает импульс

pinMode(r, OUTPUT); //r пин работает на выход

pinMode(g, OUTPUT); //g пин работает на выход

pinMode(b, OUTPUT); //b пин работает на выход

}

void loop() {

uz(); // вызываем процедуру считывания расстояния

//если объект находится на расстоянии 0-11см, то загорается красный светодиод if(cm<11){

digitalWrite(r, HIGH);

digitalWrite(g, LOW);

digitalWrite(b, LOW);

}

//иначе если объект находится на расстоянии 10-20см, то загорается красный светодиод

else if(cm<21){

digitalWrite(r, LOW);

digitalWrite(g, LOW);

digitalWrite(b, HIGH);

}

//иначе если объект находится на расстоянии 20 и более см, то загорается красный светодиод

else if(cm>20){

digitalWrite(r, LOW);

digitalWrite(g, HIGH);

digitalWrite(b, LOW);

}

}

Первое, что непонятное заметно в коде — это void uz(). На что похоже? Правильно, на процедуры void setup() и void lоор(). Напомним, что процедура — набор действий, заключенных в фигурные скобки, имеющие свое название и выполняющиеся при вызове. Чтобы описать процедуру, нужно использовать следующую структуру:

void название() {действия}

А чтобы вызвать процедуру, нужно написать название с пустыми круглыми скобками и точкой с запятой. Например, процедуры svet включения двух светодиодов будут выглядеть так:

void svet(){

digitalWrite (3, HIGH);

digitalWrite(6, HIGH);

}

вызов процедуры: svet();

Зачем используют процедуры? Чтобы сократить объем написанного кода или облегчить его чтение. Если же в вашей программе часто встречаются одни и те же действия, то их можно заключить в процедуру. С помощью них вы также можете более понятно описать свой алгоритм.

Итак, в процедуре void loop мы сначала даем команду считывания дистанции с помощью uz, а потом указываем алгоритм анализа полученного значения. Как работает uz описано в комментарии.

Разберемся теперь, что такое pulseln() и почему d делится на 58.

Функция pulseln() считывает длину сигнала на заданном пине (HIGH или LOW). Например, если задано считывание HIGH, функция ожидает пока на заданном пине не появиться HIGH. А когда HIGH получен — включается таймер, который будет работать до тех пор, пока на пине не будет LOW. Так как считанное время мы получаем в микросекундах, а не в секундах, как требуется в формуле, то произведем некоторые преобразования. Переводим скорость звука из м/с в см/ мкс — получаем 0,034 см/мкс. Также для удобства преобразуем десятичную дробь в обыкновенную: S = d х 1/29 = d /29. А теперь вспомним, что звук прошел два расстояния: до цели и обратно. Значит, делим все на 2, то есть — S = d/ 58. Ультразвуковой датчик можно использовать как дальномер, либо включить его в конструкцию радара — об одном из возможных применений такой системы на практике было подробно рассказано (с базовыми программами и необходимыми ссылками на дополнительное ПО) в «М-К» № 5 за 2019 год.

Антон ЛОМОНОСОВ,

Азизжон УЛЬМАСОВ,

Сергей МОТИН

Рекомендуем почитать

  • ИНТЕЛЛЕКТУАЛЬНАЯ САУ «МСТА-С»ИНТЕЛЛЕКТУАЛЬНАЯ САУ «МСТА-С»
    Изменившаяся к началу 1980-х гг. концепция действий артиллерии на поле боя потребовала не только «повышения её могущества, дальнобойности, манёвренности». Были заложены основы...
  • ДОЛГОИГРАЮЩАЯ БУКВАДОЛГОИГРАЮЩАЯ БУКВА
    Копии первого десятилетия XX века выдался для всех моряков Европы, и английских, в частности, очень напряженным. Грозный призрак будущей войны и ускользающее первенство в мире заставляли...
Тут можете оценить работу автора: