«ШКОЛА РОБОТОВ» УРОК № 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 год.

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

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

Сергей МОТИН

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

  • ОКНА ИЗ ЕВРОПЫОКНА ИЗ ЕВРОПЫ
    Стеклопакеты своими руками. Ученые постоянно говорят о глобальном потеплении климата, но природа в иные зимы так «закручивает» морозами и метелями, что ставит под сомнение это...
  • УЛУЧШАЕМ КУРЯТНИКУЛУЧШАЕМ КУРЯТНИК
    Поворотный прогон. Счастливы поделиться этой инструкцией того, что мы придумали для наших «леди на заднем дворе»! Наша цель. Как всегда, мы ищем способы поддерживать активность наших...
Тут можете оценить работу автора: