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.

  • 3,238 views
  • 5 comments
  • 10 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
  • 0 projects
  • 0 followers

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   copyDefault

and 5 others

See similar projects
you might like

Similar projects you might like

High Precision Scale with Arduino

Project showcase by mPelectronic

  • 2,840 views
  • 11 comments
  • 19 respects

WIZnet S2E Deadbolts

Project tutorial by S2E Lock

  • 1,103 views
  • 2 comments
  • 7 respects

Super-Go: An Industrial IoT bot

Project tutorial by KS

  • 530 views
  • 2 comments
  • 5 respects

GPS Tracking System for Vehicles

Project showcase by Sustainable Living Lab

  • 3,985 views
  • 1 comment
  • 19 respects

Automatic Watering System

Project tutorial by Manson Hau

  • 5,549 views
  • 11 comments
  • 28 respects

Dual Axis Solar Tracker Panel with Auto and Manual Mode

Project tutorial by Giannis Arvanitakis

  • 3,424 views
  • 3 comments
  • 24 respects
Add projectSign up / Login