ATtiny85 - Teploměr s DS18B20

Zápisník experimentátora

Hierarchy: ATtiny85

V tomto článku si vyrobíme miniaturní teploměr. Použijeme na to mikrokontrolér ATtiny85 a integrovaný obvod DS18B20. Výsledek budeme zobrazovat na displeji TM1637. Zapojení součástek je jednoduché a celý projekt si lze postavit na breadboardu.

Vycházet budeme z následujícího schématu. S takovým zapojením jste se již na této stránce setkali. Displej je připojen na piny 2 a 3. Senzor teploty je v parazitických napájení a je připojen na pin 7. Při takovém zapojení třeba dávat pozor na pin 7. Pokud je připojen senzor teploty, nebude se vám dát naprogramovat mikrokontrolér pomocí USBasp. Třeba ho před programováním mikrokontroléru odpojit.

Seznam součástek

Budeme potřebovat tyto součástky.

  • ATtiny85 {linkATtiny85} - Mikrokontrolér.
  • Breadboard {linkBreadboard} - Breadboard se používá na pohodlné prototypování.
  • DS18B20 {linkDS18B20} - Senzor teploty.
  • TM1637 {linkTM1637} - Displej.
  • USBasp {linkUSBasp} - Slouží k programování ATtiny85.

Použité knihovny

Potřebujeme nainstalovat následující knihovny. Můžete na to využít správce knihoven. Hypertexty na zdrojové texty knihoven naleznete ve zdrojovém kódu programu na serveru GitHub. Zdrojový kód je uveden na konci článku.

  • TM1637Display - Ovládání displeje TM1637.
  • OneWire - One Wire protokol.
  • DallasTemperature - Ovládání senzoru DS18B20 v parazitické napájení. Drobnou úpravou zapojení získáte napájení v normálním režimu. Z hlediska samotného programování v tom není žádný rozdíl. Knihovna si při startu ze senzoru získá způsob napájení a tomu se přizpůsobí.

Program

Program je jednoduchý, ale obsahuje několik zajímavých částí. V proměnné SEG_ERR je definován text Err, který se zobrazí na displeji, když není možné nalézt na sběrnici One Wire žádný senzor DS18B20. Využívá se na to funkce setSegments, která přímo nastaví jednotlivé LED segmenty, které vytvoří požadovaný nápis. Příklad takové situace je na druhé fotografii.

Pokud se senzor teploty najde, v periodických intervalech je z něj získaná teplota, která se zobrazuje na displeji. Teplota se násobí hodnotou 100, aby se zobrazila na displeji ve vhodném formátu a desetinná tečka je určena pevně na druhém znaku. Příklad je na první fotografii. Program není upraven na záporné teploty. Pokud byste to chtěli udělat, je třeba myslet na to, že na znaménko minus bude potřebná první pozice na displeji. Desetinnou tečku v takovém případě je třeba posunout na třetí pozici.

Na senzoru je nastaveno maximální rozlišení a teplota je z něj získávána velmi často. Je to tak nastaveno proto, abyste s příkladem mohli hrát a testovat, jak reaguje senzor teploty například na teplo lidských prstů. Tento příklad jsem použil i na vytvoření videa ai proto jsem potřeboval, aby byla reakce velmi rychlá. V praxi můžete klidně snížit rozlišení na 10 bitů a teplotu měřit jednou za minutu.

#include <TM1637Display.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Module connection pins (Digital Pins)
#define CLK 4
#define DIO 3
#define ONE_WIRE_BUS 2

const uint8_t SEG_ERR[] = {
  SEG_A | SEG_D | SEG_E | SEG_F | SEG_G, // E
  SEG_E | SEG_G,                         // r
  SEG_E | SEG_G,                         // r
  0,                                     // space
};

TM1637Display display(CLK, DIO);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  display.setBrightness(0x02);
  sensors.begin();
  if (sensors.getDS18Count() == 0)
    display.setSegments(SEG_ERR);
  else
    sensors.setResolution(12);
}

void loop() {
  if (sensors.getDS18Count() != 0) {
    sensors.requestTemperatures();
    double temp = sensors.getTempCByIndex(0);
    display.showNumberDecEx(temp * 100, 0b01000000, false);
  }
  delay(1000);
}

Na následující fotografii je na displeji zobrazena teplota, kterou měří senzor DS18B20.

Na následující fotografii je na displeji zobrazeno chybové hlášení, které se zobrazí tehdy, když se nepodařilo najít senzor teploty DS18B20. Senzor vidíte položený na stole vedle breadboardu.

Zdrojový kód

Zdrojový kód se nachází na serveru GitHub.

Video

Video se nachází na serveru YouTube.



Video


20.05.2019


Menu