{"id":606,"date":"2015-01-11T13:34:17","date_gmt":"2015-01-11T12:34:17","guid":{"rendered":"http:\/\/www.xpablo.cz\/?p=606"},"modified":"2015-01-11T13:34:17","modified_gmt":"2015-01-11T12:34:17","slug":"cidlo-teploty-a-vlhkosti-hdc1000-a-arduino","status":"publish","type":"post","link":"http:\/\/www.xpablo.cz\/?p=606","title":{"rendered":"\u010cidlo teploty a vlhkosti HDC1000 a Arduino"},"content":{"rendered":"<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/2015-01-08_10.32.15_web_mark.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\" size-medium wp-image-607 alignleft\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/2015-01-08_10.32.15_web_mark-300x169.jpg\" alt=\"2015-01-08_10.32.15_web_mark\" width=\"300\" height=\"169\" srcset=\"http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/2015-01-08_10.32.15_web_mark-300x169.jpg 300w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/2015-01-08_10.32.15_web_mark-1024x576.jpg 1024w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/2015-01-08_10.32.15_web_mark.jpg 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Pot\u0159eboval jsem nahradit velmi drah\u00e9 \u010didlo teploty a relativn\u00ed vlhkosti Sensirion n\u011b\u010d\u00edm levn\u011bj\u0161\u00edm, \u00fasporn\u011bj\u0161\u00edm a p\u0159ipojiteln\u00fdm na sb\u011brnici I2C. \u010cidlo m\u011blo b\u00fdt sou\u010dasn\u011b dostupn\u00e9 u b\u011b\u017en\u011b pou\u017e\u00edvan\u00fdch distributor\u016f el. sou\u010d\u00e1stek (Farnell, SOS, Mouser, &#8230;). Po dlouh\u00e9m hled\u00e1n\u00ed jsem objevil senzor HDC1000 od TI, kter\u00fd spl\u0148oval v\u0161echny pot\u0159ebn\u00e9 parametry. Jedin\u00e1 jeho nev\u00fdhoda je pouzdro BGA, ale m\u00e1 jen 8 v\u00fdvod\u016f, co\u017e by nemuselo b\u00fdt na p\u0159ek\u00e1\u017eku. <!--more-->Navrhli jsme tedy a vyrobili plo\u0161n\u00fd spoj. ur\u010den\u00fd na testov\u00e1n\u00ed a nechal jsem osadit vzorek. Proto\u017ee ale je\u0161t\u011b za\u0159\u00edzen\u00ed, do kter\u00e9ho je \u010didlo ur\u010deno nen\u00ed hotov\u00e9, pou\u017eil jsem k o\u017eiven\u00ed Arduino a jako sekund\u00e1rn\u00ed v\u00fdsledek jsem napsal knihovnu pro ovl\u00e1d\u00e1n\u00ed.<\/p>\n<p>Arduino a senzor byly propojeny na klasick\u00e9 bastl\u00ed\u0159sk\u00e9 desti\u010dce, senzor byl p\u0159ipojen\u00fd na v\u00fdvody I2C sb\u011brnice, jak je patrn\u00e9 na obr\u00e1zku.<\/p>\n<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/IMG_8911_web.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-608\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/IMG_8911_web-300x225.jpg\" alt=\"IMG_8911_web\" width=\"300\" height=\"225\" srcset=\"http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/IMG_8911_web-300x225.jpg 300w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/IMG_8911_web-1024x768.jpg 1024w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/IMG_8911_web.jpg 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Pro otestov\u00e1n\u00ed jsem do Arduina nahr\u00e1l zn\u00e1m\u00fd I2C scanner, abych ov\u011b\u0159il, \u017ee je \u010dip dostupn\u00fd na cel\u00e9 palet\u011b hodinov\u00fdch kmito\u010dt\u016f a tak\u00e9 abych ov\u011b\u0159il funkci adresov\u00e9ho p\u0159ep\u00edna\u010de. V\u00fdsledek, jak je vid\u011bt na dal\u0161\u00edm obr\u00e1zku, je dle o\u010dek\u00e1v\u00e1n\u00ed.<\/p>\n<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot_2015-01-07_17.28.37.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-609\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot_2015-01-07_17.28.37-280x300.png\" alt=\"Screenshot_2015-01-07_17.28.37\" width=\"280\" height=\"300\" srcset=\"http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot_2015-01-07_17.28.37-280x300.png 280w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot_2015-01-07_17.28.37-954x1024.png 954w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot_2015-01-07_17.28.37.png 997w\" sizes=\"auto, (max-width: 280px) 100vw, 280px\" \/><\/a><\/p>\n<p>\u010cip reaguje na v\u0161ech testovan\u00fdch kmito\u010dtech a po p\u0159epnut\u00ed p\u0159ep\u00edna\u010de m\u011bn\u00ed svoji adresu.<\/p>\n<p>Dal\u0161\u00edm krokem bylo vytvo\u0159en\u00ed knihovny pro obsluhu a testovac\u00edho p\u0159\u00edkladu (zdrojov\u00e9 k\u00f3dy cel\u00e9ho projektu pro Arduino CodeBlocks jsou na konci \u010dl\u00e1nku). Knihovna je napsan\u00e1 velmi spart\u00e1nsky &#8211; obsahuje minimum pot\u0159ebn\u00fdch funkc\u00ed a po\u017eaduje pouze dv\u011b funkce, poskytnut\u00e9 hlavn\u00edm programem.<\/p>\n<pre class=\"lang:cpp\" title=\"hdc1000.cpp\">\/*\r\n\tHDC1000.cpp\r\n    Author: Pavel Brychta\r\n*\/\r\n\r\n#include \"hdc1000.h\"\r\n#include \r\n#include \r\n\r\n#define HDC_REG_TEMPERATURE (0x00)\r\n#define HDC_REG_HUMIDITY (0x01)\r\n#define HDC_REG_CONFIGURATION (0x02)\r\n#define HDC_REG_SERIALID1 (0xfb)\r\n#define HDC_REG_SERIALID2 (0xfc)\r\n#define HDC_REG_SERIALID3 (0xfd)\r\n#define HDC_REG_MANUFACTURERID (0xfe)\r\n#define HDC_REG_DEVICEID (0xff)\r\n\r\nvoid HDC1000_readBytes(uint8_t i2caddress, uint8_t *values, uint8_t length);\r\nvoid HDC1000_writeBytes(uint8_t i2caddress, uint8_t *values, uint8_t length);\r\n\r\nHDC1000::HDC1000(uint8_t i2caddress)\r\n{\r\n\r\n\t_device = i2caddress;\r\n}\r\n\r\nvoid HDC1000::start(void)\r\n{\r\n\tuint8_t phase1[] = {HDC_REG_CONFIGURATION, 0x10, 0x00}; \/\/ temperature &amp; humidity, both with 14 bit resolution\r\n\/\/\tuint8_t phase1[] = {HDC_REG_CONFIGURATION, 0x30, 0x00}; \/\/ temperature &amp; humidity, both with 14 bit resolution, HEATER ON\r\n\r\n\tHDC1000_writeBytes(_device, phase1, sizeof(phase1));\r\n}\r\n\r\nvoid HDC1000::measure(void)\r\n{\r\n\tuint8_t phase1[] = {0x00}; \/\/ start measurement\r\n\r\n\tHDC1000_writeBytes(_device, phase1, sizeof(phase1));\r\n}\r\n\r\nvoid HDC1000::readRawValues(uint16_t *rawTemp, uint16_t *rawHum)\r\n{\r\n\tuint8_t data[4];\r\n\r\n\tHDC1000_readBytes(_device, data, 4); \/\/ read raw data\r\n\t*rawTemp = ((uint16_t)data[0] &lt;&lt; 8) + data[1];\r\n\t*rawHum = ((uint16_t)data[2] &lt;&lt; 8) + data[3];\r\n}\r\n\r\nfloat HDC1000::convertTemp(uint16_t rawTemp)\r\n{\r\n\tfloat result;\r\n\r\n\tresult = (rawTemp \/ 65536.0) * 165.0 - 40.0;\r\n\treturn result;\r\n}\r\n\r\nfloat HDC1000::convertHum(uint16_t rawHum)\r\n{\r\n\tfloat result;\r\n\r\n\tresult = (rawHum \/ 65536.0) * 100.0;\r\n\treturn result;\r\n}\r\n\r\nuint16_t HDC1000::getManufacturerID(void)\r\n{\r\n    uint8_t phase1[] = {HDC_REG_MANUFACTURERID};\r\n    uint8_t data[2];\r\n\tuint16_t result;\r\n\r\n\tHDC1000_writeBytes(_device, phase1, sizeof(phase1)); \/\/ set pointer\r\n\tHDC1000_readBytes(_device, data, 2); \/\/ read value\r\n\tresult = (data[0] &lt;&lt; 8) + data[1];\r\n\treturn result;\r\n}\r\n<\/pre>\n<p>V\u00fdsledn\u00fd test prok\u00e1zal, \u017ee \u010dip pracuje, teplotu m\u011b\u0159\u00ed spr\u00e1vn\u011b, pouze hodnota RH je \u0161patn\u011b &#8211; moje podez\u0159en\u00ed je, \u017ee kolega p\u0159i p\u00e1jen\u00ed \u010dipu pou\u017eil p\u0159\u00edli\u0161 mnoho tavidla, kter\u00e9 po\u0161kodilo kondenz\u00e1tor pro m\u011b\u0159en\u00ed vlhkosti. Uvid\u00edme, jak dopadne testov\u00e1n\u00ed s\u00e9rie, osazen\u00e9 jinou technologi\u00ed&#8230;<\/p>\n<p><a href=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot-2015-01-11-12.50.04.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-612\" src=\"https:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot-2015-01-11-12.50.04-300x177.png\" alt=\"Screenshot 2015-01-11 12.50.04\" width=\"300\" height=\"177\" srcset=\"http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot-2015-01-11-12.50.04-300x177.png 300w, http:\/\/www.xpablo.cz\/wp-content\/uploads\/2015\/01\/Screenshot-2015-01-11-12.50.04.png 837w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>A na z\u00e1v\u011br jak jsem u\u017e uvedl &#8211; ke sta\u017een\u00ed je kompletn\u00ed projekt pro Arduino CodeBlocks IDE. Vlastn\u00ed samostatn\u00e1 knihovna je pak v adres\u00e1\u0159i libraries&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pot\u0159eboval jsem nahradit velmi drah\u00e9 \u010didlo teploty a relativn\u00ed vlhkosti Sensirion n\u011b\u010d\u00edm levn\u011bj\u0161\u00edm, \u00fasporn\u011bj\u0161\u00edm a p\u0159ipojiteln\u00fdm na sb\u011brnici I2C. \u010cidlo m\u011blo b\u00fdt sou\u010dasn\u011b dostupn\u00e9 u b\u011b\u017en\u011b pou\u017e\u00edvan\u00fdch distributor\u016f el. sou\u010d\u00e1stek (Farnell, SOS, Mouser, &#8230;). Po dlouh\u00e9m hled\u00e1n\u00ed jsem objevil senzor HDC1000 od TI, kter\u00fd spl\u0148oval v\u0161echny pot\u0159ebn\u00e9 parametry. Jedin\u00e1 jeho nev\u00fdhoda je pouzdro BGA, ale &hellip; <a href=\"http:\/\/www.xpablo.cz\/?p=606\" class=\"more-link\">Pokra\u010dov\u00e1n\u00ed textu <span class=\"screen-reader-text\">\u010cidlo teploty a vlhkosti HDC1000 a Arduino<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[3,5],"tags":[36,28],"class_list":["post-606","post","type-post","status-publish","format-standard","hentry","category-arduino","category-elektronika","tag-arduino","tag-hdc1000"],"_links":{"self":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/606","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=606"}],"version-history":[{"count":6,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/606\/revisions"}],"predecessor-version":[{"id":616,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=\/wp\/v2\/posts\/606\/revisions\/616"}],"wp:attachment":[{"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=606"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.xpablo.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}