» Електроника » Ардуино »Почетна метеоролошка станица на ГИ-БМП280-3.3 и Дс18б20

Кућна метеоролошка станица на ГИ-БМП280-3.3 и Дс18б20


Желим да прикупим уради сам инструмент који ће мерити атмосферски притисак и температуру. Сензор температуре мора бити удаљен и чврст, јер мора да мери температуру на одређеној удаљености од уређаја. Желео бих да имам такав преносни уређај са радним опсегом од -30 ° Ц до 50 ° Ц. Али то захтева да све компоненте могу да раде у овом температурном опсегу. Компоненте које могу радити у проширеном температурном опсегу су скупље и теже их је купити.
Да бих свој сан остварио у стварности, плоча коју сам описао у чланку “ГИ-БМП280-3.3 плоча за мерење барометријског притиска и температуре».

Из праксе је познато да током монтирања и конфигурације електронски производа пре његове израде, морате да проверите исправност свих материјала и компонената сваког од њих посебно. У супротном, касније се можете збунити, а као резултат тога електронски производ неће радити, а биће врло тешко пронаћи узрок квара.

Почнимо.

Прва фаза. Инсталирајте бесплатни софтверски омотач на рачунар Ардуино ИДЕ за писање програма (скице), њихово састављање и затим уписивање у микроконтролер Мега328П инсталиран на плочи. Препоручујем вам да преузмете верзију шкољке АРДУИНО 1.6.5. Зашто? У почетку је пројекат АРДУИНО био један, сада су програмери распршили и настављају да развијају систем АРДУИНО, али сваки на свој начин, са малим нијансама. Користио сам верзију АРДУИНО 1.6.5. Требало би га инсталирати и тестирати за сарадњу с Ардуино Уно плочом користећи најједноставније примере.

Друга фаза. Проверавамо плочу ГИ-БМП280-3.3 за мерење барометријског притиска и температуре. Узмемо 4 жице, повезујемо их ГИ-БМП280-3.3 и Ардуино Уно, као што је приказано на фотографији и дијаграму. Кривуље танке вишебојне линије су проводници.



Почнимо с провером ГИ-БМП280-3.3 плоче. Да бисте то учинили, морате инсталирати библиотеку у Ардуино ИДЕ, коју су написали програмери који раде на веб локацији. По правилу, након инсталирања библиотеке у Ардуино ИДЕ, појављују се примери (узорци) кода. Лаганом променом узорка кода, можемо га саставити у податке које микроконтролер разуме, а затим га послати у меморију микроконтролера. Пример (пример) можете пронаћи тако што ћете обратити пажњу на две фотографије на екрану у наставку.


Након што упише податке у микроконтролер плоче Ардуино Уно, одмах почиње са извршавањем програма (кода) и податке преко УСБ кабла шаље на рачунар на који је Ардуино Уно плоча повезана.И можемо видети резултате мерења плоче ГИ-БМП280-3.3 у Ардуино ИДЕ прозору, названој „монитор серијског порта“.


Резултат мерења можемо видети на плочи ГИ-БМП280-3.3 у стандардном програму Виндовс Хипер Терминал, након затварања љуске Ардуино Уно и подешавања сесије у програму Хипер Терминал. То јест, можемо добити резултате плоче ГИ-БМП280-3.3 повезивањем Ардуино Уно-а на било који рачунар УСБ каблом на који је инсталиран управљачки програм за Ардуино Уно плочу. Постоји неколико библиотека за рад са ГИ-БМП280-3.3. Све је радило за мене са библиотеком. Датотека коју преузмете са ове веб локације изгледат ће овако: бд7е4а37ц1ф4дба2ебде9б9цд49ф45це.зип. Треба га преименовати у: иардуино_Прессуре_БМП.зип. Сада морамо инсталирати библиотеку иардуино_Прессуре_БМП у Ардуино ИДЕ шкољку.


Покрените Ардуино ИДЕ, идите на мени Скетцх / Инцлуде Либрари / Адд.ЗИП Либрари ... затим одаберите иардуино_Прессуре_БМП.зип датотеку и кликните на дугме Отвори. Такође морате инсталирати библиотеке:,. Након инсталирања библиотека, поново покрећемо Ардуино ИДЕ шкољку, односно затварамо је и поново покрећемо. Затим изаберите мени Датотека / узорци / иардуино притисак БМП (сензори притиска) / пример.

Код видимо у прозору.

Код ће требати мало изменити.

У петом реду уклоните двије црте "//" и додајте (0к76) или (0к77) у једанаести ред. (0к76) је адреса плоче барометра. Показало се да је моја ГИ-БМП280-3.3 плоча повезана на И2Ц магистралу имала исту адресу (0к76). Како сазнати број уређаја спојеног на И2Ц сабирницу? Одговор на ово питање добићете тако што ћете прочитати цео чланак.

Дакле, код смо фиксирали у прозору, сада почињемо са провером и компајлирањем кода у менију Скетцх / Цхецк / Цомпиле. Ако је верификација и компилација кода успела, тада у менију Скетцх / Лоад покрећемо снимање програма у Ардуино Уно.

Ако је преузимање успешно, отварајући монитор серијског порта у менију: Алати / Монитор серијских портова, видећемо податке које је послала плоча ГИ-БМП280-3.3.

На следећем снимку екрана, резултат ГИ-БМП280-3.3 плоче која ради на рачунару на којем није инсталирана Ардуино ИДЕ шкољка. Подаци се примају путем програма ПуТТИ.

У исто време, фотографисан је лабораторијски анероидни барометар, који се налазио поред плоче ГИ-БМП280-3.3. Упоређујући очитања инструмента, сами можете извући закључке о тачности плоче ГИ-БМП280-3.3. Анероидни барометар сертификован од стране државне лабораторије


Трећа фаза. Провера ЛЦД екрана помоћу И2Ц интерфејс модула. Пронашли смо ЛДЦ екран са модулом интерфејса који се преко И2Ц сабирнице повезује на Ардуино УНО.
Кућна метеоролошка станица на ГИ-БМП280-3.3 и Дс18б20

Проверавамо његов рад користећи примере Ардуино ИДЕ шкољке. Али пре тога одређујемо адресу модула интерфејса. Мој интерфејс модул има адресу 0к3Ф. Уметнуо сам ову адресу у линију скице: ЛикуидЦристал_И2Ц лцд (0к3Ф, 16.2);
Ову адресу сам одредио помоћу скице „Скенер адреса уређаја И2Ц“ описану у.
Покренуо сам Ардуино ИДЕ шкољку, из чланка сам копирао програмски код и залепио његов Ардуино ИДЕ прозор.

Покренуо сам компилацију, а затим написао код у Ардуино УНО плочу на коју су спојени ГИ-БМП280-3.3 плоча и ЛДЦ дисплеј са И2Ц интерфејс модулом. Затим сам на монитору серијских портова добио следећи резултат. Мој интерфејс модул има адресу 0к3Ф.

Четврта фаза. Провера сензора температуре ДС18б20. Повезујемо га на следећи начин.

Библиотека ОнеВире Ардуино за рад са сензором температуре ДС18б20 је већ инсталирана.

Отворите узорак температуре ДС18к20_Температуре, компајлирајте, учитајте, гледајте резултате мерења на монитору серијског порта. Ако све успе, пређите на следећи корак.

Пета фаза. Скупштина куци метеоролошке станице на ГИ-БМП280-3.3 и Дс18б20.
Састављамо уређај по шеми:

Код за уређај сам добио комбинујући све примере у један и подешавајући излаз на екрану ЛДЦ дисплеја. Ево шта имам:

// Коментар за софтверску имплементацију И2Ц сабирнице: //
// #дефине пин_СВ_СДА 3 // Додијелите било који Ардуино пин да ради као СДА линија И2Ц софтверске сабирнице.
// #дефине пин_СВ_СЦЛ 9 // Додијелите било који Ардуино пин да ради као СЦЛ линија софтверској магистрали И2Ц.
// Коментар за компатибилност са већином плоча: //
#инцлуде
#инцлуде // Библиотека иардуино користиће методе и функције Жичне библиотеке.
#инцлуде // Библиотека за рад ЛДЦ типа 1602 на И2Ц магистрали

                                                            //
#инцлуде // Повежите библиотеку иардуино_Прессуре_БМП за рад са БМП180 или БМП280.
иардуино_Прессуре_БМП сензор (0к76); // Најавите објект сензора за рад са сензором притиска користећи функције и методе библиотеке иардуино_Прессуре_БМП.
ЛикуидЦристал_И2Ц лцд (0к3Ф, 16.2);
ОнеВире ДС (10);
воид сетуп () {
    лцд.инит ();
    лцд.бацклигхт ();
    Сериал.бегин (9600); // Иницирајте пријенос података на монитор серијског порта брзином од 9600 бауд.
    кашњење (1000); // Чекамо комплетирање пролазних времена када примењујемо снагу
    сенсор.бегин (73); // Започните рад са сензором. Тренутна висина ће се сматрати 73 м. - висина града Бузулук надморске висине
} //
воид лооп () {
// Прочитајте податке и приказ: температура у ° Ц, притисак у мм. рт., промјена висине у односу на специфицирану у функцији старт (задано 0 метара).
лцд.сетЦурсор (0,0); // дефинисати излазну тачку "П =" на ЛДЦ-у
лцд.принт ("П =");
лцд.принт (сензор. притисак / 1000.3); // поделите вредност П издату од БМП280 на 1000 и поставите излаз од 3 децимална места
лцд.сетЦурсор (12.0); // дефинисати излазну тачку "кПа" на ЛДЦ-у
лцд.принт ("кПа");
лцд.сетЦурсор (0,1);
лцд.принт ("Т =");
лцд.принт (сензор.температуре, 1); // подесите излаз 1 децималног места
лцд.сетЦурсор (6.1);
// лцд.принт ("Ц");
// лцд.сетЦурсор (9,1);
// лцд.принт ("Х =");
// лцд.принт (сензор. висина, 1);
    иф (сенсор.реад (1)) {Сериал.принтлн ((Стринг) "ЦЕХЦОП БМП" + сенсор.типе + ": \ т П =" + сенсор.прессуре + "\ тММ.ПТ.ЦТ, \ т Т = "+ сензор.температура +" * Ц, \ т \ т Б = "+ сензор. висина +„ М. ");}
    елсе {Сериал.принтлн ("ХЕТ ОТБЕТА ОТ ЦЕХЦОПА");}
// Прочитајте податке и приказ: температура у ° Ц и притисак у Па, притисак у мм. рт., промјена висине у односу на специфицирану у функцији старт (задано 0 метара).
    иф (сенсор.реад (2)) {Сериал.принтлн ((Стринг) "ЦЕХЦОП БМП" + сенсор.типе + ": \ т П =" + сенсор.прессуре + "\ тПа, \ т \ т Т =" + сенсор.температуре + "* Ц, \ т \ т Б =" + сензор. висина + "М.");}
    елсе {Сериал.принтлн ("ХЕТ ОТБЕТА ОТ ЦЕХЦОПА");}
    бите и;
  бајт присутан = 0;
  бите типе_с;
  бајтни подаци [12];
  бајт аддр [8];
  плута целзијус, фаренхеит;
  иф (! дс.сеарцх (аддр)) {
    Сериал.принтлн ("Нема више адреса.");
    Сериал.принтлн ();
    дс.ресет_сеарцх ();
    кашњење (250);
    повратак
  }
  Сериал.принт ("РОМ =");
  за (и = 0; и <8; и ++) {
    Сериал.врите ('');
    Серијски.принт (аддр [и], ХЕКС);
  }
  иф (ОнеВире :: црц8 (аддр, 7)! = аддр [7]) {
      Сериал.принтлн ("ЦРЦ није валидан!");
      повратак
  }
  Сериал.принтлн ();
  // први бајт РОМ-а означава који чип
  преклопник (аддр [0]) {
    кућиште 0к10:
      Сериал.принтлн ("Цхип = ДС18С20"); // или стари ДС1820
      типе_с = 1;
      одмор;
    кућиште 0к28:
      Сериал.принтлн ("Цхип = ДС18Б20");
      типе_с = 0;
      одмор;
    кућиште 0к22:
      Сериал.принтлн ("Цхип = ДС1822");
      типе_с = 0;
      одмор;
    подразумевано:
      Сериал.принтлн ("Уређај није уређај породице ДС18к20.");
      повратак
  }
  дс.ресет ();
  дс.селецт (аддр);
  дс.врите (0к44, 1); // започните претварање, са укљученом енергијом паразита на крају
  
  кашњење (1000); // можда је 750мс довољно, можда није
  // могли бисмо овде да урадимо дс.деповер (), али ресет ће се побринути за то.
  пресент = дс.ресет ();
  дс.селецт (аддр);
  дс.врите (0кБЕ); // Прочитајте Сцратцхпад
  Сериал.принт ("Подаци =");
  Серијски отисак (присутан, ХЕКС);
  Сериал.принт ("");
  за (и = 0; и <9; и ++) {// потребно нам је 9 бајтова
    дата [и] = дс.реад ();
    Серијски.принт (подаци [и], ХЕКС);
    Сериал.принт ("");
  }
  Сериал.принт ("ЦРЦ =");
  Сериал.принт (ОнеВире :: црц8 (подаци, 8), ХЕКС);
  Сериал.принтлн ();
  // Претворите податке у стварну температуру
  // јер је резултат 16-битни цијели број, требао би
  // бити сачуван до типа "инт16_т", који је увек 16 бита
  // чак и када се компилира на 32-битном процесору.
  инт16_т рав = (подаци [1] & 8) | дата [0];
  иф (типе_с) {
    сирова = сирова & лт; & лт; 3; // Подразумевана 9 битна резолуција
    иф (подаци [7] == 0к10) {
      // „цоунт цоунт остаће“ даје пуну 12-битну резолуцију
      рав = (рав & 0кФФФ0) + 12 - подаци [6];
    }
  } елсе {
    бите цфг = (подаци [4] & 0к60);
    // код ниже резолуције, ниски битови су недефинисани, па их поништимо
    ако је (цфг == 0к00) рав = рав & амп; ~ 7; // 9-битна резолуција, 93,75 мс
    друго ако је (цфг == 0к20) рав = рав & амп; ~ 3; // 10-битна рес, 187,5 мс
    друго ако је (цфг == 0к40) рав = рав & амп; ~ 1; // 11 битна резолуција, 375 мс
    //// подразумевана је 12-битна резолуција, време конверзије 750 мс
  }
  целсиус = (плута) сиров / 16.0;
  фахренхеит = целзијус * 1,8 + 32,0;
  Сериал.принт ("Температура =");
  Серијски отисак (целзијус);
  Сериал.принт ("Целзијус");
  Серијски.принт (фахренхеит);
  Сериал.принтлн ("Фахренхеит");
лцд.сетЦурсор (8.1); // дефинисати излазну тачку "Тдс =" на ЛДЦ-у
лцд.принт ("Тдс =");
лцд.принт (целзијус, 1);
    кашњење (3000);
}


Ево шта имам:


Плоча ГИ-БМП280-3.3 даје притисак у паскалима, што није баш згодно. Нисам могао да решим проблем како да направим податке о излазном притиску плоче ГИ-БМП280-3.3 у килопаскалима. Овај проблем сам решио у излазној линији ЛДЦ дисплеја.

лцд.принт (сензор. притисак / 1000.3); // поделите вредност П издату од БМП280 на 1000 и поставите излаз од 3 децимална места
Плоча ГИ-БМП280-3.3 такође пружа висинске вредности.

сенсор.бегин (73); // Започните рад са сензором. Тренутна висина ће се сматрати 73 м. - висина града Бузулук надморске висине
Ако се опустите на мору и промените „сенсор.бегин (73);“ на "сенсор.бегин (0);" у коду, а затим саставите и сачувајте програм у матичној метеоролошкој станици на ГИ-БМП280-3.3 и Дс18б20, и направите излаз висине на ЛДЦ екран, добићете и висиномјер.
// лцд.сетЦурсор (9,1);
// лцд.принт ("Х =");
// лцд.принт (сензор. висина, 1); // Испишите вредности висине у метрима једним децималним местом
Снага се у мојој верзији напаја путем УСБ кабла. Можете користити 5В / 600 мА појачани претварач импулса и ваша метеоролошка станица ће постати преносива. Ова врста напајања је добро описана у чланак.

Успешна компилација!
5
8.8
6.3

Додајте коментар

    • осмехнасмеши секакаокдонткновиахоонеа
      шефеогреботинабудаладада-даагресивантајна
      извиниплесданце2данце3пардонпомоћпића
      станипријатељидоброгоодгоодзвиждукзалутатијезик
      димпљескатицраиизјавитиисмијавајућидон-т_ментионпреузимање
      топлотаирефуллаугх1мдасастанакмоскингнегативан
      нот_икокицеказнитичитатиуплашитиплашипретрага
      подругљивтханк_иоуовото_цлуеумникакутнаслажем се
      лошепчелаблацк_еиеблум3поцрвењетихвалити седосаде
      цензурисанпријатносецрет2претипобедаиусун_беспецтацлед
      шокреспектлолпреведендобродошликрутоииа_за
      иа_добриипомагачне_хулиганне_отходифлудзабраназатвори

Саветујемо вам да прочитате:

Предајте га смартфону ...