Делаем миниатюрный аналог радиовысотомера, который используется на коммерческих самолетах, в моделях 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 - температура газа в Кельвинах. - Итак, нам нужно добавить дополнительный код для калибровки скорости звука или просто изменить скорость в приведенном выше коде в соответствии с температурой, при которой самолет будет эксплуатироваться.