2 in 1 spinner from HDD

http://www.thingiverse.com/thing:1665202
Product: https://www.tindie.com/products/williambailes/plex-controller/
Product:

Using parts from HDD, I have created a spinner that spins a disk, coating PCBs or other flat things in a somewhat even coat of liquid. It is also can be used as a magnetic stirrer by using the magnet from the HDD. The unit uses the brushless motor from HDD to spin the disk. Since the unit does not need to have a lot of torque, this motor is perfect as it can spin at high speeds (depends on the motor driver and HDD type).
It can be used for a different purpose, it is just depended on the disk.
Coating stainless steel did not work well but looks cool. Coating silicon wafers work well (if the wafer can fit) because of the smoothness of the surface

Parts Link: http://www.thingiverse.com/thing:1665202

Parts list:
1. HDD brushless motor (assuming it’s the same dimensions as mine)
2. Motor controller (http://www.ebay.com.au/itm/SUPPO-50A-brushless-motor-speed-controller-/282089041823?hash=item41add12f9f:g:WjcAAOSw3xJVYrya)
3. PLEX control unit (see https://tinkersprojects.com/project/plex-controller/)
4. power plug

with the motor controller, if the motor runs for too long then the motor controller will need a bigger heatsink to help it stay cool and not melt the case. I have not put any air hole in the case or put and heat sink on due to I’m not running it for too long at a time.

Code for Project

GNU General Public License v3.0

#include <LiquidCrystal.h>
#include <Servo.h>

#define upPIN 0
#define startstopPIN 18
#define downPIN 1

#define InPinA 17
#define InPinB 16
#define InSePinA 13
#define InSePinB 12
#define InSePinC 11
  
#define OutPinA 14
#define OutPinB 15
#define OutSePinA A5
#define OutSePinB A6
#define OutSePinC A7

Servo motorcontrol;
LiquidCrystal lcd(2, 3, 4,5, 6, 7);

unsigned long currenttime = 0;
double percent = 25;
bool active = false;
double val;

void setup() 
{ 
  lcd.begin(16, 2);
  pinMode(startstopPIN, INPUT);
  pinMode(downPIN, INPUT);
  pinMode(upPIN, INPUT);

  motorcontrol.attach(InPinA);
  motorcontrol.write(10);
  
  lcd.print("  Initialising  ");
  lcd.print("     motor      ");
  
  currenttime = millis();
  while(currenttime+4000 >millis()){}
  
  lcd.print("Motor: STOPPED  ");
  updateLCD();
}

void loop() 
{
  if(digitalRead(startstopPIN)==HIGH)
  {
    active = !active;
    updateLCD();
    while(digitalRead(startstopPIN)==HIGH){runMotor();}
  }

  if(digitalRead(upPIN)==HIGH)
  {
    percent++;
    if(percent > 100)
    {
      percent =100;
    }
    updateLCD();
    while(digitalRead(upPIN)==HIGH){runMotor();}
  }
  
  if(digitalRead(downPIN)==HIGH)
  {
    percent--;
    if(percent < 0)
    {
      percent =0;
    }
    updateLCD();
    while(digitalRead(downPIN)==HIGH){runMotor();}
  }
  runMotor(); 
}

void updateLCD()
{
  lcd.setCursor(0,0);
  if(active)
  {
    lcd.print("Motor: RUNNING");
  }
  else
  {
    lcd.print("Motor: STOPPED");
  }
  
  lcd.setCursor(0,1);
  lcd.print("Power: ");
  lcd.print(percent);
  lcd.print("%");
}

void runMotor()
{
  if(active == true)
  {
    double number = percent*0.01;
    val = 80+55*number;
    motorcontrol.write(val);    
  }
  else
  {
    motorcontrol.write(0);
  }
}

Latest Projects

Popular Projects