Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. My Project
  3. 'MySensoring' an Intermatic EH40 (Project Completed!)

'MySensoring' an Intermatic EH40 (Project Completed!)

Scheduled Pinned Locked Moved My Project
water heater cointermatic eh40
13 Posts 4 Posters 8.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • RJ_MakeR Offline
    RJ_MakeR Offline
    RJ_Make
    Hero Member
    wrote on last edited by RJ_Make
    #4

    Thinking out loud...... , Do I really need to use a transistor or relay to do the switching?

    With only needing a 1.5vdc @ 1.9uA signal to cause the EH40 to turn the relays on, can I do this solely using the Arduino board?

    Example:

    Analog input to sense when the EH40 makes it's own call to turn the water heater on.

    AND IF Vera says OFF then do nothing, otherwise allow ON..... (Not sure how any of that would work)

    Analog output to send the 1.5vdc @ 1.9uA signal to turn the water heater ON.

    Hmmmm......

    RJ_Make

    DammeD 1 Reply Last reply
    0
    • RJ_MakeR RJ_Make

      Thinking out loud...... , Do I really need to use a transistor or relay to do the switching?

      With only needing a 1.5vdc @ 1.9uA signal to cause the EH40 to turn the relays on, can I do this solely using the Arduino board?

      Example:

      Analog input to sense when the EH40 makes it's own call to turn the water heater on.

      AND IF Vera says OFF then do nothing, otherwise allow ON..... (Not sure how any of that would work)

      Analog output to send the 1.5vdc @ 1.9uA signal to turn the water heater ON.

      Hmmmm......

      DammeD Offline
      DammeD Offline
      Damme
      Code Contributor
      wrote on last edited by
      #5

      @ServiceXp Hmm, I don't really know but you might be able to use the out-pin on the arduino and a resistor, but its not really safe in case there are some leakage. I would get isolation with a optocoupler. they are really cheap to buy! Often found in broken electronics too. only to salvage! :)

      1 Reply Last reply
      0
      • RJ_MakeR Offline
        RJ_MakeR Offline
        RJ_Make
        Hero Member
        wrote on last edited by
        #6

        Ok optocoupler would be pretty cool from what I've learned about them. However, it seems that most will wind up consuming more power (x8) then the 1.9uA for the relay trigger.

        I think to start off I'm going to try a voltage divider (2x 10M ohms resisters) which I believe will take my ~3.3vdc to 1.65vdc with consumption @ 165 nA which seems very low.

        RJ_Make

        1 Reply Last reply
        0
        • RJ_MakeR Offline
          RJ_MakeR Offline
          RJ_Make
          Hero Member
          wrote on last edited by RJ_Make
          #7

          Ok,

          Working on the code for this Water Heater CNT, and I've run into a problem. I have a temp sensor in the loop which is causing problems with the relays activating. Any time a the temp changes, while I try to activate a relay it fails to activate. (because it's tied up with sending the temps???)

          How do I code around this?

          Here is V1 of the code.

          	// Example sketch showing how to control physical relays. 
          	// This example will remember relay state even after power failure.
          
          	#include <MySensor.h>
          	#include <SPI.h>
          	#include <DallasTemperature.h>
          	#include <OneWire.h>
          	#include <Bounce2.h>
          
          	//Standard
          	#define BUTTON_PIN  3  // Arduino Digital I/O pin number for button 
          	#define RELAY_1  4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
          	#define NUMBER_OF_RELAYS 2 // Total number of attached relays
          	#define RELAY_ON 0  // GPIO value to write to turn on attached relay
          	#define RELAY_OFF 1 // GPIO value to write to turn off attached relay
          	//EH40 
          	#define BUTTON_RELAY_PIN 5  // Relay Attached to Button Control
          	#define BUTTON_RELAY_LED_PIN 8  // On while in Super Control
          	#define LOCKOUT_RELAY_LED_PIN 7  // On while EH40 Program is locked out
          	#define BUTTON_RELAY_ID 2  // Child Attached to Button Control
          	#define EH40_LOCK_OUT_RELAY_ID 1  // Child Attached to EH40 Lock out relay
          	//Temperature
          	#define ONE_WIRE_BUS 6 // Pin where dallas sensor is connected
          	#define MAX_ATTACHED_DS18B20 16
          
          
          	Bounce debouncer = Bounce();
          	int BATTERY_SENSE_PIN = A0;  // select the input pin for the EH40 battery sense point
          	int oldBatteryPcnt = 0;
          	int oldValue=0;
          	bool state;
          
          	//Temperature
          	OneWire oneWire(ONE_WIRE_BUS);
          	DallasTemperature sensors(&oneWire);
          	float lastTemperature[MAX_ATTACHED_DS18B20];
          	int numSensors=0;
          	boolean receivedConfig = false;
          	boolean metric = false;
          
          	MySensor gw;
          	// Initialize Button message
          	MyMessage msg(BUTTON_RELAY_ID,V_LIGHT);
          	// Initialize temperature message
          	MyMessage msgTEMP(0,V_TEMP);
          
          	void setup()  
          	{   
          		// use the 1.1 V internal reference
          		analogReference(INTERNAL);
          		// Startup OneWire
          		 sensors.begin();	
          		// Initialize library and add callback for incoming messages
          		gw.begin(incomingMessage, AUTO, true);
          		// Send the sketch version information to the gateway and Controller
          		gw.sendSketchInfo("Water Heater CNT", "1.0");
          
          		// Fetch the number of attached temperature sensors
          		numSensors = sensors.getDeviceCount();
          
          		// Setup the button
          		pinMode(BUTTON_PIN,INPUT);
          		// Activate internal pull-up
          		digitalWrite(BUTTON_PIN,HIGH);
          
          
          		// Then set LED relay pin in output mode
          		pinMode(BUTTON_RELAY_LED_PIN, OUTPUT);
          		// Then set LED Lockout relay pin in output mode
          		pinMode(LOCKOUT_RELAY_LED_PIN, OUTPUT);
          
          		//Set LED to off
          		digitalWrite(BUTTON_RELAY_LED_PIN,HIGH);
          		digitalWrite(LOCKOUT_RELAY_LED_PIN,HIGH); 
          
          		// After setting up the button, setup debouncer
          		debouncer.attach(BUTTON_PIN);
          		debouncer.interval(5);
          
          		// Present all Temperature sensors to controller
          		for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
          			gw.present(i, S_TEMP);
          		}
          
          		// Fetch relay status
          		for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          		// Register all sensors to gw (they will be created as child devices)
          		gw.present(sensor, S_LIGHT);
          		// Make sure relay is off when starting up
          		digitalWrite(pin, RELAY_OFF);	
          		// Then set relay pins in output mode
          		pinMode(pin, OUTPUT);   
          		// Set relay to last known state (using eeprom storage)
          		digitalWrite(pin, gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
          		}
          	}
          
          
          	void loop() 
          	{
          	  // Alway process incoming messages whenever possible
          	  gw.process();
          	  debouncer.update();
            
          		// Get the update value
          		int value = debouncer.read();
          		if (value != oldValue && value==0) {    //(value != oldValue && value==0) {
          			 gw.send(msg.set(msg.getBool()?false:true), true);
          			// Store state in eeprom
          			gw.saveState(msg.sensor, msg.getBool());
          		}
          		oldValue = value;
          
          	  delay(1);	
          		//Send Temperatures to Controller
          	  sendTemperatureToController();	
          
          	}
          
          	void incomingMessage(const MyMessage &message) {
          	  // We only expect one type of message from controller. But we better check anyway.
          	  if (message.type==V_LIGHT) {
          		 // Change relay state
          		 digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
          		 // Store state in eeprom
          		 gw.saveState(message.sensor, message.getBool());
          		 // Write some debug info
          		 Serial.print("Incoming change for sensor:");
          		 Serial.print(message.sensor);
          		 Serial.print(", New status: ");
          		 Serial.println(message.getBool());
           
          		 //Handle LED's
          		 ledControl(message.sensor);
          		 // Check EH40 Battery, but only when we receive work
          		 runBATTFuntion();
          	   } 
          	}
          
          	void ledControl(int isensor){
          				 		 
          			switch (isensor) {
          				case BUTTON_RELAY_ID:
          					if (gw.loadState(BUTTON_RELAY_ID) == RELAY_ON)
          					{
          						digitalWrite(BUTTON_RELAY_LED_PIN,HIGH);
          					}
          					else
          					{
          						digitalWrite(BUTTON_RELAY_LED_PIN,LOW);
          					}
          				break;
          				case EH40_LOCK_OUT_RELAY_ID:
          					if (gw.loadState(EH40_LOCK_OUT_RELAY_ID) == RELAY_ON)
          					{
          						digitalWrite(LOCKOUT_RELAY_LED_PIN,HIGH);
          					}
          					else
          					{
          						digitalWrite(LOCKOUT_RELAY_LED_PIN,LOW);
          					}
          				break;
          						//Set to off
          						digitalWrite(BUTTON_RELAY_LED_PIN,HIGH);
          						digitalWrite(LOCKOUT_RELAY_LED_PIN,HIGH);
          			}
          		}
          
          	void runBATTFuntion(){
          	
          		// get the battery Voltage
          		int sensorValue = analogRead(BATTERY_SENSE_PIN);
          		Serial.println(sensorValue);
          	   
          		// 1M, 470K divider across battery and using internal ADC ref of 1.1V
          		// Sense point is bypassed with 0.1 uF cap to reduce noise at that point
          		// ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
          		// 3.44/1023 = Volts per bit = 0.003363075
          		float batteryV  = sensorValue * 0.003363075;
          		int batteryPcnt = sensorValue / 10;
          
          		Serial.print("Battery Voltage: ");
          		Serial.print(batteryV);
          		Serial.println(" V");
          
          		Serial.print("Battery percent: ");
          		Serial.print(batteryPcnt);
          		Serial.println(" %");
          
          		if (oldBatteryPcnt != batteryPcnt) {
          			// Power up radio after sleep
          			gw.sendBatteryLevel(batteryPcnt);
          			oldBatteryPcnt = batteryPcnt;
          		}
          	
          	}
          
          	void sendTemperatureToController(){
          
          		// Fetch temperatures from Dallas sensors
          		sensors.requestTemperatures();
          
          		// Read temperatures and send them to controller
          		for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
          	  
          			// Fetch and round temperature to one decimal
          			//float temperature = static_cast<float>(static_cast<int>((sensors.getTempFByIndex(i)) * 10.)) / 10.;
          			float temperature = static_cast<float>(static_cast<int>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
          	  
          			// Only send data if temperature has changed and no error
          			if (lastTemperature[i] != temperature && temperature != -127.00) {
          		  
          				// Send in the new temperature
          				gw.send(msgTEMP.setSensor(i).set(temperature,1));
          				lastTemperature[i]=temperature;
          			}
          		}
          
          	}
          

          RJ_Make

          1 Reply Last reply
          0
          • RJ_MakeR Offline
            RJ_MakeR Offline
            RJ_Make
            Hero Member
            wrote on last edited by RJ_Make
            #8

            Solved the 'asynchronous' issue thanks Google and a gazillion other having the same question... :-)

            So here is version 2.

            Here is the framework for the code below.

            Current Hardware:
            It incorporates a dual relay , Intermatic EH40 220v Timer, Temperature Sensor, 1 LED for visual indication of power ON state for each of the relays, and a simple momentary push button. (outside of the 5v Mini Pro)

            Waiting on Items:
            Transformer, fused rocker switch

            Need to Decide:
            An appropriate enclosure, and if I'm going to add an enclosure temp sensor. I was thinking since I'm going to have a transformer and relay assm., possibly inside a plastic enclosure It might be a good ideal to protect against heat..

            Schema:

            1. The EH40_LOCK_OUT_RELAY_ID locks out the EH40 relay drive circuit and is wired to the NC contacts of relay 1. (So if there is a Arduino failure, the timer will still run it's schedule)

            2. The BUTTON_RELAY_ID is a Master Control Relay and will allow 1) overriding of the EH40 relay drive circuit and is wired to the NO contacts of relay 2.

            3. Power for the EH40 relay circuit is routed out of the EH40, through the relays and back to the EH40. So all drive power is coming from the EH40 single AA battery. The hardware and code supports monitoring the EH40 battery supply. This will keep the 2 power supplies completely isolated.

            4. Added the DS18B20 temperature sensor to report back tank temp. for controller logic (VERA) I have some idea's on what I may want to do with this.

            5. Push button that controls the Master Control Relay. This allows us to manually turn on the water heater when near the unit.

            I'm sure I've forgot stuff, but I'll follow up on this project as it progresses.


            	// Example sketch showing how to control physical relays. 
            	// This example will remember relay state even after power failure.
            
            	#include <MySensor.h>
            	#include <SPI.h>
            	#include <DallasTemperature.h>
            	#include <OneWire.h>
            	#include <Bounce2.h>
            
            	//Standard
            	#define BUTTON_PIN  3  // Arduino Digital I/O pin number for button 
            	#define RELAY_1  4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
            	#define NUMBER_OF_RELAYS 2 // Total number of attached relays
            	#define RELAY_ON 0  // GPIO value to write to turn on attached relay
            	#define RELAY_OFF 1 // GPIO value to write to turn off attached relay
            	//EH40 
            	#define BUTTON_RELAY_PIN 5  // Relay Attached to Button Control
            	#define BUTTON_RELAY_LED_PIN 8  // On while in Super Control
            	#define LOCKOUT_RELAY_LED_PIN 7  // On while EH40 Program is locked out
            	#define BUTTON_RELAY_ID 2  // Child Attached to Button Control
            	#define EH40_LOCK_OUT_RELAY_ID 1  // Child Attached to EH40 Lock out relay
            	//Temperature
            	#define ONE_WIRE_BUS 6 // Pin where dallas sensor is connected
            	#define MAX_ATTACHED_DS18B20 16
            
            	Bounce debouncer = Bounce();
            	int BATTERY_SENSE_PIN = A0;  // select the input pin for the EH40 battery sense point
            	int oldBatteryPcnt = 0;
            	int oldValue=0;
            
            	//Temperature
            	OneWire oneWire(ONE_WIRE_BUS);
            	DallasTemperature sensors(&oneWire);
            	float lastTemperature[MAX_ATTACHED_DS18B20];
            	unsigned long TemperatureTimeing;
            	const unsigned long Temperatureinterval = 30000; //30 sec
            	int numSensors=0;
            	boolean receivedConfig = false;
            	boolean metric = false;
            
            	MySensor gw;
            	// Initialize Button message
            	MyMessage msg(BUTTON_RELAY_ID,V_LIGHT);
            	// Initialize temperature message
            	MyMessage msgTEMP(0,V_TEMP);
            
            	void setup()  
            	{
            		//Initialize Temperature Timer
            		TemperatureTimeing = millis ();
            		// use the 1.1 V internal reference
            		analogReference(INTERNAL);
            		// Startup OneWire
            		 sensors.begin();	
            		// Initialize library and add callback for incoming messages
            		gw.begin(incomingMessage, AUTO, true);
            		// Send the sketch version information to the gateway and Controller
            		gw.sendSketchInfo("Water Heater CNT", "1.0");
            
            		// Fetch the number of attached temperature sensors
            		numSensors = sensors.getDeviceCount();
            
            		// Setup the button
            		pinMode(BUTTON_PIN,INPUT);
            		// Activate internal pull-up
            		digitalWrite(BUTTON_PIN,HIGH);
            
            
            		// Then set LED relay pin in output mode
            		pinMode(BUTTON_RELAY_LED_PIN, OUTPUT);
            		// Then set LED Lockout relay pin in output mode
            		pinMode(LOCKOUT_RELAY_LED_PIN, OUTPUT);
            
            		//Set LED to off
            		digitalWrite(BUTTON_RELAY_LED_PIN,HIGH);
            		digitalWrite(LOCKOUT_RELAY_LED_PIN,HIGH); 
            
            		// After setting up the button, setup debouncer
            		debouncer.attach(BUTTON_PIN);
            		debouncer.interval(5);
            
            		// Present all Temperature sensors to controller
            		for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
            			gw.present(i, S_TEMP);
            		}
            
            		// Fetch relay status
            		for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
            			// Register all sensors to gw (they will be created as child devices)
            			gw.present(sensor, S_LIGHT);
            			// Make sure relay is off when starting up
            			digitalWrite(pin, RELAY_OFF);	
            			// Then set relay pins in output mode
            			pinMode(pin, OUTPUT);   
            			// Set relay to last known state (using eeprom storage)
            			digitalWrite(pin, gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
            		}
            	}
            
            
            	void loop() 
            	{
            	  // Alway process incoming messages whenever possible
            	  gw.process();
            	  debouncer.update();
                  // Did the button get pushed?
            	  ButtonPushed();
            	  if ( (millis () - TemperatureTimeing) >= Temperatureinterval)
            	  //Send Temperatures to Controller
            	  sendTemperatureToController();	
            	}
            
            	void incomingMessage(const MyMessage &message) {
            	  // We only expect one type of message from controller. But we better check anyway.
            	  if (message.type==V_LIGHT) {
            		 // Change relay state
            		 digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
            		 // Store state in eeprom
            		 gw.saveState(message.sensor, message.getBool());
            		 // Write some debug info
            		 Serial.print("Incoming change for sensor:");
            		 Serial.print(message.sensor);
            		 Serial.print(", New status: ");
            		 Serial.println(message.getBool());
             
            		 //Handle LED's
            		 ledControl(message.sensor);
            		 // Check EH40 Battery, but only when we have received work
            		 runBATTFuntion();
            	   } 
            	}
            
            	
            	void ButtonPushed(){
            		debouncer.update();
            		// Get the update value
            		int value = debouncer.read();
            		if (value != oldValue && value==0) {    //(value != oldValue && value==0) {
            			gw.send(msg.set(msg.getBool()?false:true), true);
            			// Store state in eeprom
            			gw.saveState(msg.sensor, msg.getBool());
            		}
            		oldValue = value;
            	}
            	
            	
            	void ledControl(int isensor){
            			switch (isensor) {
            				case BUTTON_RELAY_ID:
            					if (gw.loadState(BUTTON_RELAY_ID) == RELAY_ON)
            					{
            						digitalWrite(BUTTON_RELAY_LED_PIN,HIGH);
            					}
            					else
            					{
            						digitalWrite(BUTTON_RELAY_LED_PIN,LOW);
            					}
            				break;
            				case EH40_LOCK_OUT_RELAY_ID:
            					if (gw.loadState(EH40_LOCK_OUT_RELAY_ID) == RELAY_ON)
            					{
            						digitalWrite(LOCKOUT_RELAY_LED_PIN,HIGH);
            					}
            					else
            					{
            						digitalWrite(LOCKOUT_RELAY_LED_PIN,LOW);
            					}
            				break;
            						//Set to off
            						digitalWrite(BUTTON_RELAY_LED_PIN,HIGH);
            						digitalWrite(LOCKOUT_RELAY_LED_PIN,HIGH);
            			}
            		}
            
            	void runBATTFuntion(){
            	
            		// get the battery Voltage of the EH40
            		int sensorValue = analogRead(BATTERY_SENSE_PIN);
            		Serial.println(sensorValue);
            		// 1M, 470K divider across battery and using internal ADC ref of 1.1V
            		// Sense point is bypassed with 0.1 uF cap to reduce noise at that point
            		// ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
            		// 3.44/1023 = Volts per bit = 0.003363075  1.5v 0.001466276
            		float batteryV  = sensorValue * 0.001466276;
            		int batteryPcnt = sensorValue / 10;
            
            		Serial.print("Battery Voltage: ");
            		Serial.print(batteryV);
            		Serial.println(" V");
            
            		Serial.print("Battery percent: ");
            		Serial.print(batteryPcnt);
            		Serial.println(" %");
            
            		if (oldBatteryPcnt != batteryPcnt) {
            			// Power up radio after sleep
            			gw.sendBatteryLevel(batteryPcnt);
            			oldBatteryPcnt = batteryPcnt;
            		}
            	
            	}
            
            	void sendTemperatureToController(){
            		//Start time for Temperature readings
            		TemperatureTimeing = millis ();
            		// Fetch temperatures from Dallas sensors
            		sensors.requestTemperatures();
            		// Read temperatures and send them to controller
            		for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
            			// Fetch and round temperature to one decimal
            			//float temperature = static_cast<float>(static_cast<int>((sensors.getTempFByIndex(i)) * 10.)) / 10.;
            			float temperature = static_cast<float>(static_cast<int>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
            			// Only send data if temperature has changed and no error
            			if (lastTemperature[i] != temperature && temperature != -127.00) {
            				// Send in the new temperature
            				gw.send(msgTEMP.setSensor(i).set(temperature,1));
            				lastTemperature[i]=temperature;
            			}
            		}
            
            	}
            

            RJ_Make

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mikeones
              wrote on last edited by
              #9

              So you incorporated a delay between sending your temp values to resolve the issue? Were you spamming the GW with messages without the delay?

              RJ_MakeR 1 Reply Last reply
              0
              • M mikeones

                So you incorporated a delay between sending your temp values to resolve the issue? Were you spamming the GW with messages without the delay?

                RJ_MakeR Offline
                RJ_MakeR Offline
                RJ_Make
                Hero Member
                wrote on last edited by
                #10

                @mikeones

                Yes during temperature changes..

                In the first iteration I was using delays of various times (the one posted in v1 of the code was setting the delay to 1 ms to basically shut it off instead of deleting the function), in an effort to resolve the asynchronous nature of this language.

                The larger I made the delay the worse the problem became and that made sense because as I understand it, the delay function stops code execution. So in v2 I just incorporated a time component. So now it will only check temps every Temperatureinterval.

                Not being a C programmer..... this stuff is like trying to pick up a greased watermelon seed while being chased by a hornet.. ;-)

                but for now this works... for now.....

                RJ_Make

                1 Reply Last reply
                0
                • RJ_MakeR Offline
                  RJ_MakeR Offline
                  RJ_Make
                  Hero Member
                  wrote on last edited by RJ_Make
                  #11

                  Project Complete! My EH40 has now been 'MySensored'

                  This was a fun project, and I learned quite a bit during the process and I was able to accomplish all my goals.

                  Goal Recap

                  1. Remotely lockout the EH40's schedule.
                  2. Remotely Activate the EH40 Relay.
                  3. Locally override_to_On, Both Vera and the EH40 schedule (Button)
                  4. Remotely acquire water heater's tank temperature.

                  Final Components Used:

                  1. Arduino mini 5V
                  2. Dual Relay 5V
                  3. Couple of pcb's
                  4. Screw Connectors
                  5. Push Button
                  6. Temperature Sensor
                  7. Radio
                    8.) Step Down Module
                  8. Fused Rocker Switch
                  9. Transformer I wound up going with one of these over the Ebay China option. Just felt more comfortable with this.
                  10. Project Box

                  Misa: Resisters, 47uF cap for the radio, wires and lots of solder and hot glue.

                  **Final EH40 Wire Configuration **

                  20140906_144322_Android.jpg

                  1. Red - 1.5vdc directly from EH40 Batt.
                  2. Black (Yellow) GND
                  3. Blue (Blue) Input
                  4. Yellow (Blue) Output

                  Transformer Assm: Board

                  20140905_182226_Android.jpg

                  The output seem stable enough (using a volt meter) I didn't use any post filtering.
                  All connection under pcb is covered in a thick layer of hot glue to help prevent any shorts.

                  EH40 Connection Board

                  20140904_201220_Android.jpg

                  20140904_201211_Android.jpg

                  Main Control Board

                  I forgot to get pictures of the top, but here is the messy bottom..

                  20140906_161935_Android.jpg

                  EH40 Connection Board Mounted In Box

                  20140905_182341_Android.jpg

                  Using a Dremel; cut a slot out, then hot gluing to bottom of box.

                  Dual Relay Mounted

                  20140905_183803_Android.jpg

                  20140906_072851_Android.jpg

                  It was a perfect fit.

                  Push Button and LED (Wired Relay Contacts)

                  20140906_125308_Android.jpg

                  Top relay is #1 (Lockout); 2nd is #2 (Override)

                  1)Relay #1 -- Blue Wire -- Output to NC
                  2)Relay #1 -- Yellow Wire -- input to COM

                  3)Relay #1 -- Blue Wire -- Output NC JUMPED to COM of Relay #2

                  4)Relay #2 -- 2 Red Wires (One from EH40 and the other for battery monitoring on Main Control Board) -- Output to NO
                  5)Relay #2 -- COM JUMPED to Relay #1 NC

                  Fused Power Switch and Socket

                  20140906_172832_Android.jpg

                  500ma Fuse with all exposed connection covered in hot glue.

                  Transformer; Relay; EH40 Connection and Main Board

                  20140906_161901_Android.jpg

                  20140906_181917_Android.jpg

                  I tried to keep the High Voltage section isolated from any of the low voltage section as best as possible.

                  Completed Project Connected to EH40

                  20140907_172541_Android.jpg

                  EH40 Connection

                  20140907_172530_Android.jpg

                  115vac Connection

                  20140907_171919_Android.jpg

                  EH40 Has Control and running it's schedule

                  20140907_172450_Android.jpg

                  Vera (Remote) has EH40 Schedule Locked Out (Water Heater Off)

                  20140907_172510_Android.jpg

                  Vera (Remote) has EH40 Schedule Locked Out but Override button is active (Water Heater On)

                  RJ_Make

                  1 Reply Last reply
                  1
                  • hekH Offline
                    hekH Offline
                    hek
                    Admin
                    wrote on last edited by
                    #12

                    Nice! Thanks for the pictures.

                    1 Reply Last reply
                    0
                    • RJ_MakeR Offline
                      RJ_MakeR Offline
                      RJ_Make
                      Hero Member
                      wrote on last edited by
                      #13

                      Update:

                      Wind up having to buy a oscilloscope to try and diagnose a problem I was having and wound up reworking the transformer board a little. I installed 5 caps in an attempt to clean up the output.

                      4.7uF/400V Cap between pins 22 and 26 on transformer. electrolytic

                      470uF/50v Between 5vd Output (electrolytic)
                      47uF/50v Between 5vd Output (electrolytic)
                      10uF/50v Between 5vd Output (electrolytic)

                      .1uF/ (ceramic) Installed at the screw connector on the main board (for best results)

                      RJ_Make

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      10

                      Online

                      11.7k

                      Users

                      11.2k

                      Topics

                      113.0k

                      Posts


                      Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • MySensors
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular