Parts needed :
1x Piezo
1x LED
1x 1Mohm Resistor (soldered across the piezo leads to pulldown the input port to ground.
1x Arduino or simular board (analog in)
Setup: see picture. The Cable tie is just used for testing my theory. Also just noticed, This was before the double sided foam tape on the opposite leg.
Workings:
The X mount is only attached with 2 screws. The one leg is supported on some double sided tape(foam or something soft will work as well) the other leg rests ontop of the piezzo (i used washer as spacer)
When the motor is spinning the unbalanced motor will move from side to side. the 2 screws acts as "crude" hinge system make sure motor only moves in 1 axes, otherwise you get very strange results.
The side to side movement then creates a pressure on the piezo and this creates voltage that is measured by the arduino.
The arduino is simply programmed to switch LED on when the threshold of the voltage has been reached. I simply created a auto adjusting threshold so one don't need to calibrate system whole time (will post code later)
When the motor is spinning, the "heavy" point will be 90 degree before the direction of turn (gyro scopic effect). Thus, if motor is turning clockwise and the marker stops as on the picture above(thanks to led flashing in sync), the weight needs to be added at the bottom of picture . (add VERY little weight at a time) You can use almost anything for weight, a drop cyano, some press-stick putty, Tipex, paint, stickers etc etc.
Problems found so far:
Sometimes the mark changes position with RPM. This can normally be fixed with adjusting the 2 "hold" down screws.
I can now get most motors balanced close enough to perfect.
The only limitation with this design is that the 3 phase of the brushless motor creates its own in-balance due to no load and this is interfering with readings when you get close to perfect.
When you have few of the same motors to balance (quadcopter, tri copter etc), you can leave the stator on the board and simply change the armature, this saves the effort of resetting the screws etc whole time. It save's allot of time on hexcopter motors
I'll try make video if demand is enough
L:
Code:
// these constants won't change:
const int ledPin = 12; // led connected to digital pin 13
const int knockSensor = A0; // the piezo is connected to analog pin 0
int x;
// these variables will change:
int sensorReading = 0; // variable to store the value read from the sensor pin
int ledState = LOW; // variable used to store the last LED status, to toggle the light
void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
Serial.begin(115200); // use the serial port
x=1000; // start very high just cause we can
}
void loop() {
// read the sensor and store it in the variable sensorReading:
sensorReading = analogRead(knockSensor);
if (sensorReading >= x) {
// toggle the status of the ledPin:
ledState = HIGH; //!ledState;
x=x+100; /// this is to create artificial filter to narrow the marker (very bad i know)
} else
{
if (x>0)x--;
ledState = LOW;
}
// update the LED pin itself:
digitalWrite(ledPin, ledState);
}
Original idea came from this design: http://www.turbinemuseum.de/Gasturbines ... _tool.html
