{"id":16944912,"url":"https://github.com/drbrain/temperature_monitor","last_synced_at":"2026-05-11T02:32:41.214Z","repository":{"id":1620194,"uuid":"2293566","full_name":"drbrain/temperature_monitor","owner":"drbrain","description":"Wireless Arduino Temperature Monitor","archived":false,"fork":false,"pushed_at":"2018-06-19T22:39:00.000Z","size":32,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-26T04:44:16.983Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drbrain.png","metadata":{"files":{"readme":"README.rdoc","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-08-30T08:17:39.000Z","updated_at":"2018-06-19T22:39:02.000Z","dependencies_parsed_at":"2022-08-31T10:52:18.957Z","dependency_job_id":null,"html_url":"https://github.com/drbrain/temperature_monitor","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drbrain%2Ftemperature_monitor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drbrain%2Ftemperature_monitor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drbrain%2Ftemperature_monitor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drbrain%2Ftemperature_monitor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drbrain","download_url":"https://codeload.github.com/drbrain/temperature_monitor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244759961,"owners_count":20505716,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T21:19:23.488Z","updated_at":"2026-05-11T02:32:36.183Z","avatar_url":"https://github.com/drbrain.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Arduino + DHT22 + XBee + Indigo Temperature Monitor\n\nThis project is used to control a gas fireplace in my house to maintain a\nconstant temperature.\n\n== Wireless Thermometer\n\nThe hardware for the thermometer includes:\n\n* {Arduino Uno}[http://www.sparkfun.com/products/10356]\n* {DHT22 Humidity \u0026 Temperature Sensor}[http://www.sparkfun.com/products/10167]\n* Two series 2 {XBees}[http://www.sparkfun.com/products/10417]\n  * {RP-SMA to U.FL cable}[http://www.sparkfun.com/products/662]\n  * {RP-SMA antenna} [http://www.sparkfun.com/products/145]\n* One {XBee Explorer}[http://www.sparkfun.com/products/8687]\n* One {XBee Adapter Kit}[http://www.adafruit.com/products/126]\n* {Jumper wires}[http://www.sparkfun.com/products/9387]\n* One {Breadboard}[http://www.sparkfun.com/products/137]\n\nThe XBee Adapter Kit was my first soldering attempt and I'm told I did a great\njob.  A PanaVise Junior and a Third Hand helped immensely, along with choosing\na 1/64\" soldering iron tip over the 1/32\" tip that came with my soldering\niron.\n\nI also cut three jumper wires, stripped them and soldered them to the DHT22.\nThis was more difficult, but placing the sensor in the vise and using the Third\nHand to hold the wire with a folded up piece of paper to protect the insulation\nhelped line everything up.\n\nI attached the XBee Adapter to the breadboard and wired up 5V power and ground.\nI attached the TX pin of the adapter to digital pin 2 of the Arduino and the RX\npin of the adapter to digital pin 3 of the Arduino.  I attached the sensor's\ndata pin to port 7 (from the {DHT22\nsource}[https://github.com/nethoncho/Arduino-DHT22]) and the ground and power\nto the proper pins on the breadboard.\n\nI use X-CTU from Digi International to set up the XBees.  The destination\nradio is using coordinator firmware while the monitor radio is using router\nfirmware.\n\nOriginally I bought XBees with the chip antennas, but they only had a range of\nabout 3m without careful alignment of the antennas.  I replaced these with\nseries 2 radios with U.FL connectors and antennas (even though that may be\nover-compensating).\n\nFor the original series 1 antennas I used xbee_modem_setup.rb set up the to\nXBees to communicate with each other.  Be sure to use the Arduino XBee's\nserial number as the destination address of the XBee Explorer and vice versa.\n\n`bin/watch` can be used to monitor the temperature the Arduino reads.\n\nExcluding the cost of soldering equipment the wireless thermometer cost under\n$150.\n\nI plan to add two more thermometers to the setup which will cost another $250.\nInstead of the Arduino Uno I'll be using the cheaper Arduino Pro Mini now that\nmy soldering skills are proven.\n\nMost of the software used in this project was already written by third-parties\nthat I adapted to my needs.  The DHT22 library was changed from returning float\nto int (that I can decode on the ruby side).  xbee_modem_setup.rb was updated\nto work with a newer serialport gem for ruby and the documentation was\nreformatted.\n\n== Temperature Control\n\n`bin/indigo_monitor` reads data from the thermometer and populates a variable\nin Indigo.  Through Indigo's database support (I use Postgres) the values for\nthe temperature are recorded.\n\n`bin/indigo_control` uses a PID controller (currently only Proportional\ncontrol, I and D gains are set to zero) to turn the fireplace on and off.\n\nThe desired temperature (set point) is controlled by a wall switch attached to\nan event group that raises or lowers the set point by one degree per press.\n\nEvery minute the control loop reads the current temperature from Indigo, feeds\nthat into the PID controller, checks the output value and turns the fireplace\non if it is over 0.2 and off if it is under -0.2 (to avoid flutter in the\ntemperature measurement).  The current control position is also recorded in\nIndigo for debugging purposes.\n\n== Temperature Graph\n\nFor debugging purposes I also have `temperature_graph.r`.  This R script\ngraphs the last day's data from Indigo's Postgres database.  You can see a\nsample graph here:  http://i.imgur.com/SDUUS.jpg\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrbrain%2Ftemperature_monitor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrbrain%2Ftemperature_monitor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrbrain%2Ftemperature_monitor/lists"}