Buona serata a tutti!
Slider per fotografia con Nema 17 - aiuto per codice -
-
- Newbie
- Messaggi: 15
- Iscritto il: venerdì 7 giugno 2019, 11:39
- Località: Roma
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Buona serata a tutti!
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
-
- Senior
- Messaggi: 730
- Iscritto il: venerdì 29 maggio 2009, 8:43
- Località: Ferrara
- Contatta:
Re: Slider per fotografia con Nema 17 - aiuto per codice -
E' sicuramente un bell' oggetto. Ma a cosa serve in particolare ? HO capito che serve a spostare una macchina fotografica, ma per quale motivo ?
More Maiorum
-
- Newbie
- Messaggi: 15
- Iscritto il: venerdì 7 giugno 2019, 11:39
- Località: Roma
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Ci monti sopra una Cam (nel mio caso GoPro), setti la quantità di spostamento, la velocità e poi avvii.
Lo userò per fare i video in studio, mentre suoniamo (in realtà sono solo io e la cantante, un Duo). Per esempio può fare una ripresa lineare lenta che scorre davanti al manico della chitarra, o della persona o un oggetto, un esterna...oppure inclinando lo slider puoi fare una ripresa che parta dal basso verso l'alto o viceversa...tutto quello che vuoi, ripreso in quel modo. Nasce come Slider per Time Lapse, lo si usa piu che altro per quello.
Lo userò per fare i video in studio, mentre suoniamo (in realtà sono solo io e la cantante, un Duo). Per esempio può fare una ripresa lineare lenta che scorre davanti al manico della chitarra, o della persona o un oggetto, un esterna...oppure inclinando lo slider puoi fare una ripresa che parta dal basso verso l'alto o viceversa...tutto quello che vuoi, ripreso in quel modo. Nasce come Slider per Time Lapse, lo si usa piu che altro per quello.
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Hai commesso diverse infrazioni, alla prossima questo argomento verrà chiuso e cestinato.
-
- Newbie
- Messaggi: 15
- Iscritto il: venerdì 7 giugno 2019, 11:39
- Località: Roma
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Chiedo scusa per non aver letto correttamente il regolamento.
Grazie e buona serata a tutti.
-
- Newbie
- Messaggi: 15
- Iscritto il: venerdì 7 giugno 2019, 11:39
- Località: Roma
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Buongiorno, sono riuscito ad inserire correttamente le indicazioni di Billielliot e hellfire39 (grazie ragazzi).
In fase di collaudo mettendo lo slider in verticale, il motore non riusciva a tirare su il carrello (con il peso degli accessori realizzati) e quindi perdeva passi. Ho pensato subito di sostituire una delle due pulegge, quella sul motore (40T), con una da 20T. Il problema si è risolto ma la distanza di spostamento era ovviamente dimezzata. Cercando in rete ho trovato indicazioni circa un'altra variabile da poter usare e cioè:
long calculatedmove=(z*XL); che ho adattato a long calculatedmove=(z*40L);. Adesso copre tutta la distanza, come se avesse entrambe le pulegge da 40T e tira su il carrello senza nessuna fatica (in realtà non ho capito la variabile ma sono ugualmente contento di essere riuscito ad inserirla bene ed adattarla.
Nelle foto, il particolare costruttivo del carrello.
Non è essenziale, ma vorrei provare a mettere dei fine corsa, per precauzione, tuttavia non sono ancora riuscito a capire se serva una libreria particolare o se devo fare riferimento sempre ad accelStepper (magari mi è sfuggito qualcosa). Tutte le prove che ho fatto hanno solo generato errori. Cercherò comunque di riuscirci in autonomia.
Questo il codice finale, magari può servire a qualcuno, modificato ed adattato per un carrello lungo 90cm, Nema17 0,4A-1.8°x step, barre in acciaio da D8mm-L1000mm, puleggia motore da 20T e puleggia di rinvio da 40T, con segnalazione LED pre avvio:
In fase di collaudo mettendo lo slider in verticale, il motore non riusciva a tirare su il carrello (con il peso degli accessori realizzati) e quindi perdeva passi. Ho pensato subito di sostituire una delle due pulegge, quella sul motore (40T), con una da 20T. Il problema si è risolto ma la distanza di spostamento era ovviamente dimezzata. Cercando in rete ho trovato indicazioni circa un'altra variabile da poter usare e cioè:
long calculatedmove=(z*XL); che ho adattato a long calculatedmove=(z*40L);. Adesso copre tutta la distanza, come se avesse entrambe le pulegge da 40T e tira su il carrello senza nessuna fatica (in realtà non ho capito la variabile ma sono ugualmente contento di essere riuscito ad inserirla bene ed adattarla.
Nelle foto, il particolare costruttivo del carrello.
Non è essenziale, ma vorrei provare a mettere dei fine corsa, per precauzione, tuttavia non sono ancora riuscito a capire se serva una libreria particolare o se devo fare riferimento sempre ad accelStepper (magari mi è sfuggito qualcosa). Tutte le prove che ho fatto hanno solo generato errori. Cercherò comunque di riuscirci in autonomia.
Questo il codice finale, magari può servire a qualcuno, modificato ed adattato per un carrello lungo 90cm, Nema17 0,4A-1.8°x step, barre in acciaio da D8mm-L1000mm, puleggia motore da 20T e puleggia di rinvio da 40T, con segnalazione LED pre avvio:
Codice: Seleziona tutto
#include "AccelStepper.h" // AccelStepper Library
#include <Keypad.h> // Keypad Library
#include "U8glib.h" // U8glib for Nokia LCD
int step_speed = 10; // Speed of Stepper motor (higher = slower)
int sensorPin = A2; // select the input pin for the potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
int val = 0;
// Variables to hold entered number on Keypad
volatile int firstnumber=99; // used to tell how many numbers were entered on keypad
volatile int secondnumber=99;
volatile int thirdnumber=99;
// Variables to hold Distance and CurrentPosition
int keyfullnumber=0; // used to store the final calculated distance value
String currentposition = ""; // Used for display on Nokia LCD
// Keypad Setup
const byte ROWS = 4; // Four Rows
const byte COLS = 4; // Four Columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {22, 24, 26, 28}; // Arduino pins connected to the row pins of the keypad
byte colPins[COLS] = {31, 33, 35, 37}; // Arduino pins connected to the column pins of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Keypad Library definition
// U8glib Setup for Nokia LCD
U8GLIB_PCD8544 u8g(3, 4, 6, 5, 7); // Arduino pins connected to Nokia pins:
// CLK=3, DIN=4, CE=6, DC=5, RST=7
// AccelStepper Setup
AccelStepper stepper(1, A0, A1); // 1 = Easy Driver interface
// Arduino A0 connected to STEP pin of Easy Driver
// Arduino A1 connected to DIR pin of Easy Driver
void setup(void) {
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
// Light up the LCD backlight LEDS
#define backlight_pin 11
analogWrite(backlight_pin, 255); // Set the Backlight intensity (0=Bright, 255=Dim)
// AccelStepper speed and acceleration setup
stepper.setAcceleration(2500); // Same here
// Draw starting screen on Nokia LCD
u8g.firstPage();
do {
u8g.drawHLine(0, 15, 84);
u8g.drawVLine(50, 16, 38);
u8g.drawHLine(0, 35, 84);
u8g.setFont(u8g_font_profont11);
u8g.drawStr(0, 10, "ENTER DISTANCE");
u8g.drawStr(62, 29, "MM");
u8g.drawStr(4, 46, "cur-pos");
}
while( u8g.nextPage() );
}
void loop(){
char keypressed = keypad.getKey(); // Get value of keypad button if pressed
if (keypressed != NO_KEY){ // If keypad button pressed check which key it was
switch (keypressed) {
case '1':
checknumber(1);
break;
case '2':
checknumber(2);
break;
case '3':
checknumber(3);
break;
case '4':
checknumber(4);
break;
case '5':
checknumber(5);
break;
case '6':
checknumber(6);
break;
case '7':
checknumber(7);
break;
case '8':
checknumber(8);
break;
case '9':
checknumber(9);
break;
case '0':
checknumber(0);
break;
case '*':
deletenumber();
break;
case '#':
calculatedistance();
break;
}
}
}
void checknumber(int x){
if (firstnumber == 99) { // Check if this is the first number entered
firstnumber=x;
String displayvalue = String(firstnumber); // Transform int to a string for display
drawnokiascreen(displayvalue); // Redraw Nokia lcd
} else {
if (secondnumber == 99) { // Check if it's the second number entered
secondnumber=x;
String displayvalue = (String(firstnumber) + String(secondnumber));
drawnokiascreen(displayvalue);
} else { // It must be the 3rd number entered
thirdnumber=x;
String displayvalue = (String(firstnumber) + String(secondnumber) + String(thirdnumber));
drawnokiascreen(displayvalue);
}
}
}
void deletenumber() { // Used to backspace entered numbers
if (thirdnumber !=99) {
String displayvalue = (String(firstnumber) + String(secondnumber));
drawnokiascreen(displayvalue);
thirdnumber=99;
}
else {
if (secondnumber !=99) {
String displayvalue = String(firstnumber);
drawnokiascreen(displayvalue);
secondnumber=99;
}
else {
if (firstnumber !=99) {
String displayvalue = "";
drawnokiascreen(displayvalue);
firstnumber=99;
}
}
}
}
void calculatedistance() { // Used to create a full number from entered numbers
if (thirdnumber == 99 && secondnumber == 99 && firstnumber != 99) {
keyfullnumber=firstnumber;
movestepper(keyfullnumber);
}
if (secondnumber != 99 && thirdnumber == 99) {
keyfullnumber=(firstnumber*10)+secondnumber;
movestepper(keyfullnumber);
}
if (thirdnumber != 99) {
keyfullnumber=(firstnumber*100)+(secondnumber*10)+thirdnumber;
movestepper(keyfullnumber);
}
resetnumbers(); // Reset numbers to get ready for new entry
}
void movestepper(int z) { // Move the stepper
// Aggiungo il controllo velocita'
// read the sensor value:
int sensorReading = analogRead(A2); //uso l'ingresso ADC A2. A0 e A1 sono occupati dall'Easy Driver
// map it to a range from 100 to 3000: //modifico il valore massimo per adeguarmi allo sketch dell'Americano
int motorSpeed = map(sensorReading, 0, 1023, 100, 3000); //Potenziometro al minimo = 100 Al massimo = 3000
// set the motor speed:
if (motorSpeed > 0) { // se il potenziometro NON e' al minimo
stepper.setMaxSpeed(motorSpeed); // cambio la velocita' del motore. Not to fast or you will have missed steps
}
long calculatedmove=(z*40L); // Calculate number of steps needed in mm
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(12,HIGH); // accendi led ROSSO
delay(100); // attendi acceso
digitalWrite(12, LOW); // spegni led ROSSO
delay(500); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(100); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
delay(100); // attendi spento
digitalWrite(13,HIGH); // accendi led VERDE
delay(1000); // attendi acceso
digitalWrite(13, LOW); // spegni led VERDE
stepper.runToNewPosition(calculatedmove);
currentposition = String(z);
u8g.firstPage();
do {
u8g.drawHLine(0, 15, 84);
u8g.drawVLine(50, 16, 38);
u8g.drawHLine(0, 35, 84);
u8g.setFont(u8g_font_profont11);
u8g.drawStr(0, 10, "ENTER DISTANCE");
u8g.drawStr(62, 29, "MM");
u8g.drawStr(4, 46, "cur-pos");
u8g.setPrintPos(57,47);
u8g.print(currentposition);
}
while( u8g.nextPage() );
}
void resetnumbers() { // Reset numbers for next entry
firstnumber=99;
secondnumber=99;
thirdnumber=99;
}
void drawnokiascreen(String y) {
u8g.firstPage();
do {
u8g.drawHLine(0, 15, 84);
u8g.drawVLine(50, 16, 38);
u8g.drawHLine(0, 35, 84);
u8g.setFont(u8g_font_profont11);
u8g.drawStr(0, 10, "ENTER DISTANCE");
u8g.setPrintPos(0,29);
u8g.print(y); // Put entered number on Nokia lcd
u8g.drawStr(62, 29, "MM");
u8g.drawStr(4, 46, "cur-pos");
u8g.setPrintPos(57,47);
u8g.print(currentposition); // Display current position of stepper
}
while( u8g.nextPage() );
}
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
- hellfire39
- God
- Messaggi: 3416
- Iscritto il: domenica 16 dicembre 2012, 9:04
- Località: AN
Re: Slider per fotografia con Nema 17 - aiuto per codice -
La variabile a cui fai riferimento sembra calcolare la conversione tra passi motore (utilizzata da AccelStepper) e i mm.
Se usi uno stepper classico da 200 passi/giro (e non utilizzi i microstep), farai un giro motore ogni 200 step.
Se le pulegge hanno un rapporto di riduzione 1:2, ogni giro motre fai mezzo giro alla puleggia del carrello.
Se la puleggia ha 40 denti ed è una T5 (ipotizzo), allora ogni giro motore fai mezzo giro della puleggia quindi 40 / 2 denti per 5 mm al dente.
Totale 20*5=100 mm ogni giro motore.
Quindi hai il rapporto 200 step = 100 mm. Se utilizzi i microstep, il rapporto di moltiplicherà di conseguenza.
Ad esempio, con step da 1/16, avresti 3200 step = 100 mm, quindi il valore della funzione sarebbe dovuto essere 32L.
------------------------
Per quello che posso vedere nella documentazione, AccellStepper non prevede l'utilizzo di ingressi per finecorsa.
Per cui bisognerebbe utilizzare degli interrupt (https://www.arduino.cc/reference/en/lan ... interrupt/) per accorgersi immediatamente dell'intervento del micro e fermare il motore.
Se usi uno stepper classico da 200 passi/giro (e non utilizzi i microstep), farai un giro motore ogni 200 step.
Se le pulegge hanno un rapporto di riduzione 1:2, ogni giro motre fai mezzo giro alla puleggia del carrello.
Se la puleggia ha 40 denti ed è una T5 (ipotizzo), allora ogni giro motore fai mezzo giro della puleggia quindi 40 / 2 denti per 5 mm al dente.
Totale 20*5=100 mm ogni giro motore.
Quindi hai il rapporto 200 step = 100 mm. Se utilizzi i microstep, il rapporto di moltiplicherà di conseguenza.
Ad esempio, con step da 1/16, avresti 3200 step = 100 mm, quindi il valore della funzione sarebbe dovuto essere 32L.
------------------------
Per quello che posso vedere nella documentazione, AccellStepper non prevede l'utilizzo di ingressi per finecorsa.
Per cui bisognerebbe utilizzare degli interrupt (https://www.arduino.cc/reference/en/lan ... interrupt/) per accorgersi immediatamente dell'intervento del micro e fermare il motore.
-
- Newbie
- Messaggi: 15
- Iscritto il: venerdì 7 giugno 2019, 11:39
- Località: Roma
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Ciao Hell, le pulegge previste originariamente dal progetto erano delle 40T GT2. Per avere piu potenza ho inserito sullo stepper una 20T GT2 e adesso tira una bomba.
Il motore ha questi dati in targa:
360°/1,8°(x step)= 200 step
quindi 200 step= un giro motore (non ho attivato i microstep)
Pignone 40T - 200 step=40mm percorsi dal carrello (20x2mm)
Con la nuova variabile che ho usato, modificata "long calculatedmove=(z*40L)", ottengo per ogni giro motore 40mm percorsi dal carrello. Se inserivo il valore 20 il carrello continuava a fare la metà del percorso impostato. Per logica mi sono detto "raddoppio la variabile e vediamo cosa succede" (....lo sò, non è a naso che si và, però un pizzico di qualcosa l'ho intuito).
Non conosco ancora il funzionamento di questa variabile. Ad esempio non sò cosa significhi Z. Ma, adesso che ho completato il progetto, ho molte cose da studiare e voglio capire il codice e se e come potrò inserire i finecorsa (che sono un optional, uno sfizio....funziona lo stesso anche senza).
Ok, dò un'occhiata al link, grazie
Che dici, è venuto bene il carrello?...ho tolto i cuscinetti i ci ho messo gli "Igus autolubrificati 8 mm - DryLin R - rj4jp 01 - 08"....molto silenziosi rispetto ai cinesi a ricircolo.
Il motore ha questi dati in targa:
360°/1,8°(x step)= 200 step
quindi 200 step= un giro motore (non ho attivato i microstep)
Pignone 40T - 200 step=40mm percorsi dal carrello (20x2mm)
Con la nuova variabile che ho usato, modificata "long calculatedmove=(z*40L)", ottengo per ogni giro motore 40mm percorsi dal carrello. Se inserivo il valore 20 il carrello continuava a fare la metà del percorso impostato. Per logica mi sono detto "raddoppio la variabile e vediamo cosa succede" (....lo sò, non è a naso che si và, però un pizzico di qualcosa l'ho intuito).
Non conosco ancora il funzionamento di questa variabile. Ad esempio non sò cosa significhi Z. Ma, adesso che ho completato il progetto, ho molte cose da studiare e voglio capire il codice e se e come potrò inserire i finecorsa (che sono un optional, uno sfizio....funziona lo stesso anche senza).
Ok, dò un'occhiata al link, grazie
Che dici, è venuto bene il carrello?...ho tolto i cuscinetti i ci ho messo gli "Igus autolubrificati 8 mm - DryLin R - rj4jp 01 - 08"....molto silenziosi rispetto ai cinesi a ricircolo.
- hellfire39
- God
- Messaggi: 3416
- Iscritto il: domenica 16 dicembre 2012, 9:04
- Località: AN
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Il carrello è venuto molto bene!
Con z, il programma intende la distanza da percorrerre in mm, che viene moltiplicata per il fattore di conversione per ottenere il numero di passi, perché AcceStepper lavora con i passi e non con i mm.
Con z, il programma intende la distanza da percorrerre in mm, che viene moltiplicata per il fattore di conversione per ottenere il numero di passi, perché AcceStepper lavora con i passi e non con i mm.
-
- Newbie
- Messaggi: 15
- Iscritto il: venerdì 7 giugno 2019, 11:39
- Località: Roma
Re: Slider per fotografia con Nema 17 - aiuto per codice -
Comunque, devo rimettermi a studiare Arduino, e credo sia meglio ricominciare dalle basi.
Sarò impegnato su due fronti: farmi una base sulle cnc, qui, e rifarmi una base su Arduino (sul forum ufficiale).
....c'ho da fare a quanto pare
Vi seguo