Собираем вариометр на основе Arduino и датчика BMP180
Вариометр, также известный как индикатор скорости набора высоты и снижения (RCDI) или индикатор вертикальной скорости (VSI), является одним из основных пилотажных приборов. Такой прибор широко используют, например, в парапланеризме.
Для человека летать неестественно, и у нас нет особого чувства при движении в трехмерном пространстве при полете. Как только визуальный ориентир на землю потерян, очень трудно понять, поднимаемся мы или опускаемся. В рамках вариометра для парапланеризма абсолютная высота не так интересна, важно изменение высоты. Этот конкретный пример, представленный в рамках данного проекта Arduino, представляет собой вариометр, который указывает на эти изменения с помощью звукового сигнала, что в данном случае является преимуществом, поскольку все органы чувств, и в первую очередь зрение, будут направлены для обеспечения безопасного полета.
Устройство чрезвычайно простое в изготовлении и содержит всего несколько компонентов – микроконтроллер Arduino Nano, модуль датчика давления BMP180, светодиод и зуммер. Также нам потребуется батарейка для питания устройства и переключатель для его включения и выключения. Схема вариометра но основе данных компонентов представлена далее.

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

Код программы вариометра на основе 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, которая обеспечивает удвоенный звук зуммера.
Written by Admin
1 комментарий к Как сделать простейший вариометр на Arduino своими руками
Обсуждение закрыто.
Большое спасибо за информацию