Novinky: Pridal som novú sekciu na webe - Turistika
Sitepoint logo

Meriame teplotu s EMC1001, nie s DS18B20

Asi najčastejšie vidíme u „pokročilých“ Arduino užívateľov meranie teploty. No a najčastejšie sa používa digitálny teplomer DS18B20 v puzdre TO-92 od Dallas. Je dobrý, je presný – ale je (relatívne) veľký (aj SO-8 je veľké!) a (relatívne) drahý – ak si ho nenecháte zaslať zdarma ako „engineering sample“.

Hľadal som alternatívu – digitálny, lacný, aspoň trochu presný, a hlavne malý. Digitálny = OneWire alebo I2C, aspoň trochu presný je 0.25°C a malý je SOT-23, napájanie 3.3V, s toleranciou 5V na I2C pinoch, nízky odber. Našiel som v ponuke Farnell – EMC1001, dokonca aj lacný (0,79€/kus), čo je 3,5x lacnejšie ako DS18B20. Píše sa, že je určený pre zbernicu SMBus, čo je vlastne len podskupina I2C. Keďže mám celkom rád I2C, potešil som sa 🙂 Okrem merania teploty obsahuje aj funkcionalitu termostatu, to mi ale netreba. Pre viac info si treba pozrieť datasheet na stránke výrobcu. Ešte na porovnanie:

  • DS18B20 – kľudový odber 0.75μA, pri meraní 1mA (meranie trvá 187.5 ms pri presnosti 0.25°C)
  • EMC1001 – kľudový odber 4.8μA, pri meraní 36μAemc1001-1Ukážkový kód nižšie, inšpiráciu som hľadal na bildr.org . Knižnica i2cmaster (stiahni).
#include <i2cmaster.h>

void setup(){
  Serial.begin(9600);
  Serial.println("EMC1001 test");

  i2c_init();
  PORTC = (1 << PORTC4) | (1 << PORTC5);  // zapni I2C pull-up
}

void loop(){
  byte dev = 0x49 << 1;      // default slave adresa, da sa zmenit rezistorom na pin-e 1
  byte data_low = 0;
  byte data_high = 0;

  i2c_start_wait(dev+I2C_WRITE);
  i2c_write(0x00);           // register 0x00
  i2c_rep_start(dev+I2C_READ);
  data_high = i2c_readAck(); // precitaj jeden byte
  i2c_readNak();
  i2c_stop();

  i2c_start_wait(dev+I2C_WRITE);
  i2c_write(0x02);           // register 0x02
  i2c_rep_start(dev+I2C_READ);
  data_low = i2c_readAck();  // precitaj jeden byte
  i2c_readNak();
  i2c_stop();

  int data = ((data_high << 8) | data_low) >> 6;   // konverzia
  Serial.println(data * 0.25, 2);
  delay(1000);
}

DSCF9748DSCF9753emc1001-2


Categories:


Comments

4 odpovede na na “Meriame teplotu s EMC1001, nie s DS18B20”

  1. Epto Avatar
    Epto

    Hmm… zaujimave, ale.
    Ale ako za hlavnu nevyhodu DS1820 je spomenuta velkost (a potom aj cena).
    Na zaverecnej foto sa porovnava velkost.
    Samotny obvod je sice maly, ale co z toho, ked je naspajkovany na redukcii, ktora je 2x vacsia ako samotne DSko?
    Nejako sa mi tu straca vyznam toho, ze je mensie, ked v konecnom dosledku je vacsie 🙂

    1. tomXX Avatar

      Epto: to je len na skúšanie, ak ten obvod zahrnieš do nejakého finálneho projektu, zaberie menej miesta 😉

      1. epto Avatar
        epto

        Ano, s tym suhlasim.
        Avsak ak chcem merat teplotu okoli a snimac mam na doske, bude namerana teplota ovplyvnena vyrarovanym teplom zo suciastok v okoli.
        Ak to chcem dat na kabel, to DSko sa mi zda lepsie z hladiska prispajkovania na kabel.
        Pripustam, ze ak mi nevadi teplo z okolitych suciastok, je lepsie pouzit uvedeny obvod. Z hladiska amaterskeho pouzitia vela vyhod nevidim.
        Samozrejme, komu je co po chuti, nech to pouziva 🙂

        1. tomXX Avatar

          To je fakt. Ja som hľadal primárne niečo do GPS loggera, kde je minimálny odber = žiadne extra tepelné vyžarovanie.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *