Барометр , 4 варианта
Вариант первый :
Вывод показаний атмосферного давления на светодиодный индикатор в мм рт. ст.
Комплектация :
Arduino nano
TM1637
BMP180
Схема подключения :
Программа (скетч) :
#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 сек. Между опросами датчика
}
Пояснений к скетчу тут никаких не требуется , все ужато до минимума , раз в секунду производится опрос датчика и данные выводятся на экран
Вариант второй :
Упоминал во введении что для многих датчиков довеском вешают еще внутренний датчик температуры , иногда не грех этим воспользоваться
Будем поочередно выводить на экран то давление , то температуру
Сразу скажу на практике такой вариант мягко говоря не ах , быстро достанет вас своим морганием
Привожу его только чтобы показать как сделать запрос у датчика давления температуры
Комплектация :
Arduino nano
TM1637
BMP180
Схема подключения остается та же :
Меняется только программный код :
#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сек. на табло будет отображаться то давление , то температура (окр.до целого значения) :
Вариант третий :
Вариант первый что я привел всем хорош , но если вы такой барометр установите в спальне то он начнет вас ночью раздражать своим ярким свечением , можно конечно выставить яркость индикатора на малый уровень , но тогда другая проблема , днем при свете он ставит мало заметен
Ну значит программно введем режим день/ночь , цена вопроса - еще две копеечных детальки , резистор и фоторезистор
Комплектация :
Arduino nano
TM1637
BMP180
фоторезистор GL5506 или другой из этой серии
резистор 0,25вт , номинал берем близкий к сопротивлению фоторезистора при освещенности
Схема подключения с небольшими изменениями :
добавлен последовательная цепочка резистор+фоторезистор , с ее средней точки снимается сигнал на аналоговый вход А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 от освещенности
В реале у меня подобный барометр стоит дома с красным индикатором
фоторезистор выведен на лицевую сторону корпуса
Вариант четвертый
Выводит давление и температуру на два разных дисплея TM1637
Схема интересна как образец подключение двух или более модулей TM1637 на одну ардуинку
Кроме того на одном из дисплеев показано как активировать на нем работу с запятыми
Комплектация :
Arduino nano
TM1637 - два штук
BMP180
Схема подключения :
Кстати внимательно подключайте модули TM1637 , питание на них разводится по разному , на модулях где предусмотрена распайка в обе стороны с краю обычно плюс идет , а модули с распайкой в одну сторону обычно с краю минус ставят , хотя и это не закон , китайская специфика понимаешь ли
образец отображения информации для данного варианта
Программа (скетч) :
#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 Комментариев
Рекомендуемые комментарии
Комментариев нет
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти