Для электронщиков и радиолюбителей

Как сделать простейший вариометр на Arduino своими руками

Как сделать простейший вариометр на Arduino своими руками

Собираем вариометр на основе Arduino и датчика BMP180

Вариометр, также известный как индикатор скорости набора высоты и снижения (RCDI) или индикатор вертикальной скорости (VSI), является одним из основных пилотажных приборов. Такой прибор широко используют, например, в парапланеризме.

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

Устройство чрезвычайно простое в изготовлении и содержит всего несколько компонентов – микроконтроллер Arduino Nano, модуль датчика давления BMP180, светодиод и зуммер. Также нам потребуется батарейка для питания устройства и переключатель для его включения и выключения. Схема вариометра но основе данных компонентов представлена далее.

Как сделать простейший вариометр на Arduino своими руками

Все эти компоненты можно поместить в какую-нибудь металлическую коробку для прочности.

Как сделать простейший вариометр на Arduino своими руками

Код программы вариометра на основе Arduino следующий.

#include <toneAC.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 mySensor;

#define NUM_PRESSURES 64
#define NUM_TOTALS 16
uint32_t pressure[NUM_PRESSURES];
uint32_t old_total[NUM_TOTALS];
int pressure_index = 0;
int total_index = 0;
uint32_t total;
int current_tone = 0;
int beep_time = 0;

void setup() {
  toneAC(388, 4);
  delay(70);
  toneAC(0);
  delay(30);
  toneAC(590, 4);
  delay(70);
  mySensor.begin();
  uint32_t p = mySensor.readPressure();
  total = p*NUM_PRESSURES;
  for(int i = 0; i<NUM_PRESSURES; i++)
  {
    pressure[i] = p;
  }
  for(int i = 0; i<NUM_TOTALS; i++)
  {
    old_total[i] = total;
  }
  toneAC(0);
}

void loop(){
    total -= pressure[pressure_index];
    pressure[pressure_index] = mySensor.readPressure();
    total += pressure[pressure_index];
    int32_t rate = total - old_total[total_index];
    float frate = (float)rate;
    frate = 0.0;
    old_total[total_index] = total;
    pressure_index++;
    total_index++;
    if(pressure_index >= NUM_PRESSURES)pressure_index = 0;
    if(total_index >= NUM_TOTALS)total_index = 0;
    if(rate < -200){
      if(beep_time <5)
        toneAC(500 - rate);
      else
        toneAC(0);
    }
    else if(rate > 200)
    {
      float f = 100.0 + 40000.0 * 1.0/((float)rate);
      toneAC((int)f);
    }
    else
    {
      toneAC(0);
    }
    beep_time++;
    if(beep_time >= 10)beep_time = 0;
}

При включении устройства воспроизводится начальный звук. Затем, в соответствии с относительным изменением высоты тона, звук меняется от низкого к высокому и наоборот. В коде используется библиотека ToneAC, которая обеспечивает удвоенный звук зуммера.

1 комментарий к Как сделать простейший вариометр на Arduino своими руками

Обсуждение закрыто.