Барометр на микроконтроллере своими руками: Электронный барометр своими руками | Библиотека устройств на микроконтроллерах

Рукам
alexxlab

Содержание

Электронный барометр своими руками | Библиотека устройств на микроконтроллерах

Давно хотел иметь у себя в хозяйстве барометр. Да все никак не получалось — то дорого, то не попадался, то еще какие-то препятствия. В конце концов решил сделать сам, для чего и приобрел датчики давления MPX4115AP и влажности HIH-4000-004. Оба аналоговые, отсюда следует, что барометр по сути должен представлять из себя двухканальный вольтметр.

За основу я взял барометр из статьи «Небольшая метеостанция своими руками». Оттуда я добросовестно содрал пересчет показаний АЦП в мм.рт.ст. (миллиметры ртутного столба), и % (влажности воздуха).
Схемотехнику изменил, потому что свой проект хотелось сделать с внешним питанием и на светоидодных индикаторах. Их лучше видно, потому что они ярко светятся и имеют большой размер. Да и потребляют они гораздо меньше, чем подсветка ЖКИ.

 

В результате творческих экспериментов родилась такая схема:

Микроконтроллер Atmega8 — классика жанра, семисегментный индикатор 

ВА56-12SRWA в количесве двух штук и источник питания, построенный по типовой схеме. Датчики давления и влажности MPX4115AP и HIH-4000-004, соответственно.

Цифровая и аналоговая земля на плате разделены. Питание тоже разделено на аналоговое и цифровое и подается через дроссели — 25 мкГн на аналоговые цепи и проводник в ферритовой трубочке на цифровые.

На входе АЦП низкочастотный пассивный RC фильтр с частотой среза 640 Гц для подавления помех. Выводы микроконтроллера AVCC и AREF (собственно как и положено) зашунтированы керамическим конденсаторами по 0,1 мкФ и еще танталовыми по 10,0 мкФ (желтенькие со старых материнских плат).

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

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

Файлы:

Коммерческое использование данного устройства запрещено! 

По материалам: http://chipenable.ru/

Барометр

Прибор для измерения атмосферного давления

Статьи | Видео | Пользователи 2011 г.

Электронный барометр своими руками

В данном проекте мы рассмотрим подключения датчика давления по интерфейсу I2C к контроллеру Arduino и снятие показаний. Проще говоря мы создадим электронный барометр. В качестве датчика давления мы будем использовать сенсор BMP085 от фирмы Bosch.

Автор: Колтыков А.В.

  • Arduino
  • Барометр
  • Перевод
9 0 [0]
Похожие статьи:
  • Электронный регулятор громкости
  • Электронный зоопарк
  • Электронный термометр на DS18B20

Метеостанция на Arduino с беспроводным датчиком температуры

Метеостанция собранная на Arduino Uno и Arduino Nano, общающиеся между собой на частоте 433МГц.

Автор: freearduino

  • Sprint-Layout
  • DS18B20
  • Термометр
  • Барометр
12 2.6 [3]
Похожие статьи:
  • Термореле с цифровым датчиком температуры

Барометр на AVR

Рассмотрена схема барометра на микроконтроллере AVR и датчике атмосферного давления BMP180. Данные выводятся на ЖК дисплей.

Автор: Gauss

  • Барометр
  • AVR
  • LCD
  • HD44780
  • Atmel Studio
  • Микроконтроллер
47 0 [0]
Похожие статьи:
  • Частотомер на AVR

Комнатная метеостанция

Устройство на основе двух датчиков (DHT11 и BMP180), рассматриваемое в качестве комнатной метеостанции. Информация о температуре, влажности и атмосферном давлении выводится на ЖК дисплей.

Автор: Gauss

  • AVR
  • Термометр
  • Барометр
  • Гигрометр
  • HD44780
  • LCD
  • Atmel Studio
  • Микроконтроллер
108 0 [0]
Похожие статьи:
  • Простая домашняя метеостанция

WiFi ESP8266 — новый шаг в проектировании домашних устройств с беспроводным интерфейсом

В статье описан максимально простой процесс изготовления устройств на базе модулей WIFi ESP8266. В описанном варианте используется модуль ESP-07 с внешней антенной и горстка различных датчиков в качестве устройства онлайн домашней метеостанции.

Автор: Gauss

  • Wi-Fi
  • Sprint-Layout
  • ESP8266
  • Термометр
  • Гигрометр
  • Барометр
  • TFT
  • LCD
  • Микроконтроллер
19 5 [2]

Барометр с расширенными функциями

Простой электронный барометр на основе модуля Arduino и датчика давления BMP180. Барометр позволяет определить атмосферное давление, а также скорость и характер его изменения. Дополнительной опцией является измерение температуры воздуха.

Автор: Starik

  • Arduino
  • Барометр
29 0 [0] Весь список тегов

РадиоКот :: Простой барометр/термометр на МК.

Простой барометр/термометр на МК.

Всем привет!

Во первых хочу поздравить Кота с днем рождения! Процветать!

Теперь к статье.

«Простой барометр/термометр на МК»

Данная конструкция была разработана по просьбе моего друга — любителя автомобильных путешествий и offroad. Им (другу и сотоварищам) в походах уж очень хочется знать в какую сторону и с какой скоростью меняется атмосферное давление, дабы попытаться понять, что будет с погодой. Он выбрал недорогой индикатор ME-GLCD128x64 представленный на фото:

Устройство собрано на двусторонней ПП, изготовленной методом ЛУТ:

 

Микроконтроллер был выбран ATMega32 в дип корпусе по причинам: он у меня был, найти другое применение такому большому корпусу (DIP40) я не смог, т.к. в последнее время делаю практически все на SMD.

Датчик давления фирмы HopeRF — HP03M, общающийся с МК по протоколу TWI. Датчики температуры DS18S20 фирмы Maxim.

Часы реального времени были выбраны на микросхеме M41T81 по причинам: наличие коррекции времени и наличие Timekeeper — позволяющего читать текущее время без потерь тактов основного счетчика.

В качестве источника питания решено использовать автомобильный адаптер USB — он выдает 5В при токе до 0.5А. В связи с тем, что при старте двигателя «провалы» в бортовой сети авто довольно большие, то была необходима схема аварийной записи текущих значений в eeprom. Для этого используется развязка питания МК и остальной схемы. Питание МК поддерживается конденсатором 1000 мкф, которого, как показали испытания, достаточно (более чем в два раза) для того, что-бы МК успел записать 6 байт текущих значений датчиков в eeprom. Контроль наличия питания и цепь сброса МК обеспечивают два супервизора питания. Первый следит за напряжением на входе схемы и при пропадании питания выдает лог.0 на int0, тем самым запуская процедуру сохранения. Второй обеспечивает «жесткий» сброс самого МК при понижении его питания — для исключения повреждения eeprom.

В обычном режиме данные записываются в eeprom каждые полчаса. Всего хранятся значения за 2-е суток. Текущее время, полученное с m41t81 преобразуется в кол-во секунд от 2000 года, и на основе этого значения вычисляется текущий адрес для записи (один из 96). После несложных вычислений можно увидеть, что ресурс eeprom выработается приблизительно за 540 лет (каждая ячейка перезаписывается раз в 2-е суток) или при ежеминутном выключении питания за 18 лет. Получасовые данные — это средние значения давления, температуры по каждому датчику, время в секундах (кратное 96) и контрольная сумма CRC16. При старте данные читаются из eeprom и проверяется контрольная сумма каждого блока, если сумма не верна — данные игнорируются. Так-же данные игнорируются если дата их записи превышает 2-е суток (нам такие старые данные не нужны). Аналогично считается и контрольная сумма основных настроек, и если она не верна — считаем, что это первый запуск программы и выставляем все значения по дефолту.

Далее пример работы устройства.

В верхнем левом углу текущее давление в мм.рт.ст и после стрелочки — изменение давления за последние 3 часа. Ниже показания двух датчиков температуры и max/min значения за прошедшие 24 часа. Совсем внизу график изменения давления. (провал в графике — специально на эти полчаса устройство было выключено — следовательно данных нет и показывать нечего)

 

Меню настроек:

Возможны установки: даты и времени, «поправки» хода часов, поправки давления (для приведения его к текущей высоте), регулировка максимальной и минимальной яркости, время, через которое яркость переключится с максимума на минимум.

Все настройки выполняются тремя кнопками Enter,+,- Для входа в меню настроек необходимо удерживать + и — более секунды.

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

Собственно схема устройства:

В архиве: Прошивка, схема, плата, плата в diptrace. Плюс набор различных цифр и символов с сишными кодами.

А вот тут — сайт проекта.
PS: проект будет развиваться, т.к. впереди еще зимние испытания на морозоустойчивость 🙂

Файлы:
Бонус: много цифирок с «C»шными массивами
Прошивка, исходники, схема, плата

Все вопросы в Форум.

Схема. Барометр и термометр на ATmega8

      
      Пределы измерения и погрешность прибора определяются в основном примененными в нем датчиками: температура -55…+125 °С, атмосферное давление 225. 825 мм ртутного столба. Прибор питается напряжением 9 В от гальванической батареи типа «Крона» или сетевого адаптера Потребляемый ток — 30 мА (при выключенной подсветке ЖКИ). Размеры корпуса -118×72-28 мм. Работа прибора была проверена при температуре от -5 до +25 °С Погрешность измерения давления не превысила 4 мм ртутного столба.

      Схема барометра и термометра изображена на рис. 1, причем собранный на отдельной плате модуль измерения давления выделен штрихпунктирной линией.
      Необходимые для работы датчика тактовые импульсы частотой 32768 Гц вырабатывает кварцевый генератор на элементах микросхемы DD1. В принципе, эти импульсы мог бы формировать и микроконтроллер DD2 с помощью одного из имеющихся в нем таймеров. Но это потребовало бы усложнения программы.
      Напряжение 3,6 В для питания датчика В1 и микросхемы DD1 получено с помощью стабилитрона VD1. Резисторы R1—R3 — нагрузочные для линий связывающего датчике микроконтроллером интерфейса I2С и сигнала XCLR Печатная плата модуля измерения давления показана на рис. 2.

      Хотя датчик HP03SB содержит и встроенный измеритель температуры, его показания используются программой микроконтроллера DD2 только для уточнения результатов измерения давления. На ЖКИ HG1 вместе со значением давления выводятся показания другого датчика температуры — DS1624 (В2) Причина этого проста — он точнее.
      При необходимости датчик В2 можно сделать выносным и расположить там, где температура представляет наибольший интерес. При установке в корпусе прибора этот датчик следует вынести на боковую стенку, сделав в ней окно по его размерам. Иначе неизбежна ошибка на 1,5… 1,8 °С, в чем я убедился на практике.

      Напряжение питания +5 В стабилизировано микросхемой DA1. Подстроечным резистором R8 устанавливают наилучшую контрастность изображения на ЖКИ. Кнопкой SB1 включают подсветку его табло. Остальные элементы необходимы для работы микроконтроллера. Элементы R7, R9 С10 VD2 — цепь установки микроконтроллера в исходное состояние Кварцевый резонатор ZQ2 с конденсаторами С11.С12 — частотозадающая цепь тактового генератора микроконтроллера.

      На рис. 3 представлен чертеж основной печатной платы прибора а на рис. 4 — расположения деталей на ней. В переходное отверстие показанное залитыми (плата на рис. 2), необходимо вставить и пропаять с двух сторон проволочную перемычку. Для микроконтроллера DD1 должна быть предусмотрена панель, так как в процессе налаживания прибора эту микросхему придется извлекать и вновь устанавливать.
      Остановимся на некоторых особенностях датчика HP03SB, общий вид и габаритные размеры показаны на рис. 5. Для определения давления необходимо предварительно прочитать из памяти установленного в приборе экземпляра этого датчика двухбайтные значения коэффициентов С1—С1 и однобайтные значения параметров А—D. Все они индивидуальны для данного экземпляра.
      Результаты измерения представляют собой два двухбайтных числа: D1 —давление. D2 — температура. Прочитав их из памяти датчика, программа должна вычислить вспомогательные значения:

А затем — давление воздуха в гектопаскалях:
PhP = X·10/32+C7;
и в миллиметрах ртутного столба:
PHg = PhP·1000/13332.

      Более подробные сведения о датчике HP03SB имеются в [1]. Однако необходимо отметить что там указаны неверно адреса внутренней памяти датчика, по которым хранятся его индивидуальные константы. Следует пользоваться теми адресами что приведены в [2]. В приборе можно применить и другие датчики серии НР03. Некоторые из них имеют меньшую точность, другие отличаются конструктивным оформлением.

      Работа программы начинается с инициализации портов микроконтроллера и ЖКИ. Успешную инициализацию подтверждает вывод на табло надписи TERMOBAR» (буква Н пропущена). Затем инициализируется датчик давления, считываются его показания, выполняются расчеты, результаты которых преобразуются в двоично-десятичный формат и выводятся на индикатор, занимая три десятичных разряда. Аналогично происходят обработка и вывод на ЖКИ значения температуры. Его целая часть — три разряда, дробная — два разряда. Продолжительность показа значений давления и температуры по 3,5 с.

      Подпрограмма Timer_int каждые 70 мин проверяет в каком направлении за это время изменилось давление, и выводит на ЖКИ знаки «↑», «↓», «=». В подпрограммах инициализации и чтения показаний датчиков HP03SB и DS1624 состояние регистра статуса модуля TW1 микроконтроллера не проверяется.

      Для чтения коэффициентов и параметров датчика предназначена специальная программа ReadCC, которую необходимо загрузить в программную память микроконтроллера полностью собранного прибора (с подключенным модулем измерения давления), включить его и через несколько секунд выключить. После этого нужно извлечь микроконтроллер и с помощью программатора прочитать содержимое его EEPROM. В нем по адресам, указанным в табл. 1, находятся значения индивидуальных коэффициентов и параметров датчика. Далее необходимо открыть файл рабочей программы барометра-термометра BARO-2 asm, найти в нем фрагмент, приведенный в табл. 2, и исправить значения объявленных там констант в соответствии с прочитанными из EEPROM. Параметр D в программе не используется.

      Теперь программа готова к работе с установленным в прибор экземпляром датчика. Остается оттранслировать ее с помощью AVR Studio и загрузить полученный НЕХ-файл в микроконтроллер. Учтите, что аналогичный файл, приложенный к статье, рассчитан на работу с датчиком, имевшимся у автора Если загрузить его в микроконтроллер, прибор с другим экземпляром датчика давления будет работать но давать неточные показания.

      В разработке использованы фрагменты программ из [3] и [4]. Подпрограммы преобразования чисел из шестнадцатеричного формата в двоично-десятичный переработаны с учетом разрядности чисел. Подпрограммы перемножения и деления двухбайтных чисел, предназначенные для микроконтроллеров семейства MCS-51, переведены на язык ассемблера AVRASM Меньше всего подверглась изменениям подпрограмма управления ЖКИ, учтены лишь особенности индикатора MT-10S1 а для ввода и вывода сигналов использованы другие порты микроконтроллера.

Прилагаемые файлы:    baro-2.zip   

ЛИТЕРАТУРА
1. НР03 Series of calibrated sensor module HP03SB —    www.hoperf.com/pdf/HP03SB.pdf    .
2. HP03 programming guide —    www.hoperf.com/pdf/hp03_code.pdf   
3. Трамперт В. AVR-RISC микроконтроллеры.— К.. МК-Пресс, 2006
4. Фрунзе А. Микроконтроллеры? Это же просто! Том. 1. — М . Додэка-ХХI 2007.

Н. САЛИМОВ, г. Ревда Свердловской обл.
«Радио» №6 2010г.

Похожие статьи:
Барометрический высотомер
Цифровой термометр

Post Views: 1 365

BMP180 – подключение датчика атмосферного давления | RadioLaba.ru

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              #include <P16F628A.INC>

              LIST        p=16F628A    

              __CONFIG    H’3F18′           ;Конфигурация микроконтроллера

                                              

              errorlevel  -302              ;не выводить сообщения с ошибкой 302 в листинге

 

Sec           equ         0020h             ;вспомогательные регистры счета

Sec1          equ         0021h             ;

Sec2          equ         0022h             ;

nomer         equ         0023h             ;регистр хранения кода ascii символа

scetbit       equ         0024h             ;регистр счета кол-ва бит  

perem         equ         0025h             ;вспомогательный регистр приема/передачи байта по spi, i2c                

temp          equ         0026h             ;вспомогательный регистр счета

tmp_symb      equ         0027h             ;вспомогательный регистр счета для таблицы данных

oss           equ         0028h             ;регистр хранения значения точности преобразование результата давления

 

DIGIT1        equ         0030h             ;регистры подпрограммы преобразования двоичного числа

DIGIT2        equ         0031h             ;в десятичное по разрядам

DIGIT3        equ         0032h

DIGIT4        equ         0033h

DIGIT5        equ         0034h          

DIGIT6        equ         0035h

DIGIT7        equ         0036h

DIGIT8        equ         0037h

DIGIT9        equ         0038h

DIGIT10       equ         0039h

count_1       equ         003Ah

count_2       equ         003Bh

bin_HH        equ         003Ch

bin_HL        equ         003Dh

bin_LH        equ         003Eh

bin_LL        equ         003Fh

 

 

adr_i2c       equ         0040h             ;регистры подпрограммы передачи данных интерфейса i2c

tmp_i2c       equ         0041h

slave_adr     equ         0042h

data_i2c      equ         0043h

 

AC1_LH        equ         00A0h             ;регистры хранения калибровочных констант датчика BMP180

AC1_LL        equ         00A1h

AC2_LH        equ         00A2h

AC2_LL        equ         00A3h

AC3_LH        equ         00A4h

AC3_LL        equ         00A5h

AC4_LH        equ         00A6h

AC4_LL        equ         00A7h

AC5_LH        equ         00A8h

AC5_LL        equ         00A9h

AC6_LH        equ         00AAh

AC6_LL        equ         00ABh

B1_LH         equ         00ACh

B1_LL         equ         00ADh

B2_LH         equ         00AEh

B2_LL         equ         00AFh

MB_LH         equ         00B0h

MB_LL         equ         00B1h

MC_LH         equ         00B2h

MC_LL         equ         00B3h

MD_LH         equ         00B4h

MD_LL         equ         00B5h

 

X1_HH         equ         00B6h             ;регистры для расчета значений температуры и давления датчика BMP180

X1_HL         equ         00B7h

X1_LH         equ         00B8h

X1_LL         equ         00B9h

X2_HH         equ         00BAh

X2_HL         equ         00BBh

X2_LH         equ         00BCh

X2_LL         equ         00BDh

X3_HH         equ         00BEh

X3_HL         equ         00BFh

X3_LH         equ         00C0h

X3_LL         equ         00C1h

B3_HH         equ         00C2h

B3_HL         equ         00C3h

B3_LH         equ         00C4h

B3_LL         equ         00C5h

B5_HH         equ         00C6h

B5_HL         equ         00C7h

B5_LH         equ         00C8h

B5_LL         equ         00C9h

B4_HH         equ         00CAh

B4_HL         equ         00CBh

B4_LH         equ         00CCh

B4_LL         equ         00CDh

B6_HH         equ         00CEh

B6_HL         equ         00CFh

B6_LH         equ         00D0h

B6_LL         equ         00D1h

 

REGA3         equ         00D2h

REGA2         equ         00D3h

REGA1         equ         00D4h

REGA0         equ         00D5h

REGB3         equ         00D6h

REGB2         equ         00D7h

REGB1         equ         00D8h

REGB0         equ         00D9h

REGC3         equ         00DAh

REGC2         equ         00DBh

REGC1         equ         00DCh

REGC0         equ         00DDh

MTEMP         equ         00DEh

MCOUNT        equ         00DFh

 

P_HH          equ         00E0h             ;регистры хранения значения давления

P_HL          equ         00E1h

P_LH          equ         00E2h

P_LL          equ         00E3h

 

P_M           equ         00E4h             ;регистры хранения значения давления в мм рт.ст.

P_L           equ         00E5h

 

T_HH          equ         00E6h             ;регистры хранения значения температуры

T_HL          equ         00E7h

T_LH          equ         00E8h

T_LL          equ         00E9h

tmp           equ         00EAh             ;вспомогательный регистр счета

 

flag          equ         007Fh             ;регистр флагов

              

#DEFINE       res_lcd     PORTB,4           ;присвоение названий линиям ввода-вывода

#DEFINE       cs          PORTB,5           ;для работы с LCD дисплеем Nokia 5110

#DEFINE       dat_com     PORTB,6           ;

#DEFINE       sdata       PORTB,7           ;

#DEFINE       sclk        PORTA,1           ;

 

#DEFINE       sda         PORTB,2           ;линия SDA для подключения датчика BMP180

#DEFINE       scl         PORTB,3           ;линия SCL для подключения датчика BMP180

#DEFINE       sda_io      TRISB,2           ;линия направления SDA

#DEFINE       scl_io      TRISB,3           ;линия направления SCL

#DEFINE       led         PORTA,0           ;светодиод ошибки i2c

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              org         0000h             ;начать выполнение программы с адреса 0000h

              goto        Start             ;переход на метку Start

          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Основная программа

                                            

Start         movlw       b’00000010′       ;установка значений выходных защелок порта A    

              movwf       PORTA             ;

              movlw       b’00110000′       ;установка значений выходных защелок порта B    

              movwf       PORTB             ;

              

              movlw       b’00000111′       ;выключение компараторов

              movwf       CMCON             ;

 

              bsf         STATUS,RP0        ;выбрать 1-й банк    

              movlw       b’00001111′       ;настройка линий ввода\вывода порта B      

              movwf       TRISB             ;RB0,RB1 — на вход, остальные на выход

              movlw       b’11111100′       ;настройка линий ввода\вывода порта A  

              movwf       TRISA             ;RA0,RA1 — на выход, остальные на вход                      

              bcf         STATUS,RP0        ;выбрать 0-й банк

                    

              clrf        flag              ;сброс регистра флагов

                          

              call        init_lcd          ;вызов подпрограммы инициализации дисплея

              call        clear_lcd         ;вызов подпрограммы очистки дисплея

              call        viv_not           ;вывод на дисплей сообщения «— «

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

              

              movlw       b’11101110′       ;адрес устройства(BMP180)

              movwf       slave_adr

 

              call        paus              ;вызов подпрограммы паузы 5,3 мс

              movlw       .22               ;загрузка констант из датчика (22 байта) во 2-й банк ОЗУ

              movwf       tmp_i2c           ;

              movlw       0xAA              ;запись адреса ячейки с которой начнется чтение

              movwf       adr_i2c           ;

              bsf         flag,3            ;установка флага загрузки констант из датчика

              call        read_i2c          ;вызов подпрограммы чтения по I2C

              call        err_prov          ;проверка на ошибки записи/чтения I2C

    

bmp_1         call        rd_temp           ;вызов подпрограммы чтения температуры с датчика BMP180

 

              movlw       data_i2c          ;загрузка температуры в регистры T

              movwf       FSR

              bsf         STATUS,RP0  

              movf        INDF,W                      

              movwf       T_LH

              incf        FSR,F

              movf        INDF,W

              movwf       T_LL

              bcf         STATUS,RP0          

 

              movlw       .0                ;установка точности измерения давления (16-19бит, 0-3(oss))

              movwf       oss

              call        rd_pres           ;вызов подпрограммы чтения давления с датчика BMP180

 

              movlw       data_i2c          ;загрузка давления в регистры P

              movwf       FSR  

              bsf         STATUS,RP0  

              movf        INDF,W

              movwf       P_HL

              incf        FSR,F

              movf        INDF,W

              movwf       P_LH

              incf        FSR,F

              movf        INDF,W

              movwf       P_LL

              clrf        P_HH

              bcf         STATUS,RP0

              movf        oss,W             ;смещение результата преобразования в регистрах P

              sublw       .8                ;в соответвтвии с точностью преобразования

              bsf         STATUS,RP0

              movwf       tmp

bmp_2         bcf         STATUS,C

              rrf         P_HH,F

              rrf         P_HL,F

              rrf         P_LH,F

              rrf         P_LL,F

              decfsz      tmp,F

              goto        bmp_2

    

              call        rash_T_P          ;вызов подпрограммы расчета температуры и давления

          

              

              bsf         STATUS,RP0        ;копирование расчитанной температуры в регистры bin

              movf        T_HH,W

              bcf         STATUS,RP0

              movwf       bin_HH

              bsf         STATUS,RP0

              movf        T_HL,W

              bcf         STATUS,RP0

              movwf       bin_HL

              bsf         STATUS,RP0

              movf        T_LH,W

              bcf         STATUS,RP0

              movwf       bin_LH

              bsf         STATUS,RP0

              movf        T_LL,W

              bcf         STATUS,RP0

              movwf       bin_LL

                          

              call        bin2dec           ;вызов подпрограммы преобразования двоичного числа в десятичное

              call        ust_cur_1         ;установка курсора на 1-й строке LCD дисплея

              call        vivod_temp        ;вывод значения температуры на LCD

 

              bsf         STATUS,RP0        ;копирование расчитанного давления в регистры bin

              movf        P_HH,W

              bcf         STATUS,RP0

              movwf       bin_HH

              bsf         STATUS,RP0

              movf        P_HL,W

              bcf         STATUS,RP0

              movwf       bin_HL

              bsf         STATUS,RP0

              movf        P_LH,W

              bcf         STATUS,RP0

              movwf       bin_LH

              bsf         STATUS,RP0

              movf        P_LL,W

              bcf         STATUS,RP0

              movwf       bin_LL

 

              call        bin2dec           ;вызов подпрограммы преобразования двоичного числа в десятичное

              call        ust_cur_3         ;установка курсора на 3-й строке LCD дисплея

              call        vivod_p           ;вывод значения давления (Паскали) на LCD

 

              bsf         STATUS,RP0

              movf        P_M,W             ;копирование расчитанного давления (мм рт. ст) в регистры bin

              bcf         STATUS,RP0

              movwf       bin_LH

              bsf         STATUS,RP0

              movf        P_L,W

              bcf         STATUS,RP0

              movwf       bin_LL

              clrf        bin_HL

              clrf        bin_HH

 

              call        bin2dec           ;вызов подпрограммы преобразования двоичного числа в десятичное

              call        ust_cur_2         ;установка курсора на 2-ю строку LCD дисплея

              call        viv_p_mm          ;вывод значения давления (мм рт.ст.) на LCD

 

              call        paus1s            ;пауза 1 сек

              goto        bmp_1             ;переход на метку bmp_1

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Подпрорамма чтение температуры и давления с датчика BMP180 по интерфейсу I2C

            

rd_temp       movlw       0x2E              ;загрузка команды на преобразование температуры

              movwf       data_i2c          

              goto        rd_bmp1

            

rd_pres       movlw       0x34              ;загрузка команды на преобразование давления в зависимости

              movwf       data_i2c          ;от точности преобразования результата

              movf        oss,W

              movwf       perem

              incf        perem,F

pres_2        decfsz      perem,F

              goto        pres_1

              goto        rd_bmp1

 

pres_1        movlw       0x40

              addwf       data_i2c,F

              goto        pres_2

 

rd_bmp1       movlw       .1                ;передача команды на преобразование по I2C

              movwf       tmp_i2c           ;передача одного байта по I2C

              movlw       0xF4              ;

              movwf       adr_i2c           ;запись адреса ячейки с которой начнется чтение

              call        write_i2c         ;вызов подпрограммы записи по I2C

              call        err_prov          ;проверка на ошибки записи/чтения I2C

rd_bmp2       call        paus              ;вызов подпрограммы паузы 5,3 мс

 

              movlw       .1                ;проверка окончания преобразования

              movwf       tmp_i2c           ;передача одного байта по I2C

              movlw       0xF4              ;

              movwf       adr_i2c           ;запись адреса ячейки с которой начнется чтение

              call        read_i2c          ;вызов подпрограммы записи по I2C

              call        err_prov          ;проверка на ошибки записи/чтения I2C

 

              movlw      data_i2c

              movwf      FSR

 

              btfsc      INDF,5             ;проверка бита готовности результата

              goto       rd_bmp2            ;преобразование не окончено: переход на метку rd_bmp2

 

              movlw       .3                ;чтение результата преобразования

              movwf       tmp_i2c           ;передача 3-х байта по I2C

              movlw       0xF6              ;

              movwf       adr_i2c           ;запись адреса ячейки с которой начнется чтение

              call        read_i2c          ;вызов подпрограммы чтения по I2C

              call        err_prov          ;проверка на ошибки записи/чтения I2C

              return                        ;выход из подпрограммы

 

err_prov      btfss       flag,6            ;проверка ошибок передачи данных I2C

              return                        ;нет ошибок: выход из подпрограммы

err_1         bsf         led               ;ошибка: включить светодиод led

              goto        err_1             ;переход на метку err_1: зацикливание программы

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

rash_T_P      bsf         STATUS,RP0        ;переключение во 2-й банк

 

              clrf        REGA3             ;загрузка значения температуры UT в REGA

              clrf        REGA2

              movf        T_LH,W

              movwf       REGA1

              movf        T_LL,W

              movwf       REGA0

 

              clrf        REGB3             ;загрузка значения константы AC6 в REGB

              clrf        REGB2

              movf        AC6_LH,W

              movwf       REGB1

              movf        AC6_LL,W

              movwf       REGB0

 

              call        subtract          ;вычитание UT-AC6

 

              clrf        REGB3             ;загрузка значения константы AC5 в REGB

              clrf        REGB2

              movf        AC5_LH,W

              movwf       REGB1

              movf        AC5_LL,W

              movwf       REGB0

 

              call        multiply          ;умножение (UT-AC6)*AC5

 

              movlw       .15 = X1

              movwf       tmp

tdel_a1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        tdel_a1

 

              movf        REGA3,W           ;сохранение результата в регистре X1

              movwf       X1_HH

              movf        REGA2,W

              movwf       X1_HL

              movf        REGA1,W

              movwf       X1_LH

              movf        REGA0,W

              movwf       X1_LL

 

              btfsc       MD_LH,7           ;загрузка значения константы MD в REGB

              goto        tzag_a1

              clrf        REGB3

              clrf        REGB2

              goto        tzag_a2

tzag_a1       movlw       .255

              movwf       REGB3

              movlw       .255

              movwf       REGB2

tzag_a2       movf        MD_LH,W

              movwf       REGB1

              movf        MD_LL,W

              movwf       REGB0

 

              call        add               ;сумма X1+MD

 

              movf        REGA0,W           ;копирование результата (X1+MD) в REGB

              movwf       REGB0            

              movf        REGA1,W        

              movwf       REGB1

              movf        REGA2,W        

              movwf       REGB2

              movf        REGA3,W        

              movwf       REGB3  

              btfsc       MC_LH,7           ;загрузка значения константы MC

              goto        tzag_b1

              clrf        REGA3

              clrf        REGA2

              goto        tzag_b2

tzag_b1       movlw       .255

              movwf       REGA3

              movlw       .11)/(X1+MD) = X2

 

              movf        X1_HH,W           ;загрузка числа X1 в REGB

              movwf       REGB3

              movf        X1_HL,W

              movwf       REGB2

              movf        X1_LH,W

              movwf       REGB1

              movf        X1_LL,W

              movwf       REGB0

 

              call        add               ;сумма X1 + X2 = B5

 

              movf        REGA3,W           ;сохранение результата в регистре B5

              movwf       B5_HH

              movf        REGA2,W

              movwf       B5_HL

              movf        REGA1,W

              movwf       B5_LH

              movf        REGA0,W

              movwf       B5_LL

 

              movlw       .8                ;загрузка числа 8 в REGB

              movwf       REGB0

              clrf        REGB1

              clrf        REGB2

              clrf        REGB3

 

              call        add               ;сумма B5 + 8

 

              movlw       .4

              movwf       tmp

tdel_b1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        tdel_b1

 

              movf        REGA0,W           ;копируем результат температуры в регистр T

              movwf       T_LL

              movf        REGA1,W

              movwf       T_LH

              movf        REGA2,W

              movwf       T_HL

              movf        REGA3,W

              movwf       T_HH

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

rash_P        movf        B5_HH,W           ;загрузка числа B5 в REGA

              movwf       REGA3

              movf        B5_HL,W

              movwf       REGA2

              movf        B5_LH,W

              movwf       REGA1

              movf        B5_LL,W

              movwf       REGA0

 

                            

              clrf        REGB3             ;загрузка числа 4000 в REGB

              clrf        REGB2

              movlw       0x0F

              movwf       REGB1

              movlw       0xA0

              movwf       REGB0

 

              call        subtract          ;вычитание B5 — 4000 = B6

 

              movf        REGA3,W           ;сохранение результата в регистре B6 и REGB

              movwf       B6_HH

              movwf       REGB3

              movf        REGA2,W

              movwf       B6_HL

              movwf       REGB2

              movf        REGA1,W

              movwf       B6_LH

              movwf       REGB1

              movf        REGA0,W

              movwf       B6_LL

              movwf       REGB0

 

              call        multiply          ;умножение B6 * B6

 

              movlw       .12) в регистре X2

              movwf       X2_HH             ;для последующего вычисления, это не X2 из формул расчета

              movf        REGA2,W

              movwf       X2_HL

              movf        REGA1,W

              movwf       X2_LH

              movf        REGA0,W

              movwf       X2_LL

 

              btfsc       B2_LH,7           ;загрузка значения константы B2 в REGB

              goto        pzag_a1

              clrf        REGB3

              clrf        REGB2

              goto        pzag_a2

pzag_a1       movlw       .255

              movwf       REGB3

              movlw       .255

              movwf       REGB2

pzag_a2       movf        B2_LH,W

              movwf       REGB1

              movf        B2_LL,W

              movwf       REGB0

 

              call        multiply          ;умножение B2 * [(B6 * B6)/2^12]

 

              movlw       .11

              movwf       tmp

pdel_b1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_b1

 

              movf        REGA3,W           ;сохранение результата в регистре X1

              movwf       X1_HH

              movf        REGA2,W

              movwf       X1_HL

              movf        REGA1,W

              movwf       X1_LH

              movf        REGA0,W

              movwf       X1_LL

 

              btfsc       AC2_LH,7          ;загрузка значения константы AC2 в REGA

              goto        pzag_b1

              clrf        REGA3

              clrf        REGA2

              goto        pzag_b2

pzag_b1       movlw       .255

              movwf       REGA3

              movlw       .11 = X2

              movwf       tmp

pdel_c1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_c1

 

              movf        X1_LL,W           ;загрузка числа X1 в REGB

              movwf       REGB0            

              movf        X1_LH,W        

              movwf       REGB1

              movf        X1_HL,W        

              movwf       REGB2

              movf        X1_HH,W        

              movwf       REGB3  

 

              call        add               ;сумма X1 + X2 = X3

 

              movf        REGA3,W           ;сохранение результата в регистре X3

              movwf       X3_HH

              movf        REGA2,W

              movwf       X3_HL

              movf        REGA1,W

              movwf       X3_LH

              movf        REGA0,W

              movwf       X3_LL

 

              btfsc       AC1_LH,7          ;загрузка значения константы AC1 в REGA

              goto        pzag_c1

              clrf        REGA3

              clrf        REGA2

              goto        pzag_c2

pzag_c1       movlw       .255

              movwf       REGA3

              movlw       .255

              movwf       REGA2

pzag_c2       movf        AC1_LH,W

              movwf       REGA1

              movf        AC1_LL,W

              movwf       REGA0

 

              movlw       .2                ;умножение AC1 * 4

              movwf       tmp

pumn_a1       bcf         STATUS,C

              rlf         REGA0,F

              rlf         REGA1,F

              rlf         REGA2,F

              rlf         REGA3,F

              decfsz      tmp,F

              goto        pumn_a1

 

              movf        X3_LL,W           ;загрузка числа X3 в REGB

              movwf       REGB0            

              movf        X3_LH,W        

              movwf       REGB1

              movf        X3_HL,W        

              movwf       REGB2

              movf        X3_HH,W        

              movwf       REGB3  

 

              call        add               ;сумма (AC1 * 4) + X3

 

              bcf         STATUS,RP0

              movf        oss,W             ;смещение ((AC1 * 4) + X3)<<oss

              xorlw       .0

              bsf         STATUS,RP0

              btfsc       STATUS,Z

              goto        pumn_c1

              bcf         STATUS,RP0

              movf        oss,W

              bsf         STATUS,RP0              

              movwf       tmp

pumn_b1       bcf         STATUS,C

              rlf         REGA0,F

              rlf         REGA1,F

              rlf         REGA2,F

              rlf         REGA3,F

              decfsz      tmp,F

              goto        pumn_b1

 

pumn_c1       movlw       .2                ;загрузка числа 2 в REGB

              movwf       REGB0

              clrf        REGB1

              clrf        REGB2

              clrf        REGB3

 

              call        add               ;сумма [((AC1 * 4) + X3)<<oss] + 2

 

              movlw       .2                ;деление ([((AC1 * 4) + X3)<<oss] + 2)/4

              movwf       tmp

pdel_d1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_d1

              movf        REGA3,W           ;сохранение результата в регистре B3

              movwf       B3_HH

              movf        REGA2,W

              movwf       B3_HL

              movf        REGA1,W

              movwf       B3_LH

              movf        REGA0,W

              movwf       B3_LL

 

              btfsc       AC3_LH,7          ;загрузка значения константы AC3 в REGA

              goto        pzag_d1

              clrf        REGA3

              clrf        REGA2

              goto        pzag_d2

pzag_d1       movlw       .13 = X1

              movwf       tmp

pdel_e1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_e1

 

              movf        REGA3,W           ;сохранение результата в регистре X1

              movwf       X1_HH

              movf        REGA2,W

              movwf       X1_HL

              movf        REGA1,W

              movwf       X1_LH

              movf        REGA0,W

              movwf       X1_LL

 

              btfsc       B1_LH,7           ;загрузка значения константы B1 в REGA

              goto        pzag_e1

              clrf        REGA3

              clrf        REGA2

              goto        pzag_e2

pzag_e1       movlw       .255

              movwf       REGA3

              movlw       .16 = X2

              movwf       tmp

pdel_f1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_f1

 

              movf        X1_LL,W           ;загрузка числа X1 в REGB

              movwf       REGB0            

              movf        X1_LH,W        

              movwf       REGB1

              movf        X1_HL,W        

              movwf       REGB2

              movf        X1_HH,W        

              movwf       REGB3  

 

              call        add               ;сумма X1 + X2

 

              movlw       .2                ;загрузка числа 2 в REGB

              movwf       REGB0

              clrf        REGB1

              clrf        REGB2

              clrf        REGB3

 

              call        add               ;сумма (X1 + X2) + 2

 

              movlw       .2                ;деление ((X1 + X2) + 2)/4 = X3

              movwf       tmp

pdel_g1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_g1                    

              

              clrf        REGB3             ;загрузка числа 32768 в REGB

              clrf        REGB2

              movlw       0x80

              movwf       REGB1

              clrf        REGB0

 

              call        add               ;сумма X3 + 32768

 

              clrf        REGB3             ;загрузка значения константы AC4 в REGB

              clrf        REGB2

              movf        AC4_LH,W

              movwf       REGB1

              movf        AC4_LL,W

              movwf       REGB0

 

              call        multiply          ;умножение AC4 * (X3 + 32768)

 

              movlw       .15) = B4

              movwf       tmp

pdel_h2       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_h2

 

              movf        REGA3,W           ;сохранение результата в регистре B4

              movwf       B4_HH

              movf        REGA2,W

              movwf       B4_HL

              movf        REGA1,W

              movwf       B4_LH

              movf        REGA0,W

              movwf       B4_LL

 

              movf        P_HH,W            ;загрузка числа UP в REGA

              movwf       REGA3

              movf        P_HL,W

              movwf       REGA2

              movf        P_LH,W

              movwf       REGA1

              movf        P_LL,W

              movwf       REGA0

 

              movf        B3_LL,W           ;загрузка числа B3 в REGB

              movwf       REGB0            

              movf        B3_LH,W        

              movwf       REGB1

              movf        B3_HL,W        

              movwf       REGB2

              movf        B3_HH,W        

              movwf       REGB3  

 

              call        subtract          ;вычитание UP-B3

                

              clrf        REGB3             ;загрузка числа 50000 в REGB

              clrf        REGB2

              movlw       0xC3

              movwf       REGB1

              movlw       0x50

              movwf       REGB0

 

              bcf         STATUS,RP0

              movf        oss,W             ;смещение 50000 >> oss

              xorlw       .0

              bsf         STATUS,RP0

              btfsc       STATUS,Z

              goto        pdel_k1

              bcf         STATUS,RP0

              movf        oss,W

              bsf         STATUS,RP0              

              movwf       tmp

pdel_j1       rlf         REGB3,W

              rrf         REGB3,F

              rrf         REGB2,F

              rrf         REGB1,F

              rrf         REGB0,F

              decfsz      tmp,F

              goto        pdel_j1

 

pdel_k1       call        multiply          ;умножение (UP-B3) * (50000 >> oss)

 

              btfsc       REGA3,7

              goto        rash_P1

 

              bcf         STATUS,C          ;B7 < 0x80000000  (B7 * 2)

              rlf         REGA0,F

              rlf         REGA1,F

              rlf         REGA2,F

              rlf         REGA3,F

            

              movf        B4_LL,W           ;загрузка числа B4 в REGB

              movwf       REGB0          

              movf        B4_LH,W        

              movwf       REGB1

              movf        B4_HL,W        

              movwf       REGB2

              movf        B4_HH,W        

              movwf       REGB3  

              

              call        divide_uns        ;беззнаковое деление (B7 * 2)/B4

              goto        rash_P2

 

rash_P1       movf        B4_LL,W           ;B7 >= 0x80000000, загрузка числа B4 в REGB

              movwf       REGB0            

              movf        B4_LH,W        

              movwf       REGB1

              movf        B4_HL,W        

              movwf       REGB2

              movf        B4_HH,W        

              movwf       REGB3  

 

              call        divide_uns        ;беззнаковое деление B7/B4

 

              bcf         STATUS,C          ;умножение (B7/B4) * 2

              rlf         REGA0,F

              rlf         REGA1,F

              rlf         REGA2,F

              rlf         REGA3,F

            

 

rash_P2       movf        REGA3,W           ;сохранение результата в регистре P

              movwf       P_HH

              movf        REGA2,W

              movwf       P_HL

              movf        REGA1,W

              movwf       P_LH

              movf        REGA0,W

              movwf       P_LL

 

              movlw       .16 = X1

              movwf       tmp

pdel_o1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_o1

 

              movf        REGA3,W           ;сохранение результата в регистре X1

              movwf       X1_HH

              movf        REGA2,W

              movwf       X1_HL

              movf        REGA1,W

              movwf       X1_LH

              movf        REGA0,W

              movwf       X1_LL

 

              movlw       0xFF              ;загрузка числа -7357 в REGA

              movwf       REGA3          

              movlw       0xFF

              movwf       REGA2

              movlw       0xE3

              movwf       REGA1

              movlw       0x43

              movwf       REGA0

    

              movf        P_LL,W            ;загрузка числа P в REGB

              movwf       REGB0          

              movf        P_LH,W        

              movwf       REGB1

              movf        P_HL,W        

              movwf       REGB2

              movf        P_HH,W        

              movwf       REGB3  

 

              call        multiply          ;умножение (-7357) * P

 

              movlw       .16 = X2

              movwf       tmp

pdel_p1       rlf         REGA3,W

              rrf         REGA3,F

              rrf         REGA2,F

              rrf         REGA1,F

              rrf         REGA0,F

              decfsz      tmp,F

              goto        pdel_p1

 

              movf        X1_LL,W           ;загрузка числа X1 в REGB

              movwf       REGB0            

              movf        X1_LH,W        

              movwf       REGB1

              movf        X1_HL,W        

              movwf       REGB2

              movf        X1_HH,W        

              movwf       REGB3  

              call        add               ;сумма (X1 + X2)

 

              clrf        REGB3             ;загрузка числа 3791 в REGB

              clrf        REGB2

              movlw       0x0E

              movwf       REGB1

              movlw       0xCF

              movwf       REGB0

 

              call        add               ;сумма (X1 + X2)+3791

 

              movlw       .4 = P

 

              movf        REGA3,W           ;сохранение результата в регистре P

              movwf       P_HH

              movf        REGA2,W

              movwf       P_HL

              movf        REGA1,W

              movwf       P_LH

              movf        REGA0,W

              movwf       P_LL

 

              clrf        REGB3             ;загрузка числа 133 в REGB

              clrf        REGB2

              clrf        REGB1

              movlw       0x85

              movwf       REGB0

 

              call        divide            ;деление P/133 получаем значение в мм.рт.столба

 

              movf        REGA1,W           ;сохранение результата в регистре P_M, P_L

              movwf       P_M

              movf        REGA0,W

              movwf       P_L

              bcf         STATUS,RP0

              return                        ;выход из подпрограммы

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Электронный барометр — chipenable.ru

   Давно хотел иметь у себя в хозяйстве барометр. Да все никак не получалось —  то дорого, то не попадался, то еще какие-то препятствия. В конце концов решил сделать сам, для чего и приобрел датчики давления MPX4115AP и влажности HIH-4000-004. Оба аналоговые, отсюда следует, что барометр по сути должен представлять из себя двухканальный вольтметр.  

   За основу я взял барометр из статьи «Небольшая метеостанция своими руками». Оттуда я добросовестно содрал пересчет показаний АЦП в мм.рт.ст. (миллиметры ртутного столба), и % (влажности воздуха).

   Схемотехнику изменил, потому что свой проект хотелось сделать с внешним питанием и на светоидодных индикаторах. Их лучше видно, потому что они ярко светятся и имеют большой размер. Да и потребляют они гораздо меньше, чем подсветка ЖКИ. 

  В результате творческих экспериментов родилась такая схема:

  Микроконтроллер Atmega8 — классика жанра, семисегментный индикатор  ВА56-12SRWA в количесве двух штук и источник питания, построенный по типовой схеме. Датчики давления и влажности MPX4115AP и HIH-4000-004 соответственно. 

 

  Цифровая и аналоговая земля на плате разделены. Питание тоже разделено на аналоговое и цифровое и подается через дроссели —  25мкгн. на аналоговые цепи и проводник в ферритовой трубочке на цифровые. 

 

   На входе АЦП низкочастотный пассивный RC фильтр с частотой среза 640 Гц для подавления помех. Выводы микроконтроллера AVCC и AREF (собственно как и положено) зашунтированы керамическим конденсаторами по 0,1мкф и еще танталовыми по 10,0мкф (желтенькие со старых материнских плат).


 

 

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

 

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

 

Коммерческое использование данного устройства запрещено! 

Электронный барометр для дома — Проекты от пользователей — Статьи


Автор: Сергей

Помню, когда совсем маленьким был, то мой дед никогда не слушал по радио прогноз погоды, он всегда смотрел на свой старенький стрелочный барометр, стрелок у него было как минимум две (точно не помню, ведь столько лет прошло), и никогда не ошибался!

Вот и я давно хотел у себя в хозяйстве иметь барометр, да все никак, то дорого, то не попадался, то еще какие-то препятствия. Но вот начал заниматься микроконтроллерами и стало возможным сделать барометр самому.
Поднакопил я в заначке от любимой жены деньжат  и приобрел датчики, MPX4115AP( датчик давления ) и HIH-4000-004( датчик влажности ), почему именно эти? Да просто, потому что в интернете именно по ним есть много информации, да и в продаже они были, хотя и дорогие. Львиная доля стоимости всего устройства пришлась именно на них.
Оба датчика аналоговые, а это значит, что барометр должен представлять из себя двухвходовый вольтметр, с корректировкой показаний АЦП в мм.рт.ст. ( миллиметры ртутного столба ), и % ( проценты влажности воздуха ). Сам пересчет показаний АЦП в мм.рт.ст. , и % я добросовестно взял из статьи  «Небольшая метеостанция своими руками» — http://www.avispro.com.ua/doc.php?id=1172

Но представленная в статье конструкция показалась мне избыточной, а мне хотелось сделать проще и обязательно на светодиодных индикаторах, так как они светятся и имеют большой размер, а значит, их будет хорошо видно издалека, и при любом освещении, да и ток потребляют они гораздо меньше чем подсветка ЖКИ.
Я применил индикатор ВА56-12SRWA( светодиодный семисегментный, 3 разряда ), 2 штуки. Они сверхяркие, т.е. можно дополнительно снизить потребляемый ток.

О том, как использовать значения атмосферного давления и влажности воздуха в предсказании погоды можно прочитать, например, здесь — http://www.meteopost.com/info/Pressure/

Вот такая в результате получилась схема:

Разводка платы такая:

На печатной плате общая шина — цифровая и аналоговая разделены.
Питание тоже разделено на аналоговое и цифровое, и подается через дроссели 25мкгн. на аналоговые цепи, а проводник в ферритовой трубочке на цифровые. 

На входе АЦП конденсаторы по 0,33мкф на аналоговую землю, и резистор 750ом к датчикам. Это фильтры для снижения всевозможных помех на входы.

Выводы микроконтроллера AVCC и AREF зашунтированы керамическими конденсаторами по 0,1мкф, и еще по 10,0мкф танталовые ( желтенькие со старых материнских плат ).

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

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

Статья рассчитана на людей, которые любят что-то создавать своими руками, именно для души, и морального удовлетворения.

Замечание: Коммерческое использование материалов данной статьи запрещено!

Фьюзы


Код написан в CodeWizardAVR V2.04.4a 
Плата разведена в Sprint-Layout 5.0
Схема нарисована в Splan7.0.0.8_portable_rus

Все это имеется в прилагаемом архиве 

BMP180 Подключение датчика барометрического давления

Добавлено в избранное Любимый 11

Под давлением!

BMP180 Breakout — датчик барометрического давления с интерфейсом I 2 C («провод»).

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

Рассмотрено в этом учебном пособии

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

Рекомендуемая литература

Эта деталь проста в использовании. Но прежде чем начать, мы рекомендуем следующие базовые знания:

Подключение оборудования

В этом руководстве мы подключим BMP180 к микроконтроллеру Arduino.Если вы используете другой микроконтроллер, не паникуйте. Многие микроконтроллеры имеют интерфейс I 2 C, и вы можете использовать эту библиотеку, таблицу и пример кода, чтобы помочь вам написать собственный код.

Имена подключений

Коммутационная плата BMP180 разрывает пять соединений от ИС. Мы традиционно называем эти соединения «выводами», потому что они исходят от выводов на ИС, но на самом деле это отверстия, к которым вы можете припаять провода или выводы.

Мы подключим четыре из пяти контактов на плате к вашему Arduino.Необходимые вам четыре контакта обозначены + , , CL и DA .

(Если вам интересно, пятый контакт с надписью IO позволяет вам изменять напряжение ввода / вывода для процессоров с очень низким напряжением (например, 1,8 В). Этот вывод отключен по умолчанию, и обычно вы можете оставить этот вывод отключенным. .)

Подключение проводов к плате

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

Припаяйте 5-контактный разъем «папа-вилка» к плате. Вы можете припаять его к любой стороне; нижняя часть больше подходит для макетов, а верхняя — для перемычек.

Обратите внимание, что BMP180 чувствителен к влаге. Когда вы закончите пайку, не счищайте флюс, промывая плату водой или другими жидкостями.

Подключение платы к Arduino

Когда вы закончите пайку, подключите контакты +, -, CL и DA к Arduino.В разных моделях Arduino используются разные контакты для интерфейса I 2 C; используйте следующую таблицу, чтобы определить, куда все подключить.

ВАЖНО: Подключите выводы питания (+ и -) ТОЛЬКО к источнику питания 3,3 В. Более высокое напряжение приведет к необратимому повреждению детали. Обратите внимание, что, поскольку I 2 C использует драйверы с открытым стоком, безопасно подключать выводы I 2 C (DA и CL) к порту I 2 C на микропроцессоре 5 В.

BMP180 этикетка Функция контакта Подключение Arduino
DA (SDA) I 2 Данные C Любой контакт с маркировкой SDA или:
Uno, Redboard, Pro / Pro Mini A4
Мега, срок 20
Леонардо, Pro Micro 2
CL (SCL) I 2 Часы C Любой контакт с маркировкой SCL или:
Uno, Redboard, Pro / Pro Mini A5
Мега, срок 21
Леонардо, Pro Micro 3
«-» (GND) земля ЗЕМЛЯ
«+» (VDD) 3.Источник питания 3В 3,3 В
IO (VDDIO) Напряжение ввода / вывода Оставьте отключенным, если вы не подключаетесь к микропроцессору с более низким напряжением.

После подключения BMP180 к Arduino мы готовы приступить к работе с программным обеспечением.

Установка библиотеки Arduino

Библиотеки

— это наборы программных функций, предназначенных для одной цели, например для связи с определенным устройством.Мы написали библиотеку для Arduino под названием SFE_BMP180, которая позволяет вам легко общаться с датчиком BMP180. Эта библиотека не входит в стандартное программное обеспечение Arduino, но не волнуйтесь, установить новые библиотеки очень просто.

Если вы хотите связать BMP180 с микроконтроллером, отличным от Arduino, исходный код C ++ в библиотеке и информация в таблице могут быть полезны при написании собственного кода.

1. Установите Arduino IDE

Если у вас еще не установлена ​​Arduino IDE (интегрированная среда разработки), загрузите версию для своей системы (Windows, Mac, Linux) с http: // arduino.cc / en / Main / Software и установите его, следуя инструкциям на этом сайте.

Если вам нужна помощь в установке IDE, ознакомьтесь с нашим руководством.

2. Установите библиотеку SFE_BMP180

Arduino версии 1.6 и выше содержит инструменты, помогающие устанавливать библиотеки.

Во-первых, скачайте последнюю версию библиотеки BMP180 по этой ссылке:

Библиотека Arduino SparkFun BMP180

Теперь откройте вашу Arduino IDE и в меню выберите Sketch / Include library / Add.ZIP-библиотека. Запрашивающий файл откроется. Перейдите к только что загруженному файлу BMP180_Breakout_Arduino_Library-master.zip и нажмите кнопку «Открыть». Библиотека будет установлена ​​и готова к использованию.

Если вы используете старую версию Arduino или вам нужна помощь в установке библиотеки, вы можете найти подробные инструкции в нашем руководстве по установке библиотеки Arduino.

Выполнение примеров эскизов

Надеюсь, на этом этапе вы установили библиотеку SFE_BMP180 и подключили оборудование к своей Arduino.Теперь мы готовы запустить примеры скетчей.

Запуск примера эскиза

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

После установки библиотеки запустите Arduino IDE и откройте следующий пункт меню: Файл / Примеры / Sparkfun BMP180 / SFE_BMP180_example.

(Если вы не видите этот пункт меню, возможно, вы неправильно установили библиотеку или не перезапустили Arduino IDE.Взгляните еще раз на страницу установки библиотеки, чтобы увидеть, не пропустили ли вы какие-либо шаги.)

Когда откроется пример, загрузите его в Arduino (не забудьте выбрать правильный тип платы и последовательный порт) и откройте Serial Monitor на 9600 бод. Вы должны увидеть некоторую диагностическую информацию (если устройство не может найти устройство, дважды проверьте соединения оборудования), а затем показания давления. Дополнительные сведения о давлении см. В следующем разделе «Измерение погоды и высоты». Показания в вашем терминале должны выглядеть примерно так, с данными, более соответствующими вашему текущему местоположению.

Написание собственных набросков

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

Измерение погоды и высоты

BMP180 был разработан для точного измерения атмосферного давления. Атмосферное давление меняется в зависимости от погоды и высоты; вы можете измерить и то, и другое с помощью этого датчика.Вот как:

Что такое атмосферное давление?

Определение давления — это сила, «давящая» на область. Обычная единица давления — фунты на квадратный дюйм (psi). Один фунт на один квадратный дюйм равен одному фунту на квадратный дюйм. Единица СИ — ньютоны на квадратный метр, которые называются паскалями (Па).

Существует множество ситуаций, в которых можно измерить давление (сила тяжести, сила тяги и т. Д.), Но сейчас нас интересует атмосферное давление , то есть сила, которую окружающий воздух оказывает на все вокруг.Вес газов в атмосфере создает атмосферное давление. Обычно никто не замечает, что воздух что-то весит, но если вы возьмете столб воздуха шириной в один дюйм от уровня моря до верхних слоев атмосферы, он будет весить около 14,7 фунтов. (Столб воздуха шириной 1 см будет весить около 1 кг.) Этот вес, давящий на след этого столба, создает атмосферное давление, которое мы можем измерить с помощью датчиков, таких как BMP180.

Потому что столб воздуха шириной в дюйм весит около 14.7 фунтов и давит на один квадратный дюйм, из этого следует, что среднее давление на уровне моря составляет около 14,7 фунтов на квадратный дюйм (psi), или 101325 паскалей. Это упадет примерно на 4% на каждые 1000 футов (или 300 метров) вашего подъема. Чем выше вы подниметесь, тем меньше давление вы увидите, потому что столб в верхней части атмосферы намного короче и, следовательно, меньше весит. Это полезно знать, потому что, измерив давление и выполнив некоторые вычисления, вы можете определить свою высоту.

Интересный факт: Давление воздуха на высоте 12 500 футов (3810 метров) составляет лишь половину от давления на уровне моря.Другими словами, половина массы атмосферы находится ниже 12500 футов, а воздух на высоте 12500 футов вдвое плотнее, чем на уровне моря. Неудивительно, что тебе там тяжелее дышится.

BMP180 выдает абсолютное давление в паскалях (Па). Один паскаль — это очень небольшое давление, примерно такое же, как лист бумаги, лежащий на столе. Чаще вы будете видеть измерения в гектопаскалях (1 гПа = 100 Па) или килопаскалях (1 кПа = 1000 Па). Предоставляемая нами библиотека Arduino выводит значения с плавающей запятой в гПа, что также составляет один миллибар (мбар).

Вот некоторые преобразования в другие единицы давления:

1 гПа = 100 Па = 1 мбар = 0,001 бар

1 гПа = 0,75006168 Торр

1 гПа = 0,01450377 фунтов на квадратный дюйм (фунт на квадратный дюйм)

1 гПа = 0,02953337 inHg (дюймы ртутного столба)

1 гПа = 0,00098692 атм (стандартные атмосферы)

Температурные эффекты

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

Для компенсации температуры в BMP180 есть неплохой датчик температуры, а также датчик давления. Чтобы измерить давление, вы сначала снимаете показания температуры, а затем объединяете их с необработанными показаниями давления, чтобы получить окончательное измерение давления с температурной компенсацией. (Не волнуйтесь, библиотека Arduino упрощает все это.)

Измерение абсолютного давления

Как мы только что упомянули, если ваше приложение требует измерения абсолютного давления, все, что вам нужно сделать, это получить показание температуры, а затем выполнить измерение давления (см. Примерный эскиз для подробностей). Окончательное значение давления будет в гПа = мбар. При желании вы можете преобразовать это значение в другую единицу, используя указанные выше коэффициенты пересчета.

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

Наблюдения за погодой

Атмосферное давление в любом месте на Земле (или в любом другом месте с атмосферой) непостоянно. Сложное взаимодействие между вращением Земли, наклоном оси и многими другими факторами приводит к перемещению областей с более высоким и низким давлением, что, в свою очередь, вызывает изменения погоды, которые мы наблюдаем каждый день. Наблюдая за изменениями давления, вы можете прогнозировать краткосрочные изменения погоды. Например, падение давления обычно означает, что влажная погода или приближается шторм (входит система низкого давления).Повышение давления обычно означает приближение ясной погоды (проходит система высокого давления).

Но помните, что атмосферное давление также зависит от высоты. Абсолютное давление в Денвере (высота 5280 футов) всегда будет ниже абсолютного давления в Сан-Франциско (высота 52 футов). Если бы метеостанции просто сообщали об их абсолютном давлении, было бы трудно напрямую сравнивать измерения давления из одного места в другое (а крупномасштабные прогнозы погоды зависят от измерений с максимально возможного количества станций).

Чтобы решить эту проблему, метеостанции всегда удаляют влияние высоты из своих сообщаемых показаний давления, математически добавляя эквивалентное фиксированное давление, чтобы оно выглядело так, как если бы показания были сняты на уровне моря. Когда вы это сделаете, показания выше в Сан-Франциско, чем в Денвере, всегда будут из-за погодных условий, а не из-за высоты.

Для этого в библиотеке есть функция под названием seaLevel (P, A) . Он принимает абсолютное давление (P) в гПа и текущую высоту станции (A) в метрах и устраняет влияние высоты на давление.Вы можете использовать выходные данные этой функции, чтобы напрямую сравнивать ваши показания погоды с показаниями других станций по всему миру.

Для получения дополнительной информации, вот хорошая статья в Википедии о среднем давлении на уровне моря.

Определение высоты

Поскольку давление зависит от высоты, вы можете использовать датчик давления для измерения высоты (с некоторыми оговорками).

Среднее давление атмосферы на уровне моря 1013,25 гПа (или мбар). Это падает до нуля, когда вы поднимаетесь в вакуум космоса.Поскольку кривая этого падения хорошо изучена, вы можете вычислить разницу высот между двумя измерениями давления (p и p 0 ), используя следующее уравнение:

Есть два способа воспользоваться этим.

  1. Если вы используете давление на уровне моря (1013,25 гПа) в качестве базового давления (p 0 ), выходом уравнения будет ваша текущая высота над уровнем моря.

  2. Или, если вы возьмете одно показание давления в вашем текущем местоположении и используете его в качестве базовой линии (стр. 0 ), все последующие показания давления приведут к отклонению относительной высоты от базовой линии.Поднимитесь по лестнице, и вы увидите, что высота упала с нуля до 3-4 метров. Спуститесь в подвал и увидите -3 или -4 метра. В библиотеку входит пример скетча BMP180_altitude_example.ino, который показывает, как это сделать.

В библиотеке есть функция под названием altitude (P, P0) , которая позволяет выполнять обе эти задачи. Если вы зададите давление на уровне моря (1013,25 гПа) для p 0 и ваше местное давление для p, это даст вам вашу высоту над уровнем моря.Если вы используете измерение местного давления для p 0 , последующие показания давления p покажут вам изменение высоты над базовой линией.

Теперь о предостережениях:

Точность: Насколько это точно? Теоретический уровень шума при максимальном разрешении BMP180 составляет 0,25 м (около 10 дюймов), хотя на практике мы видим шум порядка 1 м (40 дюймов). Вы можете повысить точность, сняв большое количество показаний и усреднив их, хотя это снизит частоту дискретизации и время отклика.

Погода: Вы также должны помнить, что изменения давления из-за погоды повлияют на ваши показания высоты. Наилучшая точность будет достигнута, если вы возьмете «свежий» p 0 , когда он вам нужен, и не будете полагаться на его точность в течение длительного времени из-за изменений погоды.

Максимальная высота: BMP180 не может выполнять измерения вплоть до вакуума (или до космоса). Рекламируемый нижний предел составляет около 300 гПа (или мбар), что соответствует высоте около 3000 м или 30 000 футов.Люди поднимали их на большую высоту и получали полезные результаты, но это не гарантировано и вряд ли будет точным. (Вы можете рассмотреть возможность использования GPS для высотных измерений).

Минимальная высота: Точно так же этот датчик не подходит для больших давлений. Рекламируемый верхний предел составляет 1100 гПа = мбар (или 16 фунтов на квадратный дюйм), что примерно на 500 футов ниже уровня моря (это в воздухе — BMP180 не погружается в воду). Этот датчик не лучший выбор для измерений под водой или сжатым газом.

Советы и хитрости

Чего нужно остерегаться

Дайте ему правильное напряжение: BMP180 будет работать при напряжении от 1,8 В до 3,6 В. Мы рекомендуем использовать его при напряжении 3,3 В. Никогда не подключайте разъем «+» к напряжению выше 3,6 В! . Обратите внимание, что выводы SCA и SDL безопасно подключать к порту I 2 C на Arduino 5 В, поскольку подтягивающие резисторы на плате BMP180 будут поддерживать напряжение ниже 3,6 В.

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

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

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

Держать в сухом состоянии: BMP180 чувствителен к влаге. Не погружайте его в воду и не допускайте контакта с жидкой водой.

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

Замена перемычек припоя

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

Чтобы удалить припой с перемычки припоя , накройте ее фитилем и осторожно нагрейте паяльником. Когда припой расплавится, он впитается фитилем. Удалите фитиль до того, как припой остынет, чтобы он не прилипал к контактным площадкам. Если вы не набрали весь припой с первого прохода, попробуйте еще раз с чистой частью припоя.Когда вы закончите, вы увидите разорванное соединение между подушечками. При этом будьте осторожны, чтобы не перегреть плату (дайте ей остыть, если у вас возникли проблемы), иначе медные площадки могут оторваться от платы.

Отключение подтягивающих резисторов I 2 C (SJ1)

BMP180 взаимодействует с микроконтроллером хоста через стандарт связи «I 2 C» (для Inter Integrated Circut). I 2 C использует два провода, обычно обозначаемые SCL (последовательные часы) и SDA (последовательные данные).Для правильной работы I 2 C требуется подтягивающий резистор на каждой из этих линий. Плата BMP180 включает в себя эти резисторы. По умолчанию они включены, но вы можете отключить их, сняв паяльную перемычку SJ1.

I 2 C позволяет подключать несколько устройств к одним и тем же двум линиям (все вместе они называются шиной). Подтягивающие резисторы позволяют шине функционировать, но у вас должен быть только , один набор подтягивающих резисторов на шину.

Если у вас есть только одно устройство I 2 C (например, коммутационная плата BMP180), подключенное к вашему микроконтроллеру, плата уже настроена правильно.Вам не нужно ничего менять.

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

Чтобы отключить подтягивающие резисторы I 2 C, удалите весь припой с перемычки, помеченной «SJ1».Этот джемпер имеет три прокладки; обязательно отделите все прокладки друг от друга. Помните, что вам необходимо убедиться, что где-то на шине I 2 C включен еще один набор подтягивающих резисторов.

Обратите внимание, , что вы не должны использовать шину I 2 C без подтягивающих резисторов, так как внутренние слабые подтягивающие резисторы в Arduino подтянут шину до 5 В, что может повредить BMP180.

Использование другого напряжения ввода / вывода (SJ2)

По умолчанию коммутационная плата BMP180 настроена так, чтобы шина I 2 C обменивалась данными на 3.3В. Это будет работать для большинства микроконтроллеров 3,3 и 5 В. Однако, если вы хотите подключить BMP180 к микропроцессору с более низким напряжением, например к микропроцессору с напряжением 1,8 В, вы можете сделать это, удалив припой с перемычки с надписью «SJ2». Как только вы это сделаете, вам нужно будет подать на плату желаемое напряжение ввода / вывода через заголовок «IO». BMP180 принимает напряжения ввода / вывода от 1,62 В до 3,6 В.

Ресурсы и дальнейшее развитие

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

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

Дополнительная литература и проекты:

Удачи!

Электроника | Бесплатный полнотекстовый | Комплексное предложение узла Интернета вещей с использованием открытого оборудования.Пример использования интеллектуального фермерства для мониторинга виноградников

В этом разделе представлен пример узла IoT (называемого узлом SEnviro), который следует предлагаемой архитектуре. Раздел разделен на три подраздела. В первом подразделе показано, как узел IoT построен на аппаратном уровне. Во втором подразделе подробно описано, как узел Интернета вещей работает на программном уровне. Наконец, в последнем подразделе анализируется потребление энергии как теоретически, так и практически.

4.1. Построение узла SEnviro

Основная цель текущей работы — предложить пример узла IoT, который следует архитектуре, созданной с использованием компонентов открытого оборудования, как подробно описано в предыдущем разделе.Таким образом, развитие, представленное ниже, тесно связано с этими типами элементов.

В соответствии с физическими компонентами, определенными в разделе 3, узел IoT составлен, как показано на рисунке 4. Теперь мы подробно рассмотрим, как разрабатывается каждая определенная группа (ядро, считывание / действие, источник питания и связь). Такая же категоризация используется для описания каждого компонента в таблице 2. Общая цена за узел SEnviro составляет 256,45 евро. Далее каждый компонент подробно описывается и классифицируется в каждой фиксированной группе.
  • Particle (рисунок 5): этот компонент был выбран как часть ядра узла IoT.Как было сказано в разделе 2, микроконтроллер Particle Electron разработан с открытым исходным кодом. Как показано на рисунке 5, этот микроконтроллер присутствует в различных блоках, определенных на рисунке 1, таких как ядро, источник питания и связь. В первой группе, Core, Electron действует как микроконтроллер и отвечает за оживление узла и реализацию всех бизнес-моделей, чтобы узел функционировал правильно. В отличие от обычного ПК, Electron может запускать только одну программу, которая будет подробно описана в следующем подразделе.Он включает в себя чип STM32F205RGT6 ARM Cortex M3, который работает на частоте 120 МГц. Его можно обновить с помощью OTA-обновлений. Эта функция значительно расширяет возможности обновления каждого узла и поддержки новых функций или поведения в будущем без необходимости физического перехода к тому месту, где развернут узел IoT. Electron также будет отвечать за хранение всех переменных для поддержки нормальной работы с использованием ОЗУ (128 КБ ОЗУ) и ПЗУ (1 МБ флэш-памяти). Внутри основной группы он также будет отслеживать текущее время; это возможно, потому что Electron предлагает модуль операционной системы реального времени (RTOS).

    Вторая группа, в которой присутствует микроконтроллер Electron, — это блоки питания. Electron предоставляет чип под названием MAX17043, который может измерять энергию, потребляемую микроконтроллером (и всеми компонентами узла IoT). Этот микрочип имеет сверхкомпактный дизайн и невысокую стоимость.

    Наконец, в последней группе, «Связь», заявленный микроконтроллер обеспечивает возможность подключения 2G и 3G (или любой новой технологии, такой как 5–6 G). Сотовый модуль U-blox SARA-U270 обеспечивает подключение к Интернету.Для этого у него есть антенна сотовой связи, которая необходима микроконтроллеру для установления соединения с вышкой сотовой связи. Одно отличие от версии, представленной в [7], можно найти в группе связи. Эта новая версия обеспечивает подключение 2G и 3G вместо Wi-Fi. Эта функция увеличивает возможность установки узла в любом месте с покрытием мобильной передачи данных.
  • Защитный экран : Этот компонент представляет собой простую в использовании схему, совместимую с микроконтроллерами частиц (Photon и Electron).Электрон может взаимодействовать с миром через контакты (30 GPIO смешанного сигнала), которые будут использоваться для подключения этого экрана. Погодозащитный экран имеет встроенные датчики барометрического давления (MPL3115A2), относительной влажности и температуры (Si7021). Кроме того, экран содержит несколько разъемов RJ11 для подключения внешних датчиков, таких как анемометр и датчик дождя. В таблице 3 описаны все функции датчиков. Защитный экран присутствует в группах Core (Connectors) и Sensors.
  • Солнечная панель : Этот компонент является водонепроницаемым, устойчивым к царапинам и УФ-излучению.В нем используется высокоэффективная монокристаллическая ячейка. Выходное напряжение составляет 6 В при 530 мА через разъем постоянного тока 3,5 мм × 1,1 мм. Солнечная панель будет использоваться для зарядки аккумулятора и обеспечивает бесперебойную работу узла IoT. Солнечная панель включена в блок питания.

  • Литий-ионный аккумулятор : этот компонент имеет емкость 2000 мА и используется для создания энергетически автономной платформы. Он обеспечивает выходное напряжение 3,7 В и заряжается от энергии, вырабатываемой солнечной панелью.Аккумулятор входит в блок питания.

  • Солнечное зарядное устройство Sunny Buddy : Этот компонент является солнечным зарядным устройством MPPT и включен в блок питания. Он отвечает за контроль протекания тока и ограничен определенным значением, чтобы предотвратить повреждение батареи. Это также открытый аппаратный компонент.

  • Soil Moisture : Этот компонент также имеет конструкцию с открытым оборудованием, и с помощью простого отрыва он может измерять влажность почвы.Две контактные площадки действуют как переменный резистор; чем больше воды в почве, тем лучше проводимость между ними. Это приводит к меньшему сопротивлению и более высокой производительности. Считается частью группы датчиков.

  • Погодометры обеспечивают три компонента измерения погоды: скорость ветра, направление ветра и количество осадков. Он предлагает разъемы RJ11, которые упрощают установку с помощью вышеупомянутого погодозащитного экрана. Погодометры входят в группу датчиков.

Корпус был разработан для размещения всех компонентов и защиты электронных компонентов. Коробка была специально разработана для достижения этой цели (рис. 6), она была напечатана на 3D-принтере и пригодна для печати с использованием нити из полимолочной кислоты (PLA). Каждый узел идентифицируется QR-кодом. Этот код используется для запроса устройства и начала сбора данных с узла. Таблица 3 суммирует всю информацию о датчиках, используемых в этом предложении. Все выбранные датчики имеют открытое оборудование и низкую стоимость.Несмотря на свою низкую цену, большинство датчиков, используемых в промышленных условиях, обеспечивают надежные измерения.
4.2. Подробная информация о поведении
Как указано выше, микроконтроллер будет отвечать за организацию общей работы узла. Это станет возможным с помощью программы или эскиза, который отвечает за предоставление функциональности каждому из аппаратных компонентов, составляющих узел. Таким образом, в соответствии с логическими модулями и конечным автоматом, определенными в предыдущем разделе, разрабатывается эскиз.Рисунок 7 показывает на глобальном уровне, как использовался каждый модуль. Теперь мы перейдем к подробному описанию каждого из них и того, как они работают. Первый модуль — это логическое управление, которое не имеет определенных функций. Он отвечает за согласованное соединение различных модулей. Как и в [7], определены два режима: начальный (INIT в конечном автомате) и режим цикла. Начальный режим выполняется как инициализатор при загрузке узла. Когда начальный режим завершен, метод цикла выполняется повторно, пока узел включен.

Модуль базовой конфигурации отвечает за хранение и управление базовой конфигурацией / настройками. Часть его конфигурации определяется в начальном режиме и обновляется во время цикла. Базовая конфигурация отвечает за определение таких аспектов, как датчики, к которым будут проводиться консультации, список действий, выполняемых с исполнительными механизмами, частота наблюдений, конфигурация для установления связи M2M и проверка наличия нового обновления для узла IoT.

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

  • Нормальный режим : самый обычный рабочий режим. Узел работает с заданной периодичностью наблюдений (10 мин).

  • Режим восстановления : частота наблюдений сохраняется, но наблюдения не будут отправляться на сервер, вместо этого они сохраняются в памяти EEPROM микроконтроллера.Сохраненные наблюдения отправляются, когда состояние батареи узла IoT улучшается.

  • Критический режим : узел IoT не собирает новые наблюдения и переходит в наиболее глубокий спящий режим.

Второй модуль, Observe, обращается из числа доступных датчиков к тем, которые указаны в конфигурации. Среди них датчики температуры, влажности почвы и воздуха, атмосферного давления, дождя и скорости / направления ветра. Этот модуль отвечает за преобразование сигналов от датчиков для получения правильных значений и подгонку значений к правильным единицам для каждого явления.Например, он обрабатывает пульсации электрического плювиометра и преобразует их в соответствующие миллилитры.

Следующий модуль — Акт, который выполняет действия с доступными исполнительными механизмами. Хотя текущий узел IoT не имеет исполнительного механизма из-за варианта использования, в котором он был применен, считается, что он определяет общее решение, которое может быть перенесено в другие сценарии с другими требованиями.

Следующий модуль — модуль связи. Он имеет две дифференцированные функции: отправка и получение.Для этого модуль устанавливает соединение с помощью модуля 3G, входящего в состав микроконтроллера Electron. Каждый узел использует протокол MQTT для настройки связи M2M. Они определяют клиент MQTT, который может отправлять и получать данные. Для этого узел берет на себя роль издателя для отправки наблюдений датчиков. Каждое наблюдение публикуется по отдельной теме. Таким образом определяется иерархическая организация; то есть идентификатор датчика плюс название типа явления, например / current / 4e0022000251353337353037 / Temperature или / current / 4e0022000251353337353037 / Humidity.Первый иерархический уровень (текущий) определяет, что тема находится в режиме реального времени. Другая тема на том же уровне, называемая потерянными, предназначена для отправки потерянных наблюдений (из-за проблем с подключением или режима энергопотребления).

Кроме того, MQTT используется для установления двойной связи между узлами. Каждый узел подписан на разные темы, чтобы запускать обновления (OTA) или отмечать, с какими датчиками следует обращаться. Формат JSON предназначен для кодирования как входящих, так и исходящих данных.

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

Наконец, последний модуль и один из самых важных с точки зрения энергопотребления — это спящий модуль. С одной стороны, микроконтроллер Electron предлагает разные режимы сна в зависимости от того, какие функции активны.Микроконтроллер обеспечивает режим сна, который характеризуется различными параметрами, чтобы определить, какие функции ограничены для снижения энергопотребления. Операция сна может сопровождаться секундами, которые используются для определения периода сна. Кроме того, Electron поддерживает возможность пробуждения с помощью внешнего прерывания на одном из его контактов.

Кроме возможности пробуждения микроконтроллера требуется еще и спящий режим. Все доступные режимы подробно описаны ниже:

  • Без аргументов.Эта опция не останавливает выполнение эскиза. Узел продолжает нормально работать, а модуль 3G остается в режиме ожидания. Энергопотребление от 30 мА до 38 мА.

  • SLEEP_MODE_DEEP: этот режим отключает сетевой модуль и переводит микроконтроллер в режим ожидания. Когда устройство выходит из состояния глубокой приостановки, оно перезапускается и выполняет весь код пользователя с самого начала без сохранения значений памяти. Его потребление составляет около 0,0032 мА.

  • SLEEP_MODE_SOFT_POWER_OFF: этот режим похож на SLEEP_MODE_DEEP с дополнительным преимуществом, заключающимся в том, что чип датчика уровня топлива также спит.

  • SLEEP_NETWORK_STANDBY: этот режим похож на SLEEP_MODE_DEEP, но он не отключает модуль 3G. Это уменьшает количество энергии, необходимое для повторного соединения с оператором, когда Electron перезагружается из SLEEP_MODE_DEEP.

На рисунке 8 показано в обобщенном виде, как узел работает на уровне энергии и как он применяет операции сна, перечисленные ранее.Таким образом, определяются три различных режима в зависимости от уровня заряда батареи в любой момент времени. Эти режимы перечислены ниже.
  • Нормальный режим . Когда уровень заряда батареи выше 25%, узел выполняет отгрузки в зависимости от наблюдаемой частоты. Применяется основной спящий режим, как подробно описано в приведенном выше определении. Помимо использования секунд для пробуждения, он также может использовать штифт датчика дождя для пробуждения и, таким образом, накапливать количество дождевой воды в течение периода, когда микроконтроллер находится в спящем режиме.Модуль связи работает, а сотовый модуль находится в режиме ожидания.

  • Режим восстановления . Когда уровень заряда батареи составляет менее 25%, активируется режим восстановления, и новые поставки не производятся до тех пор, пока уровень заряда батареи не превысит 35%. Наблюдения сохраняются в памяти EEPROM и помечаются меткой времени в момент захвата.

  • Критический режим . Если батарея разряжена менее 15%, активируется критический режим.В этом режиме новые наблюдения не производятся и не сохраняются в памяти EEPROM. Узел переходит в глубокий сон и просыпается каждые 60 минут, чтобы контролировать уровень заряда батареи. Критический режим останавливается, когда оставшийся уровень заряда батареи превышает 20%, и узел продолжает работу в режиме восстановления, пока он не превысит пороговое значение в 35%.

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

4.3. Автономный источник питания

В этом разделе подробно описаны некоторые аспекты энергопотребления. В первом подразделе показано теоретическое потребление энергии. Во втором подразделе предлагаются тесты энергопотребления в блоке узла SEnviro.

4.3.1. Теоретическое потребление энергии
Таблица 4 показывает потребление энергии микроконтроллером Electron в различных режимах (нормальный, спящий и глубокий сон). Потребление может значительно варьироваться в зависимости от периферийных устройств, подключенных к плате.Различные компоненты вместе с их потреблением энергии показаны в таблице 5.

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

Далее в таблице 6 показаны секунды каждого часа, в течение которого узел применяет методы энергосбережения, отправляет данные или находится в нормальном режиме.Микроконтроллер потребляет 19,3 мА каждый час. Ниже показано потребление всех датчиков, включенных в версию узла SEnviro. Мы считаем, что все датчики активны в течение 60 секунд на каждой итерации, что соответствует периоду, в течение которого микроконтроллер активен. В таблице 7 показано потребление компонентов в час, всего требуется 2,1625 мА.

Что касается MPPT, он потребляет 3,5 мА каждый час, когда он активен (когда он заряжает солнечную панель), и 0,085 мА в режиме ожидания.Количество солнечных часов в Испании было принято во внимание, учитывая, что в среднем 12 солнечных часов (минимум 9,5 солнечных часов и максимум 14,9 солнечных часов). Расход дождемера и анемометра незначителен, поскольку они являются пассивными контурами.

Таким образом, общее потребление узла (микроконтроллер, датчики и компоненты) составляет 21,4625 мА в нормальном режиме энергопотребления. Таким образом, с указанной батареей (2000 мА) узел может работать непрерывно в течение 93,19 ч, что соответствует 3 дням, 21 ч и 11 мин, пока батарея не разрядится.

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

Режим восстановления запускается, когда батарея разряжена менее 25%, то есть когда она достигает примерно 500 мА. Таблица 8 показывает потребление энергии в различных состояниях в режиме восстановления. В отличие от нормального режима, рекавери не осуществляет доставки; в противном случае узел сохраняет наблюдения в EPROM, чтобы отправить их позже, когда он перейдет в нормальный режим.Энергопотребление микроконтроллера в режиме восстановления составляет около 6,80 мА в час, к которому следует добавить потребление компонентов (2,1625 мА), показанное в таблице 7. В целом при потреблении 8,9625 мА и с оставшейся батареей 500 мА, узел может продлить срок службы до 55,788 ч (2 дня, 7 ч, 18 мин) до полного разряда батареи. Последним и наиболее тяжелым режимом является критический режим, который активируется при разряде батареи менее 15 мА. %, то есть когда он достигает нагрузки примерно 300 мА.В таблице 9 показано потребление различных состояний в критическом режиме. В отличие от других режимов, критический режим удерживает узел в глубоком сне и просыпается только для проверки состояния батареи, он не обращается к датчикам, поэтому любые наблюдения теряются.

В этом случае датчики не запрашиваются, несмотря на это потребление 0,02916 мА генерируется в течение периода, в течение которого будет проверяться уровень заряда батареи, поскольку датчики находятся в режиме ожидания. К этому потребление микроконтроллера 0.Следует добавить 1998 мА в час, чтобы общее потребление энергии в критическом режиме составило 0,22896 мА в час. С таким потреблением и оставшимися 300 мАч узел может продлить срок службы до 1310,27 часа (54 дня, 14 часов и 16 минут).

На рисунке 9 показано теоретическое потребление энергии узлом. График показывает, когда происходят изменения в режимах энергопотребления. Эти изменения произойдут: с нормального режима на восстановление на 3-й день; из режима восстановления в критический 5-е сутки; а в критическом режиме узел будет без батареи через 37 дней (864 ч).
4.3.2. Реальное потребление энергии

Первый тест без солнечной панели и только в обычном режиме с батареей 2000 мАч показал 73,5 часа автономной работы. Тем не менее, реальный тест показывает, что в таких условиях потребление энергии составляет 27,25 мА в час вместо 19,3 мА, определенных в теоретическом потреблении. Если мы сравним полученные результаты с решением, представленным в предыдущей версии SEnviro, мы получим существенное улучшение, утроив энергетическую автономность.

Этот результат кажется удовлетворительным с точки зрения возможности развертывания узлов и поддержания их постоянной активности. Разработанный узел IoT мог поддерживать датчик в рабочем состоянии в течение трех дней, одного часа и 30 минут без какой-либо зарядки через солнечную панель. Первые энергетические проблемы могут появиться после трех пасмурных дней без солнца. Однако даже в пасмурный день, согласно проведенным тестам, солнечная панель может заряжаться с низкой частотой или поддерживать аккумулятор. Кроме того, солнечная панель дает очень хорошие результаты; он может заряжать аккумулятор примерно со скоростью 200 мА в час.

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

На диаграмме ниже (Рисунок 10) показан временной ряд уровня заряда батареи одного из узлов. Он показывает емкость перезарядки солнечной панели, которой удается достичь максимально возможного заряда батареи за несколько часов.Максимальный уровень заряда батареи составил 87,4%. Можно утверждать, что в солнечные дни, к концу ночи, батарея никогда не опускается ниже 60,77% и успевает восстановить свой заряд за 3 часа солнечного света. В пасмурные дни (например, 2 ноября) батарея может поддерживать уровень и повышаться с небольшой скоростью. В течение указанного периода ни один узел не перешел в режим восстановления.

Датчик барометрического давления Arduino Учебное пособие

Барометрическое давление, другими словами Атмосферное давление — это сила, действующая со стороны атмосферы в заданной точке (говорится в Интернете).Он также известен как Вес воздуха. В этой статье дается основное представление о технике сопряжения сенсоров атмосферного давления и Arduino.


Что такое датчик атмосферного давления?

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

Здесь мы использовали цифровой датчик давления BMP180 от Bosch. это устройство SMD, так что лучше иметь коммутационную плату.

BMP180-Цифровой датчик давления

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

Характеристики BMP180

  • Диапазон давления: 300… 1100 гПа (+ 9000 м… -500 м относительно уровня моря)
  • Напряжение питания: 1,8… 3,6 В (VDD)
  • Упаковка: LGA корпус с металлической крышкой
  • Низкое энергопотребление: 5 мкА при 1 выборке в секунду. в стандартном режиме
  • Низкий уровень шума: 0,06 гПа (0,5 м) в режиме сверхнизкого энергопотребления — 0,02 гПа (0,17 м) в режиме повышенного разрешения
  • Измерение температуры включено
  • Интерфейс I²C

Блок-схема

Датчик BMP 180 имеет четыре важных внутренних периферийных устройства: сенсорный элемент, АЦП (аналого-цифровой преобразователь), блок управления и EEPROM.Чувствительный элемент подает преобразованный и дискретизированный сигнал в АЦП, затем АЦП преобразует сигнал в цифровые данные, блок управления связывается с внешними периферийными устройствами через последовательный интерфейс I2C. Датчик BMP180 имеет собственный E²PROM на 176 бит, который используется для компенсации смещения, температурной зависимости и других параметров датчика.

BMP 180 Коммутационная плата

Коммутационная плата датчика давления Arduino от Sparkfun.

Маленькая и компактная коммутационная плата поставляется с легко подключаемыми клеммами, такими как +, -, CL и DA. мы можем напрямую подключить эту сенсорную плату к Arduino без каких-либо предварительных схем.

Подключение Arduino и BMP180

Ввод-вывод на плате датчика представляет напряжение ввода-вывода, и мы можем оставить его отключенным, если не подключаемся к микропроцессору или микроконтроллеру с более низким напряжением. Подключите клемму «+» к выводу 3,3 В. Arduino.(Примечание: не подключайте + к 5 В, иначе датчик будет поврежден!). Подключите «-» к клемме заземления (GND) платы Arduino. Затем подключите последовательные контакты I²C DA (SDA) и CL (SCL) к соответствующим контактам вашей платы разработки. В нашем случае мы использовали Arduino uno, поэтому «CL» к A5 и «DA» к A4. Подключив zigbee или беспроводной приемопередатчик, мы можем сделать датчик и приемник атмосферного давления.

Библиотека Arduino

Получите библиотеку Arduino для датчика атмосферного давления BMP180 здесь.

Датчик барометрического давления Код Arduino

 / * Код из примера библиотеки sparkfun * /
#include < SFE_BMP180  .h>
#include 

  SFE_BMP180  давление;

#define ALTITUDE 1655.0 // Высота штаб-квартиры SparkFun в Боулдере, штат Колорадо, в метрах

установка void ()
{
  Серийный .begin (9600);
  Серийный номер  .println («ПЕРЕЗАГРУЗКА»);

 // Инициализируем датчик (важно, чтобы значения калибровки сохранялись на устройстве).если (pressure.begin ())
  Последовательный  .println ("Успешная инициализация BMP180");
 еще
 {
 // К сожалению, что-то пошло не так, обычно это проблема с подключением,
 // см. комментарии вверху этого скетча для правильных соединений.

  Последовательный  .println ("Ошибка инициализации BMP180 \ n \ n");
 в то время как (1); // Пауза навсегда.
 }
}

пустой цикл ()
{
 статус символа;
 двойной T, P, p0, a;

 // Цикл здесь получение показаний давления каждые 10 секунд.// Если вы хотите, чтобы давление с компенсацией уровня моря, как используется в сводках погоды,
 // вам нужно будет знать высоту, на которой производятся ваши измерения.
 // В этом скетче мы используем константу ALTITUDE:
 
  Серийный  .println ();
  Серийный номер  .print ("указанная высота:");
  Серийный  .print (ВЫСОТА, 0);
  Серийный номер  .print ("метры");
  Серийный  .print (ВЫСОТА * 3,28084,0);
  Серийный .println ("футы");
 
 // Если вы хотите измерять высоту, а не давление, вам понадобится
 // для обеспечения известного базового давления. Это показано в конце эскиза.

 // Вы должны сначала получить измерение температуры, чтобы измерить давление.
 
 // Запуск измерения температуры:
 // Если запрос успешен, возвращается время ожидания в миллисекундах.
 // Если запрос неуспешен, возвращается 0.

 status = pressure.startTemperature ();
 если (статус! = 0)
 {
 // Дождемся завершения измерения:
 задержка (статус);

 // Получить завершенное измерение температуры:
 // Обратите внимание, что результат измерения сохраняется в переменной T.// Функция возвращает 1 в случае успеха и 0 в случае неудачи.

 status = pressure.getTemperature (T);
 если (статус! = 0)
 {
 // Распечатать результат измерения:
  Серийный  .print ("температура:");
  Серийный  .print (T, 2);
  Серийный номер  .print («градус С,»);
  Серийный  .print ((9.0 / 5.0) * T + 32.0,2);
  Серийный номер  .println («градус F»);
 
 // Запускаем измерение давления:
 // Параметр - это настройка передискретизации от 0 до 3 (максимальное разрешение, максимальное время ожидания).// Если запрос успешен, возвращается время ожидания в миллисекундах.
 // Если запрос неуспешен, возвращается 0.

 status = pressure.startPressure (3);
 если (статус! = 0)
 {
 // Дождемся завершения измерения:
 задержка (статус);

 // Получить завершенное измерение давления:
 // Обратите внимание, что результат измерения сохраняется в переменной P.
 // Также обратите внимание, что функция требует предыдущего измерения температуры (T).// (Если температура стабильна, вы можете выполнить одно измерение температуры для нескольких измерений давления.)
 // Функция возвращает 1 в случае успеха и 0 в случае неудачи.

 status = pressure.getPressure (P, T);
 если (статус! = 0)
 {
 // Распечатать результат измерения:
  Серийный номер  .print («абсолютное давление:»);
  Серийный  .print (P, 2);
  Серийный номер  .print ("mb,");
  Серийный .печать (P * 0,0295333727,2);
  Серийный номер  .println ("inHg");

 // Датчик давления возвращает абсолютное давление, которое зависит от высоты.
 // Чтобы убрать влияние высоты, используйте функцию уровня моря и текущую высоту.
 // Это число обычно используется в сводках погоды.
 // Параметры: P = абсолютное давление в мб, ALTITUDE = текущая высота в м.
 // Результат: p0 = давление с компенсацией на уровне моря в мбар

 p0 = давление.уровень моря (P, ВЫСОТА); // мы на высоте 1655 метров (Боулдер, Колорадо)
  Серийный номер  .print («относительное давление (на уровне моря):»);
  Серийный  .print (p0,2);
  Серийный номер  .print ("mb,");
  Серийный . Печать (p0 * 0,0295333727,2);
  Серийный номер  .println ("inHg");

 // С другой стороны, если вы хотите определить свою высоту по показаниям давления,
 // использовать функцию высоты вместе с базовым давлением (на уровне моря или другом).// Параметры: P = абсолютное давление в мбар, p0 = базовое давление в мбар.
 // Результат: a = высота в метрах.

 a = давление. высота (P, p0);
  Serial  .print ("вычисленная высота:");
  Серийный  .print (a, 0);
  Серийный номер  .print ("метры");
  Серийный  .print (a * 3.28084,0);
  Серийный  .println ("футы");
 }
 еще  Серийный .println ("ошибка получения измерения давления \ n");
 }
 else  Serial  .println ("ошибка измерения начального давления \ n");
 }
 else  Serial  .println ("ошибка получения измерения температуры \ n");
 }
 else  Serial  .println ("ошибка измерения начальной температуры \ n");

 задержка (5000); // Пауза на 5 секунд.
}

 

Ресурсы

BMP180 лист данных

https: // github.ru / sparkfun / BMP180_Breakout_Arduino_Library

https://www.bosch-sensortec.com/bst/products/all_products/bmp180



5 крутых способов стать гражданином-ученым

Райли Портер / Flickr

Творческим людям легче, чем когда-либо, заниматься серьезной наукой в ​​качестве хобби. Вам не нужна докторская степень или поддержка федерального агентства, чтобы задать новый, стоящий научный вопрос.Вам просто нужно любопытство и уверенность. Вот пять способов начать:

Обучение программированию микроконтроллеров

Независимо от того, какой областью науки вы хотите заниматься, микроконтроллеры, такие как Arduino, Beagle Bone или Raspberry Pi, могут упростить и повысить эффективность вашей экспериментальной установки. Эти небольшие компьютеры могут запускать датчики, записывать данные и автоматизировать некоторые экспериментальные процессы.

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

Если вы еще не знакомы с базовой электроникой и микроконтроллерами, потратьте некоторое время на то, чтобы возиться и изучить, прежде чем приступить к построению своего эксперимента. Для начала вы можете найти инструменты всех типов — акселерометры, барометры, датчики влажности, кислородные датчики, термометры и даже счетчики Гейгера — в Radio Shack или других магазинах электроники.Вы также можете посетить такие онлайн-магазины, как Maker Shed и Arduino Store.

Стать биологом своими руками

Основанная в 2008 году, DIY Bio предоставляет ресурсы, такие как «Спросите эксперта по биобезопасности», и онлайн-планы для самодельного лабораторного оборудования. Вы можете найти местные биологические группы и биолаборатории DIY по всему миру. В этих общественных лабораториях вы можете получить доступ к оборудованию и материалам, которые иначе было бы трудно достать. Вы также можете воспользоваться опытом и советами других энтузиастов биологии.

DIY-биологи конструируют светящиеся в темноте растения, используют электрические поля для создания искусства с бактериями и изучают более эффективные способы выращивания фитопланктона для фармацевтических препаратов и коммерческих рыбоводных хозяйств. Если вам нужны идеи, лаборатории, такие как BioCurious в Саннивейл, штат Калифорния, иногда проводят совместные общественные проекты, такие как Bioluminescence Project, где участники работают вместе над всем, от изучения метаболизма биолюминесцентных организмов до создания ламп с микроорганизмами.

Присоединяйтесь к хакерскому пространству

В 1980-х хакером был пользователь компьютера, который запускал вредоносные атаки на чужие компьютеры. Сегодня этот термин используется людьми, которые любят адаптировать предметы повседневного обихода и гаджеты для неожиданных целей, от практических до фантастических. Во многих сообществах теперь есть места для хакеров или места для разработчиков, участники которых обеспечивают совместную работу, рабочее пространство и доступ к оборудованию, которого у вас, вероятно, нет в вашем гараже. Это означает, что если вам нужно изготавливать детали, вам не нужно покупать собственный 3D-принтер или лазерный резак.Эти сообщества также являются отличным местом для поиска потенциальных соавторов вашего последнего научного проекта.

Построить мини-спутник

Если вас интересует космос, думайте о малом — вы хотите, чтобы ваш эксперимент поместился в коробку размером 4 x 4 x 4 дюйма, называемую Cubesat. Работа в рамках этого стандарта мини-спутников предоставит вам больше возможностей для проведения эксперимента в воздухе, что проще, чем вы думаете. Например, когда XCOR запускает в наступающем году свой многоразовый суборбитальный космический корабль Lynx, его первым покупателем станет U.S. Rocket Academy, которая приобрела 10 полетов на Lynx для своей программы «Граждане в космосе». Каждый полет будет нести 10 экспериментальных грузов.

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

Если у вас есть идея для эксперимента, который требует больше времени в космосе или должен быть на орбитальной, а не на суборбитальной высоте, тогда вам подойдет Центр развития науки в космосе (CASIS).CASIS — это агентство, ответственное за управление Национальной лабораторией США на борту Международной космической станции. Удивительно много пространства для исследований, доступного в лаборатории, не используется, и CASIS работает над этим. Он приветствует незапрошенные предложения в широком диапазоне областей, и центр поощряет гражданских ученых подавать предложения.

Краудсорсинг Некоторое финансирование

В большинстве наук вы можете построить надежный эксперимент за несколько сотен долларов, если будете изобретательны и изобретательны.Однако, если вам нужно внешнее финансирование, вы можете обратиться к платформам краудфандинга, таким как Kickstarter и IndieGoGo, которые могут предложить дополнительное преимущество, вызвав некоторый общественный интерес к вашему эксперименту.

Этот контент создается и поддерживается третьей стороной и импортируется на эту страницу, чтобы помочь пользователям указать свои адреса электронной почты. Вы можете найти больше информации об этом и подобном контенте на сайте piano.io.

Произошла ошибка при настройке вашего пользовательского файла cookie

Произошла ошибка при настройке вашего пользовательского файла cookie

Этот сайт использует файлы cookie для повышения производительности.Если ваш браузер не принимает файлы cookie, вы не можете просматривать этот сайт.

Настройка вашего браузера для приема файлов cookie

Существует множество причин, по которым cookie не может быть установлен правильно. Ниже приведены наиболее частые причины:

  • В вашем браузере отключены файлы cookie. Вам необходимо сбросить настройки своего браузера, чтобы он принимал файлы cookie, или чтобы спросить вас, хотите ли вы принимать файлы cookie.
  • Ваш браузер спрашивает вас, хотите ли вы принимать файлы cookie, и вы отказались.Чтобы принять файлы cookie с этого сайта, нажмите кнопку «Назад» и примите файлы cookie.
  • Ваш браузер не поддерживает файлы cookie. Если вы подозреваете это, попробуйте другой браузер.
  • Дата на вашем компьютере в прошлом. Если часы вашего компьютера показывают дату до 1 января 1970 г., браузер автоматически забудет файл cookie. Чтобы исправить это, установите правильное время и дату на своем компьютере.
  • Вы установили приложение, которое отслеживает или блокирует установку файлов cookie.Вы должны отключить приложение при входе в систему или проконсультироваться с системным администратором.

Почему этому сайту требуются файлы cookie?

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

Что сохраняется в файлах cookie?

Этот сайт не хранит ничего, кроме автоматически сгенерированного идентификатора сеанса в cookie; никакая другая информация не фиксируется.

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

Проект барометра

Arduino с использованием BMP180

Датчики давления широко используются в дронах, метеостанциях, смартфонах и т. Д. Важно знать, как работает эта небольшая технология.

Мы собираемся использовать датчик BPM180. Название модуля — GY-68. Маленькое устройство может считывать давление, высоту и температуру.

Давайте создадим небольшое устройство, которое использует BPM180 для считывания давления и высоты и использует ЖК-дисплей I2C для отображения этой информации (вы также можете выбрать отображение ее через последовательный порт).

Вот необходимые нам компоненты:

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

Поскольку и ЖК-дисплей, и датчик давления используют I2C, мы должны подключить выводы SDA и SCL к аналоговым выводам 4 и 5.

Некоторые барометры имеют вывод Vin, а некоторые — вывод 3V3. Если у вас есть Vin, он должен быть подключен к 5V, а если у него есть 3V3, он должен быть подключен к 3,3V.

После соединения компонентов нам нужно загрузить следующий код на плату Arduino.Нам нужны дополнительные библиотеки, одна из них — Adafruit_BMP085.h. Вам должно быть интересно, почему написано BMP085, когда мы используем датчик BMP180. Не волнуйтесь, эта библиотека должна работать и с этим датчиком.

Если вы не знаете, как добавлять библиотеки, я предлагаю вам проверить это, чтобы узнать, как добавлять библиотеки в свои эскизы. Этот код будет отображать давление и высоту на ЖК-дисплее. Вы также можете отображать температуру, если у вас ЖК-дисплей большего размера, на моем (16 × 2) для этого не было места.Для отображения текста в две строки мы используем функцию setCursor ().

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

Код помогает измерять давление и высоту с помощью датчика давления и отображать их на ЖК-дисплее. Он отображает давление в гПа и высоту в метрах.

Надеюсь, это каким-то образом натолкнуло вас на идею проекта Arduino. Пришло время построить что-нибудь потрясающее!

Вам также может понравиться:

Как собрать квадрокоптер на Arduino: пошаговый проект DIY

Как партнер Amazon я зарабатываю на соответствующих покупках.

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

И, чтобы вы еще больше воодушевились своим предстоящим проектом, вот квадрокоптер Arduino в действии:

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

Однако с этими комплектами квадрокоптеров вы пропустите долгие часы и пот, потраченные на строительство, и на то, чтобы понять суть вашей птицы и то, как она тикает.Кроме того, вы упустите непреодолимое чувство удовлетворения, когда впервые взлетите с квадроциклом ручной работы.

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

Общее «Quad Science»

Как следует из названия, квадрокоптер — это летательный аппарат с четырьмя электродвигателями и четырьмя пропеллерами. По сравнению с другими радиоуправляемыми летательными аппаратами, квадроцикл, как и другие мультироторные двигатели, имеет наиболее устойчивую платформу благодаря своей другой конструкции, а также направлению и разнице между четырьмя создаваемыми им толчками. Благодаря этой стабильности квадроциклы идеально подходят для воздушного наблюдения и съемок. Они бывают всех форм и размеров.От самых маленьких, которые умещаются на ладони, до больших, способных поднимать серьезное съемочное оборудование и подвесы. Вы будете удивлены, узнав, какой вес могут нести большие дроны!

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

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

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

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

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

Квадроциклы

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

Компоненты, необходимые для вашего квадроцикла

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

  • Frame — «Костяк» квадрокоптера. Каркас — это то, что удерживает вместе все части вертолета. Он должен быть прочным, но с другой стороны, он также должен быть легким, чтобы двигатели и батареи не изо всех сил удерживали его в воздухе.
  • Двигатели — Тяга, которая позволяет квадрокоптеру взлетать в воздух, обеспечивается бесщеточными двигателями постоянного тока, каждый из которых отдельно управляется электронным регулятором скорости или ESC.
  • ESC — Электронный регулятор скорости похож на нерв, который передает информацию о движении от мозга (полетный контроллер) к мышцам рук или ног (моторам). Он регулирует мощность, которую получают двигатели, что определяет скорость и изменение направления квадроцикла.
  • Пропеллеры — В зависимости от типа квадроцикла, который вы создаете, вы можете использовать винты от 9 до 10 или 11 дюймов (для стабильных полетов с аэрофотосъемкой) или 5-дюймовые гоночные винты для меньшей тяги, но большей скорости.
  • Батарея — В зависимости от установленного максимального уровня напряжения вы можете выбрать батареи 2S, 3S, 4S или даже 5S. Но для стандартного квадроцикла, который планируется использовать для аэросъемки или фотосъемки (просто пример), вам понадобится батарея 3S на 11,4 В. Вы можете выбрать 22,8 В 4S, если вы строите гоночный квадроцикл и хотите, чтобы двигатели вращались намного быстрее.
  • Плата Arduino — Выбор конкретной модели зависит от типа квадрокоптера, который вы хотите построить.Строите ли вы для аэрофотосъемки, гонок, фристайла или чего-то еще. О правильном выборе платы мы поговорим далее в статье.
  • IMU — Доска, которая в основном (в зависимости от вашего выбора) представляет собой сумму различных датчиков, которые помогают вашему квадроциклу знать, где он находится и как его выровнять.
  • RC Controller — Выбор передатчика зависит от выбора протокола, который вы собираетесь использовать, и приемника сигнала, который установлен на дроне.

Это основные компоненты дрона. Читайте более подробное описание каждого компонента:

Деталь # 1 — Рама

Хотя может возникнуть соблазн купить предварительно собранный комплект рамы, сборка рамы самостоятельно может помочь вам начать настоящий процесс DIY. Рама вашего квадрокоптера должна обладать прочностью, но она также должна быть достаточно гибкой, чтобы компенсировать вибрации, производимые двигателями. В нем должны быть следующие детали:

  • Центральная удерживающая пластина — для монтажа электроники.
  • Руки — на четверке четыре руки.
  • Кронштейны для двигателей — вам нужно четыре из них, чтобы вы могли подключить двигатели на каждом конце рычага.

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

Углеродное волокно намного лучше поглощает вибрации двигателя и является наиболее жестким. Но он же самый дорогой. Углеродное волокно — лучший выбор, но это во многом зависит от вашего личного бюджета.

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

Ознакомьтесь с нашими предложениями по лучшим готовым каркасам, которые вы можете использовать в качестве основы для своего проекта:

Деталь № 2 — Бесщеточные двигатели

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

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

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

Для двигателей (или роторов), мы предлагаем следующие модели:

Деталь № 3 — Винты

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

Вы должны выбрать пропеллеры в соответствии с размером вашей рамы, и как только вы решите, какие пропеллеры вы будете использовать, только тогда вы сможете выбрать свои двигатели. Пропеллеры стандартизированы, и вот самые популярные для квадроциклов:

  • 5 ступеней, 8 диаметров — малые квадроциклы
  • 8-шаговый, 9-й диаметр — малые квадроциклы
  • 5 ступеней, 10 диаметров — квадроциклы среднего размера
  • Шаг 7, диаметр 10 — квадроциклы среднего размера
  • 5 шагов, диаметр 12– Обеспечивают большое количество толчков и отлично подходят для квадроциклов большего размера

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

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

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

Если вам нужны винты с хорошими характеристиками, мы рекомендуем вам приобрести любой из этих:

Деталь # 4 — ESC (

Электронный регулятор скорости )

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

При покупке правильного регулятора скорости нужно обращать внимание на максимальный уровень тока, исходящего от источника. Выберите контроллер с током 10А или выше.

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

Когда дело доходит до ESC (электронных регуляторов скорости) , w e предлагает эти модели, которые великолепны и стабильны:

Деталь # 5 — Аккумулятор

Наиболее рекомендуемый источник питания для квадрокоптера — LiPo.Он не тяжелый, и текущий уровень идеально подходит для того, что вам нужно. NiMH — более дешевый, но и более тяжелый вариант.

Батареи

LiPo поставляются как одна ячейка 3,7 В или упакованы вместе (до 10 элементов, обеспечивающих 37 В).

Самая популярная версия среди любителей дронов известна как батарея 3SP1, которая состоит из трех ячеек и обеспечивает напряжение 11,1 В.

Вот хороший: Zippy Flightmax 5000mAh 3S1P 20C

Деталь # 6 — IMU (инерциальный измерительный блок)

Это устройство отвечает за измерение ориентации, скорости и силы тяжести квадрокоптера.Это позволяет электронике управлять мощностью, подаваемой на двигатели, чтобы регулировать скорость двигателей. Устройство оснащено 3-осевым гироскопом и 3-осевым акселерометром. Эта комбинация известна как 6DOF IMU.

Вот хороший вариант для сборки квадроцикла: KNACRO 6508 IMU MPU6050 MPU-6050 6DOF

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

Деталь # 7 — Контроллер полета

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

Если вы хотите начать работу с электроникой и кодированием, Arduino UNO — лучшая плата, которую вы можете использовать.Это самая надежная и прочная платформа, которая позволяет буквально играть с ней как угодно.

Входит в состав:

  • 14 цифровых входов / выходов (6 из них могут использоваться как выходы для ШИМ)
  • 6 аналоговых входов
  • кварцевый кристалл 16 МГц
  • Разъем USB
  • разъем питания
  • заголовок ICSP
  • кнопка сброса

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

Самое лучшее в этой доске то, что она позволяет вам возиться с ней и не беспокоиться о ее разрушении. Худшее, что вы можете с этим сделать, — это поджарить чип, который, к счастью, можно заменить всего за пару долларов.

Вы можете запрограммировать «UNO» с помощью программного обеспечения Arduino. Чтобы получить подробную информацию, которая поможет вам начать работу с полетным контроллером Arduino UNO, перейдите к последнему разделу сообщения.

Деталь # 8 — Радиоуправляемый передатчик

Самый распространенный способ программирования и управления квадрокоптером — это радиоуправляемый передатчик.Обычно вы можете выбрать один из двух режимов: акробатический или стабильный.

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

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

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

В настоящее время доступны различные системы управления RC , такие как Futaba, Spektrum, Turnigy, FlySky и так далее.Вот несколько наших любимых:

Электромонтаж, пайка и программирование

Это самая сложная часть всего процесса строительства. Пайка — это очень специфическая техника, поэтому обязательно выполняйте этот процесс осторожно. Убедитесь, что вы точно знаете, что вам нужно делать, прежде чем начинать каждый шаг. Для этого вам понадобится:

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

Схемы

Это основной план вашей операции:

Как подключить ESC:

  • Сигнальный штифт ESC 1 — D3
  • Сигнальный штифт ESC 3 — D9
  • Сигнальный штифт ESC 2 — D10
  • Сигнальный штифт ESC 4 — D11

Как подключить модуль Bluetooth:

Как подключить MPU-6050:

Как подключить светодиодный индикатор:

Как подключить приемник:

  • Дроссель — 2
  • Элероны — D4
  • Элероны — D5
  • Руль — D6
  • ВСП.1 — D7

Вам необходимо заземлить MPU-6050, модуль Bluetooth, приемник и ESC.И для этого вам необходимо подключить все контакты GND к контакту GND Arduino.

Как спаять все вместе

Вот порядок, в котором вы должны спаять все части вместе:

Первое, что вам нужно сделать, это взять женские разъемы и припаять их к макетной плате. Здесь будет размещаться ваша плата Arduino.

Припаяйте их прямо по центру, чтобы оставалось место для остальных разъемов для MPU, модуля Bluetooth, приемника и регуляторов скорости, и оставьте место для некоторых дополнительных датчиков, которые вы, возможно, решите добавить в будущем.

Следующим шагом является пайка штыревых разъемов приемника и регуляторов прямо из штыревых разъемов Arduino. Сколько у вас будет рядов заголовков мужских ESC, зависит от того, сколько двигателей будет у вашего дрона.

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

Первый заголовок в первой строке будет использоваться для PID сигнала, второй — для 5V (хотя это зависит от ваших ESC, имеющих вывод 5V или нет, в противном случае вы оставите эти заголовки пустыми), а третий Заголовок будет для GND.

По окончании пайки регуляторов скорости переходите к паяльной части разъемов приемника. В большинстве случаев у квадрокоптера 4 канала. Это «газ», «тангаж», «рыскание» и «крен». Оставшийся свободный канал (пятый) используется для смены режима полета (вспомогательный канал). Это означает, что вам нужно будет припаять штекерные разъемы в 5 рядов. Все, кроме одной, будут иметь один заголовок, а только для одной из этих строк требуется 3 заголовка подряд.

Как подключить все

Ниже вы можете увидеть пример правильного подключения.Как вы можете видеть на картинке, то, о чем мы только что говорили, расположено слева (MPU припаян по центру) на плате, а слева (два женских разъема припаяны снизу) на плате — это то, как мы припаяли и подключили модуль Bluetooth. .

В нашем случае все земли были связаны с землями Arduino. Это включает в себя все заземления ESC, массу приемника (заголовок сигнала газа полностью справа), а также заземление модуля Bluetooth и MPU.

Далее вам нужно следовать схемам и соединениям, которые мы объяснили выше.Например, MPU (SDA — A4 и SCL — A5) и для Bluetooth (TX — TX и RX — RX) Arduino.

После этого просто проследите за подключениями, как мы их написали: Сигнальные контакты ESC1, ESC2… к D3, D10… Arduino. Затем пины сигнала приемника Pitch — D2, Roll — D4… и так далее.

Кроме того, вам необходимо подключить длинный вывод светодиода (положительный вывод) к выводу Arduino D8, а также добавить резистор на 330 Ом между землей Arduino и коротким выводом светодиода (отрицательный вывод).

Последнее, что нужно сделать, это подключить источник питания 5 В. И для этого вам необходимо параллельно подключить черный провод (заземление аккумулятора) к земле всех ваших компонентов, а красный провод к Arduino, MPU и модулю Bluetooth, контакты 5 В.

Теперь MPU 6050 необходимо припаять к штекерным разъемам и к тем, которые вы планируете использовать. После этого поверните плату на 180 градусов и подключите все ваши компоненты к соответствующим разъемам на макетной плате.

Вот как это должно выглядеть, когда закончена пайка и проводка:

Включите его, и ваш Arduino готов к добавлению кодов через компьютер!

Как запрограммировать полетный контроллер Arduino

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

Во-первых, вам необходимо загрузить MultiWii 2.4. Тогда, когда вы его извлечете, вы получите это:

Войдите в папку MultiWii, найдите значок MultiWii и запустите его:

Используйте Arduino IDE, чтобы найти «файл Arduino» или файл Multiwii с расширением «.я нет». Любые «CPP-файл» или «H-файл» являются вспомогательными файлами для нашего кода Multiwii, поэтому не открывайте их. Просто используйте файл Multiwii.ino.

Когда вы открываете файл, вы найдете множество вкладок, таких как Alarms.cpp, Alarms.h, EEPROM.cpp, EEPROM.h и многие другие. Найдите «config.h»

Прокрутите вниз, пока не найдете «Тип мультикоптера», а затем, удалив «//», вы отметите это как определенное и работающее. Quad X, потому что мы предполагаем, что вы используете конфигурацию ротора «X» на вашем квадроцикле.

Теперь прокрутите вниз и найдите «Combined IMU Boards» и активируйте тип Gyro + Acc Board, который вы используете. В нашем случае мы использовали GY-521, поэтому мы активировали эту опцию.

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

Далее идет «Пин зуммера»:

Там нужно активировать опции индикатора полета (первые 3):

Теперь вам нужно прошить код на Arduino.

Отключите плату Arduino от полетного контроллера, а затем подключите ее к компьютеру через USB. Выйдя из FC и подключившись к компьютеру, вы найдете TOOLS и выберите тип своей платы Arduino (в нашем случае Arduino Nano).

Теперь найдите «Последовательный порт» и активируйте COM-порт, к которому подключен Arduino Nano (в нашем случае — COM3).

Наконец, щелкните стрелку, загрузите код и дождитесь передачи кода.

Когда загрузка завершена, отсоедините Arduino от USB, вставьте его обратно на свое место в плате FC и подключите батарею 5 В, чтобы весь FC был запитан, а затем подождите, пока светодиод на Arduino не загорится красным. Это означает, что загрузка завершена, и вы можете снова подключить его к компьютеру.

Теперь найдите папку Multiwii 2.4, затем MultiwiiConfig и найдите папку, совместимую с вашей ОС. В нашем случае это «application.windows64».

Теперь запустите приложение MultiwiiConf:

Когда откроется пользовательский интерфейс, вам нужно выбрать COM-порт Arduino и нажать «Пуск», как показано на изображении ниже.

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

В этом интерфейсе вы можете изменить значения PID и точно настроить свой квадроцикл в соответствии с вашими личными предпочтениями.Вы также можете назначить режимы полета определенным положениям вспомогательного переключателя в этом интерфейсе.

Все, что вам нужно сделать, это найти место для вашего Arduino FC на раме, и он готов взлететь в небо.

Заключение

Самостоятельная сборка дрона может оказаться сложным и трудным процессом. Тем не менее, он также гарантированно будет сопровождаться собственными наборами наград и удовольствий. Очень легко пойти в магазин и купить готовый к полету дрон, но люди, которые создают дроны с нуля, не делают этого по этой причине.Это ощущение, которое вы испытываете в самый первый раз, когда управляете дроном, полностью созданным вами. На этих летательных аппаратах довольно весело летать, но есть шанс, что вы получите еще больше удовольствия еще до того, как полет начнется!

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

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

YMFC-3D Часть 1 — Аппаратное обеспечение

YMFC-3D Часть 2 — Подключение передатчика и приемника RC

YMFC-3D Часть 3 — Как подключить гироскоп

YMFC-3D Часть 4 — Электронный регулятор скорости (ESC)

YMFC-3D Часть 5 — ПИД-регулятор квадрокоптера и настройка ПИД-регулирования

YMFC-3D Часть 6 — Контроллер полета с исходным кодом

Не стесняйтесь оставлять комментарии или отзывы об этом посте.

Related Post