Federico Vivaldi
Published © GPL3+

Open Vortexer

AKA how to build your own laboratory vortexer without spending a lot of money.

IntermediateFull instructions provided7,126

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
You can use either Uno or Nano, select the one that most suits you.
×1
Arduino UNO
Arduino UNO
You can use either Uno or Nano, select the one that most suits you.
×1
Jumper wires (generic)
Jumper wires (generic)
×1
female power supply jack
×1
12v power supply 2A
×1
6V vibrating motor
×1
Anti Static  Foam, High Density
Anti Static Foam, High Density
×1
black rubber crutch
or something like that.
×1
Piezo Sensor
ControlEverything.com Piezo Sensor
×1
L9110S H-bridge
×1
Rotary potentiometer (generic)
Rotary potentiometer (generic)
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Highly Suggested
3D Printer (generic)
3D Printer (generic)
Highly Suggested
Hot glue gun (generic)
Hot glue gun (generic)
Highly suggested

Story

Read more

Custom parts and enclosures

Top

Top part of the device

Bottom

Bottom part of the device

Holder

Motor holder of the device

Schematics

Vortexer schematics without external power

The final device, encapsulated in a 3D printed box, will require a 12V power supply. NOTE: supply 12V ONLY through the VIN pin of the arduino nano!

Vortexer schematics with external power supply

12V must be supplied to Vin pin

Code

Open Vortexer code

Arduino
This code use the value of pressure calculated using a piezo sensor to trigger the vibration of the vibrating motor. Such vibration is kept for 20 seconds and then it stop in order to avoid any possible over heating of the system.
#define PRESSURE A0
#define POTMETER A1
#define MOTORPIN 9

#define ten_to_eight(x) (map(x, 0, 1023, 0, 180))

void pressure_baseline (int *baseline);
void pressure_check (int *baseline);
int *motor_speed (void);
void speed_control (int *speed);
void baseline_drift (int *baseline);

int baseline = 0;
int *ptr_baseline = &baseline;
int counter = 0;
int speed = 0;


void setup() {
  pinMode(MOTORPIN, OUTPUT);
  analogWrite(MOTORPIN, 254);
  pressure_baseline(ptr_baseline);
}

void loop() {
 
  pressure_check(ptr_baseline);

  baseline_drift(ptr_baseline);
  
}

void pressure_baseline (int *baseline) {
  
  for(int i = 0; i <10; i++){
    
    *baseline = *baseline + analogRead(PRESSURE);
    
    delay(500);
    
    if (i == 9){*baseline = *baseline/10;}
    
    }
  
  }

int *motor_speed (void){

  speed = analogRead(POTMETER);

  speed = ten_to_eight(speed);

  return &speed;
  
  }

void motor_control (int *speed){
  
  analogWrite(MOTORPIN, *speed);

  counter++;
  
  }

void pressure_check (int *baseline) {
  
  if (analogRead(PRESSURE) > (*baseline + 20) && counter < 20){
    while(counter < 20){
      
      int *speed = motor_speed();
      
      motor_control(speed);
      
      delay(500);
      
      }
    
    } else if (counter > 19) {

      analogWrite(MOTORPIN, 254);
      
      delay(4000);
      
      counter = 0;
      
      }
  }

void baseline_drift (int *baseline){
  
  if ( millis() % 3600000 == 0 && counter == 0){pressure_baseline(baseline);}
  
  }

Credits

Federico Vivaldi

Federico Vivaldi

4 projects • 35 followers
I'm a PhD student in chemistry and material science. I use my hobby in simple electronic to build items for laboratory.

Comments