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 !!!

Prima di inserire un commento, per favore, leggi il regolamento

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

11 pings

Skip to comment form

  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.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.