Project showcase

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.

  • 4,516 views
  • 6 comments
  • 13 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

Author

Dedda60d c3b0 444d 81f8 9764ae312b6e
alfiosky4
  • 1 project
  • 1 follower

Additional contributors

  • Platform development - circuit and code design and implementation. by Mirko Alfieri
  • Used this platform for 3d photogrammetry acquistions during his research at pisa university. by Fabio Alfieri

Published on

July 3, 2018

Members who respect this project

Merlin arch 4fnrmpnf6jN1177995732 193390 2867 400x400 nurnkz9ecxPhotoInductor color code   copyDefaultImg 4220 6r8bv37anrPhoto16730324 10155004877370763 7893975411889940807 n

and 5 others

See similar projects
you might like

Similar projects you might like

Arduino Bluetooth Basic Tutorial

by Mayoogh Girish

  • 454,698 views
  • 42 comments
  • 237 respects

Home Automation Using Raspberry Pi 2 And Windows 10 IoT

Project tutorial by Anurag S. Vasanwala

  • 285,643 views
  • 95 comments
  • 672 respects

Security Access Using RFID Reader

by Aritro Mukherjee

  • 229,669 views
  • 38 comments
  • 239 respects

OpenCat

Project in progress by Petoi

  • 196,214 views
  • 154 comments
  • 1,364 respects
Add projectSign up / Login