Coal Friction Tester - New to Electronics

Good day,

First of all, an introduction is in order, I guess.

I am from South Africa where I'm a Mechanical Draughtsman for a company specialising in Coal Mills for power generation purposes. Being a hobbyist programmer, I have always wanted to expand into electronics...where code comes to life ;). Unfortunately, with all my other hobbies, wife, child and work, time for learning something new is almost non-existent.

Today I was given a new assignment, one which will require some basic electronics(IMO). We have this custom device(Fig.1) which is used to calculate the Friction of processed coal on steel. The problem with this device is that it is operated manually, so human error plays a big part. Therefore my assignment is to have this device tilt by means of an actuator, and stop as soon as the sample ring on top starts to slide(Fig.2).

My plan is to have a Nema 42 Stepper Motor drive a worm drive to raise or lower the test plate.

Now to the questions:

  1. What type of switch/sensor can I use to determine when the sample starts sliding?

  2. What components would be necessary for this circuit?

  3. Is there some form of angle sensor which could output the degree of tilt at which the motor stopped?

I plan on learning as much as time would allow me during this project, but I do need some help and a couple of nudges in the right direction.

Thanks in advance for any response.

Cheers

Martin

Suggest you use a contact switch to establish the normal 'at rest' position - then you can calculate the raised position from the number of steps the stepper has taken, and some trigonometry.

I would also use a contact switch to detect when the ring starts moving - start with the ring in contact with the switch, and as soon as the ring moves away it will operate the switch.

To drive the a stepper motor you will need a motor drive circuit with a current and voltage rating suitable to power the motor. It's hard to guess the scale of your project from those drawings. If it's only using a small motor, you may find the common L298 based motor drive shields are adequate.

From your pictures it looks like the tilting sample tray is not very heavy so I wonder if you could use an R/C servo rather than a stepper motor. You can get quite powerful servos.

Servos are cheap and be enormously easier to install and to program. So much so that I would be tempted to try it and see what happens.

How accurately do you need to know the angle of tilt?

The value used to set the angle of the servo may be all you need?

If you need an independent or more accurate measurement of the angle it may be possible with a potentiometer mounted at the hinge point. Or maybe you could organize a lever mechanism to multiply the movement of the pot relative to the tray.

...R

As for the slide measurement, what type of thing are you measuring that is sliding? My first thought is an Ultrasonic or IR distance sensor attached the the edge of the device and trigger when the distance starts to change (once noise is taken into account). However, both of those are dependent on what you are measuring, since Ultrasonic usually isn't great over uneven surfaces (But might still be a better bet), and IR is very short range and also doesn't work with IR transparent materials.

Another option would be a light gate that when the object slides through it, it triggers the stop.

Thanks for the responses.

Tilting Tray Details:
Mass: 3.581 kg
Weight: 35.0938 N
Torque: 10.19482 Nm

Dimensions:
318mm x 242mm

So according to my calculations, I would need a motor with torque above 10.2 Nm.
I probably could do with a smaller motor and gear system, but gear calculations gives me headaches. :wink:

@ PeterH:
Which Contact Switch are you referring to? I was looking into a Microswitch as can be seen here, but I am not sure whether the physical resistance of the actuator on the switch might push the sample away.

@Robin2:
The tilt angle only needs to be accurate to 1deg...

@mirith:
The sample ring is an aluminium ring that is packed with processed(fine) coal. I wasn't sure whether Ultrasonic/IR sensors are sensitive enough. If the sample ring starts sliding, even for 1mm, I need the motor to stop so we can check the angle on the device.

Cheers

Following on from Robin2's suggestion, it ought to be possible to add a counterweight to make the moving platform approximately balanced, which would reduce the servo torque requirements.

MarVil85:
@mirith:
The sample ring is an aluminium ring that is packed with processed(fine) coal. I wasn't sure whether Ultrasonic/IR sensors are sensitive enough. If the sample ring starts sliding, even for 1mm, I need the motor to stop so we can check the angle on the device.

You are probably right on the sensors, though a good ultrasonic might do it. I would maybe try a laser gate. If you set it up right and are careful about intial placement, it should work.

Does anyone know how sensitive a REED Switch is? In other words, how much does the magnet need to move before the switch opens?

@mirith:
Could you perhaps elaborate on the laser gate?

Another option I thought of last night, was to have the stainless sliding plate insulated from the rest of the structre, and have current running through it to a contact point that connects to the sample ring, as soon as the ring moves away, the connection will be broken. But that is not the safest option... XD

Cheers

May be some kind of capacitive/touch sensor/switch.

If you attach a small arm to the cylinder (looking like the handle of a saucepan) the arm could be placed between two optical sensors and when it stops breaking the beam you would know the sample had moved. There are probably several variations on that idea.

...R

Alright, apart from the sensor/switch...
From what I can gather on the info available, I'll need the following items:

-Arduino Board(Unsure of which one)
-Breadboard
-Stepper Motor
-Potentiometer
-H-Bridge
-Power Supply

If I left something out, please correct me.

Now, a couple of questions:

  1. To be able to control the motor, should I use a toggle switch? (Forward/Stop/Backwards)
  2. How would go about setting the RMP of the motor? This needs to be adjustable for experimentation purposes.
  3. If the motor is reversed in order to reset the experiment, how will I go about to protect the motor and gears in the event that the tray is closed but the toggle switch is not thrown to stop?

Cheers...

I'm not 100% sure the best mechanical layout, but the basic idea is you have a transmitter (Laser) and receiver (Optical receiver of some form) across from each. The transmitter transmits a beam of light (could be visible, could not), and the receiver detects it. When something passes between the two, the beam is broken, and you can detect the change. One thing I've seen is that you put the transmitter and receiver on the same side and use a mirror to reflect the beam, but that may be too unnecessary. The downsides are it requires a fairly precise mechanical design since you need to aim the two, and you need to take ambient light into account, but it does give a fairly thin, non contact line that won't interfere with your test. As for cost, I have no clue though I imagine not cheap, as I do not have any specific parts in mind, since I've only really seen these in use particularly in something like Mythbusters and movies, however they aren't some myth. Digikey sells stuff like: http://www.digikey.com/product-detail/en/EE-SX398/OR1035-ND/368614 which are called photo interrupters. Its the same idea on a smaller scale. As to whether you can do it on a larger scale, I would imagine it would just be a laser, a detector that will detect the laser in ambient light, some ways to mount them, and a little bit of circuitry to process the data.

-Arduino Board(Unsure of which one)
-Breadboard
-Stepper Motor
-Potentiometer
-H-Bridge
-Power Supply

Not sure what the potentiometer is for. Also, if you're going to use a stepper motor, you need a driver board for it, not an H-bridge. As to which arduino, any of them will do - an Uno is where most people start.

I'm curious to know why you have decided to use a stepper rather than a servo?

..R

I mainly decided on the Stepper motor for accuracy sake...which will also help with calculating the angle via code. Would this be possible with a servo? As I said, I am a total noob in this regard, so any info would be much appreciated. I need to get a parts list through to my director, but I can only do this as soon as the all aspects have been finalised.

With a servo it works the other way round. The code calculates the angle and tells the servo to move to it.

Seems much simpler to me.

And, as I said earlier, servos are cheap and easy to fit so if it was not suitable you could then devote the effort to the stepper without any significant waste of time or money.

...R

If that is the case, a servo might work. For instance, code it to tilt the tray to 90deg, but have the optical sensor stop the loop as soon as it is activated. After some heavy googling, I stumbled upon this. It is exactly what I plan to do.

I am still at a loss for method of getting the tray to tilt using a motor. Spacing is limited and modifications must be kept to a bare minimum to avoid us needing to rewrite the standard for testing. The "modifications" must be seen as attachments to the current tester.

Could someone please put down some pseudo code for controlling the servo so I can get an idea of how the motor would operate?

This should get you started:

#include <Servo.h>

byte SensorPin = 3;      // Sensor that detects movement of the ring. Assume it's HIGH before it moves
byte TiltServoPin = 4;   // Pin for the servo control signal 
byte ServoAngle;         // Current angular position of the servo

Servo TiltServo;         // Servo that tilts the table

void setup() 
{
Serial.begin(9600);
Serial.println("Friction testing");
pinMode(SensorPin,INPUT); 
ServoAngle=0;
TiltServo.write(ServoAngle);
TiltServo.attach(TiltServoPin);
delay(1000);                            // Wait for Servo to get to start position
while(digitalRead(SensorPin)==HIGH)    
  {
  ServoAngle++;
  TiltServo.write(ServoAngle);
  delay(250);                           // Adjust delay to suit
  }
Serial.print("Release at: ");
Serial.println(ServoAngle);
}

void loop() 
{
}

Compiled, not tested.

You'll need to reset the arduino each time to use it and there's no error checking - the arduino will demand more and more angle from the servo if the movement sensor doesn't get triggered, irrespective of whether the servo is capable of it.

MarVil85:
For instance, code it to tilt the tray to 90deg

No No NO ...

Code it to tilt one degree at a time and just stop when the stuff moves. Something like this pseudo code.

byte angle = 0;

while (angle <= 90) {
   myServo.write(angle);
   delay(500);   // is half a second long enough to detect slippage?
   if (stuff has moved) {
      break;
   }
   angle += 1;
}

If you need finer control you can use servo.writeMicroseconds() in which you give it the number of microseconds corresponding to the angle. Roughly speaking 1000 (1 millisec) = 0 and 2000 = 180. You will need to experiment with your particular servo.

...R

Free advice. Worth every cent. Double your money back, if not satisfied.

This is an industrial project. Coal and the associated dust. Expense less than a couple hundred bucks. Trivial, if it is bulletproof.

Optical sensors with a coating of coal dust won't be accurate, if they work at all. I don't know about ultrasonic.

Microswitches can be dust-proofed like this one, or something similar.
http://www.ebay.com/itm/5-LOT-TEMCo-HEAVY-DUTY-15A-Micro-Limit-Switch-Roller-Lever-Arm-SPDT-Snap-Action-/281125093036?pt=LH_DefaultDomain_0&hash=item41745c7eac

If you can find one that is described as "dust proof" so much the better.

Put the microswitch at the top of the test plate.
Put the test sample ring on the test plate such that it presses against the microswitch, closing the contacts.

A servo motor, no matter how powerful is not going to lift a steel plate and 5 or 10 pounds of payload. You can't use them in forklifts, either. They are also not dead-nuts accurate.

Use a Nema 23 or better stepper motor and a 10 tpi 1/2 threaded rod to lift the top edge of the plate until the microswitch trips and and immediately stop the stepper.
Use the number of steps at stop time to determine the angle. Return the stepper to home and display the degrees on an LCD screen. Use a pushbutton to reset the machine. Use two pushbuttons pressed simultaneously to start the machine. They should be far enough apart so that the operator cannot start the machine with one hand. There must also be an emergency stop button (a big, red one).

The number of steps per number of degrees can be found by experimentation.

Write a sketch that will step up/down by button press until you have found 1 degree with a magnetic inclinometer . If you have a repair department at your company, they will probably have one. They are relatively cheap.

Make a note of the number of steps for 1 degree.
Do the same thing for all the rest of the angles of interest. Depending on level of accuracy needed, you may want to do this for the 0.5 degree steps. Organize the collected information into a couple of arrays with degrees in one and the number of steps in each corresponding degree.

Use the steps per degree array in your sketch to convert steps to degrees. Since the edge of the table enscribes an arc, the number of steps per degree will vary, so don't try to skimp on this process. If you or some willing mathematician want, this could be calculated, but I don't have the skills to tell you how.

You could calculate fractional degrees from the steps per degree for the range in question, but don't try to come up with an average steps per degree and use it for all. This is industrial equipment. Accuracy counts. The Arduino has more than enough memory to satisfy your needs.

You will need to completely safety shroud the device. Pinched off fingers are frowned on in the corporate world. Pretty much everywhere else, I suspect.

Remember, anything worth doing is worth overdoing.

Looks like an interesting project.

Luck, John