{"id":410,"date":"2015-03-03T20:46:27","date_gmt":"2015-03-03T19:46:27","guid":{"rendered":"http:\/\/michalu.eu\/wordpress\/?p=410"},"modified":"2015-04-27T10:10:31","modified_gmt":"2015-04-27T08:10:31","slug":"digital-thermometer-based-on-arduino-with-4-digit-7-segment-display","status":"publish","type":"post","link":"https:\/\/michalu.eu\/wordpress\/digital-thermometer-based-on-arduino-with-4-digit-7-segment-display\/","title":{"rendered":"Digital thermometer based on Arduino with 4 digit 7 segment display"},"content":{"rendered":"<p><a href=\"http:\/\/michalu.eu\/wordpress\/wp-content\/uploads\/2015\/03\/DSC01199.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-414 size-large\" src=\"http:\/\/michalu.eu\/wordpress\/wp-content\/uploads\/2015\/03\/DSC01199-e1425411410689-1024x522.jpg\" alt=\"DSC01199\" width=\"960\" height=\"489\" srcset=\"https:\/\/michalu.eu\/wordpress\/wp-content\/uploads\/2015\/03\/DSC01199-e1425411410689-1024x522.jpg 1024w, https:\/\/michalu.eu\/wordpress\/wp-content\/uploads\/2015\/03\/DSC01199-e1425411410689-300x153.jpg 300w, https:\/\/michalu.eu\/wordpress\/wp-content\/uploads\/2015\/03\/DSC01199-e1425411410689.jpg 1806w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>1 x <strong>Arduino<\/strong> (in my case it was Arduino Mega 2560 rev2)<br \/>\n1 x <strong>PCF8574<\/strong> expander<br \/>\n1 x <strong>4 digit display with common anode<\/strong> (my was FJ-5461BH)<br \/>\n1 x temperature sensor <strong>MCP9700AE<\/strong><br \/>\n8 x <strong>220 Ohm resistors<\/strong><br \/>\nsome connectors<\/p>\n<p style=\"text-align: justify;\">If you want to build your own simple digital thermometer just for fun, this tutorial is for you. All the &#8220;ingredients&#8221; you can buy on ebay, aliexpress or in your local electronic shop. The temperature sensor can be replaced with other one, but you need to discover\u00a0how to connect it to the rest (especially check the operating voltage and pins). Different will be also way to calculate temperature basing on the output voltage.<!--more--><\/p>\n<p>For my sensor MCP9700AE it is:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">float getTemp() {\r\nfloat temp = 0.0;\r\ntemp = analogRead(A0) * 5 \/ 1024.0;\r\ntemp = temp - 0.5;\r\ntemp = temp \/ 0.01;\r\nreturn temp;\r\n}<\/pre>\n<p>Our simple thermometer display the temperature on 7 segment display. There are many displays on the market, but after you bought any you need to ensure how it works (it means: what pins you should use to control digit and which controls the segments).<\/p>\n<figure style=\"width: 720px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"http:\/\/elkom-serwis.com.pl\/5025-thickbox_default\/wyswietlacz-2-cyfry-fj5261-bh-wa-czerwony-h-1422mm-podwojny.jpg\" alt=\"\" width=\"720\" height=\"720\" \/><figcaption class=\"wp-caption-text\">FJ5461BH<\/figcaption><\/figure>\n<p>Why I used the expander? The expander simplified process of communication with display and reduced number of connectors. To control PCF8574 you should use very useful library PCF8574.h (you can download it <a title=\"here\" href=\"http:\/\/nettigo.pl\/attachments\/196\" target=\"_blank\">here <\/a>and after that you should import the library to your Arduino IDE)<\/p>\n<figure style=\"width: 500px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"http:\/\/starter-kit.nettigo.pl\/wp-content\/uploads\/2011\/11\/pcf8574.png\" alt=\"\" width=\"500\" height=\"245\" \/><figcaption class=\"wp-caption-text\">PCF8574<\/figcaption><\/figure>\n<p>Connect your segments to pins P0-P7 (remember about resistors &#8211; red LED should be powered with 2-2.3 V)<br \/>\nA0-A2 to GND<br \/>\nVCC &#8211; 5V<br \/>\nGND to GND in your Arduino on somewhere where you have GND \ud83d\ude42<br \/>\nSDA, SCL we will use to control segments, but only one thing we need to do is to connect to good pins on your Arduino (marked SDA, SCL).<\/p>\n<p>Output of the temperature sensor I connected to A0 port.<\/p>\n<p>Below you will find a short YouTube clip and whole code with comments.<\/p>\n<p>P.S. My first digit is damaged &#8211; \u00a0that&#8217;s why I used only three digit to show temperature \ud83d\ude09<br \/>\n<iframe loading=\"lazy\"  id=\"_ytid_89412\"  width=\"480\" height=\"270\"  data-origwidth=\"480\" data-origheight=\"270\" src=\"https:\/\/www.youtube.com\/embed\/gpFLSaUNMFY?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  epyt-is-override  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">#include &lt;PCF8574.h&gt;\r\n#include &lt;Wire.h&gt;\r\n\r\nPCF8574 expander;\r\nint digit1 = 2; \/\/ports on Arduino\r\nint digit2 = 3;\r\nint digit3 = 4;\r\nint digit4 = 5;\r\n\r\nconst int first = 1;\r\nconst int second = 2;\r\nconst int third = 3;\r\nconst int fourth = 4;\r\n\r\nfloat mainTemperature = 0.0; \/\/ value to show on 7 segment display\r\nlong interval = 1000; \/\/ interval at which to measure temp (milliseconds)\r\nlong previousMillis = 0; \/\/ will store last time temp was updated\r\n\r\nint segA = 0;\r\nint segB = 1;\r\nint segC = 2;\r\nint segD = 3;\r\nint segE = 4;\r\nint segF = 5;\r\nint segG = 6;\r\nint DOT = 7;\r\nvoid setup() {\r\n\r\npinMode(digit1, OUTPUT); \/\/configuring ports as outputs (digits)\r\npinMode(digit2, OUTPUT);\r\npinMode(digit3, OUTPUT);\r\npinMode(digit4, OUTPUT);\r\n\r\nexpander.begin(0x38); \/\/choose addressing scheme for PCF8574A\r\n\r\nexpander.pinMode(segA, OUTPUT); \/\/configuring ports as outputs (segments)\r\nexpander.pinMode(segB, OUTPUT);\r\nexpander.pinMode(segC, OUTPUT);\r\nexpander.pinMode(segD, OUTPUT);\r\nexpander.pinMode(segE, OUTPUT);\r\nexpander.pinMode(segF, OUTPUT);\r\nexpander.pinMode(segG, OUTPUT);\r\nexpander.pinMode(DOT, OUTPUT);\r\n\r\n}\r\n\r\nfloat getTemp() {\r\nfloat temp = 0.0;\r\ntemp = analogRead(A0) * 5 \/ 1024.0;\r\ntemp = temp - 0.5;\r\ntemp = temp \/ 0.01;\r\nreturn temp;\r\n}\r\n\r\n\/\/ the loop function runs over and over again forever\r\nvoid loop() {\r\nunsigned long currentMillis = millis();\r\n\r\nif(currentMillis - previousMillis &gt; interval) { \/\/updating temperature only after an interval\r\npreviousMillis = currentMillis;\r\nmainTemperature = (mainTemperature + getTemp()) \/2 ;\r\n}\r\nupdateDisplay(mainTemperature);\r\n}\r\n\r\nvoid updateDisplay(float temp) {\r\nint intTemp = temp * 10;\r\nfor (int i = 2; i &lt;= 4 ; i++) { \/\/first digit is damaged in my display ;\/\r\nselectDigit(i);\r\nif (i == 3) {\r\nlightNumber(intTemp % 10, true);\r\n}\r\nelse {\r\nlightNumber(intTemp % 10, false);\r\n}\r\nintTemp = intTemp \/ 10;\r\n\r\ndelayMicroseconds(10);\r\nlightNumber(10, false);\r\ndigitalWrite(digit1, LOW);\r\ndigitalWrite(digit2, LOW);\r\ndigitalWrite(digit3, LOW);\r\ndigitalWrite(digit4, LOW);\r\n}\r\n}\r\n\r\nvoid selectDigit(int number) {\r\nswitch (number) {\r\ncase first:\r\ndigitalWrite(digit1, HIGH);\r\ndigitalWrite(digit2, LOW);\r\ndigitalWrite(digit3, LOW);\r\ndigitalWrite(digit4, LOW);\r\nbreak;\r\ncase second:\r\ndigitalWrite(digit1, LOW);\r\ndigitalWrite(digit2, HIGH);\r\ndigitalWrite(digit3, LOW);\r\ndigitalWrite(digit4, LOW);\r\nbreak;\r\ncase third:\r\ndigitalWrite(digit1, LOW);\r\ndigitalWrite(digit2, LOW);\r\ndigitalWrite(digit3, HIGH);\r\ndigitalWrite(digit4, LOW);\r\nbreak;\r\ncase fourth:\r\ndigitalWrite(digit1, LOW);\r\ndigitalWrite(digit2, LOW);\r\ndigitalWrite(digit3, LOW);\r\ndigitalWrite(digit4, HIGH);\r\nbreak;\r\n}\r\n}\r\n\r\n\/\/Given a number, turns on those segments\r\n\/\/If number == 10, then turn off number\r\nvoid lightNumber(int numberToDisplay, boolean dot) {\r\n\r\n#define SEGMENT_ON LOW\r\n#define SEGMENT_OFF HIGH\r\nif (dot) {\r\nexpander.digitalWrite(DOT, SEGMENT_ON);\r\n}\r\nelse {\r\nexpander.digitalWrite(DOT, SEGMENT_OFF);\r\n}\r\nswitch (numberToDisplay) {\r\n\r\ncase 0:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_ON);\r\nexpander.digitalWrite(segE, SEGMENT_ON);\r\nexpander.digitalWrite(segF, SEGMENT_ON);\r\nexpander.digitalWrite(segG, SEGMENT_OFF);\r\nbreak;\r\n\r\ncase 1:\r\nexpander.digitalWrite(segA, SEGMENT_OFF);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_OFF);\r\nexpander.digitalWrite(segE, SEGMENT_OFF);\r\nexpander.digitalWrite(segF, SEGMENT_OFF);\r\nexpander.digitalWrite(segG, SEGMENT_OFF);\r\nbreak;\r\n\r\ncase 2:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_OFF);\r\nexpander.digitalWrite(segD, SEGMENT_ON);\r\nexpander.digitalWrite(segE, SEGMENT_ON);\r\nexpander.digitalWrite(segF, SEGMENT_OFF);\r\nexpander.digitalWrite(segG, SEGMENT_ON);\r\nbreak;\r\n\r\ncase 3:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_ON);\r\nexpander.digitalWrite(segE, SEGMENT_OFF);\r\nexpander.digitalWrite(segF, SEGMENT_OFF);\r\nexpander.digitalWrite(segG, SEGMENT_ON);\r\nbreak;\r\n\r\ncase 4:\r\nexpander.digitalWrite(segA, SEGMENT_OFF);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_OFF);\r\nexpander.digitalWrite(segE, SEGMENT_OFF);\r\nexpander.digitalWrite(segF, SEGMENT_ON);\r\nexpander.digitalWrite(segG, SEGMENT_ON);\r\nbreak;\r\n\r\ncase 5:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_OFF);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_ON);\r\nexpander.digitalWrite(segE, SEGMENT_OFF);\r\nexpander.digitalWrite(segF, SEGMENT_ON);\r\nexpander.digitalWrite(segG, SEGMENT_ON);\r\nbreak;\r\n\r\ncase 6:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_OFF);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_ON);\r\nexpander.digitalWrite(segE, SEGMENT_ON);\r\nexpander.digitalWrite(segF, SEGMENT_ON);\r\nexpander.digitalWrite(segG, SEGMENT_ON);\r\nbreak;\r\n\r\ncase 7:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_OFF);\r\nexpander.digitalWrite(segE, SEGMENT_OFF);\r\nexpander.digitalWrite(segF, SEGMENT_OFF);\r\nexpander.digitalWrite(segG, SEGMENT_OFF);\r\nbreak;\r\n\r\ncase 8:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_ON);\r\nexpander.digitalWrite(segE, SEGMENT_ON);\r\nexpander.digitalWrite(segF, SEGMENT_ON);\r\nexpander.digitalWrite(segG, SEGMENT_ON);\r\nbreak;\r\n\r\ncase 9:\r\nexpander.digitalWrite(segA, SEGMENT_ON);\r\nexpander.digitalWrite(segB, SEGMENT_ON);\r\nexpander.digitalWrite(segC, SEGMENT_ON);\r\nexpander.digitalWrite(segD, SEGMENT_ON);\r\nexpander.digitalWrite(segE, SEGMENT_OFF);\r\nexpander.digitalWrite(segF, SEGMENT_ON);\r\nexpander.digitalWrite(segG, SEGMENT_ON);\r\nbreak;\r\n\r\ncase 10:\r\nexpander.digitalWrite(segA, SEGMENT_OFF);\r\nexpander.digitalWrite(segB, SEGMENT_OFF);\r\nexpander.digitalWrite(segC, SEGMENT_OFF);\r\nexpander.digitalWrite(segD, SEGMENT_OFF);\r\nexpander.digitalWrite(segE, SEGMENT_OFF);\r\nexpander.digitalWrite(segF, SEGMENT_OFF);\r\nexpander.digitalWrite(segG, SEGMENT_OFF);\r\nbreak;\r\n}\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1 x Arduino (in my case it was Arduino Mega 2560 rev2) 1 x PCF8574 expander 1 x 4 digit [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[59,23],"tags":[98,99],"class_list":["post-410","post","type-post","status-publish","format-standard","hentry","category-arduino","category-it","tag-7-segment-display","tag-temperature-sensor"],"_links":{"self":[{"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/posts\/410","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=410"}],"version-history":[{"count":8,"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/posts\/410\/revisions"}],"predecessor-version":[{"id":419,"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/posts\/410\/revisions\/419"}],"wp:attachment":[{"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michalu.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}