На прошлом занятии мы научились программно управлять электродвигателем: менять направление вращения и регулировать скорость его вращения. Без этих знаний не поедет ни один электромобиль нового поколения. Но в современной машине помимо мотора и колес есть еще и много других, вспомогательных систем, облегчающих нашу жизнь. Одна из них — парктроник, или парковочный радар — устройство, помогающее маневрировать во время парковки и предупреждающее водителя о препятствиях в слепой зоне. Как он работает?
Хоть радар и техническое устройство, но его принцип был подсмотрен в живой природе, а точнее — у летучих мышей. Еще в 18 веке ученые обратили внимание, что эти существа могут летать в абсолютно темной комнате и не задевать предметов. А ряд проведенных экспериментов показал, что летучие мыши ориентируются по слуху, улавливая отраженные эхосигналы.
Первым об ультразвуке (звуке очень высокой частоты) догадался в 1920 году англичанин X. Хартридж. В последствии звуковая локация была обнаружена у ночных птиц гуахаро, гнездящихся в пещерах Венесуэлы, у стрижей-саланган и у рукокрылых из подотряда крыланов. Настоящую сенсацию вызвали сообщения о наличии таких возможностей у китообразных. Затем этот список дополнили землеройки, мадагаскарский тенрек и некоторые другие из представителей фауны. Основываясь на знаниях, полученных при изучении животных, люди научились пользоваться эхолокацией в практических целях.
Как же устроен ультразвуковой датчик? В приборе находится две мембраны: излучатель и приемник. Ими могут быть, например, динамик и микрофон соответственно. Первый производит звук, а второй принимает его отраженный сигнал — эхо. Звуковой генератор создает короткие ультразвуковые импульсы и запускает таймер. Вторая мембрана регистрирует приход отраженного импульса и останавливает таймер. Скорость звука в воздушной среде — величина постоянная (с учетом температуры, конечно). Следовательно, зная время, можно рассчитать путь, который преодолел звук. А расстояние до объекта, понятно, будет составлять половину этого пути.
С этими знаниями мы можем собрать собственный парктроник. Он проще того, что установлен на автомобилях, но тоже сможет оповещать о препятствиях и показывать расстояние до них. В экспериментах мы будем использовать ультразвуковой дальномер HC-SR04 и многоцветный светодиод в качестве индикатора. В зависимости от того, на каком расстоянии от объекта будет находиться УЗ-датчик, будет меняться цвет его свечения: от 0 до 100 мм — красный, от 110 до 200 мм — синий, от 210 до 1000 мм — зеленый.
Несколько слов о многоцветном светодиоде. Такие элементы называются RGB (Red -красный, Green — зеленый, Blue — синий), и по сути — это три одноцветных светодиода под одним корпусом. При смешивании их цветов получаются другие цвета. То есть, если мы включим в нем зеленый и красный свет, то получим желтый свет. Такая технология применяется в телевидении и в фотографии. RGB-светодиоды бывают с общим анодом или общим катодом. Мы будем использовать версию с общим катодом, а значит, подавая напряжение на аноды, будем включать определенный светодиод.
Вернемся к датчику расстояния. Он испускает звуковые колебания с частотой 40 кГц, которые хорошо отражаются от препятствий. Этот дальномер способен измерить расстояние в диапазоне от 10 мм до 5000 мм с точностью измерения 10 мм. Также дальномер излучает ультразвук в узком направлении. Угол обзора датчика составляет около 60 градусов.
То есть, установленный на движущейся модели электромобиля, например, он может отреагировать на ножку стола и дать сигнал на выключение двигателя или изменение направления движения. Впрочем, есть у прибора и недостатки — в частности, его чувствительность сильно зависит от материала (наружного покрытия) препятствия. Пористая поверхность (пушистый ковер, свитер, трава, листва и другие похожие объекты) будет поглощать ультразвук, и датчик может допустить ошибку. В реальных устройствах необходимая точность достигается установкой нескольких датчиков и совершенствованием ПО, обеспечивающим высокую скорость расчетов.
Рассмотрим схему. Слева на монтажной плате установлен 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 год.
Антон ЛОМОНОСОВ,
Азизжон УЛЬМАСОВ,
Сергей МОТИН