Msemtd HomeAuto: Difference between revisions

From Nottinghack Wiki
Jump to navigation Jump to search
Line 94: Line 94:
** http://arduino.cc/playground/ComponentLib/Thermistor2
** http://arduino.cc/playground/ComponentLib/Thermistor2
** http://arduino.cc/playground/ComponentLib/Thermistor3
** http://arduino.cc/playground/ComponentLib/Thermistor3
This is the best code I have found so far - from Thermistor2 but allows us to have our own parameters definition...
<div style ="height:200px;overflow-x:hidden;overflow-y:auto;border: 4px solid green;">
<syntaxhighlight lang="cpp" line="GESHI_FANCY_LINE_NUMBERS">
#include <math.h>
// enumarating 3 major temperature scales
enum {
  T_KELVIN=0,
  T_CELSIUS,
  T_FAHRENHEIT
};
// manufacturer data for episco k164 10k thermistor
// simply delete this if you don't need it
// or use this idea to define your own thermistors
#define EPISCO_K164_10k 4300.0f,298.15f,10000.0f  // B,T0,R0
// Temperature function outputs float , the actual
// temperature
// Temperature function inputs
// 1.AnalogInputNumber - analog input to read from
// 2.OuputUnit - output in celsius, kelvin or fahrenheit
// 3.Thermistor B parameter - found in datasheet
// 4.Manufacturer T0 parameter - found in datasheet (kelvin)
// 5. Manufacturer R0 parameter - found in datasheet (ohms)
// 6. Your balance resistor resistance in ohms 
float Temperature(int AnalogInputNumber,int OutputUnit,float B,float T0,float R0,float R_Balance)
{
  float R,T;
  R=1024.0f*R_Balance/float(analogRead(AnalogInputNumber)))-R_Balance;
  T=1.0f/(1.0f/T0+(1.0f/B)*log(R/R0));
  switch(OutputUnit) {
    case T_CELSIUS :
      T-=273.15f;
    break;
    case T_FAHRENHEIT :
      T=9.0f*(T-273.15f)/5.0f+32.0f;
    break;
    default:
    break;
  };
  return T;
}
// example of use #1
// reading from analog input 1, using episco k164 definition
// and 10k balance, getting result in celsius
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("*************************");
Serial.println("10k Balance");
Serial.println(Temperature(1,T_CELSIUS,EPISCO_K164_10k,10000.0f));
Serial.println("*************************");
delay(500);
}
//example of use #2
// using numbers instead of episco k164 definition
// this time reading from analog input 2
// getting result in fahrenheit
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("*************************");
Serial.println("10k Balance");
Serial.println(Temperature(2,T_FAHRENHEIT,4300.0f,298.15f,10000.0f,10000.0f));
Serial.println("*************************");
delay(500);
}
</syntaxhighlight>
</div>


I certainly would like one of these data logger devices...
I certainly would like one of these data logger devices...

Revision as of 15:01, 16 December 2011

Michael's Home Instrumentation

  • New porch doors have required me to rethink my doorbell!
  • We can't hear people knocking on the door
  • The people at the door don't know if the old doorbell actually rang
  • The old wireless doorbell often didn't ring because the batteries were flat!
  • The wireless doorbell didn't require drilling holes in the doorframe - this is a plus
  • the 12V battery in the wireless doorbell pushbutton was expensive!

I want to do something simple with the old wireless doorbell and start to develop an extensible home automation/instrumentation project. I have a Nanode and a number of Xinos which I intend to connect on a 4-wire bus around the house.


The old doorbell

Push-button:

Chime unit:

  • PCB labelled "RL-09B 04.02.27"
  • Batteries 4.5V, 3xAA
  • IC2: LP816A
Error in widget Flickr gallery: Unable to load template 'wiki:Flickr gallery'


http://www.alldatasheet.com/view.jsp?Searchword=HCF4069UBE

The Nanode - Xino 4-wire Bus

Using a Nanode at my internet gateway router and communicating with and powering multiple slave Xinos on a 4-wire bus...

http://wiki.hackspace.org.uk/wiki/Project:Nanode/Applications#Using_the_Local_Serial_Bus

http://sustburbia.blogspot.com/2010/08/wired-network-for-arduinos.html


Read nanode MAC address: -

https://gist.github.com/1020951#file_nanode_mac.pde

 MAC Address Read Test
 MAC address is 00:04:A3:03:DD:C7

The soil moisture tester

Do these plants need watering?

http://www.instructables.com/id/Garduino-Gardening-Arduino/

Temperature

I have a bag of surplus 47k thermistors (about 500) and I intend to build a number of circuits to measure temperature starting with the very simplest and culminating in a teachable HackSpace project with reasonable accuracy. We will put these devices in fridges, near heat sources, near doors, windows, indoors, outdoors, you name it.

The component:

  VISHAY 
   NTCLE100 Series NTC 47 kOhm ±1.5 % Radial Leaded Standard Precision Thermistor
   Mfr Part#:  NTCLE100E3473JB0
   Packaging : BAG 
   Std Packaging Qty: 500
   Min Order Qty: 1
   As low as:  £0.1751  (GBP)
   In Stock:  No
   Type: 
   NTC
   Resistance: 
   47 kO
   Tolerance (%): 
   ±1.5 %
   B-constant: 
   4090 °K
   Temperature Range: 
   -40 to +125 °C

Some Google digging reveals...

The simplest circuits and Arduino code...

This is the best code I have found so far - from Thermistor2 but allows us to have our own parameters definition...

#include <math.h>
// enumarating 3 major temperature scales
enum {
  T_KELVIN=0,
  T_CELSIUS,
  T_FAHRENHEIT
};

// manufacturer data for episco k164 10k thermistor
// simply delete this if you don't need it
// or use this idea to define your own thermistors
#define EPISCO_K164_10k 4300.0f,298.15f,10000.0f  // B,T0,R0

// Temperature function outputs float , the actual
// temperature
// Temperature function inputs
// 1.AnalogInputNumber - analog input to read from
// 2.OuputUnit - output in celsius, kelvin or fahrenheit
// 3.Thermistor B parameter - found in datasheet
// 4.Manufacturer T0 parameter - found in datasheet (kelvin)
// 5. Manufacturer R0 parameter - found in datasheet (ohms)
// 6. Your balance resistor resistance in ohms  

float Temperature(int AnalogInputNumber,int OutputUnit,float B,float T0,float R0,float R_Balance)
{
  float R,T;

  R=1024.0f*R_Balance/float(analogRead(AnalogInputNumber)))-R_Balance;
  T=1.0f/(1.0f/T0+(1.0f/B)*log(R/R0));

  switch(OutputUnit) {
    case T_CELSIUS :
      T-=273.15f;
    break;
    case T_FAHRENHEIT :
      T=9.0f*(T-273.15f)/5.0f+32.0f;
    break;
    default:
    break;
  };

  return T;
}
// example of use #1
// reading from analog input 1, using episco k164 definition
// and 10k balance, getting result in celsius

void setup() {
 Serial.begin(9600);
}

void loop() {

 Serial.println("*************************");
 Serial.println("10k Balance");
 Serial.println(Temperature(1,T_CELSIUS,EPISCO_K164_10k,10000.0f));
 Serial.println("*************************");

 delay(500);
}

//example of use #2
// using numbers instead of episco k164 definition
// this time reading from analog input 2
// getting result in fahrenheit

void setup() {
 Serial.begin(9600);
}

void loop() {

 Serial.println("*************************");
 Serial.println("10k Balance");
 Serial.println(Temperature(2,T_FAHRENHEIT,4300.0f,298.15f,10000.0f,10000.0f));
 Serial.println("*************************");

 delay(500);
}



I certainly would like one of these data logger devices...