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

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

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 смайлов.

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

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

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

Загрузка...

  • Сообщения

    • Запуск восстановления коммерческая тайна. Я связывался с заводом напрямую, следуя регламенту нужно заменить устройство на новое. Можете подсказать точнее что перед выпаиванием от меня требуется.
    • 2кВт это ампер 9. Даже 10А диоды будут работать на пределе и греться. Как-то так получается, что на них (для нормальной работы светодиода) должно падать 3В, что при токе 10А даст 30Вт выделяемой мощности. Поэтому эта схема неудачная для такой нагрузки. Тут скорее нужно что-то подобное  Чем больше ток нагрузки — тем ярче свечение светодиода.
       Трансформатор Т1 может быть намотан на ферритовом кольце диаметром 30...40 мм марки 2000НН. Его токовая обмотка (включена в разрыв цепи нагрузки) содержит 20...25 витков толстого провода (диаметр 2,5 мм). Вторичная обмотка имеет 1500 витков тонкого провода (0,08...0,1 мм). Для уменьшения потерь в схеме выпрямителя использованы германиевые диоды. Светодиод лучше сверхяркий. Резистор R1 необходимо подобрать так, чтобы при максимальной нагрузке ток через светодиод не превышал допустимого (обычно 20-25 мА). Взято отсюда (по поиску в гугле - "индикация  мощной нагрузки") http://forum.homedistiller.ru/index.php?topic=36141.40 Или вот так http://radiostorage.net/1283-skhemy-prostyh-indikatorov-potreblyaemoj-moshchnosti-k176la7.html  Конструкция трансформатора тока и его вольт-амперная характеристика показаны на рис. 2. Его магнитопровод — ферритовое кольцо 2000 НМ типоразмера К20Х10Х5, которое аккуратно разламывают на две части и на одну из них наматывают 1500 витков провода ПЭВ-2 0,08 - это вторичная обмотка 3. Затем, надев вторую часть кольца 2 ,на сетевой провод 1, обе половины оклеивают клеем БФ-2 или эпоксидным клеем.
    • Тогда ищите вот такой:  RT-8B7WA-A19, развивает на валу аж 420Вт (питание 30А*18В), момент до 15,3 кГ*см . или такой  RZ-735VA-9517 на валу 280Вт (20А*18В), до 12,9 кГ*см Двух-трех пар ключей должно хватить, если до Stall'a не доводить  Жаль, высокооборотистые.
    • Собрал прибор при включении постоянно слышен звук динамика. Подключался без катушки. Вопрос где собака закрыта и второе какая индуктивность для катушки нужна для этого прибора. Спасибо
    • Нашёл ошибку подключении индикатора, еще вопрос при подключении прибора без катушки постоянно слышно зум динамика и на индикаторе положение сигнала находится в предпоследнем положении (14). Или потому, что без катушки или что?
    • SRAM + баратейка часто использовалась как енергонезависимая память, для хранения каких-либо параметров. В копирах такие связки от одной CR2032 работали порядка 10 лет, сейчас используется FRAM.  В устройстве скорее всего должен бьіть предусмотрен режим инициализации SRAM после сбоя питания, просто ТС не вкурсе как его запустить