Мы вынуждены исказить текст в ответ на заблокированную вами рекламу.
Друзья! Проект modelist-konstruktor.com существует благодаря рекламе. Просьба добавить сайт в исключения блокировщика и обновить страницу.
«ШКОЛА РОБОТОВ» УРОК № 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 год.

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

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

Сергей МОТИН

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

  • ЗАМКИ С ШИФРОМЗАМКИ С ШИФРОМ
    Высящие замки с шифром, возможно, спасли миллионы велосипедистов от пешой прогулки домой. Они удобны в приминении, а их шифр очень трудно взломать. Всего из трех барабанов можно...
  • БЕЗ НЕРВЮРБЕЗ НЕРВЮР
    Модель воздушного боя, которую я сконструировал, можно изготовить буквально за два вечера. Особенность ее в том, что она не имеет нервюр. Двигатель обычный МК-16. Модель хорошо летает и...
Тут можете оценить работу автора: