• Welcome to RCCrawler Forums.

    It looks like you're enjoying RCCrawler's Forums but haven't created an account yet. Why not take a minute to register for your own free account now? As a member you get free access to all of our forums and posts plus the ability to post your own messages, communicate directly with other members, and much more. Register now!

    Already a member? Login at the top of this page to stop seeing this message.

Shop Holmes

Some shop updates.

Next up is the resistance brazer. It needs a solid state controller so we aren't installing new contactors every few months. The primary transformer controller I am using is not intended to be switched off under load . A SSR is getting installed into it and tied into the control board. Then we will reassess the kickback voltage and begin work on a new braze head controller.

Many years ago I switched out medium/large contactors (used for ceramic heater bands on wire & cable jacketing extruders) with mercury contactors.
Partly due to noise, partly burning contacts.

We had 5 extruders with anywhere from 2 to 8 temp zones on them.

They worked well, were quiet, didn't "bang" the electrical panel everything was mounted to. These were controlled/driven by Barber-Coleman "self tuning" digital temp controllers (IIRC, they were AT-580's??). Last I used them was ~19 years ago, so there may be better stuff today.:roll:
:lmao::lmao:
 
A mercury contactor would be a good choice for the power stage. The two reasons I chose SSR instead was cost factor and precision. Cost is over twice as much. The make and release time is substantial compared the work time, so the very short duration of "ON" is almost too fast for the MC to function! It could create some issues where the heat has to be tuned to the minimum ON time, and there is less precision with heat control as compared with ON time. The MC is a great choice for capacitive discharge machines though.


Hacked out a little code in the arduino compiler format to mimic ladder logic controls on the brazing machine. I will probably rewrite it with more functions to keep the loop simple and ensure the function completes. Right now there is some ambiguity that would cause it to default into the HOME function when travelling between limit switches, but the tool head reciprocates with rotational input so it would naturally hit Hlimit or Llimit. I don't like relying on the reciprocal motion to define machine state though.

For those that like to read code, feel free to comment. I still need to store the footpedal input into a variable so there is no problems with holding down too long or too short. I want to build the program synchronous so it has very specific behavior depending on the states of input. It has been about four years since I built any logic so my brain is rusty on the little tricks.

Code:
int footswitchPin = 1;                 // footswitch  connected to digital pin 1
int HlimitPin = 2;			// high limit switch NO connected to pin 2
int LlimitPin = 3;			// low limit switch NO connected to pin 3
int motorPin = 4;                       // motor control output connected to pin 4 
int powerPin = 5;                       // transformer control output connected to pin 5
int resetPin = 6;                          // reset button connected to pin 6
int motorvar = 0;                       // variable for storage of motor state

//digitalRead shortcuts
int footswitch = digitalRead(footswitchPin);
int Hlimit = digitalRead(HlimitPin);
int Llimit = digitalRead(LlimitPin);
int reset = digitalRead(resetPin);
int power = digitalRead(powerPin);


// set variable functions
void setup()
{
  pinMode(footswitchPin, INPUT);      // sets footswitchPin as input
  pinMode(HlimitPin, INPUT);          // sets HlimitPin as input 
  pinMode(LlimitPin, INPUT);          // sets LlimitPin as input
  pinMode(resetPin, INPUT);           // sets reset as input
  
  pinMode(motorPin, OUTPUT);          // sets motorPin as output
  pinMode(powerPin, OUTPUT);          // sets powerPin as output
  
}


                                                                          // home position function
int home()
{
if (Hlimit != HIGH) 
{
  digitalWrite (motorPin, HIGH);
}
else 
{
  digitalWrite (motorPin, LOW);
}
}


//main loop
void loop()
{
                                                                            // footswitch OFF
if (reset == HIGH)
{
  digitalWrite (powerPin, LOW);
  delay (250);
  home();
}
if (power == LOW && footswitch == LOW && Llimit == LOW && Hlimit == LOW)
{
   home();
}
if (footswitch == LOW && Hlimit == HIGH)
{
  digitalWrite (motorPin, LOW);
  digitalWrite (powerPin, LOW);
}
if (footswitch == LOW && Llimit == HIGH)
{
  digitalWrite (powerPin, LOW);
  digitalWrite (motorPin, LOW);
}

                                                                                //footswitch ON
if (footswitch == HIGH && Hlimit == HIGH)
{
  digitalWrite (motorPin, HIGH);
}
if (footswitch == HIGH && Llimit == HIGH)
{
  digitalWrite (powerPin, HIGH); 
  delay (1000);
  digitalWrite (powerPin, LOW); 
  home();
}
}
 
Coders abound in here :ror:

Changed it up so there are two functions, and IF statements that call to the functions. There are also IF functions as safety nets to ensure proper outputs at all times. All time delays are just thrown in for placement, nothing has been timed and tested yet. Im still thinking it will kick back into high() mode before routines are finished, so some refinement is needed.


Code:
int footswitchPin = 1;                 // footswitch  connected to digital pin 1
int HlimitPin = 2;			// high limit switch NO connected to pin 2
int LlimitPin = 3;			// low limit switch NO connected to pin 3
int motorPin = 4;                       // motor control output connected to pin 4 
int powerPin = 5;                       // transformer control output connected to pin 5
int resetPin = 6;                          // reset button connected to pin 6
int motorvar = 0;                       // variable for storage of motor state

//digitalRead shortcuts
int footswitch = digitalRead(footswitchPin);
int Hlimit = digitalRead(HlimitPin);
int Llimit = digitalRead(LlimitPin);
int reset = digitalRead(resetPin);
int power = digitalRead(powerPin);


// set variable functions
void setup()
{
  pinMode(footswitchPin, INPUT);      // sets footswitchPin as input
  pinMode(HlimitPin, INPUT);          // sets HlimitPin as input 
  pinMode(LlimitPin, INPUT);          // sets LlimitPin as input
  pinMode(resetPin, INPUT);           // sets reset as input
  
  pinMode(motorPin, OUTPUT);          // sets motorPin as output
  pinMode(powerPin, OUTPUT);          // sets powerPin as output
  
}


                                       // home position function
int high()
{
if (Hlimit != HIGH) 
{
  digitalWrite (motorPin, HIGH);
}
else 
{
  digitalWrite (motorPin, LOW);
}
}
                                      // low position function 
int low()
{
  if (Llimit != HIGH)
{
  digitalWrite (motorPin, HIGH);
}
else
{
  digitalWrite (motorPin, LOW);
  digitalWrite (powerPin, HIGH);
  delay (250);
  digitalWrite (powerPin, LOW);
  delay (100);
  high ();
}
}



                                      //main loop
void loop()
{
                                     // footswitch OFF
if (reset == HIGH)
{
  digitalWrite (powerPin, LOW);
  delay (250);
  high();
}
if (power == LOW && footswitch == LOW && Llimit == LOW && Hlimit == LOW)
{
   high();
}
if (footswitch == LOW && Hlimit == HIGH)
{
  digitalWrite (motorPin, LOW);
  digitalWrite (powerPin, LOW);
}
if (footswitch == LOW && Llimit == HIGH)
{
  digitalWrite (powerPin, LOW);
  digitalWrite (motorPin, LOW);
}

                                             //footswitch ON
if (footswitch == HIGH && Hlimit == HIGH)
{
  low();
}
if (footswitch == HIGH && Llimit == HIGH)
{
  low();
}
}
 
Last edited:
Whacked away at coding a bit more so we can get the machine running tip top ASAP. I should have all machine states covered now, and with while statements it can't get out of the function until a parameter is true. Notice the reset button is thrown into low, high, and powerloop functions to ensure it is always available to jam the machine back into high state.

// home position function
void high()
{
while (Hlimit != HIGH || reset != HIGH)
{
digitalWrite (motorPin, HIGH);
}
}
// low position function
void low()
{
while (Llimit != HIGH || reset != HIGH)
{
digitalWrite (motorPin, HIGH);
}
}

void powerloop() //power loop function
{
while (reset != HIGH)
{
digitalWrite (powerPin, HIGH);
delay (250);
digitalWrite (powerPin, LOW);
delay (100);
high ();
}
}


//main loop
void loop()
{
// footswitch OFF states
if (reset == HIGH)
{
digitalWrite (powerPin, LOW);
delay (250);
high();
}

if (power == LOW && footswitch == LOW && Llimit == LOW && Hlimit == LOW)
{
high();
}

if (footswitch == LOW && Hlimit == HIGH)
{
digitalWrite (motorPin, LOW);
digitalWrite (powerPin, LOW);
}
if (footswitch == LOW && Llimit == HIGH)
{
digitalWrite (powerPin, LOW);
digitalWrite (motorPin, LOW);
}

//footswitch ON states
if (footswitch == HIGH && Hlimit == HIGH)
{
low();
}

if (footswitch == HIGH && Llimit == HIGH)
{
powerloop();
}
}



Last little bits are to debounce the inputs with software and possibly decouple inputs with opto isolation. I'll either write a debounce routine that stores the input state and counts down 50ms of unchanged state to execute, or make an array and trigger "true" when it sums greater than X.


All this late night learning just so I can avoid using PLC boxes :ror:
 
Since my wife is working this weekend I work too. Hacked out the debouncer code this morning.


I didn't want to use the debounce header available for the aruduino compiler, as I didn't understand the concept fully. I also dislike the idea of using delays for debouncing. So I made my own debouncer that waits for MAX number of consistent inputs before changing state of the switch. It is set to three right now, unlikely to be triggered by noise. If I have issues with with electrical interference I will install an RC filter on the switches too. In the future it could be easier to use an array to store the information, I'll look into that down the road.


Seems ready to go now, I should have the hardware to complete the project within a few days. I'm considering rebuilding the machine head at the same time, but it may have to wait until a few other projects are done.

Code:
int footswitchPin = 1;          // footswitch  connected to digital pin 1
int HlimitPin = 2;		// high limit switch NO connected to pin 2
int LlimitPin = 3;		// low limit switch NO connected to pin 3
int motorPin = 4;               // motor control output connected to pin 4 
int powerPin = 5;               // transformer control output connected to pin 5
int resetPin = 6;               // reset button connected to pin 6

int FS=0;                       // footswitch debouncing storage integer
int HL=0;                       // Highlimit switch debouncing storage integer
int LL=0;                       // Lowlimit switch debouncing storage integer
int RS=0;                       // Reset switch debouncing storage integer

#define MAX 3                        // debounce max number
bool footswitchD;                    // footswitch debounced state
bool HlimitD;                        // high limit switch debounced state
bool LlimitD;                        // low limit switch debounced state
bool resetD;                         // reset switch debounced state[/b]


//digitalRead shortcuts
int footswitch = digitalRead(footswitchD);
int Hlimit = digitalRead(HlimitD);
int Llimit = digitalRead(LlimitD);
int reset = digitalRead(resetD);
int power = digitalRead(powerPin);


// set variable functions
  pinMode(footswitchPin, INPUT);      // sets footswitchPin as input
  pinMode(HlimitPin, INPUT);          // sets HlimitPin as input 
  pinMode(LlimitPin, INPUT);          // sets LlimitPin as input
  pinMode(resetPin, INPUT);           // sets reset as input
  
  pinMode(motorPin, OUTPUT);          // sets motorPin as output
  pinMode(powerPin, OUTPUT);          // sets powerPin as output
  


 //Debounce code
if (FS <=0){FS=0;}
if (FS >= MAX){FS= MAX;}
if (footswitchPin = 0){--FS;}  
else {++FS;}
if (FS=0){digitalWrite (footswitchD,LOW);}
if (FS=MAX){digitalWrite (footswitchD, HIGH);}

if (HL <=0){HL=0;}
if (HL >= MAX){HL= MAX;}
if (HlimitPin = 0){--HL;}  
else {++HL;}
if (HL=0){digitalWrite (HlimitD,LOW);}
if (HL=MAX){digitalWrite (HlimitD, HIGH);}

if (LL <=0){LL=0;}
if (LL >= MAX){LL= MAX;}
if (footswitchPin = 0){--LL;}  
else {++LL;}
if (LL=0){digitalWrite (LlimitD,LOW);}
if (LL=MAX){digitalWrite (LlimitD, HIGH);}

if (RS <=0){RS=0;}
if (RS >= MAX){RS= MAX;}
if (resetPin = 0){--RS;}  
else {++RS;}
if (RS=0){digitalWrite (resetD,LOW);}
if (RS=MAX){digitalWrite (resetD, HIGH);}
 
Side note, this is basically the same language (C++) used to program motor controller ICs. Plenty of code already out there for very fancy motor controllers exist, they would just need some hacking to adapt for our needs. You now know my two year goal ;)
 
We have been plugging away at the shop here, took over the next bay in the building and have been setting up as fast as possible. We now have 1000sq feet dedicated to HH, with another 600sq feet of flex space between myself and Voltriders. Right now we are finishing up a new blast cabinet (6x4x4 foot!) and just got some fresh power routed. We have a 50a 110v section and a 50a 220v line with dedicated 20a fuse for the compressor. We made it big enough to blast bike frames, but I built it for motor production.


As you can see, I have moved most of my extra bikes into the third bay for short term storage. We had a big water damage problem at my house and I had to clear room while the carpets got ripped out. I'm under 20 bikes now, I swear!


Another little project is my adjustable power supply. It runs on 20 to 29v from my main power supply, and we can adjust the output from .1v to 29v via the gold trim knob. It also features a heads up display with amp meter for very precise and quick measurements. I can power my chargers, break in motors, power other power supplies, and have a generally useful tool that is compact and easy to use.


Next up, we are building a CNC laser etcher. Already have the parts and have built a hand-held torch. Now I just need to machine the heatsink for the laser emitter.
 

Attachments

  • Bay3.jpg
    Bay3.jpg
    94.1 KB · Views: 1,017
  • Blast-Cab.jpg
    Blast-Cab.jpg
    61.9 KB · Views: 1,006
  • Adjustable PS1.jpg
    Adjustable PS1.jpg
    47.7 KB · Views: 1,002
  • Adjustable-PS2.jpg
    Adjustable-PS2.jpg
    73 KB · Views: 1,030
Looks like your moving right along....

But I dont think I believe the 20 bikes.... are you counting pieces and unassembled also?
 
Looks like your moving right along....

But I dont think I believe the 20 bikes.... are you counting pieces and unassembled also?

If counted parts it would be about 30 bikes :oops:



Got a hitachi miter saw for the shop this weekend and built a baby gate from cedar and deck spindles. Matches the house and was about the same price as buying a crappy pine gate, including labor. I'm typically bad at woodworking, but this was easy so I couldn't screw up! Thinking about trying my hand at woodworking as a hobby when my son is older.
 

Attachments

  • image.jpg
    image.jpg
    71 KB · Views: 817
John, have you thought about doing a video on hand winding motors? Every time I'm at radio shack I have the impulse to buy some wire and give it a shot. I have held back so far...
 
I use a power winder, so it wouldn't be a ton of help to the average joe. What we could do is show how to build a hand crank winder and go over the parts that make an armature quality. It has taken me a few thousand armatures to really get good at winding, its like any other sport where practice makes perfect. I'm still pushing to start regular videos, just need to finish training another laborer so my media employee can get enough time.


The gate will be getting a lower strike plate and hidden metal frame to stiffen it up. As it sits there is flex if pushed hard. The lower strike plate will avoid it bowing into the stairs and the frame will keep it from breaking if my kid decides to run into it. Steel will be used on the strike plate to avoid stress fractures over the years, and aluminum on the frame to keep the gate light and fast swinging. Brock is just rolling around now so there is plenty of time before he is walking.


Bonus points on the gate: My dog is one of those "interested" types that gets in the way when I'm working in the basement shop. Hammering a nail? She wants to help! Digging a hole, she joins in and digs! If you all notice, she manages to get into almost every pic I take at home. Whatever I am looking at/ doing/ working on- she has to be right there. Now I can easily keep her upstairs while I finish out the wreck of a home basement that the business caused. It put me 5 years behind in my house! As the biz kept growing I kept moving my music area and home theater around to make space, and ended up with nothing usable as a result. I can get out those power tools without worrying about Gretal sneaking up and getting into trouble, yeee haw!
 
Big rearrange again. Volt riders went downtown, I took the middle bay for HH, and the third bay had empty space.










So we moved in a half pipe for the winter...
 

Attachments

  • image.jpg
    image.jpg
    48.7 KB · Views: 681
I never wanted a half pipe in my shop, but it happened and it was the best thing ever! I get to warm up on it in the morning, have a few minutes of pump during lunch, and spend a few minutes on it at the end of the day. I went from no skating skills, to bonking the coping and getting ollies in a few weeks. Biking on it is pretty difficult. I can air out about a foot, but the workout is so taxing that I can only ride 2 or 3 days a week.

But all of this is merely for one goal- be in shape when snow skating season hits. Missouri doesn't keep snow, so I must be ready at a moments notice for when the chance comes! It has really gotten me into shape. Honestly, I don't know if I will be able to let it leave in the spring, it is too dang fun and my body is thanking me for being active again :mrgreen:
 
Some shots of how the shop is coming back together. Shown are the main work benches and production areas. The bootyfab exhaust works quite well above the soldering station.


edit: I seem to have a bike wheel problem, they are sneaking into my shop photos everywhere!
 

Attachments

  • image.jpg
    image.jpg
    71.1 KB · Views: 581
Last edited:
Back
Top