Photo Lazy Susan – foto a 360 gradi con arduino

Il progetto di oggi è Photo Lazy Susan per fotografare oggetti a 360°, è un progetto che mi ha segnalato un appassionato di fotografia poiché già in passato ho dedicato realizzato il progetto dolly per gli appassionati di fotografia.

photo lazy  susan - il progetto per fotografia

Il nome originale del progetto nasce da una curiosa applicazione chiamata Lazy Susan.

Il progetto originale puoi trovarlo sul sito originale in cui l’autore ha anche rilasciato gratuitamente i disegni in formato adatto ad essere tagliato a laser e la lista dei materiali che ti occorrono.

I disegni del Photo Lazy Susan

Mi piace quando incontro persone come l’autore del progetto photo lazy susan che dopo aver realizzato qualcosa non lo trattengono solo per il proprio uso personale ma lo condividono con il mondo web, forse perché mi ritrovo in questa filosofia in cui condividere arricchisce tutti.

Tornando al progetto puoi trovare i disegni già pronti per il taglio laser a questi indirizzi:

Il materiale per realizzare il tuo Photo Lazy Susan

Puoi prendere la lista dei materiali in uno dei file rilasciati dall’autore:

lista del materiale photo lazy susan

La lista riguarda solo i componenti meccanici ed il motore passo-passo bipolare di tipo NEMA23, manca la parte elettronica, ho immaginato per il progetto i seguenti componenti elettronici:

  • n.1 arduino uno
  • n.1 display LCD 2×16
  • n.1 Easydriver
  • n.3 pulsanti
  • n.3 resistenze da 330 ohm
  • n.1 potenziometro da 10Kohm

Montaggio del photo lazy susan

La parte meccanica non dovresti aver difficoltà a montarla, nel caso in cui incontrassi delle difficoltà ti consiglio di scrivere all’autore del progetto meccanico che saprà di sicuro aiutarti.

Per la parte elettronica puoi seguire gli schemi di collegamento:

schema collegamenti photo lazy susan

In cui il display LCD da 2 righe 16 caratteri serve a impostare i settaggi ad ogni avvio e monitorare durante la fase di funzionamento il progredire degli scatti.

Nel circuito ho inserito un controllo motori con un easydriver che tramite 2 soli pin di arduino ti permette di controllare un motore passo passo da 2A a 4 fasi; i collegamenti a MS1 ed MS2 ti permettono di effettuare delle riduzioni sul passo del motore, puoi vedere come funzionano in questo articolo.

I tre pulsanti servono a spostarti nel menu del photo lazy susan e confermare le scelte, il pulsante [+] fa avanzare il menu in avanti; il pulsante [-] torna al menu precedente e il pulsante [C] conferma la scelta o entra in un sottomenu. In particolare [+] e [-] incrementano e decrementano rispettivamente anche i valori impostati.

Il pincipio di funzionamento del photo lazy susan

Se sei un fotografo sai già come funziona il photo lazy susan e a cosa serve, ma può interessarti sapare che è stato progettato in modo che il piatto abbia 104 denti e la ruota dentata collegata all’albero motore 15 denti.

Questo dato è importante per calcolarti il numero di passi necessario ad effettuare un giro completo della ruota su cui appoggi l’oggetto. Per calcolare il rapporto tra le ruote e il numero di passi puoi leggere il documento “Trattato di Meccanica” che ho trovato:

Calcolo del rapporto tra ruote dentate

Tuttavia l’autore del photo lazy susan ci ha laciato tra i file uno sketch di esempio ben fatto che riporto sotto in cui alla linea 132 in cui imposta la variabile stepPerRotation a 2667 tale valore ti dice che per eseguire una rotazione completa del piatto su cui hai posizionato il tuo oggetto da fotografare con il photo lazy ti occorrono 2667 step del motore nema 23 utilizzato per il progetto.

lo sketch di esempio del photo lazy susan

tra i file del progetto c’è un esempio di sketch rilasciato direttamente dall’autore dei disegni:

// include the library code:
#include <LiquidCrystal.h>
#include <Servo.h>

//LCD Declarations
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int focusPin = 8;
int shutterPin = 9;

int directionPin = 7;
int stepPin = 6;
int speedDelay = 8;    //delay in milliseconds between a pulse (controls rotation speed)

static int CW = HIGH;
static int CCW = LOW;

void setup(){

  pinMode(shutterPin, OUTPUT);
  pinMode(focusPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  pinMode(directionPin, OUTPUT);      

  digitalWrite(focusPin,HIGH);
  digitalWrite(shutterPin,HIGH);

  Serial.begin(9600);

  //LCDSetup
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.noCursor();
  lcd.print("    .:WPLS:.");
  lcd.setCursor(0,1);
  lcd.print("Photo Lazy Susan");
  delay(2000);
  lcd.clear();

}

int photosPerRotation = 10;
int photoDelay = 10;

void loop(){
   int state = checkButtons();
   if(state == 0){
     runSequence();
   }else if (state == 3){
     softReset();
   }else{
     updateDisplay();
   }
}

void updateDisplay(){
  photosPerRotation = analogRead(1) / 10;
  photoDelay = (analogRead(2) / 50) * 1000;
  lcd.setCursor(0,0);
  lcd.print("# Photos: ");
  lcd.print(photosPerRotation);
  lcd.print(" ");
  lcd.setCursor(0,1);
  lcd.print("delay: ");
  lcd.print(photoDelay / 1000);
  lcd.print(" ");
}

void runSequence(){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Running");
  for(int i = 0; i <photosPerRotation; i++){
    lcd.setCursor(0,1);
    lcd.print("Photo #");
    lcd.print(i + 1);
    lcd.print(" of");
    lcd.print(photosPerRotation);
    takePhoto();
    delay(photoDelay);
    rotateTable((double)360 / (double)photosPerRotation);
    if(checkButtons() == 3){
      softReset();
    }
  }

  //complete loop
  boolean running = true;
  int timesThrough = 0;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("   COMPLETE");
  while (running){
    timesThrough++;
    if(checkButtons() == 3){
      softReset();
    }else if(checkButtons() == 0){
      running=false;
    }else if(timesThrough > 10000){
      running=false;
    }
  }

}

int checkButtons(){
 int returnValue = -1;
 int buttonPin = 0; //analog pin the button is attached to
 int buttValue[] = {470, 398, 305, 178};
 int bufferValue = 40;
 int numButtons = 4;
 int reading = analogRead(buttonPin);
 for(int i = 0; i < numButtons; i++){
  if(abs(reading - buttValue[i]) < bufferValue){
    returnValue = i;
  }
 }
 return returnValue;
}

void takePhoto(){
  digitalWrite(focusPin,LOW);
  delay(2000);
  digitalWrite(focusPin,HIGH);
  digitalWrite(shutterPin,LOW);
  delay(2000);
  digitalWrite(shutterPin,HIGH);
} 

void rotateTable(double deg){
   double stepsPerRotation = 2667;

   int stepsToTake = ((double)deg / (double)360 ) * (double)stepsPerRotation;

   for(int i = 0; i < stepsToTake; i++){
      pulsePin(stepPin);
   }
}

void pulsePin(int pinToPulse){
  int delayInMicroSeconds = 500; 

  digitalWrite(pinToPulse, HIGH);
  delayMicroseconds(delayInMicroSeconds / 2);
  digitalWrite(pinToPulse, LOW);
  delayMicroseconds(delayInMicroSeconds / 2);
  delay(speedDelay);
  if(checkButtons() == 3){
      softReset();
  }
}

void softReset(){
  asm volatile ("  jmp 0");
}

ci sono delle differenze rispetto alla lista dei materiali ed i collegamenti che ho immaginato io, infatti io ho predisposto i collegamenti secondo il progetto che ho io in mente e che pubblicherò in un prossimo articolo.

Le differenze principali sono:

linea 007: i pin di connessione del display LCD sono differenti tra il mio progetto e  l’originale photo lazy susan in quanto io ho collegato i pin secondo l’ordine 2,3,4,5,6,7;

linee 009-010: sono destinate, in entrambi i progetti a controllare il focus della macchina fotografica e lo scatto, ti consiglio di utilizzare due fotoaccoppiatori per collegare i pin arduino alla macchina fotografica, puoi leggere come fare sull’articolo: Fotoaccoppiatore per dolly II;

linea 012: il pin di direzione sullo schema proposto è il 10;

linea 013: il pin di step è l’11esimo pin di arduino;

linee 107-120: la funzione checkButtons() utilizza solo il pin A0 per leggere i segnali provenienti dai 4 pulsanti che l’autore del photo lazy susan ha deciso di impiegare per il progetto. Io ho scelto soli 3 pulsanti per eseguire tutti i settaggi che occorrono.

C’è un’altra differenza che tra lo sketch proposto e ed i collegamenti con l’easy driver, ho voluto utilizzare anche le connessioni MS1 ed MS2 che potrai sfruttare per ridurre il passo di 1/2, 1/4 o 1/8 ottenendo maggiori fotografie su 360° e quindi una maggiore fluidità.

Questa modifica complica un po’ lo sketch ma in linea teorica migliora di molto la risoluzione del filmato finale che ottieni unendo le foto realizzate.

Puoi vedere un esempio di foto realizzate con il photo lazy susan dall’autore e disponibili sul suo sito:

photo lazy esempio in sequenza

Buon divertimento !!!

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/photo-lazy-susan-foto-360-gradi.html

10 comments

1 ping

Skip to comment form

    • paolo on 10 dicembre 2012 at 10:39
    • Reply

    Interessante progetto. Parto dalla parte meccanica che mi pare quella piu’ impegnativa e poi ci risentiamo. Intanto lancio questo messaggio per trovare qualche altro MAKER che pensa realizzare questo tavolo girevole. Possiamo scambiarci da qui dei suggerimenti sulla esecuzione del lavoro.
    ciao paolo

    1. Ciao Paolo,
      ottima idea quella di condividere il tuo inizio progetti.

      Mauro

    • Owen on 8 gennaio 2013 at 10:25
    • Reply

    Ciao ragazzi, il progetto è interessantissimo…. se posso dare un contributo, vi consiglierei di comprare all’ikea il piano girevole per formaggi (http://www.ikea.com/it/it/catalog/products/90074483/) tempo fa avevo fatto una cosa simile senza arduino, ruotando a mano il piano girevole e scattando con un controllo remoto… volendo motorizzarlo senza aver la possibilità di tagliare al laser o cnc la struttura, basta montare sull’albero motore un cilindretto in gomma (qualche guarnizione piena da idraulica può andar bene) e creare con pezzi di mdf una struttura che tenga il motore appoggiato al piatto; per farlo ancora + funzionale si potrebbe mettere del nastro gommato su tutto il diametro del piatto per aumentare l’attrito tra piatto girevole e puleggia!

    Colgo l’occasione per chiedere una info a Mauro… lo schema elettrico ed lo sketch hanno + o – lo stesso funzionamento di quello del dolly giusto? nel senso che posso poi impostarre num passi > num scatti > delay e avvio…. sto utilizzando questi 2 tutorial per un progetto che poi vorrei mostrarti!

    Owen

    1. Ciao Owen,
      fantastico suggerimento, grazie 1000.
      Si gli sketch sono simili anche se quello del Dolly Project l’ho scritto io e questo del Photo Lazy ho riportato quello dell’autore.

      Mauro

    • Alberto on 30 aprile 2013 at 10:18
    • Reply

    Ciao Mauro,

    innanzitutto grazie per l’articolo, molto utile e interessante! Purtroppo io non porterò alcun contributo al progetto, ma ti chiederò solo delle delucidazioni.
    Volevo chiederti: vorrei cimentarmi nella costruzione di questo piano rotante, perché (in quanto fotografo) mi sarà molto utile per due progetti che sto per iniziare… il punto è che non mi è parso di leggere nulla riguardo ai “chili” che questa piattaforma riuscirà a far ruotare. Immagino di riuscire a far ruotare tranquillamente una scarpa, ma se il mio cliente mi chiedesse la foto di un manichino, riuscirei a farlo rotare tranquillamente?

    Grazie anticipatamente per la risposta e.. continua così!
    Alberto

    1. Ciao Alberto,
      questo progetto è pensato per piccoli pesi, diciamo inferiori al Kg.
      Se vuoi spostare pesi maggiori dovrai calcolare la coppia necessaria alla rotazione e l’influenza della trasmissione per ottenere la rotazione dell’oggetto di tuo interesse.

      Anche il tuo contributo è prezioso.

      Mauro

    • pietro on 1 luglio 2016 at 06:59
    • Reply

    buon giorno ciao io vorrei realizzare un piano girevole e un piano inclinabile tipo le ip cam che hanno la base girevole e l occhio che ruota per una go pro ho due motorini di un vecchio lettore cd ho anche arduino se puoi realizzare il tutto puoi anche pubblicarlo suo tuo sito
    il movimento dovrebbe esssere comandato da un telecomando e il movimento rotativo libero cio se premo il tasto lui gira se lo lascio lui si ferma mentre il movimento inclinato fare 0 -45 gradi 0 90 gradi se potresti aiutarmi te ne saro grato grazie mille

    1. Ciao Pietro,
      se mi chiedi un progetto su commissione puoi seguire le istruzioni descritte nella pagina “collabora al blog”.
      Se ti interessa realizzarlo da solo ti consiglio di leggere bene gli articoli dedicati ai motori passo-passo ed al loro controllo.
      Non conosco il materiale che hai a disposizione e dalla descrizione dubito possieda sufficiente coppia per realizzare quello che desideri.

    • Federico on 24 agosto 2016 at 15:49
    • Reply

    scusate l’ignoranza ma è solo per togliermi questo dubbio… che differenza c’è tra questo progetto e simili che trovo in giro per il web e un semplice piatto con sotto al centro un motore che lo fa ruotare?

    1. Ciao Federico,
      questo progetto è stato realizzato da un appassionato di fotografia per i suoi progetti.
      Non escludo che altri, prima o dopo la pubblicazione di questo progetto, ne possano aver realizzati di simili o migliori.

  1. […] progetto Photo Lazy Susan è già stato ogetto di un mio articolo di del dicembre 2012: Photo lazy susan che mi fu suggerito da un appassionato di fotografia ed […]

Lascia un commento

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.