246   222   68    

Делаем датчик приближения к земле (Ардуино и ультразвуковой сенсор)

Перейти к комментариям ↓

Делаем миниатюрный аналог радиовысотомера, который используется на коммерческих самолетах, в моделях RC-самолетов и мультикоптерах.

Шаг 1. Комплектующие

Компоненты оборудования, которые нам понадобятся для реализации нашего урока по созданию датчика приближения к земле:

  • Arduino Uno × 1
  • Ультразвуковой датчик - HC-SR04 × 1
  • LED (универсальный)
  • Провода-перемычки

Шаг 2. Суть проекта

Определение приближения к земле для самолетов RC и мультикоптеров

Единственное различие между ультразвуковым датчиком и радиовысотомером состоит в том, что первый использует «звуковые волны», а второй - «световые волны» и, следовательно, разницу между скоростью их распространения в атмосфере.

Барометрический высотомер обеспечивает высоту относительно фиксированной точки отсчета, которой является AMSL (Above Mean Sea Level, над средним уровнем моря). IMU (Inertial Measurement Units) - инерциальные измерительные блоки, такие как MEMS (Micro Electro Mechanical Systems) - микроэлектромеханические системы, могут предоставлять только информацию о положении самолета относительно его оси.

Таким образом, существует необходимость в третьем датчике для измерения высоты самолета над землей и относительного вертикального перемещения между самолетом и землей (рельеф местности). Такая система существует в современных самолетах как GPWS (Ground Proximity Warning System) - Система предупреждения о приближении к земле, которая использует RAM (RADAR Altimeter) для измерения высоты AGL. Поскольку компактная программируемая ОЗУ недоступна для использования с RC системой, мы должны полагаться на другие средства для измерения расстояния. Таким способом является использование ультразвукового измерителя расстояния, который широко доступен и надежен в своем рабочем диапазоне.

Важность

Падение самолета можно измерить с помощью IMU (Инерциальные измерительные модули), таких как MPU-6050, MPU-9250 и многих других. Но что, если самолет находится в горизонтальном полете на постоянной высоте, а земля приближается к самолету из-за уклона, или на земле встречается какая-то преграда (камень или что-то еще) - это может привести к катастрофе. Измерение препятствий под самолетом является основной частью этого проекта. Все, что вам нужно сделать, это прикрепить эту систему к самолету и поместить ультразвуковой датчик под самолет "лицом" вниз к земле.

О системе

 

Теория работы эхо-локации проста:

  • Передатчик посылает импульс ультразвукового звука некоторого временного интервала.
  • Этот импульс проходит через воздух и, если есть какие-то препятствия, то он отражается от препятствий.
  • Приемник получает этот отраженный импульс и измеряет временную задержку между передачей и получением импульса.
  • Поскольку распространение звуковой волны можно справедливо считать прямым, звуковая волна в течение этого периода времени в два раза превышает расстояние между передатчиком и препятствием.

Таким образом, расстояние можно найти с помощью простой формулы следующим образом:

где distance - расстояние,
speed - скорость,
time - время.

Шаг 3. Схема соединения и сборка устройства

Для соединения всех комплектующих используйте схему выше. В итоговом варианте наше устройство для измерения расстояния до земли будет выглядеть таким образом:

Шаг 4. Код проекта

Обратите внимание, что код полностью совместим с Arduino MEGA без каких-либо модификаций и имеет те же номера контактов, что и в UNO.

Мы приводим два варианта программ, которые вы можете использовать и модифицировать под свои проекты.

Код для высоты - яркости светодиода

int triggerpin=10;
int echopin=11;
long duration;
long distance;
long x;
void setup() {
 // put your setup code here, to run once:
pinMode(triggerpin,OUTPUT);
pinMode(echopin,INPUT);
pinMode(9,OUTPUT);
Serial.begin(9600);
}
void loop() {
 // put your main code here, to run repeatedly:
digitalWrite(triggerpin,LOW); 
delayMicroseconds(2);
digitalWrite(triggerpin,HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin,HIGH);
duration=pulseIn(echopin,HIGH);
x=(duration/2)/29.1;                //1/29.1=0.034 ~ speed of sound converted into centimeters per microsecond
Serial.print("Distance :");
Serial.print(x);
x=map(x,0,100,255,0);      //mapping the intensity as per distance
Serial.print("\t");
Serial.print(x);
Serial.println();
if(x<255 && x>10)                 //code stability condition
{
 analogWrite(9,x);
 }
 else if (x<10) 
 {
   analogWrite(9,0);
   }
   else 
   {
     analogWrite(9,0);
   }
}

Код для скорости изменения высоты - скорость мигания светодиода

int triggerpin=10;
int echopin=11;
long duration;
long distance;
long x;
long x1=45;
int z;
void setup() {
 // put your setup code here, to run once:
pinMode(triggerpin,OUTPUT);
pinMode(echopin,INPUT);
pinMode(9,OUTPUT);
Serial.begin(9600);
}
void loop() {
 // put your main code here, to run repeatedly:
digitalWrite(triggerpin,LOW);
delayMicroseconds(2);
digitalWrite(triggerpin,HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin,HIGH);
duration=pulseIn(echopin,HIGH);
x=(duration/2)/29.1;
Serial.print("Distance :");
Serial.println(x);
z=(x1-x)/2;
x1=x;
Serial.print("\t z :");
Serial.println(z);
z=map(z,-10,6,1000,5);
analogWrite(9,HIGH);
delay(z);
analogWrite(9,LOW);
delay(z);
}

В вышеприведенных скетчах мы подсоединили светодиод к пину 9. Обратите внимание, что приведенный выше код для скорости изменения высоты очень точно настроен для измерения очень незначительного снижения самолета вниз, вы можете изменить чувствительность, изменив значения в функции map в приведенном выше коде, но продолжайте учитывать реальность полета, где наиболее важно измерить даже незначительное снижение самолета, которое может привести к дальнейшему свободному падению, а затем к катастрофе.

Шаг 5. Итоговый результат

Два видео ниже демонстрируют работу двух вышеприведенных программ - в первом случае яркость светодиода зависит от близости объекта. Во втором случае светодиод начинает чаще мигать при приближении к объекту.

Видео 1

Видео 2

Яркость светодиодов прямо пропорциональна высоте. Частота мигания пропорциональна скорости снижения. Таким образом, яркость светодиода увеличивается, если самолет приближается к земле на более низкую высоту, и уменьшается, если самолет удаляется от земли на умеренную высоту. Также «частота мигания» будет увеличиваться, если самолет падает, и уменьшаться, если самолет поднимается.

Обратите внимание, что мы рассмотрели диапазон от 0 до 1 метра над землей для достижения вышеуказанных целей в программах выше. Однако вы можете расширить свой диапазон до надежного рабочего диапазона вашего ультразвукового датчика измерения расстояния, который обычно составляет до 4 метров.

Шаг 6. Дополнения

Применение

  • Для ночных полетов, может использоваться с массивом огней и с зуммером в качестве предупреждающего сигнала.
  • Данные могут быть использованы для составления карты местности или карты ландшафта.
  • В качестве входного сигнала автопилота, чтобы избежать столкновения с землей и поддержки постоянной высоты над уровнем моря, чтобы выполнять подъем при приближении к земле.
  • Для систем воздушной доставки, которые будут использоваться компаниями электронной коммерции.

Ограничения

  • "Конус" распространения ультразвукового излучателя очень узкий, порядка 12° (согласно нашим экспериментальным измерениям). Значение измеренного расстояния становится ненадежным для AOA (угол атаки) более 12° или для местности с уклоном более 12°. Это ограничение может быть преодолено путем поворота датчика на карданном подвесе и вращении датчика с помощью серводвигателя или использования нескольких ультразвуковых датчиков под разными углами и синхронизации между этими датчиками.
  • Скорость звука является функцией температуры окружающего воздуха и содержания влаги в воздухе, однако это ограничение можно преодолеть путем калибровки кода с учетом местных атмосферных условий с использованием любого доступного датчика температуры, поскольку скорость звука определяется следующим образом:

    где a - скорость звука,
    γ - адиабатический индекс,
    R - газовая постоянная,
    T - температура газа в Кельвинах.
  • Итак, нам нужно добавить дополнительный код для калибровки скорости звука или просто изменить скорость в приведенном выше коде в соответствии с температурой, при которой самолет будет эксплуатироваться.

Комментарии

Ардуино+