Взаимодействие bme280, датчика температуры, влажности и давления, с arduino
Содержание
- 1 Step 1: Now We Have the BMP180, Let’s Add a DHT11
- 2 Калибровка
- 3 Подключение датчика уровня воды с Arduino
- 4 Step 8: In Visuino: Add, and Setup Text and Analog Value Elements to Display the Temperature
- 5 Дисплей 16×4 LCD1604
- 6 Температура, влажность DHT11
- 7 Барометр BMP180
- 8 nRF24L01+
- 9 ESP8266
- 10 КДПВ
- 11 BMP085 — Датчик давления
- 12 Step 2: Connect the LCD Module to the Arduino
- 13 How to connect BMP 280 pressure sensor module with arduino –
- 14 Код Arduino, чтение показаний температуры и атмосферного давления
- 15 Step 4: Connect the Power, and I2C Wires Together
- 16 Установка библиотек
- 17 I2C Interface
- 18 Как подключить датчик воды к Ардуино
- 19 Интерфейс I2C
- 20 Предсказание погоды
- 21 Датчик уровня жидкости (Water Sensor Arduino)
- 22 Загрузка и запуск программы на языке Python
Step 1: Now We Have the BMP180, Let’s Add a DHT11
Once we have that of course we need to do something practical with that.as we used only 2 pins both for the BMP180 and the LCD (after all it is I2C) there are plenty of pins left on the Attiny85.So let’s add a DHT11 on pin PB1.normally I would publish the code here but there are just too many «fishhooks» in the code and that is too much of a gamble, so I have added it as a file.The connections to the Attiny are as follows:BMP180 and LCD:SDA=physical pin 5SCL=physical pin 7
DHT11 to PB1=physical pin 6The picture shows a 3 legged DHT11 breakoutboard that can be used as is. If you happen to have a bare 4 legged DHT11 you need a 10k pull up between S and +
When u use the Bro Hogan library, make sure that when you compile the code, that the compiler picks is the right library as the Bro Hogan library has the same name as the satndard libraryIf you so wish you could leave out the display and add the BMP180 to my Mini weather station.
Калибровка
Чтобы получать от датчика уровня воды точные показания, рекомендуется сначала откалибровать его для конкретного типа воды, которую вы планируете контролировать.
Как вы знаете, чистая вода не проводит электрический ток. На самом деле, проводящей ее делают минералы и примеси. Таким образом, ваш датчик может быть более или менее чувствителен в зависимости от типа используемой воды.
Прежде чем вы начнете отслеживать данные или запускать обработчиков каких-либо событий, вы должны увидеть, какие показания вы на самом деле получаете от вашего датчика.
Используя приведенный выше скетч, отметьте на то, какие значения выдает ваш датчик, когда он полностью сухой, когда он частично погружен в воду, и когда он полностью погружен в воду.
Например, используя ту же схему, что и выше, вы увидите в мониторе последовательного порта значения, близкие к следующим:
- когда датчик сухой: 0;
- когда он частично погружен в воду: ~420;
- когда он полностью погружен: ~520.
Рисунок 6 – Калибровка датчика уровня воды
Этот тест может потребовать несколько проб и ошибок. Как только вы получите хороший контроль над этими показаниями, вы сможете использовать их в качестве пороговых значений, если намерены инициировать какое-либо действие. В следующем примере мы собираемся сделать именно это.
Подключение датчика уровня воды с Arduino
Давайте подключим датчик уровня воды к Arduino.
Сначала вам нужно подать питание на датчик. Для этого вы можете подключить вывод +(VCC) на модуле к выводу 5V на Arduino, а вывод -(GND) модуля к выводу GND Arduino.
Однако одной из широко известных проблем с этими датчиками является их короткий срок службы при воздействии влажной среды. При постоянной подаче питания на зонд скорость коррозии значительно увеличивается.
Чтобы преодолеть эту проблему, мы рекомендуем не подавать питание на датчик постоянно, а включать его только тогда, когда вы снимаете показания.
Самый простой способ сделать это – подключить вывод VCC к цифровому выводу Arduino и устанавливать на нем высокий или низкий логический уровень, когда это необходимо. Итак, давайте подключим вывод VCC модуля к цифровому выводу 7 Arduino.
Наконец, подключите вывод S (Signal) к выводу A0 аналого-цифрового преобразователя Arduino.
Схема соединений показана на следующем рисунке.
Рисунок 4 – Схема подключения датчика уровня воды к Arduino
Step 8: In Visuino: Add, and Setup Text and Analog Value Elements to Display the Temperature
Next we will add Text and Analog elements for the Temperature:
- In the «Elements» dialog select the «Text Field» in the right window, then click on the «+» button on the left to add Text Field (Picture 1)
- In the Object Inspector set the «Initial Value» property of the element to «Temp:» (Picture 2)
- In the Object Inspector set the «Row» property of the element to «1»(Picture 3) — This will specify the field to be displayed in the second Row
- In the «Elements» dialog, select the «Analog Field» in the right window, end then click on the «+» button on the left to add Analog Field (Picture 4)
- In the Object Inspector set the «Column» property of the element to «9»(Picture 5)
- In the Object Inspector set the «Row» property of the element to «1»(Picture 6)
- Close the «Elements» dialog
Дисплей 16×4 LCD1604
Подробнее о дисплее и работе с ним погуглите «Работа с символьными ЖКИ на базе HD44780». Отметим, что нужно внимательно отнестись к полярности подключения питания к ЖК-индикатору и чтобы напряжение питания было в диапазоне +4,5…5,5 В. Невнимательное отношение к этому может привести к выходу индикатора из строя!
Пин LCD 1604 | Arduino MEGA | Arduino UNO | Описание |
---|---|---|---|
VSS | GND | GND | GND |
VDD | 5 V | 5 V | 4,7 — 5,3V |
RS | 22 | 4 | Высокий уровень означает, что сигнал на выходах DB0—DB7 является данными, низкий — командой |
RW | GND | GND | Определяет направление данных (чтение/запись). Так как операция чтения данных из индикатора обычно бывает невостребованной, то можно установить постоянно на этом входе низкий уровень |
E | 23 | 5 | Импульс длительностью не менее 500 мс на этом выводе определяет сигнал для чтения/записи данных с выводов DB0-DB7, RS и WR |
DB4 | 24 | 8 | Входящие/исходящие данные |
DB5 | 25 | 9 | |
DB6 | 26 | 10 | |
DB7 | 27 | 11 | |
LED A+ | +5V или резистор 220 Ом → +5VLED-A | ||
LED B- | GND | ||
V0 | GND или подстроечник на 10кОм |
Программная инициализация будет выглядеть так:
Температура, влажность DHT11
Подключение датчика температуры и влажности DHT11 (SainSmart). Датчик расположите лицевой стороной вверх, выводы будут описаны слева направо.
DHT11 | Arduino Mega |
---|---|
DATA | Digital pin 2 (PWM) (см. ниже DHTPIN) |
VCC | 3,3—5 В (рекомендуется 5 В, лучше внешнее питание) |
GND | GND |
Программная инициализация
Барометр BMP180
Подключение датчика атмосферного давления BMP180 (барометр) + температура по интерфейсу I2C/TWI.
BMP180 | Arduino Mega |
---|---|
VCC | не подключен |
GND | GND |
SCL | 21 (SCL) |
SDA | 20 (SDA) |
3,3 | 3,3 В |
Для UNO: A4 (SDA), A5 (SCL).
nRF24L01+
Краткие характеристики:
- Диапазон частот 2,401 — 2,4835 Ггц
- 126 каналов. Нулевой канал начинается с 2400 Мгц и далее с шагом 1 Мгц, например 70 канал находится соответственно на 2470 Мгц. При установке скорости передачи 2Mbps занимается ширина канала в 2 Мгц
- Питание 1,9 — 3,6 В (рекомендуется 3,3 В)
Вот распиновка модуля.
Некоторые советуют сразу же припаять керамический конденсатор 100nF (можно 1µF, 10µF) на выводы питания RF для избежания электрических помех.
Распиновка nRF24L01+ (смотреть сверху платы там где чип, пины должны быть внизу) :
пин 2 3,3V | пин 4 CSN | пин 6 MOSI | пин 8 IRQ |
пин 1 GND | пин 3 CE | пин 5 SCK | пин 7 MISO |
Подключение для метеостанции:
Arduino Mega | nRF24L01+ |
---|---|
3,3 В | VCC пин 2 (лучше внешнее питание) |
пин D8 | CE пин 3 (chip enable in) |
SS пин D53 | CSN пин 4 (chip select in) |
SCK пин D52 | SCK пин 5 (SPI clock in) |
MOSI пин D51 | SDI пин 6 (SPI Data in) |
MISO пин D50 | SDO пин 7 (SPI data out) |
IRQ пин 8 (Interrupt output) не подсоединен | |
GND | GND пин 1 (ground in) |
Программирование радиомодуля будет подробно описано в программной части.
ESP8266
Распиновка ESP8266 (смотреть сверху платы там где чипы, пины должны быть внизу):
GND | GPIO2 | GPIO0 | RX |
TX | CH_PD | RESET | VCC |
Подключение ESP8266 для метеостанции:
ESP8266 | Arduino Mega |
---|---|
TX | 10 пин (SoftwareSerial RX) |
RX | 11 пин (SoftwareSerial TX) |
VCC | 3,3 В |
GND | GND |
CH_PD | Через резистор 10К к 3,3 В Arduino |
GPI0 | Необязательно. Через резистор 10К к 3,3 В Arduino |
GPI2 | Необязательно. Через резистор 10К к 3,3 В Arduino |
КДПВ
Центральный блок в сборе. «Материнскую плату» вырезал из картонной коробки из-под обуви и к ней винтиками на 3 прикрутил всё остальное.
Как видим в этом месте всё питание осуществляется от пинов Ардуино, т.е. к блоку питания напрямую ничего не идёт, и пока мощи хватает.
Вроде всё. Ничего не забыл.
Паяйте, соединяйте. В следующей части будет приведен рабочий скетч для центрального блока и наша метеостанция уже что-то покажет.
BMP085 — Датчик давления
15 Марта 2013
BMP085 — цифровой интегральный датчик атмосферного давления.
Датчик выпускается в корпусе LCC8, его габариты 5х5х1,2мм.
Контактные площадки располагаются снизу корпуса:
Мне не хотелось самому возиться с мелким корпусом, поэтому я купил готовую платку на ebay (86 рублей):
Краткие характеристики:
- Диапазон измерения атмосферного давления: 300-1100 гПа (225-825 мм рт. ст.)
- Разрешение: 0,03 ГПа
- Управление: двух проводной интерфейс I2C
- Напряжение питания: 1,8-3,6В (пульсации не более 50 мВ)
- Наличие температурной компенсации
- Время измерения температуры, не более: 4,5 мс
- Время измерения давления, не более: 25,5 мс
- Ток потребления в режиме ожидания: 0,1 мкА
- Максимальный ток потребления, не более: 1 мА
- Корпус LCC8, габаритный размер 5х5х1,2мм
- Габаритные размеры платы: 21x15x10 мм
Внутренности
В основе датчика пьезо-резистивный сенсор, выходной сигнал которого после внутреннего аналого-цифрового преобразования доступен пользователю.
Полученное значение не является значением атмосферного давления, а связанно с ним “сложной” зависимостью.
Для расчета которой необходимо использовать 11 корректировочных коэффициентов.
Данные коэффициенты прошиты во встроенную EEPROM память датчика и индивидуальны для каждого датчика.
Для температурной компенсации датчик имеет встроенный аналоговый сенсор температуры.
Сигнал с которого так же необходимо оцифровать, прочитать и пересчитать.
В общем случае алгоритм работы выглядит следующим образом:
- Включение
- Считывание корректировочных коэффициентов
- Запуск преобразования сигнала с сенсора температуры
- Ожидание окончания преобразования
- Считывание результата преобразования
- Расчет температуры
- Запуск преобразования сигнала с сенсора давления
- Ожидание окончания преобразования
- Считывание результата преобразования
- Расчет давления
Максимально можно получить 128 значений в секунду, при этом значение температуры считывается однократно в начале каждого периода измерений.
Подключение
Управление датчиком осуществляется посредством стандартного двухпроводного интерфейса I2C.
Не очень люблю использовать интерфейс I2C, но выбора нет.
Дополнительно датчик имеет линию сброса (XCLR) и выход “окончание преобразования” (EOC):
Диапазон питающих напряжений датчика от 1,8 до 3,6 Вольта. На купленной плате установлен стабилизатор питания для расширения диапазона вверх до 5 Вольт.
Для “тестирования” датчика буду использовать плату STM32VL-Discovery, но код будет работать и на остальной линейке STM32 (возможно и на STM8, пока не проверял).
Использовал модуль I2C1, его сигнальные линии выведены на PB6 и PB7:
Линию сброса (XCLR) и выход “окончание преобразования” (EOC) подключил к PB14 и PB15, соответственно:
Интерфейс I2C
Начальный опыт работы с шиной I2C у меня уже есть: читать.
Сейчас я просто упорядочил код и использовал для инициализации стандартную библиотеку от ST:
Чтение одного байта:
Запись одного и двух байт:
Работа с датчиком
Сброс и чтение корректировочных значений:
Чтение и расчет температуры:
Чтение и расчет давления:
Такой сложный расчет придумал не я, а инженеры создавшие этот чип
Пример использования:
Для вывода информации я пользовался программой STM Studio:
Исходники
Полный проект можно получить используя данные файлы совместно с одним из шаблонов к конце записи:
Пример под плату STM32F4-Dicovery смотреть
Дополнительная информация:
Categories:
Проекты
Please enable JavaScript to view the comments powered by Disqus.
comments powered by Disqus
Step 2: Connect the LCD Module to the Arduino
- Connect Female-FemaleGround(Black wire) to the LCD Module (Picture 1)
- Connect the Female end of Female-MalePower(Red wire), SDA(Green wire), and SCL(Yellow wire) to the LCD Module (Picture 1), and leave the Male ends unconnected
- Connect the other end of the Ground wire(Black wire) to Ground pin of the Arduino board(Picture 2)
- Connect the Female end of another Female-Malewire(Green wire) to SDA/Analog pin 4 of the Arduino Nano board(Picture 2), and leave the Male end unconnected
- Connect the Female end of another Female-Malewire(Yellow wire) to SCL/Analog pin 5 of the Arduino Nano board(Picture 2), and leave the Male end unconnected
- Connect the Female end of another Female-Male Power wire(Red wire) to the 5V Power pin of the Arduino board(Picture 2), and leave the Male end unconnected
- Picture 3 shows where are the Ground, 5V Power, SDA/Analog pin 4, and SCL/Analog pin 5 pins of the Arduino Nano
How to connect BMP 280 pressure sensor module with arduino –
Connect the sensor with Arduino UNO as shown below.
Wiring – sensor and Arduino:
VCC–> 3.3v
GND–> GND
SCL/SCK –> A5(Analog pin 5)
SDA/SDI –> A4(Analog pin 4)
First of all, get the BMP 280 Library from Github at https://github.com/adafruit/Adafruit_BMP280_Library
Put it in to arduino library folder. Now you have to do one change in Adafruit_BMP280.h file. Change the IIC address of the sensor to 0x76.
Copy the following sketch and upload to UNO board.
/*************************************************************************** This is a library for the BMP280 humidity, temperature & pressure sensor Written by Limor Fried & Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution sketch adopted & modified by Jayprakash Shet , www.iknowvations.in ***************************************************************************/ #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP280.h> // only used if we are using SPI to communicate with sensor #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 // Here we are using IIC Adafruit_BMP280 bmp; // I2C //Adafruit_BMP280 bmp(BMP_CS); // hardware SPI //Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); void setup() { Serial.begin(9600); Serial.println(F("BMP280 test")); if (!bmp.begin()) { Serial.println(F("Could not find a valid BMP280 sensor, check wiring!")); while (1); } } void loop() { Serial.print(F("Temperature = ")); Serial.print(bmp.readTemperature()); Serial.println(" *C"); Serial.print(F("Pressure = ")); Serial.print(bmp.readPressure()); Serial.println(" Pa"); Serial.print(F("Approx altitude = ")); Serial.print(bmp.readAltitude(1013.25)); // this should be adjusted to your local forcase Serial.println(" m"); Serial.println(); delay(2000); }
BMP 280 pressure sensor test arduino sketch-
Once you upload the sketch, open the serial monitor where you will get the parameters displayed as under –
That is it, as you have seen, it is very easy to use BMP-280 pressure sensor with Arduino. If you have any problems, do let us know, we will help you out. You can contact us at support@iknowvations.in.
Happy pressurizing !
Код Arduino, чтение показаний температуры и атмосферного давления
Следующий скетч даст вам полное представление о том, как считывать с модуля BMP180 показания температуры и атмосферного давления, и может послужить основой для более практичных экспериментов и проектов.
Вот как выглядит вывод в мониторе последовательного порта.
Рисунок 8 – Вывод в мониторе последовательного порта
Каждое снижение давления на уровне моря на 1 гПа приводит к ошибке 8,5 м в расчетах высоты. Поэтому высота, которую мы получаем, достаточно близка, но не точна.
Вы можете получить более точное измерение высоты, если знаете текущее давление на уровне моря, которое будет зависеть от погоды.
Данный код предполагает, что текущее давление на уровне моря составляет 1013,25 миллибар, что равно 101325 Паскалям. Вот почему переменная установлена в 1013.25.
Объяснение кода
Скетч начинается с включения двух библиотек, а именно и .
Далее мы определяем переменную , необходимую для расчета высоты. Измените ее значение на текущее давление на уровне моря в вашем регионе.
Мы также создаем объект , чтобы получить доступ к функциям, связанным с ним.
В функции мы инициализируем последовательную связь с компьютером и вызываем функцию .
Функция инициализирует интерфейс I2C и проверяет правильность идентификатора чипа. Затем она программно перезапускает микросхему и ждет окончания калибровки датчика после запуска.
В функции основного цикла для считывания с модуля BMP180 показаний температуры, атмосферного давления и высоты мы используем следующие функции:
- функция возвращает от датчика температуру;
- функция возвращает от датчика атмосферное давление;
- функция вычисляет высоту (в метрах) исходя из текущего атмосферного давления (в гПа);
- функция вычисляет давление на уровне моря (в гПа).
Step 4: Connect the Power, and I2C Wires Together
- Connect the Male ends of the 3 Power wires(Red wires) — from the Display, the BMP180 Module, and the Arduino together as example with the help of a Breadboard (Picture 1) — In my case I used a small Breadboard
- Connect the Male ends of the 3 SDA wires(Green wires) — from the Display, the BMP180 Module, and the Arduino together as example with the help of a Breadboard (Picture 2) — In my case I used a small Breadboard
- Connect the Male ends of the 3 SCL wires(Yellow wires) — from the Display, the BMP180 Module, and the Arduino together as example with the help of a Breadboard (Picture 2) — In my case I used a small Breadboard
Установка библиотек
Для работы с датчиком BMP280 существуют различные библиотеки, упрощающие работу. К ним относятся BMP280_DEV, Adafruit_BMP280_Library. Для датчика BMP280 будет используется библиотека от Adafruit.
Adafruit Unified Sensor Driver — общий драйвер
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…
- В строке поиска вводим «Adafruit Unified Sensor», выбираем последнюю версию и кликаем Установить
- Библиотека установлена (INSTALLED)
Библиотека Arduino для датчиков BMP280
Чтобы начать считывать данные с датчиков, вам необходимо установить библиотеку Adafruit_BMP280 (код в репозитории github). Она доступна в менеджере библиотек Arduino, поэтому рекомендуется его использовать.
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…
- В строке поиска вводим «Adafruit BMP280», выбираем библиотеку от Adafruit, но можете использовать любую.
- Выбираем последнюю версию и кликаем Установить
- Выбираем пример: Файл->Примеры->Adafruit BMP280 Library->bmp280test
-
Компилируем этот пример. Если получаем ошибку , нужно установить Adafruit Unified Sensor (смотрите выше)
…\Documents\Arduino\bmp280-i2c\bmp280-i2c.ino:1:30: fatal error: Adafruit_Sensor.h: No such file or directory
#include <Adafruit_Sensor.h>
^
compilation terminated.exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini.1
2
3
4
5
6
7
8
9…\Documents\Arduino\bmp280-i2c\bmp280-i2c.ino130fatal errorAdafruit_Sensor.hNo such file ordirectory
#include <Adafruit_Sensor.h>
^
compilation terminated.
exit status1
ОшибкакомпиляциидляплатыArduino Pro orPro Mini.
I2C Interface
The module features a simple two-wire I2C interface which can be easily interfaced with any microcontroller of your choice.
The default I2C address of the BME280 module is 0x76HEX and can be changed to 0x77HEX easily with the solder jumper besides chip.
Procedure to Change I2C Address
- Locate the solder jumper besides chip. By default the middle copper pad is connected to the left pad.
- Scratch the connection between the middle and the left copper pad to disconnect those using a sharp knife.
- Add a solder blob between the middle and the right copper pad to join them. It allows you to set the I2C address 0x77HEX.
Как подключить датчик воды к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- датчик воды;
- 1 светодиод и резистор 220 Ом;
- провода «папа-папа» и «папа-мама».
Схема подключения датчика воды к Ардуино
Перед тем как, подключить датчик протечки воды к плате Ардуино, следует написать скетч. Откройте программу Arduino IDE и вы увидите скетч, где уже прописаны процедуры и . Для начала зададим переменную с помощью оператора . Переменную мы будем использовать для хранения данных в памяти и присваивания ей значения, получаемого с датчика воды.
Перейдите в Панель меню — Инструменты — Монитор порта
В процедуре void setup() мы прописываем режим работы аналогового порта, как вход — команда и подключаем монитор порта с помощью . Далее в процедуре void loop() получаем значение с аналогового порта с помощью команды и передаем значение на монитор порта Arduino IDE и ставим паузу для нашего удобства.
Скетч для датчика воды (water sensor)
int water; // присваиваем имя для значений с аналогового входа A0 void setup() { pinMode(A0, INPUT); // к входу A0 подключим датчик (англ. «intput») Serial.begin(9600); // подключаем монитор порта } void loop() { water = analogRead(A0); // переменная "water" находится в интервале от 0 до 1023 Serial.println(water); // выводим значение датчика на монитор delay(1000); // задержка в одну секунду }
- в первой строчке мы присвоили переменной int имя для хранения значений c входа A0, значения могут принимать только целое число.
После загрузки скетча вы сможете получить данные с датчика на мониторе порта. Для этого перейдите в Arduino IDE в Панель меню — Инструменты — Монитор порта. Или используйте для открытия сочетание клавиш Ctrl + Shift + M. После того, как мы узнали показания датчика при его увлажнении, мы можем добавить в скетч функцию автоматического включения светодиода при превышении какого-либо значения.
Скетч для датчика воды и светодиода Ардуино
int water; // присваиваем имя для значений с аналогового входа A0 void setup() // процедура setup { pinMode(12, OUTPUT); // пин 12 со светодиодом будет выходом (англ. «output») pinMode(A0, INPUT); // к входу A0 подключим датчик (англ. «intput») Serial.begin(9600); // подключаем монитор порта } void loop() // процедура loop { water = analogRead(A0); // переменная "water" находится в интервале от 0 до 1023 if (water > 100) { digitalWrite(12, HIGH); } // включаем светодиод if (water < 100) { digitalWrite(12, LOW); } // выключаем светодиод Serial.println(water); // выводим значение датчика на монитор delay(1000); // задержка в одну секунду }
Интерфейс I2C
Модуль использует простой двухпроводной интерфейс I2C, который можно легко подключить к любому микроконтроллеру.
Адрес I2C по умолчанию для модуля BME280 равен 0x76HEX и может быть легко изменен на 0x77HEX с помощью перемычки из припоя, устанавливаемой между площадками рядом с микросхемой.
Рисунок 4 – Модуль BME280. Площадки для напайки перемычки для выбора адреса I2C
Процедура изменения адреса I2C
- Найдите перемычку из припоя рядом с чипом. По умолчанию средняя медная площадка подключена к левой площадке.
- Перережьте ножом соединение между средней и левой медными площадками.
- Добавьте каплю припоя между средней и правой медными площадками, чтобы установить между ними электрическое соединение. Это сменит адрес I2C на 0x77HEX.
Рисунок 5 – Установка перемычки для выбора адреса I2C датчика BME280
Предсказание погоды
Датчики давления могут использоваться не только для определения высоты над уровнем моря, но и для предсказания погоды. Хорошо известно, что изменение давления предшествует смене погодных условий. Соответственно показания датчика давления, снимаемые в течение некоторого периода времени, могут являться основой погодных прогнозов. При этом имеется множество особенностей проведения подобных измерений.
Одним из важнейших моментов использования датчиков давления является место и способ установки. Для качественных измерений, корпус датчика должен быть установлен стационарно, в месте, защищенном от вертикальных потоков воздуха. В течение всего цикла измерений, составляющего несколько часов, положение датчика меняться не должно. Также необходимо учитывать изменение температуры в течение периода измерений, и производить необходимую коррекцию.
Сам принцип прогноза погоды, на основе тренда давления, достаточно прост. Направление изменения давления соответствует изменению погоды. Так понижение атмосферного давления обычно происходит перед ухудшением погоды, а повышение предшествует улучшению. Объясняет сущность этих явлений молекулярная модель воздуха. Для стандартных условий принято, что воздух состоит из смеси газов: 21% кислорода и 78% азота. Оставшийся процент отведен под другие газы. Молекулярная масса кислорода O2 равна 32, азота N2 — 28. Но в атмосфере кроме воздуха, присутствует большое количество водяного пара. Молекулярная масса H2O равна 18, то есть пар существенно легче компонентов воздуха.
Молекулярная модель показывает, что при наличии большого количества водяного пара в атмосфере, давление должно быть низким. При этом большое количество влаги, как правило, свидетельствует о наличии облачности и возможности выпадения осадков. И наоборот, сухой воздух имеет более высокую массу, что приводит к увеличению давления. Снижение влаги в атмосфере становится признаком наступления хорошей погоды.
Изменение атмосферного давления достаточно медленный процесс. Соответственно проводить измерения следует через большие интервалы времени, например 2-3 часа. Сравнение начальных и конечных показаний на нескольких интервалах позволит определить, что происходит с давлением: рост или падение. На основании этих данных и формируется прогноз на ближайшие часы.
Пример прогноза по давлению |
Существует еще один метод, предсказания погоды на основе измеренного давления. Этот метод более прост, но при этом позволяет получить краткосрочный прогноз, с не самой высокой вероятностью. Заключается он в определении текущего давления и сравнения его с погодной шкалой. Подобный способ раньше использовался в барометрах-анероидах, в которых шкала давления часто сопровождалась такими показателями как «дождь», «облачность», «ясно» и т.п. Средней величиной погодной шкалы принимается сухая погода с переменной облачностью, соответствующая на уровне моря давлению, равному 101.3 кПа или 760мм ртутного столба. Если измеренное значение ниже 101.3кПа, то в ближайшее время погода будет пасмурной. Даже если это не так, можно ожидать быстрого изменения метеорологических условий. И наоборот, если измеренное значение выше 101.3кПа, следует надеяться на солнечную погоду. Чем больше отклонение от средней точки, тем более ярко проявляются погодные явления, соответствующие текущей части шкалы. При использовании подобного метода прогнозирования следует учесть, что большинство населенных пунктов находятся выше уровня моря, поэтому использование в качестве среднего значения 101.3кПа приведет к погрешности прогноза, по высотным факторам. Чтобы устранить подобную погрешность, используется приведение давления в месте установки датчика к давлению на уровне моря и использование стандартной шкалы.
Здесь P(h) – текущее давление на высоте h, P(0) – давление, приведенное к уровню моря.
Прогноз погоды, основанный только на давлении или его тренде, не является абсолютным. В формировании метеорологических условий участвует огромное число факторов и явлений. Например, наличие тумана может привести к изменениям значения давления и искажениям тренда. Использование таких данных, в свою очередь, приведет к формированию не верного прогноза, особенно в областях, где туманы являются обычным делом. Также к ошибкам могут приводить восходящие и нисходящие потоки воздуха, что часто встречается в горной местности. Повысить точность прогнозирования в этих районах может создание сети метеостанций, либо использование дополнительных данных, например спутниковых метеоснимков.
You have no rights to post comments
Датчик уровня жидкости (Water Sensor Arduino)
Рабочее напряжение аналогового сенсора — 5v. Выходное напряжение (показания датчика) зависит от степени погружения датчика в жидкость и от параметров, влияющих на коэффициент передачи напряжения, например, проводимость жидкости. Это простой в использование и недорогой датчик уровня жидкости, который широко применяется в системах автоматизации и при разработке Умного дома.
Подключение к Ардуино датчика воды (Water Sensor)
Как вы уже заметили на фото к этому занятию, датчик уровня жидкости имеет три контакта. Правый контакт (-) подключается к Земле (GND), средний к питанию 5v, а левый к аналоговому входу, например, A0. При полностью сухом датчике выходное напряжение и показания на аналоговом входе будут равны нулю, чем больше датчик будет погружен в воду, тем больше будут его показания (от 0 до 1023).
Загрузка и запуск программы на языке Python
Для тех, кто предпочитает Python, рассмотрим, как аналогичный результат можно получить с помощью этого языка программирования.
В первую очередь, убедитесь, что библиотека Python RPi.GPIO, обеспечивающая взаимодействие программ на Python с контактами GPIO Raspberry установлена. Запустите в терминале интерпретатор python и в ответ на приглашение >>> выполните одну за другой следующие команды:
import RPi.GPIO
RPi.GPIO.VERSION
Рис. 6. |
Выход из интерпретатора – Ctrl-D.
Если ошибок не возникло и выведен номер версии библиотеки, то можно продолжать.
Выполните в терминале команду sudo apt-get install python-smbus для установки пакета для связи по шине I2C из программ на Python, если он еще не установлен.
После проверки подключения загрузите и разархивируйте в корневой каталог программу на языке Python:
cd ~
wget https://masterkit.ru/zip/bmp180-python.tar.gz
sudo tar zxvf bmp180-python.tar.gz
В корневом каталоге появится папка bmp180-python с тремя файлами: bmp180.py, bmp180.pyc и bmp180test.py. Файл bmp180.pyc является скомпилированным вариантом исходного файла bmp180.py и будет использован при работе основного файла программы bmp180test.py.
Перейдите в каталог bmp180-python и запустите программу:
cd bmp180-python
sudo python ./BMP180test.py
Рис. 7. |
Рис. 8. Подсоединенный к Raspberry Pi датчик давления. |
Рис .9. Результат работы программы на экране планшета. Raspberry и планшет находятся в локальной сети посредством подключения по WiFi, на Raspberry работает VNC-server, на планшете – VNC-viewer. |
Листинги программ BMP180.py и BMP180test.py можно посмотреть здесь: