Перейти к содержанию
Клуб помидороводов - tomat-pomidor.com


  • записи
    2
  • комментарий
    1
  • просмотров
    79

Барометр , 4 варианта


feniсs

30 просмотров

Вариант первый :

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

Комплектация :

Arduino nano

TM1637

BMP180

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

1.thumb.JPG.b3c459b542deb8c4b772e2ae4204915b.JPG

Программа (скетч) :

#include <TM1637.h>// библиотека для подключение модуля  семисегментного инд. TM1637

#include <Wire.h>//библиотека для работы интерфейсом I2C

#include <BMP085.h>//библиотека для работы модуля BMP180

TM1637 tm1637(3,2);

BMP085 dps = BMP085();

long  Pressure = 0;

void setup(void){

tm1637.init();// инициализация библиотеки «TM1637.h»

tm1637.set(4);//установка яркости , указанная константа равна 4 , диапазон установки 0-7

 Wire.begin();

dps.init(); 

}

void loop(void){

 dps.getPressure(&Pressure);

int q=Pressure/133.3;//перевод кПа в мм. рт. столба

 tm1637.display(q);

 delay(1000);//задержка в 1 сек. Между опросами датчика

}

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

2.thumb.JPG.8dcd9897d4f6f3aeca633d927cc4b80c.JPG рабочая сборка на макетке

Вариант второй :

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

Будем поочередно выводить на экран то давление , то температуру

Сразу скажу на практике такой вариант мягко говоря не ах , быстро достанет вас своим морганием

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

Комплектация :

Arduino nano

TM1637

BMP180

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

1.thumb.JPG.b3c459b542deb8c4b772e2ae4204915b.JPG

Меняется только программный код :

#include <TM1637.h>// библиотека для подключение модуля  семисегментного инд. TM1637

#include <Wire.h>//библиотека для работы интерфейсом I2C

#include <BMP085.h>//библиотека для работы модуля BMP180

TM1637 tm1637(3,2);

BMP085 dps = BMP085();

long Temperature = 0, Pressure = 0,Altitude = 0;

void setup(void){

  tm1637.init();// инициализация библиотеки «TM1637.h»

tm1637.set(4);// установка яркости , указанная константа равна 4,диапазон установки 0-7

  Wire.begin();

dps.init(); 

}

void loop(void){

  dps.getPressure(&Pressure);

  dps.getTemperature(&Temperature);

int q=Pressure/133.3; //перевод кПа в мм. рт. столба

  tm1637.display(q);

  delay(1000);//1сек. , время индикации показаний давления

 int t=Temperature;

  tm1637.display((t+5)/10);//вывод температуры с округлением до целого числа

  delay(1000);//1сек. , время индикации показаний температуры

}

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

5.thumb.JPG.57de73a77bd49694c23164a7d637fb50.JPG 6.thumb.JPG.0e231059fdde0abd88fd74a7118fb4f0.JPG

Вариант третий :

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

Ну значит программно введем режим день/ночь , цена вопроса - еще две копеечных детальки , резистор и фоторезистор

Комплектация :

Arduino nano

TM1637

BMP180

фоторезистор  GL5506 или другой из этой серии

резистор 0,25вт , номинал берем близкий к сопротивлению фоторезистора при освещенности

Схема подключения с небольшими изменениями :

4.thumb.JPG.d1a0070b13b71d5da736af8af0aab8c0.JPG добавлен последовательная цепочка резистор+фоторезистор , с ее средней точки снимается сигнал на аналоговый вход А0

Как подбирал номинал постоянного резистора , замерил сопротивление фоторезистора при включенном свете , было около 1ком , потом замерил сопротивление фоторезистора почти в темноте вышло 100ком , взял номинал резистора в 10ком , попал в точку , константу в программе mq менять не пришлось , по умолчанию в скетче стоит значение 500 (середка в диапазоне работы ацп , 0-1023)

Программа (скетч) :

#include <TM1637.h>// библиотека для подключение модуля  семисегментного инд. TM1637

#include <Wire.h>//библиотека для работы интерфейсом I2C

#include <BMP085.h>//библиотека для работы модуля BMP180

float mq;

TM1637 tm1637(3,2);

BMP085 dps = BMP085();

long Pressure = 0;

void setup(void){

 tm1637.init();// инициализация библиотеки «TM1637.h»

tm1637.set(4);// установка яркости , указанная константа равна 4 , диапазон установки 0-7 

Wire.begin();

dps.init(); 

}

void loop(void){

 mq = analogRead(A0);//считывание показаний с аналогового входа А0

    if (mq < 500)//порог на котором происходит переключение день/ночь , диапазон 200-800

   {

   tm1637.set(6);//установка комфортной яркости для дня , диапазон 0-7

    }

 else

 {

  tm1637.set(0);//установка комфортной яркости для ночи , диапазон 0-7

  }

  dps.getPressure(&Pressure);

int q=Pressure/133.3; //перевод кПа в мм. рт. столба

  tm1637.display(q);

  delay(500); //0,5сек. Периодичность опроса датчика давления

}

видео изменения яркости TM1637 от освещенности

В реале у меня подобный барометр стоит дома с красным индикатором

3.thumb.JPG.1456821e18253482aa129a001b1e1c12.JPG фоторезистор выведен на лицевую сторону корпуса

Вариант четвертый

Выводит давление и температуру на два разных дисплея TM1637

Схема интересна как образец подключение двух или более модулей TM1637 на одну ардуинку

Кроме того на одном из дисплеев показано как активировать на нем работу с запятыми

Комплектация :

Arduino nano

TM1637 - два штук:grin:

BMP180

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

2.thumb.JPG.3b9397c60e547146daa8c6dfb29d16fa.JPG

Кстати внимательно подключайте модули TM1637 , питание на них разводится по разному , на модулях где предусмотрена распайка в обе стороны с краю обычно плюс идет , а модули с распайкой в одну сторону обычно с краю минус ставят , хотя и это не закон , китайская специфика понимаешь ли:04laugh:

1.thumb.JPG.4bb2a90fb5736e9288b0e6cc02337010.JPG образец отображения информации для данного варианта

Программа (скетч) :

#include <TM1637.h>// библиотека для подключение модуля  семисегментного инд. TM1637

#include <Wire.h>//библиотека для работы интерфейсом I2C

#include <BMP085.h>//библиотека для работы модуля BMP180

TM1637 tmA(3,2);//первый дисплей для индикации давления

TM1637 tmB(5,4);//второй дисплей (с декадными точками) для индикации температуры

BMP085 dps = BMP085();

long Temperature = 0, Pressure = 0,Altitude = 0;

void setup(void){

  tmA.init();// дисплей 1 , инициализация библиотеки «TM1637.h»

tmA.set(1);// установка яркости для первого дисплея , диапазон установки 0-7

 tmB.init();// дисплей 2 , инициализация библиотеки «TM1637.h»

tmB.set(2);// установка яркости для второго дисплея ,диапазон установки 0-7

  Wire.begin();

dps.init(); 

tmB.init(D4056A);//установка на работу второго дисплея с дробными числами

}

void loop(void){

  dps.getPressure(&Pressure);

  dps.getTemperature(&Temperature);

int q=Pressure/133.3;// перевод кПа в мм. рт. столба

 float t=Temperature;

  tmA.display(q);//первый дисплей отображает атм.давление

  tmB.display(t/10);//второй дисплей отображает температуру с дробной частью

  delay(1000);

}

 

0 Комментариев


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

Комментариев нет

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...