Перейти к содержанию

Помогите с барометром


Рекомендуемые сообщения

Хочется винтажную погодную станцию. Пробую объединить  http://mypractic.ru/urok-26-podklyuchenie-termodatchikov-ds18b20-k-arduino-biblioteka-onewire-tochnyj-arduino-termometr-registrator.html#comment-6863 иhttps://arduino-ua.com/art24-vintajnii-barometr

// термометр, датчик DS18B20
#include <MsTimer2.h>
#include <Led4Digits.h>
#include <OneWire.h>
#include <Adafruit_BMP085.h>     //Библиотека для датчика давления

Adafruit_BMP085 press_data;     //переменная для работы с датчиком

byte mA = 3;

int tmp;

float Pmm;     //для хранения показаний давления

float Tc;        //для хранения температуры

#define POWER_MODE  0 // режим питания, 0 - внешнее, 1 - паразитное
#define MEASURE_PERIOD 500  // время измерения, * 2 мс

// тип индикатора 1; выводы разрядов 5,4,16,2; выводы сегментов 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,16,2, 6,7,8,9,10,11,12,13);

OneWire sensDs (15);  // датчик подключен к выводу 15

int timeCount;     // счетчик времени измерения
boolean flagSensReady;  // признак готовности данных с датчика
byte bufData[9];  // буфер данных
float temperature;  // измеренная температура

void setup() {
  press_data.begin();     //подключаемся к датчику
  
   press_data.begin(); 

  pinMode(mA, OUTPUT);    

  MsTimer2::set(2, timerInterrupt); // задаем период прерывания по таймеру 2 мс 
  MsTimer2::start();               // разрешаем прерывание по таймеру
  Serial.begin(9600); // инициализируем порт, скорость 9600  
}

void loop() { 

  if ( flagSensReady == true ) {
    flagSensReady= false;
    // данные готовы

   if ( OneWire::crc8(bufData, 8) == bufData[8] ) {  // проверка CRC
      // данные правильные
      temperature=  (float)((int)bufData[0] | (((int)bufData[1]) << 8)) * 0.0625 + 0.03125; 
  
      // вывод измеренной температуры на индикаторы
      if (temperature >= 0) {
        // температура положительная
        disp.print((int)(temperature * 10.), 4, 1);         
      }
      else {
        // температура отрицательная
        disp.print((int)(temperature * -1 * 10.), 3, 1);         
        disp.digit[3]= 0x40;  // отображается минус
      }
      disp.digit[1] |= 0x80;  // зажечь точку второго разряда                 
        
      // передача температуры на компьютер
      Serial.println(temperature);    
    }
    else {  
      // ошибка CRC, отображается ----
        disp.digit[0]= 0x40; 
        disp.digit[1]= 0x40; 
        disp.digit[2]= 0x40; 
        disp.digit[3]= 0x40;         
    }    
 
  } 
  {

  Tc=press_data.readTemperature();      //читаем температуру

  Pmm=press_data.readPressure()/133.322;      //читаем и пересчитываем давление

  //выводим в порт

  Serial.print("C= ");

  Serial.print(Tc);

  Serial.print(" P= ");

  Serial.println(Pmm);

  delay(1000);     //ждем 1 секунду
  
   Pmm=map(Pmm, 700, 800, 0, 255);

  analogWrite(mA, Pmm);



} 
}


//-------------------------------------- обработчик прерывания 2 мс
void  timerInterrupt() {
  disp.regen(); // регенерация индикатора

  // управление датчиком DS18B20 паралллельным процессом
  timeCount++; if ( timeCount >= MEASURE_PERIOD ) { timeCount=0; flagSensReady=true; } 
  
  if (timeCount == 0) sensDs.reset();  // сброс шины   
  if (timeCount == 1) sensDs.write(0xCC, POWER_MODE); // пропуск ROM
  if (timeCount == 2) sensDs.write(0x44, POWER_MODE); // инициализация измерения

  if (timeCount == 480) sensDs.reset();  // сброс шины
  if (timeCount == 481) sensDs.write(0xCC, POWER_MODE); // пропуск ROM  
  if (timeCount == 482) sensDs.write(0xBE, POWER_MODE); // команда чтения памяти датчика  
    
 if (timeCount >= 483 && timeCount <= 491) bufData[timeCount - 483 ] = sensDs.read(); 
}

Получилось это. Работает только градусник. Убираю прерывания работает только барометр. В программировании ноль. Собирал методом "научного тыка" Помогите, кто может. Спасибо!

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

Скрытый текст

#include <Wire.h>
#include <BMP085.h>
BMP085 dps = BMP085();
long Temperature = 0, Pressure = 0;

#include "DHT.h"
#define DHTPIN 2 
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup(void) { 
  Serial.begin(9600); 
  Wire.begin(); 
  delay(1000);
  Serial.println("BMP180 and DHT11 test!");
  
  dps.init(); 
  dht.begin(); 
}  

void loop() 
{
  dps.getPressure(&Pressure); 
  dps.getTemperature(&Temperature);
  Serial.print("Pressure(mm Hg):"); 
  Serial.print(Pressure/133.3);      //Выводим давление в мм.рт ст
  Serial.print(" Temp:"); 
  Serial.println(Temperature*0.1);   // Температуру в градусах Цельсия
  delay(2000);
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) 
  {
    Serial.println("Failed to read from DHT");
  } 
  else 
  {
    Serial.print("Humidity:"); 
    Serial.print(h);
    Serial.print("% ");
    Serial.print("Temperature:"); 
    Serial.print(t);
    Serial.println("*C");
  }
  for(int i=1 ;i<=6 ; i++){
  delay(10000);}
  
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ведь этож надо... такое совпадение. И я тоже делаю без сверлений. Более того, прилагаю фото имеющихся у меня  "хоть чуток острых предметов", несмотря на наличие которых, столь несложный и общедоступный  способ зачистки, к.м.к.  имеет право на демонстрацию в данной теме. Вдруг кому-то пригодится... Тем более, что тема простаивает аж с марта, будто на белом свете нет ничего, что можно было бы сюда  разместить,  хотя бы для сведения. 
    • В описании сказано, что МК включится после размыкания кнопки включения.
    • Мои слова ни как не относятся к тому куску кода Знаете что такое функция, аргумент, результат?
    • Устройство сделано на базе МК ATtiny44A. Так как девайс нужен был мобильный, то в качестве индикатора был выбран модуль ЖКИ на НТ1621. Схема устройства: Так как питание девайса 3 В, то пришлось на плате дисплея заменить резистор контрастности и резистор подсветки ЖКИ. R1 установил 4,7 кОм в место 20 кОм, а R2 в место 100 Ом поставил 300 Ом. Прошивка для МК: test_LCD.hex МК тактируется на заводских установках (от внутреннего генератора 1 МГц.)   Аккумулятор Li-ion 1100 мАч. В качестве зарядного устройства, используется модуль ТР4056.   При полной зарядке аккумулятора, устройство работает без подзаряда около 27 дней. Индикатор на дисплее, помогает визуально контролировать уровень заряда для последующей подзарядки аккумулятора. При напряжении на аккумуляторе ниже 3,4 В подсветка индикатора гаснет для снижении потребляемого тока. Подсветка гаснет и в ночное время (при недостаточном освещении), чтобы свет дисплея не мешал во время сна.
    • @korsaj Ну согласно твоих слов и этот код примерно тоже самое и получается. Я и не вижу особых отличий. Но нужно только как то доработать чтоб оно работало. В том то всё и дело что оно не работает. А учитывая как раз таки что мне нужны будут определённые фрагменты где хранятся данные, то это очень хорошее решение, но нужно его доработать до рабочего состояния.
    • Чет непонятка у меня образовалась. Измерял индуктивность первички ТВЗ двумя методами: Василича и из книги Цыкина И чет всё разное получилось. ХЗ чему верить. Если по Василичу, то у ТОРа индуктивность растет вместе с амплитудой напряжения. 645Гн мне совсем много показалось. По Цыкину у ТОРа наоборот падает... У  ШЛМ сердечника +/- хотя бы рядом значения. В общем, может объясните? Может неправильно что сделал?  
    • Это условно упрощенный А вы ченить навояли?
×
×
  • Создать...