Go Down

Topic: foto a 360 gradi con arduino (Read 3707 times) previous topic - next topic

lesto

bhe si usa lo screen di un altro colore :) in teoria è proprio per questo che esiste verde e blu
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

zoomx

Prendere spunto da una montatura altazimutale per telescopi?

trillius

Ho modificato il disegno originale ruotando il motore di 180° per ottenere un piano di lavoro libero, il diametro del piano è di 40 cm, allego render progetto. Ho fatto l'ordine del taglio laser, il materiale scelto è un multistrato in pioppo da 6mm.
Adesso vorrei fare l'ordine da http://www.robot-italy.com/ per la parte elettronica e mi piacerebbe avere un vostro parere. Dalla lista indicata da Mauro Alfieri  http://www.mauroalfieri.it/elettronica/photo-lazy-susan-foto-360-gradi.html di seguito indico quello che andrei a prendere io:
- Arduino Uno rev3
- Stepper Motor Unipolar Nema 23 angolo step 1.8°- Corrente nominale: 2A/Fase - Tensione nominale: 3V
- LCD Display 16x2 - RGB - Positivo
Per comandare il motore sono indeciso se utilizzare il Big Easy Driver o Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0


trillius

#18
Jun 13, 2013, 05:58 pm Last Edit: Jun 13, 2013, 06:02 pm by trillius Reason: 1
Ho finalmente assemblato la piastra, ora mi dedicherò alla meccanica e ad arduino e qui avrò bisogno del vostro aiuto.
Per procedere con il progetto di Mauro Alfieri ho a disposizione un motore NEMA-23 Bipolar Stepper Coil Resistance 1.8 Ohms Rated Current 2.2A e come controller ho L6470 Stepper Driver Breakout 3A, 8/45 v, qualcuno mi può indicare come collegare il motore al controller e come collegare il controller ad Arduino? Per seguire questo schema

Questo il controller

lesto

sul sito sparkfun sicuramente nei commenti qualcuno avrà linkato come fare, con tanto di librerie e sketch di esempio. Sicuro al 80% :) (cmq dacci almeno il link alla scheda, da una forto cosa possiamo immagiare?)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie


lesto

quello è il datascheet delcomponente, e abbiamo fato un passo in avanti, ora ci interessa capire sul PCB quali pin dobbiamo usare. Quindi ci serve lo schema del PCB, seguire le pistefino all'IC, o meglio, dall'ICvedere dove vanno a finire.

Ovvimante i pin che interessano dell'IC dipendono da come e cosa vuoi pilotare
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

gpb01

Lesto, il prodotto è questo qui : https://www.sparkfun.com/products/10859 e, come per tutti i prodotti SparkFun, è ben documentato e c'è anche uno sketch d'esempio ... ;)

E' che siamo alle solite ... sembra che chi ha bisogno d'aiuto ... abbia paura a fornire tutte le informazioni ... mah ...  :smiley-roll:

Guglielmo
Search is Your friend ... or I am Your enemy !

zoomx


E' che siamo alle solite ... sembra che chi ha bisogno d'aiuto ... abbia paura a fornire tutte le informazioni ... mah ...  :smiley-roll:


Su questo argomento ci si potrebbe scrivere un libro.

Etemenanki



E' che siamo alle solite ... sembra che chi ha bisogno d'aiuto ... abbia paura a fornire tutte le informazioni ... mah ...  :smiley-roll:

Su questo argomento ci si potrebbe scrivere un libro.


Ma no, ma no, cosa vi fa pensare che gli utenti non vi vogliano dare informazioni ? :P

Titolo del topic: AIUTO !!

UTENTE1: non mi funziona arduino

UTENTE2: Ci dai un po piu di informazioni ?

UTENTE1: non va il motore

UTENTE2: quale motore ?

UTENTE1: quello che muove il carrello

UTENTE2: quale carrello ?

UTENTE1: Quello della macchina

UTENTE2: ma a cosa e' collegato, e a che serve ?

UTENTE1: e' collegato ad arduino e serve a spostare i pezzi

UTENTE2: Ci posti uno schema ?

UTENTE1: non ce l'ho uno schema

UTENTE2: Ci posti una foto dell'apparecchio con le connessioni ?

UTENTE1:

UTENTE2: AAARGH !! ... ehm ... ho capito dov'e' il problema ... ti si e' fuso il cervello, devi sostituirlo :P


(scusate, non ho resistito :P XD)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

trillius

Provo a dare maggiori dettagli sul quello che sto cercando di realizzare, devo controllare il seguente step motor http://www.phidgets.com/documentation/Phidgets/3307_0_Datasheet.pdf con il controller SparkFun https://www.sparkfun.com/products/10859 l'obbiettivo è quello di programmare una rotazione automatica dello step motor che farà girare una piastra di 360° con la possibilità di decidere fare un certo numero di intervalli durante questa rotazione e comandare una macchina fotografica che scatti ad ogni intervallo. Per fare ciò sto provando a seguire il seguente sketch

Code: [Select]

// 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");
}


Nel codice di esempio vengono utilizzati i seguenti pin
int directionPin = 7;
int stepPin = 6;
int speedDelay = 8;

-Non riesco a trovare i corrispondenti contatti sulla scheda del controller
-Ho capito poco o quasi nulla guardando lo sketch di esempio fornito dal fornitore http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Robotics/dsPin_example.zip
-Ho notato che spesso i motori passo passo vengono alimentati da batterie e non direttamente da trasformatori/alimentatori immagine per non avere disturbi e ottenere un ingresso più pulito

gpb01

#26
Jun 14, 2013, 11:06 am Last Edit: Jun 14, 2013, 11:09 am by gpb01 Reason: 1
... emm ... sei conscio che quella è una scheda che "parla" in SPI e che quindi come tale devi connetterla ? Ti sei STUDIATO il modulo di supporto, fornito dal fornitore, dSPIN_support.ino (... che è chiaramente indicato essere utilizzato per gestire la scheda, all'interno del dSPIN_main.ino) vedendo tutte le funzioni che detto modulo ti mette a disposizione per controllare i motori ?  :smiley-roll:

Perché altrimenti ci fai poco eh ... ]:D

Guglielmo

P.S. : Dal primo commento in testa a dSPIN_support.ino : "dSPIN_support.ino - Contains functions used to implement the high-level commands, as well as utility functions for converting real-world units (eg, steps/s) to values usable by the dsPIN controller. Also contains the specialized configuration function for the dsPIN chip and the onboard peripherals needed to use it."
Search is Your friend ... or I am Your enemy !

trillius

Cosa intendi che devo conneterla perche parla in SPI

lesto

http://lmgtfy.com/?q=arduino+spi&l=1

SPI è un protocollo di comunicazione, che è parzialemte integrato nell'arduino, ovvero alcuni pin specifici oltre alle loro normali funzioni hanno un circuito che permette di svolgere in maniera parallela ed efficiente il mantenimeto di parte del protocollo, senza pesare sulla CPU. In oltre la SPI è il protocollodi comunicazione più veloce supportato dall'arduino.

il tutto è già correttamente connesso nella SDK, quindi ora devi solo imparare ad usare la SPI (viene usata anche dalle SD e dalle wifi/etehrnet shield, oltre che alcuni sensori), e studiare il codice che ti è stato linkato. Se hai dei dubi specifici possiamo aiutarti, ma un corso sullo SPI lo trovi su intenet
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

trillius

Mi sono letto un po di materiale al riguardo della libreria SPI e ho provato a leggere i 4 file di supporto main, exemple, support, command ma devo dire che ci ho capito poco o niente.
Ho provato anche a caricare lo sketch di esempio ma nella fase di verifica si interrompe con il seguente errore:
core.a(main.cpp.o): In function `main':
D:\arduino-1.0.3\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to `setup'
D:\arduino-1.0.3\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop'

Help!

Go Up