Hi Forum and happy easter .
i have a project where I am controlling a 36V actuator that opens and closes a window in my greenhouse.
The problem is that the UNO is restarting randomly when the relay changes state wit load on.
in the beginning i thought it was the program that was something wrong with so i ended up stripping it down to basis still had the same problem.
i have tried splitting up the supplies so the UNO only puls the LED on the relay board not the coils.
I have tried extending the wires to get bigger distance between the UNO and the relay Board.
the only solution i have found is to disconnect the 36V power supply for tha actuator, when i do that it runs smooth with no hickups,
here is a list of hardware i am using.
the ''UNO''
http://www.ebay.com/itm/311155383820?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
the relay shield/board
the power supply for the coils on the ralay shield.
the temperature sensor DS18B20
http://www.ebay.com/itm/140759967888?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
the Actuator
http://www.ebay.de/itm/171219329078?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
and the program
#include <OneWire.h>
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library
OneWire ds(02); // on pin 02 (a 4.7K resistor is necessary)
const int WinEaClPin =Â 03;Â Â Â // the number of the LED1 pin
const int WinWeClPin =Â 04;Â Â Â // the number of the LED2 pin
const int WinEaOpPin =Â 05;Â Â Â // the number of the LED3 pin
const int WinWeOpPin =Â 06;Â Â Â // the number of the LED4 pin
// variables will change:
int WinEaClState = HIGH;Â Â Â Â Â Â // State for window east closing on
int WinWeClState = HIGH;Â Â Â Â Â Â // State for window west closing on
int WinEaOpState = HIGH;Â Â Â Â Â Â // State for window east opening on
int WinWeOpState = HIGH;Â Â Â Â Â Â // State for window West opening on
void setup(void) {
 Serial.begin(9600);
 pinMode(WinEaClPin, OUTPUT);
 // initialize the LED pin as an output:
 pinMode(WinWeClPin, OUTPUT);
 // initialize the LED pin as an output:
 pinMode(WinEaOpPin, OUTPUT);
 // initialize the LED pin as an output:
 pinMode(WinWeOpPin, OUTPUT);
 digitalWrite(WinEaClPin, WinEaClState);
 digitalWrite(WinWeClPin, WinWeClState);
 digitalWrite(WinEaOpPin, WinEaOpState);
 digitalWrite(WinWeOpPin, WinWeOpState);
}
void loop(void) {
 byte i;
 byte present = 0;
 byte type_s;
 byte data[12];
 byte addr[8];
 float celsius, fahrenheit;
Â
 if ( !ds.search(addr)) {
  Serial.println("No more addresses.");
  Serial.println();
  ds.reset_search();
  delay(50);
  return;
 }
Â
 Serial.print("ROM =");
 for( i = 0; i < 8; i++) {
  Serial.write(' ');
  Serial.print(addr[i], HEX);
 }
 if (OneWire::crc8(addr, 7) != addr[7]) {
   Serial.println("CRC is not valid!");
   return;
 }
 Serial.println();
 // the first ROM byte indicates which chip
 switch (addr[0]) {
  case 0x10:
   Serial.println(" Chip = DS18S20"); // or old DS1820
   type_s = 1;
   break;
  case 0x28:
   Serial.println(" Chip = DS18B20");
   type_s = 0;
   break;
  case 0x22:
   Serial.println(" Chip = DS1822");
   type_s = 0;
   break;
  default:
   Serial.println("Device is not a DS18x20 family device.");
   return;
 }
 ds.reset();
 ds.select(addr);
 ds.write(0x44, 1);    // start conversion, with parasite power on at the end
Â
 delay(1000);  // maybe 750ms is enough, maybe not
 // we might do a ds.depower() here, but the reset will take care of it.
Â
 present = ds.reset();
 ds.select(addr); Â
 ds.write(0xBE);    // Read Scratchpad
 Serial.print(" Data = ");
 Serial.print(present, HEX);
 Serial.print(" ");
 for ( i = 0; i < 9; i++) {     // we need 9 bytes
  data[i] = ds.read();
  Serial.print(data[i], HEX);
  Serial.print(" ");
 }
 Serial.print(" CRC=");
 Serial.print(OneWire::crc8(data, 8), HEX);
 Serial.println();
 // Convert the data to actual temperature
 // because the result is a 16 bit signed integer, it should
 // be stored to an "int16_t" type, which is always 16 bits
 // even when compiled on a 32 bit processor.
 int16_t raw = (data[1] << 8) | data[0];
 if (type_s) {
  raw = raw << 3; // 9 bit resolution default
  if (data[7] == 0x10) {
   // "count remain" gives full 12 bit resolution
   raw = (raw & 0xFFF0) + 12 - data[6];
  }
 } else {
  byte cfg = (data[4] & 0x60);
  // at lower res, the low bits are undefined, so let's zero them
  if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
  else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
  else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
  //// default is 12 bit resolution, 750 ms conversion time
 }
 celsius = (float)raw / 16.0;
 fahrenheit = celsius * 1.8 + 32.0;
 Serial.print(" Temperature = ");
 Serial.print(celsius);
 Serial.print(" Celsius, ");
 Serial.print(fahrenheit);
 Serial.println(" Fahrenheit");
 // Window close temp, inhibit if hum is high:
if (celsius < 20) {
  // window close on:
  WinEaClState = LOW;
  digitalWrite(WinEaClPin, WinEaClState);
  WinWeClState = LOW;
  digitalWrite(WinWeClPin, WinWeClState);
   Serial.print("WinEaClState = " );
   Serial.println(WinEaClState);
   Serial.print("WinWeClState = " );
   Serial.println(WinWeClState);
  delay(3000);
  // window close off:
  WinEaClState = HIGH;
  digitalWrite(WinEaClPin, WinEaClState);
  WinWeClState = HIGH;
  digitalWrite(WinWeClPin, WinWeClState);
   Serial.print("WinEaClState = " );
   Serial.println(WinEaClState);
   Serial.print("WinWeClState = " );
   Serial.println(WinWeClState);
  delay(60000);
}
 // Win open for high temp:
if (celsius > 22) {
  //window open on:
  WinEaOpState = LOW;
  digitalWrite(WinEaOpPin, WinEaOpState);
  WinWeOpState = LOW;
  digitalWrite(WinWeOpPin, WinWeOpState);
   Serial.print("WinEaOpState = " );
   Serial.println(WinEaOpState);
   Serial.print("WinWeOpState = " );
   Serial.println(WinWeOpState);
  delay(3000);
  //window open off:
  WinEaOpState = HIGH;
  digitalWrite(WinEaOpPin, WinEaOpState);
  WinWeOpState = HIGH;
  digitalWrite(WinWeOpPin, WinWeOpState);
   Serial.print("WinEaOpState = " );
   Serial.println(WinEaOpState);
   Serial.print("WinWeOpState = " );
   Serial.println(WinWeOpState);
  delay(60000);
}
WinEaClState = digitalRead(WinEaClPin);
WinWeClState = digitalRead(WinWeClPin);
WinEaOpState = digitalRead(WinEaOpPin);
WinWeOpState = digitalRead(WinWeOpPin);
Â
   Serial.print("WinEaClState = " );
   Serial.println(WinEaClState);
   Serial.print("WinWeClState = " );
   Serial.println(WinWeClState);
   Serial.print("WinEaOpState = " );
   Serial.println(WinEaOpState);
   Serial.print("WinWeOpState = " );
   Serial.println(WinWeOpState);
}
i hope somebody can help me with this issue.