Никогда ещё увлечение электротехникой, роботизацией, автоматическими системами реагирования и управления не было так просто реализовать.

Если раньше существовали специализированные конструкторы с ограниченными наборами функций и жёстко заданными параметрами, то сегодняшнее разнообразие конструкторов просто поражает: настоящие микропроцессорные системы, собираемые на коленке, имеют практически неограниченный функционал. Богатая фантазия, широкая элементная база, большие комьюнити фанатов и инженеров и поддержка производителем - основные отличительные особенности таких востребованных рынком наборов для робототехники.

Один из них и наиболее популярный, что естественно, - Ардуино . Конструктор моментальной сборки электронных автоматических устройств любой степени сложности: высокой, средней и низкой. Эту платформу называют иначе «physical computing» за плотное взаимодействие с окружающей средой. Печатная плата с микропроцессором, открытый программный код, стандартные интерфейсы и подключение датчиков к Ардуино - слагаемые его популярности.

Система - плата, которая объединяет все нужные компоненты, обеспечивающие полный цикл разработки. Сердце этой платы - микроконтроллер . Он обеспечивает управление всей периферией. Датчики, подключаемые к системе, позволяют системе «общаться» и взаимодействовать с окружением: анализировать, отмечать изменять.

Подключение цифрового датчика влажности, температуры

Два популярных датчика - DHT11, DHT22 - предназначены для замера влажности и температуры (про подключение датчика температуру мы еще ); недорогое решение, отлично подходят для простых схем и обучения. Термистор, ёмкостной датчик - основа DHT11 и DHT22. Внутренний чип выполняет АЦП, давая на выходе «цифру», которую поймёт любой микроконтроллер.

DHT11 отличается от DHT22 диапазоном измерения и частотностью опроса: влажность - 20-80% для DHT11 и 0-100% для DHT22; температура - 0°C до +50°C для DHT11 и -40°C до +125°C для DHT22; опрос - ежесекундный для DHT11 и раз в две секунды для DHT22.

Оба датчика DHT имеют стандартных 4 вывода :

  1. Питание датчиков.
  2. Шина данных.
  3. Не задействован.
  4. Земля.

Вывод данных и питания требует подключения между ними резистора 10 кОм.

Для DHT-датчиков разработана библиотека DHT.h (можно посмотреть по ссылке). При загрузке скетча в контроллер монитор порта должен отобразить текущие значения влажности, температуры. Проверить работоспособность просто - достаточно подышать на датчик и взять его в руки: температура и влажность должны поменяться.

Возможен вывод значений на экран LCD 1602 I2C , если включить его в систему.

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

Также некоторые акватеррариумы требуют особых условий влажности, которые легко контролировать при помощи DHT1 и DHT22.

Часто в деле предсказания погоды или определения высоты подъёма над уровнем моря требуется решить задачу измерения давления. Здесь на помощь приходят электронные барометры на технологии МЭМС: тензорометрический или пьезорезизстивный метод, связанный с переменностью сопротивления прибора при приложении деформирующих материал сил.

Наиболее популярен датчик BMP085 ; помимо барометрического давления он регистрирует и температуру. Ему на смену выпустили BMP180, он обладает теми же характеристиками:

  • Чувствительность в диапазоне: 300-1100 гПа (если в метрах - 9000 - 500 м над уровнем моря);
  • Разрешение: 0,03 гПа или 0,25 м;
  • Рабочая температура датчика -40 +85°C, точность измерения в указанном диапазоне - ±2°C;
  • Подключение по стандарту i2c;
  • V1 использует 3.3 В для питания и логики;
  • V2 использует 3.3-5 В для питания и логики.

Подключение датчиков к Ардуино в этом случае стандартно:

Понадобится Unified Sensor Driver - его обновлённая версия обеспечивает более высокую точность показаний; кроме того, позволяет работать с несколькими разными подключёнными датчиками давления одновременно. Необходимо также установить Adafrut_Sensor library.

Без данного датчика не обходится ни одна серьёзная охранная система. Инфракрасный датчик - базовый элемент обнаружения присутствия теплокровных.

Также при помощи PIR-датчиков чрезвычайно удобно управлять освещением в зависимости от нахождения рядом человека. Инфракрасные или пироэлектрические датчики просты по внутреннему устройству и недороги. Они крайне надёжны и редко выходят из строя.

Основа датчика - пироэлектрик или диэлектрик, способный создавать поле при изменении температуры. Они устанавливаются попарно, а сверху закрываются куполом с сегментами в виде обычных линз или линзой Френеля. Это позволяет сфокусировать лучи от разных точек проникновения.

При отсутствии излучающих тепло тел в помещении у каждого элемента одинаковая попадающая доза излучения, соответственно, одинаковое напряжение на выходах. При попадании в зону «обзора» датчиков живого теплокровного нарушается равновесие и появляются импульсы, которые и регистрируются.

HC-SR501 - наиболее распространённый и популярный датчик. Он имеет два подстроечных переменных резистора: один - для регулировки чувствительности и размера обнаруживаемого объекта, второй - для регулировки времени срабатывания (времени генерации импульса после обнаружения).

Схема подключения стандартна и не вызовет затруднений.

Несмотря на то, что функция измерения температуры входит во многие датчики, лучше использовать отдельный специализированный датчик. Например, DS18B20. Это интегральный датчик, имеющий цифровой последовательный интерфейс.

Его сильные стороны:

  • предварительная заводская калибровка;
  • погрешность менее 0,5°С;
  • программно задаваемая разрешающая способность в 0,0625°С при 12-и битном разрешении;
  • чрезвычайно большой диапазон измеряемых температур: от -55°С до +125°С;
  • в датчике имеется встроенный АЦП;
  • в одну линию связи могут быть включены несколько датчиков.

Корпус ТО-92 - самый распространённый для этих датчиков. Приняты две основные схемы подключения температурного датчика DS18B20 к микропроцессору или контроллеру:

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

Эти три операции демонстрируют работу с датчиком и библиотека OneWire прекрасно их поддерживает. Устанавливаем библиотеку OneWire Library. После этого грузим скетч - и программная среда готова.

Возможно подключение нескольких датчиков DS18B20 - в этом случае их требуется подключать параллельно. Библиотека OneWire позволит считывать показания сразу со всех одновременно. При одновременном большом количеством подключений датчиков необходимо добавлять дополнительно резисторы на 100 или 120 Ом между ножкой data датчика DS18B20 и шиной data на Ардуино.

Выводы

Подключение датчиков к Ардуино - это превращение алгоритмизированного робота, управляемого автоматически или в ручном режиме, в полноценную среду взаимодействия устройств и схем с окружающей средой. Не стоит забывать - это не панацея от всех бед. И не конечный высокотехнологичный продукт или конечная область применения. Ардуино - это комплекс аппаратных и программных решений, который поможет:

  • освоить системы алгоритмизации начинающим инженерам;
  • освоить базовые навыки конструирования;
  • научиться программировать.

Вне зависимости от вашего уровня подготовки, ваших знаний, всегда можно подобрать для себя задачи по силам. Можно собрать простенькое решение автоматизации какой-либо несложной задачи без пайки вместе со школьником; а можно поставить глобальную задачу, где требуются помимо знаний и логики ещё и умение качественно паять и верно чертить и читать чертежи. А активные сообщества, форумы и базы знаний по системе Ардуино помогут решить практически любой вопрос.

Введение

Что можно вывести на двухстрочный экран, кроме «Hello world!»? Почему бы не отображать температуру влажность и давление?

Датчики предлагаемые как учебное пособие к arduino (DHT11, DHT22) показывают температуру и влажность воздуха. В учебных целях (для университета) понадобилось наблюдать так же и за давлением. Естественно на кафедре есть барометр, но почему бы не собрать свой? К тому же можно в дальнейшем накапливать показания в автоматическом режиме, и это неплохой опыт в изучении arduino.

Так или иначе из Китая были заказаны комплектующие и собрано данное устройство.

Необходимые комплектующие

Для отправки скетча в arduino был использован USB-UART . Так же можно было использовать Raspberry Pi или компьютер с COM портом.

Схема подключения для прошивки и код программы

Из Китая USB-UART пришёл с набором проводков:

Их вполне хватило. Перемычку оставил на 3.3 вольта, несмотря на то что моя версия arduino питается от 5 вольт.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (опционально, у меня не работал, возможно потому что напряжение сигналов осталось 3.3В)

Если не подключать DTR, то после отправки прошивки arduino нужно перезагрузить встроенной кнопкой, начнётся активный обмен данными в обе стороны (о чём свидетельствуют светодиоды на USB-UART), после успешной загрузки прошивки, она сама перезагрузится.

Необходимые сторонние библиотеки:

Непосредственно код, с комментариями из примеров (на случай, если кому то понадобится что то менять).

Код

#include #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include //Global sensor object BME280 mySensor; LiquidCrystal_I2C lcd(0x3F,16,2); //Адрес дисплея, в моём случае 0x3F void setup() { lcd.init(); lcd.backlight(); //***Driver settings********************************// //commInterface can be I2C_MODE or SPI_MODE //specify chipSelectPin using arduino pin names //specify I2C address. Can be 0x77(default) or 0x76 //For I2C, enable the following and disable the SPI section mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; //Адрес датчика, в моём случае не стандартный //For SPI enable the following and dissable the I2C section //mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; //***Operation settings*****************************// //renMode can be: // 0, Sleep mode // 1 or 2, Forced mode // 3, Normal mode mySensor.settings.runMode = 3; //В примере предлагают использовать Forced mode, но при обновлении раз в секунду достаточно Normal mode //tStandby can be: // 0, 0.5ms // 1, 62.5ms // 2, 125ms // 3, 250ms // 4, 500ms // 5, 1000ms // 6, 10ms // 7, 20ms mySensor.settings.tStandby = 5; //Очевидно чаще не нужно //filter can be off or number of FIR coefficients to use: // 0, filter off // 1, coefficients = 2 // 2, coefficients = 4 // 3, coefficients = 8 // 4, coefficients = 16 mySensor.settings.filter = 0; //tempOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.tempOverSample = 1; //pressOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.pressOverSample = 1; //humidOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.humidOverSample = 1; //Calling .begin() causes the settings to be loaded mySensor.begin(); } void loop() { //Буквы можно вывести один раз, а далее менять показания, но показания при изменении количества значащих цифр могут сдвигать строку. lcd.setCursor(0,0); lcd.print("H="); lcd.print((uint8_t)mySensor.readFloatHumidity()); lcd.print("%"); lcd.print(" T="); lcd.print(mySensor.readTempC()); lcd.setCursor(13,0); lcd.print(" P:"); lcd.setCursor(0,1); int mmH=mySensor.readFloatPressure()/133; lcd.print(mmH); lcd.print("mmH "); lcd.print(mySensor.readFloatPressure()); lcd.setCursor(14,1); lcd.print("Pa"); delay(1000); }


Адрес датчика можно угадать, их всего два.

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

В данном случае:


И адрес будет 0x3F т.к. A0 - A2 разомкнуты:

Светодиод который обведён в овал лучше можно выпаять.

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

Резистор выбирался как половина от сопротивления датчика (между VVC и GND), чтобы падения напряжения на нём было 1.7 вольта. Так же схему можно запитать от входа RAW, другим напряжением (например от кроны).

На фотографии видно, что для компактности можно взять питание на датчик и дисплей с другого пина. Так же там видно ответвление оранжево-жёлтой пары проводов, на них висит резистор на 100 Ом, для уменьшения яркости подсветки (можно оставить джампер, но будет резать глаза).

В моём случае всё питается от старого компьютерного блока питания. Можно питать от USB. Все комплектующие были приклеены оказавшемся под рукой клеем «Момент».

Итог

На рабочем месте появился 1602 прикрученный к столу, который показывает давление, влажность, температуру. Arduino можно перепрошить не снимая (возможно станет бегущей строкой).

Датчики атмосферного давления bmp180, bmp280, bme280 – частые гости в инженерных проектах. С их помощью можно предсказать погоду или измерить высоту над уровнем моря. Сегодня именно эту линейку можно назвать самыми популярными и недорогими сенсорами для ардуино. В этой статье мы расскажем принцип действия датчиков, схему подключения к различным платам Arduino и приведем примеры программирования скетчей.

Барометр – устройство, измеряющее атмосферное давление. Электронные барометры используются в робототехнике и различных электронных устройствах. Наиболее распространенными и доступными являются датчики давления от фирмы BOSH: это BMP085, BMP180, BMP280 и другие. Первые два очень похожи между собой, BMP280 – это более новый и усовершенствованный датчик.

Датчики давления работают на преобразовании давления в движение механической части. Состоит датчик давления из преобразователя с чувствительным элементом, корпуса, механических элементов (мембран, пружин) и электронной схемы.

Датчик BMP280 создан специально для приложений, где требуются малые размеры и пониженное потребление энергии. К таким приложениям относятся навигационные системы, прогноз погоды, индикация вертикальной скорости и другие. Датчик обладает высокой точностью, хорошей стабильностью и линейностью. Технические характеристики датчика BMP280:

  • Габариты 2 х 2,5 х 0,95 мм.
  • Давление 300-1100гПа;
  • Температуры от 0С до 65 С;
  • Поддержка интерфейсов I2C и SPI;
  • Напряжение питания 1,7В – 3,6В;
  • Средний ток 2,7мкА;
  • 3 режима работы – режим сна, режим FORCED (проведение измерения, считывание значения, переход в спящий режим), режим NORMAL (перевод датчика в циклическую работу – то есть устройство самостоятельно через установленное время выходит из режима сна, проводит измерения, считывает показания, сохраняет измеренные значения и переходит снова в режим сна).

Датчик BMP180 – это дешевый и простой в применении сенсорный датчик, который измеряет атмосферное давление и температуру. Используется обычно для определения высоты и в метеостанциях. Состоит устройство из пьезо-резистивного датчика, термодатчика, АЦП, энергонезависимой памяти, ОЗУ и микроконтроллера.

Технические характеристики датчика BMP180:

  • Пределы измеряемого давления 225-825 мм рт. ст.
  • Напряжение питания 3,3 – 5В;
  • Ток 0,5мА;
  • Поддержка интерфейса I2C;
  • Время срабатывания 4,5мс;
  • Размеры 15 х 14 мм.

Датчик bme280 содержит в себе 3 устройства – для измерения давления, влажности и температуры. Разрабатывался для малого потребления тока, высокой надежности и долгосрочной стабильной работы.

Технические характеристики датчика bme280:

  • Размеры 2,5 х 2,5 х 0,93 мм;
  • Металлический LGA-корпус, оснащенный 8-ю выходами;
  • Напряжение питания 1,7 – 3,6В;
  • Наличие интерфейсов I2C и SPI;
  • Потребляемый ток в режиме ожидания 0,1 мкА.

Если сравнивать все устройства между собой, то датчики очень похожи. По сравнению со своим предшественником, к которым относится BMP180, более новый датчик BMP280 заметно меньше по размерам. Его восьмиконтактный миниатюрный корпус требует аккуратности во время монтажа. Также устройство поддерживает интерфейсы I2C и SPI, в отличие от предшественников, которые поддерживали только I2C. По логике работы датчика изменений практически нет, была только усовершенствована температурная стабильность и увеличено разрешение АЦП. Датчик BME280, измеряющий температуру, влажность и давление, также похож на BMP280. Отличие между ними заключается в размерах корпуса, так как BME280 имеет датчик влажности, который немного увеличивает габариты. Количество контактов и их расположение на корпусе совпадают.

Варианты подключения к Arduino

Подключение датчика BMP180 к Ардуино. Для подключения понадобятся сам датчик BMP180, плата Ардуино UNO, соединительные провода. Схема подключения показана на рисунке ниже.

Землю с Ардуино нужно соединить с землей на датчике, напряжение – на 3,3 В, SDA – к пину А4, SCL – к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C. Сам датчик работает от напряжения 3,3 В, а Ардуино – от 5 В, поэтому на модуле с датчиком установлен стабилизатор напряжения.

Подключение BMP 280 к Ардуино. Распиновка и вид сверху платы изображены на рисунке.

Сам модуль датчика давления выглядит следующим образом:

Для соединения с Ардуино нужно подключить выходы следующим образом: соединить землю с Ардуино и на датчике, VCC – на 3,3В, SCL / SCK – к аналоговому контакту А5, SDA / SDI – к А4.

Подключение датчика BME280. Расположение контактов и распиновка у датчика BME280 такая же, как у BMP280.

Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами.

При подключении по I2C нужно соединить контакты SDA и SCL.

При подключении по SPI нужно соединить SCL с модуля и SCK (13й контакт на Ардуино), SDO с модуля к 12 выводу Ардуино, SDA – к 11 контакту, CSB (CS) – к любому цифровому пину, в данном случае к 10 контакту на Ардуино. В обоих случаях напряжение подключается к 3,3В на Ардуино.

Описание библиотеки для работы с датчиком. Пример скетча

Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080. Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.

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

Status = pressure.startTemperature();// Считываются данные с датчика о температуре if(status!=0){ delay(status); // Ожидание status = pressure.getTemperature(T); // Сохранение полученных данных о температуре if(status!=0){ Serial.print("Temperature: "); // Выведение на экран слова «Температура» Serial.print(T,2); // Вывод на экран значения температуры. Serial.println("deg C, "); //Печать символа градуса Цельсия.

Затем нужно получить информацию об атмосферном давлении.

Status = pressure.startPressure(3); // происходит считывание давления if(status!=0){ delay(status); // Ожидание status = pressure.getPressure(P,T); // получение давления, сохранение if(status!=0){ Serial.print("Absolute pressure: "); // Вывод на экран слов «Атмосферное давление» Serial.print(P,2); // Вывод на экран значения переменной mBar Serial.print(" mbar, "); // Вывод на экран текста "mBar" Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.) Serial.println(" mmHg");} // вывод на экран единицы измерения давления "mmHg" (мм. Рт.ст.).

После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.

Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.

Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.

Void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); //определение температуры, вывод ее на экран в градусах Цельсия. Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); //определение давления, вывод его на экран Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); //определение влажности в процентах, вывод измеренного значения на экран. Serial.println(); }

Возможные ошибки при подключении и устранение их

Наиболее часто встречающаяся ошибка – неправильные данные о давлении и температуре, которые отличаются на несколько порядков от реального значения. Причиной этого чаще всего становится неправильное подключение – например, в библиотеке указано, что нужно подключать по I2C, а датчик подключен по SPI.

Также при использовании “китайских” датчиков можно столкнуться с нестандартными I2C или SPI адресами. В этом случае рекомендуется просканировать все присоединенные устройства с помощью одного из популярных скетчей и выяснить, по какому адресу откликается ваш датчик давления.

Еще одной проблемой может стать несоответствие рабочего напряжения питания модуля базовому напряжению используемого контроллера. Так, для работы с датчиком на 3,3 В вам потребуется создать делитель напряжения или использовать один из существующих готовых модулей согласования уровней. Кстати, такие модули достаточно дешевы и начинающим рекомендуется использовать их.

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

Заключение

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

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

Приветствую коллеги!
Т.к. зимой погода в основном не летная, то есть много свободного времени, которое не плохо бы чем-то занимать, чтобы мозги не засыхали от безделья. Я с недавних пор решил освоить предмет лютых холиваров и жарких споров, а именно: микроконтроллер Atmega328 в реализации Arduino.
Сильно прошу по поводу самой Ардуины дебатов не устраивать, про все ее плюсы и минусы и так в сети информации навалом.
Итак, учитывая специфику сайта, про "умный дом" рассказывать я думаю не совсем в тему, поэтому на базе Ардуины будем сооружать барометрический высотомер с трехразрядным семисегментным светодиодным дисплеем.

Подробнее?


Сразу скажу, на оригинальность и новаторство не претендую, подобных проектов в сети навалом. Но на этом ресурсе ничего подобного поиском не обнаружил, потому и решил опубликовать, вдруг кому-то пригодится.
Код опять же писал сам, потому, если там сплошная индусятина - не судите строго =) Я пока только учусь. Последний раз контроллеры программировал на 4-м курсе института больше 10 лет назад =) Грамотная и конструктивная критика приветствуется!
Постараюсь доступно и подробно объяснить как собрать такое устройство, справится человек с почти любым уровнем подготовки, я думаю.

Основной плюс данного девайса - его цена. Даже по теперешней жизни и курсе валют можно уложиться в 350р., что в общем-то не деньги. Так же потребуются прямые руки и умение обращаться с паяльником.

Функции устройства:
- Измерение текущей высоты и вывод ее на светодиодный дисплей.
- Запоминание максимального значения высоты имевшей место с момента включения питания.
- Вывод максимальной высоты на дисплей посредством нажатия кнопки.
- Запись максимального значения высоты в энергонезависимую память (EEPROM) контроллера (сохраняется после отключения питания).
- Чтение сохраненной максимальной высоты из EEPROM и вывод ее на дисплей.

За нулевую точку отсчета принимается высота на которой было включено питание устройства.

Что понадобится (в скобках ключевые слова для поиска на всяких там ебаях и т.п.)
- микроконтроллер ардуино, в принципе подойдет почти любой, если код даптировать, но собиралось и проверялось все на базе (Arduino Nano).

- барометрический датчик высоты с шиной I2C (BMP085).

- трехразрядный семисегментный светодиодный дисплей с общим анодом (7-Segment LED Display).
- провода для соединения всего этого в единое целое, я использовал готовые и с разъемами, но это совсем не обязательно (Dupont Wire).

- кнопка, подойдет любая без фиксации положения (Tact Switch Push Button). Например такая:
- резистор от 1КОм до 10КОм.
- три резистора 100Ом.
- паяльник со всеми гобулями и умение им пользоваться.
- Arduino Software .

Опционально:
- макетная плата для распайки дисплея.

Для тех кто совсем не в теме. Прежде чем пытаться собрать девайс и вникнуть в код настоятельно рекомендую посетить и почитать несколько ресурсов:
Введение в тему, простейшие примеры.
О подключении семисегментного дисплея с примерами.
Описание датчика, примеры, библиотеки.
Времени много не займет, понимания сильно прибавит =)

Сначала немного о дисплее.
Семисегментный светодиодный дисплей с общим анодом представляет из себя вот такую сборку из светодиодов (на картинке обведено красным):
Если повнимательней посмотреть на схему, то станет понятно, что одновременно может светиться только один из разрядов, т.е. чтобы отобразить трехразрядное число, нужно по очереди зажигать и гасить каждый разряд, причем делать это очень быстро. Поэтому цифры как ни крути будут мерцать, главное, чтобы это мерцание было достаточно частым и не воспринималось глазом как мерцание. А это значит, что ардуино будет работать в том числе и в качестве контроллера этого дисплея, по сути рисуя по очереди цифры составляющие число равное текущей высоте.
Сразу оговорюсь, можно купить и готовое решение, со встроенным контроллером, но стоит оно в 5 раз дороже, да и мне не попалось подходящей реализации при поиске, т.к. хотелось именно 3 разрядный, а в продаже все больше 4-х разрядные.
Кстати, учитывая что дисплей трехразрядный, максимальная высота, которую он в состоянии отобразить = 999м. В принципе устройство может быть легко адаптировано для 4-х разрядного дисплея, но программу при этом придется немного модифицировать. Кто разберется в коде для 3-х разрядов, тот легко сможет его адаптировать и для 4-х.
В итоге не смотря на всплывшие проблемы с этим самым мерцанием, удалось добиться более-менее приемлимых результатов, об этом ниже, т.к. проблемы возникли из-за датчика высоты.
Подробней о датчике.
Датчик барометрический, т.е. определяет изменение высоты по изменению атмосферного давления. Фактически датчик измеряет только атмосферное давление, вычислением высоты как функции от давления занимается уже код библиотеки для датчика. При этом датчик имеет встроенный АЦП и интерфейс I2C, т.е. выдает измеренную величину уже в цифровом виде, что несомненно является плюсом. Для работы с датчиком существует готовая библиотка . Я использовал именно первую версию, она менее ресурсоемка и проще встраивается в код. Функционал библиотеки позволяет настраивать точность измерений по шкале от 0 - наименьшая точность, до 3 - наибольшая точность (см. код). Хотя если честно я не заметил особенной разницы между уровнями выше 0. Погрешность измерений составляет около 1 метра, что в общем-то вполне приемлимо. Результат измерений - это абсолютная высота над уровнем моря при нормальном атмосферном давлении. Но это как раз совсем неинтересно. С другой стороны при помощи ардуино и простейших математических операций легко можно вычислить относительную высоту, что и было проделано.
Но не обошлось и без ложки дегтя: опрос датчика при помощи стандартной функции происходит достаточно длительное время, а учитывая, что ардуино еще и контроллер семисегментного дисплея, получились достаточно забавные спецэффекты, т.е. во время опроса датчика вывод на дисплей само собой останавливался и поэтому цифра, которая отображалась на тот момент горела чуть дольше других. В итоге получалась такая типа гирлянда из трех элементов.
В конечном итоге поигравшись с задержками и подобрав оптимальный период опроса датчика удалось добиться практически полного отсутствия мерцания. Тем более, что в опросе датчика каждый цикл программы необходимости нет никакой, высота все же меняется с ограниченной скоростью. А вот мельтешение первого разряда из-за погрешности и слишком частых опросов датчика смотрится не красиво.
В принципе будь у меня скилл покруче, можно было бы переписать библиотеку датчика, но пока не готов. Да и в такой реализации функции свои вполне выполняет, остальное лирика.
Вывод цифр был переведен на прерывание, мерцание ликвидировано, скетч обновлен.
На этом краткий экскурс по элементам устройства пожалуй закончу и перейду к сборке.

Схема соединения элементов устройства (кликабельно):


Предвосхищая вопросы из серии "что, нормальную схему не мог нарисовать?!" скажу, что мог бы, но для непосвященных такой ваиант мне думается будет проще для восприятия, а посвященным все равно, и так читается схема нормально. Распиновку семисегментника нашел только для четырехразрядной версии, трехразрядная версия отличается банально отсутствием 6-й ноги.

Что касется питания устройства: ардуино в первозданном виде способен нормально пережить от 7В до 16В, в крайнем случае от 6В до 20В. Но, учитывая, что у меня был китайский клон, гнусных опытов я ставить не стал, но от батареи LiPo 3S работает без проблем.
Датчик желательно упаковать таким образом, чтобы доступ воздуха был свободный, но при этом исключить прямой обдув потоками воздуха отверстия в датчике, например, прикрыть его пороллоном.
С платы ардуино рекомендую удалить светодиоды RX и TX, т.к. они включены параллелльно 0 и 1 цифровым выводам, из-за чего сегменты подключенные к этим выводам будут светиться с меньшей яркостью.