Program to control 8 channel relay with arduino

I apologize upfront for my ignorance. I am attempting to automate the blast gates in my shop by using an arduino. I would like to control the arduino with an IR control and have it in turn control an 8 channel relay. Relay will be connected to individual pneumatic solenoids.

I am just an older guy who likes to putter around and make things.

Thanks in advance for any help guidance.

Welcome:

I am just an older guy who likes to putter around and make things.

So are most of us :frowning:

What 8 channel relay board do you have?

i have an example if an IR control sketch here:

Adafruit also has an IR library.

Have you seen these?
http://www.leevalley.com/en/wood/page.aspx?cat=1,42401,72660&p=63013


.

Hi Larry,

I have a sainsmart relay. It looks like it is 0-5 volts input. I am planning on running the solenoids with a 24 volt circuit.

I have seen the above. I figure, wht buy something when I can spend more money building it. I am actually hoping to learn something along the way.

I will take a look at the above.

Thanks,

Kieran

Something like this?

Keep these for reference:
Edit: if your relays are 5 volts then the external supply would 'not' be 12v it would be 5v

dlloyd

Are these 24VDC solonoids?

.

Larry,

That is it. The solenoids are 24 volts. What I would like to find initially, is the program that will allow the arduino to turn the relays off and on. The IR part would be my next venture.

I really appreciate your help and patience. It has been may years since I took physics.

Kieran

Are the solenoids 24DC or 24AC ?

Controlling the relay board is simple. Make 8 digital pins into 'outputs', then using digitalWrites to the pins, HIGH to go o 5v LOW to go to 0v.

There are examples in the IDE that shows how to turn on/off a LED, this would be the same for a relay.

See the simple Blink example:

.

24 volt DC

You will need to add snubbing diodes across the solonoid coils.

Thanks. Looks like I have a bit to digest and a lot to read up on.

Hi,
Here's example code to run that relay board you have:

http://arduino-info.wikispaces.com/ArduinoPower#4-8

That example is for the 4-relay version; you can see it's easy to modify for 8...

Suggest you read that page from the top for overall info..

And IR remote info and example code is HERE:

Why can I not remember ‘wikispaces’ ?
:frowning:

Oh, it's because of dead brain cells.

.

24volt DC solenoids.

Why a relay module.

How big are the solenoids (current).

There might be other/better solutions.
Leo.. (another old fart)

Wawa,

Open to any ideas/suggestions. I have about 4-5 blast gates that will be operated using 5 valve/2 way pneumatic solenoids. Solenoids are 24 volt DC. Ideally I would like to be able to use an IR control to open and close each gate individually.

Thanks,

Kieran

As mentioned, we need to know how big the solenoids are.
The right solution depends on the current draw of the solenoids.
Do you have a link to them, or do you know the resistance of the coils.

IR control is a different problem, but not that hard to add.
Leo..

Example of using a IR remote:

//**********************************************************************
 
#include "IRremote.h"
//LarryD

//Sketch to demonstrate using an IR hand remote to control Arduino outputs.
//The remote used here uses the NEC protocol.
//This remote sends the button code (example 0xFF629D) then a repeat code 0xFFFFFFFF
//The repeat code is re-sent as long as an IR remote button is pressed.
//The IR receiver used is the TSOP4838
 
/*  17 IR button remote layout   http://i.imgur.com/X1KIdqI.png
 
   ^
< OK  >  
   v
1  2  3 
4  5  6
7  8  9
*  0  # 
 
*/
 
 
const byte RECV_PIN = 7;   //IR receive pin
 
IRrecv irrecv(RECV_PIN);   //create instance of 'IRrecv'
decode_results results;    //create instance of 'decode_results'
 
unsigned long   TimerUp;   //UP arrow on the remote
boolean         TimerUpFlag = false;
 
unsigned long   TimerDown; //DOWN arrow on the remote
boolean         TimerDownFlag = false;
 
unsigned long TimerIntensity;
unsigned long TimerIncDec;
boolean intesityUpFlag   = false;
boolean intesityDownFlag = false;
int brightness;
 
unsigned long   dummy;
unsigned long * TimerPtr = &dummy; //pointer to the current timer
 
const byte upLED        = 13;  //turns on as long as the UP button is pressed
const byte downLED      = 12;  //turns on as long as the DOWN button is pressed
const byte leftLED      = 11;  //toggles on/off
const byte rightLED     = 10;  //toggles on/off
const byte intensityLED =  9;  //a LED which can have its intensity adjusted
 
 
//                           s e t u p ( )
//**********************************************************************
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); //start receive
 
  pinMode(upLED, OUTPUT);
  pinMode(downLED, OUTPUT);
  pinMode(leftLED, OUTPUT);
  pinMode(rightLED, OUTPUT);
  pinMode(intensityLED, OUTPUT); //this is a PWM output pin
 
} //                    E N D  O F  s e t u p ( )
 
 
 
//                            l o o p ( )
//**********************************************************************
void loop()
{
  if (irrecv.decode(&results)) //is there IR remote button code
  {
    //Serial.println(results.value);
    processButton(); //process button press
    irrecv.resume(); //restart for next button press
  }
 
  //**********************                                //Turn off upLED
  //if timing is enabled, is it time to stop
  if (TimerUpFlag && millis() - TimerUp >= 250ul)
  {
    TimerUpFlag = false; //disable timing
    TimerPtr = &dummy;   //pointer to dummy timer
    digitalWrite(upLED, LOW);
  }
 
  //**********************                                //Turn off downLED
  //if timing is enabled, is it time to stop
  if (TimerDownFlag && millis() - TimerDown >= 250ul)
  {
    TimerDownFlag = false; //disable timing
    TimerPtr = &dummy;     //pointer to dummy timer
    digitalWrite(downLED, LOW);
  }
 
  //**********************                                //LED intensity
  //are we still within the adjustment time
  if (millis() - TimerIntensity <= 300ul)
  {
    //is it time to increase/decrease the intensity
    if (millis() - TimerIncDec >= 200ul)
    {
      TimerIncDec = millis();
 
      if (intesityUpFlag == true) //Increase
      {
        brightness += 5;
        if (brightness > 255)
        {
          brightness = 255;
        }
      }
      else if (intesityDownFlag == true) //Decrease
      {
        brightness -= 5;
        if (brightness < 0)
        {
          brightness = 0;
        }
      }
 
      analogWrite(intensityLED, brightness);
      //Serial.println(brightness); //debug
    }
  }
  //stop increasing/decreasing intensity
  else
  {
    intesityUpFlag = false;
    intesityDownFlag = false;
  }
 
  //************************************
  //Other non blocking code goes here
  //************************************
 
} //                   E N D  O F  l o o p ( )
 
 
 
//======================================================================
//                       F U N C T I O N S
//======================================================================
 
//                   p r o c e s s B u t t o n ( )
//**********************************************************************
//process IR remote button presses
void processButton()
{
  switch (results.value)
  {
    //**********************
    case 0xFF629D:                                           //UP Arrow
      {
        Serial.println("UP");
        TimerPtr = &TimerUp;  //point to this timer
        TimerUpFlag = true;   //enable timing
        digitalWrite(upLED, HIGH);
        TimerUp = millis();
      }
      break;
 
    //**********************
    case 0xFFA857:                                           //DOWN Arrow
      {
        Serial.println("DOWN");
        TimerPtr = &TimerDown;  //point to this timer
        TimerDownFlag = true;   //enable timing
        digitalWrite(downLED, HIGH);
        TimerDown = millis();
      }
      break;
 
    //**********************
    case 0xFF22DD:                                           //LEFT Arrow
      {
        Serial.println("LEFT");
        digitalWrite(leftLED, !digitalRead(leftLED));   //Toggle LED
      }
      break;
 
    //**********************
    case 0xFFC23D:                                           //RIGHT Arrow
      {
        Serial.println("RIGHT");
        digitalWrite(rightLED, !digitalRead(rightLED)); //Toggle LED
      }
      break;
 
    //**********************
    case 0xFF42BD:                                           // * button
      {
        Serial.println("*");
        TimerPtr = &TimerIntensity;  //point to this timer
        intesityUpFlag = true;       //enable intensity up adjustment
        intesityDownFlag = false;
        TimerIncDec = millis();
        TimerIntensity = millis();
      }
      break;
 
    //**********************
   case 0xFF52AD:                                           // # button
      {
        Serial.println("#");
        TimerPtr = &TimerIntensity;  //point to this timer
        intesityDownFlag = true;     //enable intensity down adjustment
        intesityUpFlag = false;
        TimerIncDec = millis();
        TimerIntensity = millis();
      }
      break;
 
    //**********************
    case 0xFF02FD:
      Serial.println("OK");
      break;
 
    //**********************
    case 0xFF6897:
      Serial.println("1");
      break;
 
    //**********************
    case 0xFF9867:
      Serial.println("2");
      break;
 
    //**********************
    case 0xFFB04F:
      Serial.println("3");
      break;
 
    //**********************
    case 0xFF30CF:
      Serial.println("4");
      break;
 
    //**********************
    case 0xFF18E7:
      Serial.println("5");
      break;
 
    //**********************
    case 0xFF7A85:
      Serial.println("6");
      break;
 
    //**********************
    case 0xFF10EF:
      Serial.println("7");
      break;
 
    //**********************
    case 0xFF38C7:
      Serial.println("8");
      break;
 
    //**********************
    case 0xFF5AA5:
      Serial.println("9");
      break;
 
    //**********************
    case 0xFF4AB5:
      Serial.println("0");
      break;
 
    //**********************
    case 0xFFFFFFFF: //Repeat code
      {
        Serial.println("REPEAT");
        *TimerPtr = millis();       //reset the current timer
      }
      break;
 
  } // END switch case
 
} //             E N D  o f  p r o c e s s B u t t o n ( )
 
//**********************************************************************
 
//======================================================================
//                        E N D  O F  C O D E
//======================================================================

Wawa,

24 volts, 4.8 watts and 120mamps

Does that help?

Coil resistance?

Edit
If you have the relay board already, I would use it for the physical isolation it offers.

Are the relays on the relay board 5v coil?
.

Eight 120mA solenoids could be controlled with a single TPIC6B595.
No relays, nothing else.
Leo…