Шура Калитуха

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

2 сообщения в этой теме

Хочется винтажную погодную станцию. Пробую объединить  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(); 
}

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DmitryS    28

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

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

#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);}
  
}

 

 

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Сообщения

    • @_DIN_ Тебе же сказали, обрати внимание на ЭТУ часть платы. Ты зачем два вывода массы соединил с конденсатором?
    • на эмиттере V4 0,1 вольта относительно минус питания.
    • на эмиттере V4 должно быть 1,5 вольта относительно минус питания. проверить сопротивление наушников. отключить батарею и замерить сопротивление наушников. желательно не отключая наушники из разъёма. это важно. ибо питание на усилитель идёт через  наушники. найти в интернете цоколёвку транзисторов. написать в поисковике цоколёвка транзистора 9012 прозвонить транзисторы. как проверить биполярный транзистор
    • Где-то попадалось про эти квадратики, никак не вспомню.
    • Ты хоть посмотри, что на выходе твоего ШИМ творится! Там не может быть 2.5В. Там ШИМ! Вот такой сигнал: То-есть там всегда максимальное напряжение! Никаких 2.5В там быть не может! Посмотри сам осциллографом.   Запомни! Через светодиод не может пойти больше напряжения, чем ему нужно. А питается он - стабильным током. Если подашь 3В он может потреблять 100мА. Другой экземпляр может при этом же напряжении потреблять 10мА. А добавив всего 0.1В он может уже потреблять 1000мА (сгорит). Именно потому, что его питают не напряжением, а ТОКОМ. А напряжение он возьмёт столько, сколько захочет. Ты выбираешь только ток, а напряжение выбирает сам светодиод. Не наоборот. На любом светодиоде указывается падение напряжения в неком диапазоне 2.1-3.7В, и точный указанный ТОК (20мА). Поэтому, чколько у него будет падать, решает светодиод, а не выставленное значение напряжения на блоке питания. Выставлять ты должен ток(20мА), а напряжение при этом должно быть в диапазоне (2.1-3.7В), увеличивать с малого напряжения, до номинального рабочего тока через светодиод.
    • Тему вверх. Привет всем, добавлю провода и разъемы, по порядку МГТФЭ 1х0,07, кусок на фото = 150р (кусками)  МГШВЭ 1х0.2 синий, кусок на фото = 300р (кусками) МС (не знаю какой) посеребрянный, на вид 0,05-ый, вся бухта = 700р Разъемы новые ОНЦ-БС-1-10/14-В1-1-В по 100р за 1 шт. новые Есть также вилки DB-9 (папы) с корпусами, новые, цена обсуждается. на фото их нет. отправка почтой РФ, оплата дополнительно.