Project showcase
DIY Photogrammetry Turntable

DIY Photogrammetry Turntable © CC BY-NC

A low cost turntable for photogrammetry acquisitions. Used by Department of Biology at University of Pisa to acquire 3D models of bones.

  • 5,645 views
  • 6 comments
  • 15 respects

Components and supplies

A000066 iso both
Arduino UNO & Genuino UNO
×1
09590 01
LED (generic)
For "turn status bar" led, used 2 Red, 2 yellow and 1 green led. 1 green used for single status led.
×6
DS04-NFC Servo Motor
×1
On/Off Power Switch
×1
E switch eg1218 image 75px
Slide Switch
3 Way Side Switch
×1
09181 03 l
SparkFun Big Red Dome Button
Not so big :)
×2

Apps and online services

About this project

This project was born from the need of my brother Fabio, researcher in Biology at the Pisa University. He was looking for an easy way to acquire primate bones 3D models for his research.

So I developed this little photogrammetry turntable, based on Arduino UNO controller and mounted into a DVD casing (for prototyping, hope to 3D print a dedicated case soon!).

It's very simple in its structure and use. Easy to open for components upgrade/replace.

It has an ON/OFF switch, a start and reset button and a 3-way mode switch. This switch put the turntable in Pause, Coarse or Fine mode changing the steps that the plate do to complete a 360° turn. There are also a 5 led "status bar" for monitoring the 360° turn progress and a Green Status led (blinking for "waiting input status" and still for "operation in progress status"). The servo used in this project is a DS04-NFC 360° continue rotation servo motor. Its stepping has been modulated via PWM and relative duration. Our weight upper limit was about 2 Kg, so this servo specs were perfect for this purpose.

Circuit has finally been soldered on a 40x60 mm double-side PCB board.

The turntable can work with a 12V 1A power supply or with a 9V transistor battery.

Code

servo-fgramme1.2.inoC/C++
#include <Servo.h>

Servo myservo;  

const int pinBottone = 2;
const int pinFine = 3; //pin input switch for "Fine" mode
const int pinLed = 4;
const int pin20 = 13;
const int pin40 = 12;
const int pin60 = 11;
const int pin80 = 10;
const int pin100 = 8;


int presBottone = 0;
int fineOn = 0; //flag "Fine" On/Off
int pos = 0;

//SETTABLE STEPS INTERVALS FOR FINE AND COARSE//    
int dCoarse = 5000;                          //
int dFine = 1000;                           //
/////////////////////////////////////////////

void setup() {
  pinMode(pinLed, OUTPUT);
  pinMode(pin20, OUTPUT);
  pinMode(pin40, OUTPUT);
  pinMode(pin60, OUTPUT);
  pinMode(pin80, OUTPUT);
  pinMode(pin100, OUTPUT);
  pinMode(pinBottone, INPUT_PULLUP);
  pinMode(pinFine, INPUT_PULLUP);
  myservo.attach(9);  
  digitalWrite(presBottone, HIGH);
  digitalWrite(fineOn, HIGH);
  delay(200);
  digitalWrite(pin20, HIGH);
  delay(200);
  digitalWrite(pin40, HIGH);
  delay(200);
  digitalWrite(pin60, HIGH);
  delay(200);
  digitalWrite(pin80, HIGH);
  delay(200);
  digitalWrite(pin100, HIGH);
  delay(200);
  digitalWrite(pin20, LOW);
  delay(200);
  digitalWrite(pin40, LOW);
  delay(200);
  digitalWrite(pin60, LOW);
  delay(200);
  digitalWrite(pin80, LOW);
  delay(200);
  digitalWrite(pin100, LOW);
}

void loop() {
  presBottone = digitalRead(pinBottone);
  fineOn = digitalRead(pinFine);
  if (presBottone == LOW)  {
  digitalWrite(pinLed, HIGH);
    if (fineOn == LOW)  {
      for (pos = 0; pos <= 60; pos += 1) { // Fine Mode
      presBottone = digitalRead(pinBottone);
      while (presBottone == LOW) {      
            presBottone = digitalRead(pinBottone);              
      }
      digitalWrite(pin20, LOW);
      digitalWrite(pin40, LOW);
      digitalWrite(pin60, LOW);
      digitalWrite(pin80, LOW);
      digitalWrite(pin100, LOW);
      if (((pos<=12)&&(pos>0))){} 
      if (((pos<=24)&&(pos>12))){digitalWrite(pin20,HIGH);}
      if (((pos<=36)&&(pos>24))){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);;}
      if (((pos<=48)&&(pos>36))){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);digitalWrite(pin60,HIGH);}
      if (((pos<=59)&&(pos>48))){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);digitalWrite(pin60,HIGH);digitalWrite(pin80,HIGH);}
      if (pos==60){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);digitalWrite(pin60,HIGH);digitalWrite(pin80,HIGH);digitalWrite(pin100,HIGH);}
      myservo.writeMicroseconds(1760);  
      delay(20);
      myservo.writeMicroseconds(1500);        
      delay(dFine); 
      presBottone = LOW;
      } 
    } else {
      for (pos = 0; pos <= 24; pos += 1) { // Coarse Mode
      presBottone = digitalRead(pinBottone);
      while (presBottone == LOW) {      
            presBottone = digitalRead(pinBottone);               
      }
      digitalWrite(pin20, LOW);
      digitalWrite(pin40, LOW);
      digitalWrite(pin60, LOW);
      digitalWrite(pin80, LOW);
      digitalWrite(pin100, LOW);
      if (((pos<=3)&&(pos>0))){}
      if (((pos<=7)&&(pos>3))){digitalWrite(pin20,HIGH);}
      if (((pos<=12)&&(pos>7))){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);;}
      if (((pos<=17)&&(pos>12))){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);digitalWrite(pin60,HIGH);}
      if (((pos<=23)&&(pos>17))){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);digitalWrite(pin60,HIGH);digitalWrite(pin80,HIGH);}
      if (pos==24){digitalWrite(pin20,HIGH);digitalWrite(pin40,HIGH);digitalWrite(pin60,HIGH);digitalWrite(pin80,HIGH);digitalWrite(pin100,HIGH);}
      myservo.writeMicroseconds(2060);  
      delay(60);
      myservo.writeMicroseconds(1500);              
      delay(dCoarse); 
      presBottone = LOW;
      }                                    
    }
      
  }
  else {
         digitalWrite(pinLed, HIGH);
         delay (500);
         digitalWrite(pinLed, LOW);
         delay (500);
        }
}
 

Schematics

Circuit Diagram
Prototipook kcnmsyjkfg

Comments

Similar projects you might like

DIY Portable Distance Detection Device

Project tutorial by Viktor S

  • 5,897 views
  • 5 comments
  • 16 respects

DIY Anemometer: Wind Speed Sensor Device

Project tutorial by Achindra Bhatnagar

  • 12,709 views
  • 10 comments
  • 45 respects

DIY RC Plane 4 Channel Transmitter – Receiver Using Arduino

Project showcase by Team RootSaid

  • 11,970 views
  • 0 comments
  • 22 respects

DIY Smart Cane Using Arduino

Project tutorial by suhail jr

  • 9,871 views
  • 1 comment
  • 12 respects

A DIY Smart Insole to Check Your Pressure Distribution

Project tutorial by Juliette van der Pas

  • 8,940 views
  • 10 comments
  • 31 respects
Add projectSign up / Login