КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Урок 44. Высотомер

В этом уроке мы создадим высотомер из барометра с выводом высоты в метрах на LED индикатор и кнопкой сброса высоты. Ознакомиться с работой барометра можно на странице Wiki - Trema-модуль датчик давления, а с работой LED индикатора на странице Wiki - Trema четырёхразрядный LED индикатор.

Нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

  • iarduino_Pressure_BMP - для работы с датчиками давления BMP180 или BMP280.
  • iarduino_4LED - для работы с Trema LED индикатором.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.

Схема подключения:

Trema барометр подключается к Arduino по аппаратной шине I2C. Trema LED индикатор и Trema кнопка подключаются к любым выводам Arduino. В примере Trema LED индикатор подключён к выводам D2 и D3, а Trema кнопка подключена к выводу D12.

Высотомер на Arduino

Код программы:

#include <iarduino_Pressure_BMP.h>              // Подключаем библиотеку для работы с датчиками давления BMP180 или BMP280.
#include <iarduino_4LED.h>                      // Подключаем библиотеку для работы с Trema LED индикатором.
                                                //
iarduino_4LED         display(2,3);             // Объявляем объект display для работы с LED индикатором, указывая выводы подключения индикатора ( CLK , DIO ).
iarduino_Pressure_BMP sensor;                   // Объявляем объект sensor для работы с датчиком давления адрес которого на шине I2C установлен по умолчанию.
const uint8_t         pinKey = 12;              // Определяем константу с указанием вывода Arduino к которому подключена кнопка сброса высоты.
const float           average = 100;            // Определяем константу усреднения показаний датчика (чем выше значение, тем выше инерционность выводимых показаний).
float                 altitude;                 // Объявляем переменную для хранения выводимой высоты.
                                                //
void setup(){                                   //
    pinMode(pinKey,INPUT);                      // Конфигурируем вывод кнопки как вход
    delay(1000);                                // Устанавливаем задержку для стабилизации показаний датчика давления после включения питания.
    sensor.begin();                             // Инициируем работу с датчиком (начальная высота по умолчанию = 0 метров).
    display.begin();                            // Инициируем работу с LED индикатором.
    display.light(5);                           // Устанавливаем яркость LED индикатора.
    sensor.read();                              // Читаем данные с датчика давления.
    altitude=sensor.altitude;                   // Сохраняем прочитанную высоту.
}                                               //
                                                //
void loop(){                                    //
    sensor.read();                              // Читаем данные с датчика давления.
    altitude *= average-1;                      // Умножаем предыдущее значение высоты на коэффициент усреднения-1.
    altitude += sensor.altitude;                // Добавляем к полученному значению новые показания высоты.
    altitude /= average;                        // Делим полученное значение на коэффициент усреднения.
    display.print(altitude,1);                  // Выводим полученное значение на LED индикатор, число с одним знаком после запятой.
    if(digitalRead(pinKey)){                    // Если нажата кнопка, то ...
        while(digitalRead(pinKey)){delay(100);} // Входим в цикл пока кнопка не будет отпущена. Задержка delay(100) подавляет дребезг при нажатии кнопки
        sensor.begin(0);           delay(100);  // Сбрасываем высоту в 0 метров.                Задержка delay(100) подавляет дребезг при отпускании кнопки
    }                                           //
}                                               //

Алгоритм работы:

Устройство выводит высоту в метрах, взяв за точку отсчёта (0 метров) ту высоту, на которой было подано питание. Вы увидите как меняются показания устройства при его опускании или поднятии. Если нажать на кнопку, то высота сбросится в 0 метров, теперь эта высота станет точкой отсчёта.

До кода «setup» подключаются библиотеки, объявляются объекты, переменные и константы. Номера выводов Arduino к которым подключается Trema LED индикатор можно изменить в 4 строке скетча при объявлении объекта «display». Номер вывода Arduino к которому подключена Trema кнопка можно изменить в 6 строке скетча при определении константы «pinKey». Меняя значение константы «average» Вы меняете коэффициент усреднения показаний, чем ниже значение, тем сильнее будут заметны флуктуации показаний высоты.

В коде «setup» конфигурируется вывод кнопки, инициируется работа с устройствами, читаются показания датчика давления, а высота записывается в переменную «altitude».

Код «loop» начинается с чтения показаний датчика давления. В следующих трёх строчках значение высоты «altitude» усредняется и пятой строкой кода «loop» полученное значение выводится на Trema LED индикатор. В последних строках кода «loop» проверяется, не нажата ли кнопка и если так, то высота сбрасывается в 0 метров путём обращения к функции sensor.begin(0).

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями