progetto open source per avanzamenti automatici su arduino
Moderatore: Junior Admin
Re: progetto open source per avanzamenti automatici su ardui
sulla manovra a mano sono d'accordo... infatti io ho fatto un sistema con ruote dentate che disimpegnano il riduttore.
Quello dell'annuncio è reversibile però.... provato e funziona!
Quello dell'annuncio è reversibile però.... provato e funziona!
McMax
“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson
fulminato in tenera età
“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson
fulminato in tenera età
-
luk2k
- CAPO OFFICINA
- Messaggi: 8597
- Iscritto il: lun set 08, 2008 00:10
- Località: portici (na)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
Come vedi era una strada gia' intrapresa 
io avevo pensato di accoppiare la madrevite con la puleggia motrice azionata dal motoriduttore mediante due piattelli che per frizione si trascinano a vicenda, regolando la pressione fra di loro è anche possibile pensare ad un blocco meccanico per gli avanzamenti che una volta raggiunto faccia poi slittare i piattelli senza che si rompa nulla
sarebbe figo una sorta di blocco stellare così da poter regoalre + spallamenti con un unico setup..
cmq il sistema con motore pp mi attizza di + per la possibilita' di incrementare funzioni di controllo + specifiche
in ultimo se ho capito bene, usando l'encoder in questo modo in pratica si regola solo l'avanzamento in funzione del passo che si vuole ottenere ma non si puo' mai staccare la chiocciola dalla madrevite, pena perdere la sovrapponibilita' delle passate?
è come avere una scatola norton ma continuando a filettare con il metodo classico, ovvero vado avanti, spengo, inverto, rivado avanti
io pensavo di sincronizzare la partenza del carro partendo da un punto noto in modo che si possa aprire la chiocciola arrivati nella gola di scarico e non fermare mai il motore
io avevo pensato di accoppiare la madrevite con la puleggia motrice azionata dal motoriduttore mediante due piattelli che per frizione si trascinano a vicenda, regolando la pressione fra di loro è anche possibile pensare ad un blocco meccanico per gli avanzamenti che una volta raggiunto faccia poi slittare i piattelli senza che si rompa nulla
sarebbe figo una sorta di blocco stellare così da poter regoalre + spallamenti con un unico setup..
cmq il sistema con motore pp mi attizza di + per la possibilita' di incrementare funzioni di controllo + specifiche
in ultimo se ho capito bene, usando l'encoder in questo modo in pratica si regola solo l'avanzamento in funzione del passo che si vuole ottenere ma non si puo' mai staccare la chiocciola dalla madrevite, pena perdere la sovrapponibilita' delle passate?
è come avere una scatola norton ma continuando a filettare con il metodo classico, ovvero vado avanti, spengo, inverto, rivado avanti
io pensavo di sincronizzare la partenza del carro partendo da un punto noto in modo che si possa aprire la chiocciola arrivati nella gola di scarico e non fermare mai il motore
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Non esistono domande stupide ma solo risposte inutili
Re: progetto open source per avanzamenti automatici su ardui
no, aspetta, con questo sistema ti scordi di filettare a meno di indexare anche la vite... ma a quel punto torniamo alla soluzione PP che è molto meglio.
Il mio intervento era solo per sensibilizzarti sul fatto che, dovendo spendere energie e tempo per sviluppare un sistema con PP e micro, tanto vale aggiungerci un encoder e usarlo come ELS così a quel punto fai tutto.
Per usarlo come avanzamento della sovrapponibilità delle passate ce ne frega il giusto, ed a quel punto puoi togliere la chiocciola e tornare a mano col carro.
Io nel mio ho sia vite che barra scanalata; quest'ultima è sempre inserita mentre la vite la posso disimpegnare dalla semi-norton.... usando la barra per l'avanzamento posso farla girare sempre nella stessa direzione e l'inversione la faccio meccanicamente dal grembiale, sia per il longitudinale che per il trasversale.
Il mio intervento era solo per sensibilizzarti sul fatto che, dovendo spendere energie e tempo per sviluppare un sistema con PP e micro, tanto vale aggiungerci un encoder e usarlo come ELS così a quel punto fai tutto.
Per usarlo come avanzamento della sovrapponibilità delle passate ce ne frega il giusto, ed a quel punto puoi togliere la chiocciola e tornare a mano col carro.
Io nel mio ho sia vite che barra scanalata; quest'ultima è sempre inserita mentre la vite la posso disimpegnare dalla semi-norton.... usando la barra per l'avanzamento posso farla girare sempre nella stessa direzione e l'inversione la faccio meccanicamente dal grembiale, sia per il longitudinale che per il trasversale.
McMax
“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson
fulminato in tenera età
“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson
fulminato in tenera età
-
luk2k
- CAPO OFFICINA
- Messaggi: 8597
- Iscritto il: lun set 08, 2008 00:10
- Località: portici (na)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
aspe' non ci stiamo capendo 
io son partito dal voler fare solo gli avanzamenti e il sistema di con il motoriduttore e il variatore di giri gia' bastava ed avanzava
poi da cosa nasce cosa e ho deciso di provare la strada dei pp per la possibilita' di poter avere un controllo sul processo
ovviamente come hai gia' detto, potendo determinare l'avanzamento significa poter determinare anche un qualsiasi passo
rimane solo da sincronizzare il movimento con il mandrino
a me piaceva molto l'idea di poter staccare la chiocciola, in questo modo si puo' filettare anche a velocita' elevata perchè non si rischia che l'inerzia del motore faccia andare a sbattere l'utensile da qualche parte...
io son partito dal voler fare solo gli avanzamenti e il sistema di con il motoriduttore e il variatore di giri gia' bastava ed avanzava
poi da cosa nasce cosa e ho deciso di provare la strada dei pp per la possibilita' di poter avere un controllo sul processo
ovviamente come hai gia' detto, potendo determinare l'avanzamento significa poter determinare anche un qualsiasi passo
rimane solo da sincronizzare il movimento con il mandrino
a me piaceva molto l'idea di poter staccare la chiocciola, in questo modo si puo' filettare anche a velocita' elevata perchè non si rischia che l'inerzia del motore faccia andare a sbattere l'utensile da qualche parte...
Non esistono domande stupide ma solo risposte inutili
Re: progetto open source per avanzamenti automatici su ardui
il discorso dell'apertura della chiocciola è il medesimo sia con gli ingranaggi che con la vite elettronica. Vale sempre la regola che se il passo della vite che stai facendo è uguale o un sottomultiplo del passo della vite madre puoi aprire e chiudere quando vuoi; diversamente va fatto girare il mandrino al contrario.
Ad esempio, se la vite del tornio è da 6mm, puoi aprire e chiudere la chiocciola a piacimento con i passi 0,75; 1,5; 3; 6
Ad esempio, se la vite del tornio è da 6mm, puoi aprire e chiudere la chiocciola a piacimento con i passi 0,75; 1,5; 3; 6
McMax
“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson
fulminato in tenera età
“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson
fulminato in tenera età
-
luk2k
- CAPO OFFICINA
- Messaggi: 8597
- Iscritto il: lun set 08, 2008 00:10
- Località: portici (na)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
okok ma ribadisco, a me piaerebbe poter aprire la chiocciola a piacere e poi riattaccarla a volo, si risparmia tantissimo tempo che non ad invertire il motore e tutto il resto
vero che se non facciamo produzione, poco male...
ma secondo me con un piccolo accorgimento si puo' fare ;)
vero che se non facciamo produzione, poco male...
ma secondo me con un piccolo accorgimento si puo' fare ;)
Non esistono domande stupide ma solo risposte inutili
Re: progetto open source per avanzamenti automatici su ardui
- onorino
- CAPO OFFICINA
- Messaggi: 41551
- Iscritto il: mar mar 23, 2010 22:18
- Località: Artena(Roma)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
potete usare un ingranaggio , tipo il pignone della bici , in avanti ingrana , poi con il volantino tornate indietro , con il tipico rumore da bici , cosi luk unisci le due passioni 
la democrazia funziona fino a quando fate quello che dico io!
Mc Mazzafrusten meccanico mannaro
il riparatore di riparazioni
er robin hood de no'antri
tagliatore scelto di puntarelle
http://www.lievitoedintorni.it/phpbb/index.php
Mc Mazzafrusten meccanico mannaro
il riparatore di riparazioni
er robin hood de no'antri
tagliatore scelto di puntarelle
http://www.lievitoedintorni.it/phpbb/index.php
Re: progetto open source per avanzamenti automatici su ardui
Ecco ! ci mancavano i ciclisti...
- onorino
- CAPO OFFICINA
- Messaggi: 41551
- Iscritto il: mar mar 23, 2010 22:18
- Località: Artena(Roma)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
la democrazia funziona fino a quando fate quello che dico io!
Mc Mazzafrusten meccanico mannaro
il riparatore di riparazioni
er robin hood de no'antri
tagliatore scelto di puntarelle
http://www.lievitoedintorni.it/phpbb/index.php
Mc Mazzafrusten meccanico mannaro
il riparatore di riparazioni
er robin hood de no'antri
tagliatore scelto di puntarelle
http://www.lievitoedintorni.it/phpbb/index.php
-
luk2k
- CAPO OFFICINA
- Messaggi: 8597
- Iscritto il: lun set 08, 2008 00:10
- Località: portici (na)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
azz mi hai dato un'ideona! ma per tutta un'altra cosa... 
Non esistono domande stupide ma solo risposte inutili
-
luk2k
- CAPO OFFICINA
- Messaggi: 8597
- Iscritto il: lun set 08, 2008 00:10
- Località: portici (na)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
// librerie da includere
#include <AccelStepper.h>
#include "Timer.h"
// Define the stepper and the pins it will use
AccelStepper X_AXIS(1, 9, 7);
//AccelStepper Y_AXIS(2, 10, 8); // predisposizione per secondo driver
// Define input button pins
// IN 0 RESERVED
// IN 1 RESERVED X AXIS
// IN 2 RESERVED Y AXIS
#define MAIN_ENABLE_PIN 2 // pulsante di abilitazione principale
#define RIGHT_PIN 3 // pulsante selezione direzione dx
#define LEFT_PIN 4 // pulsante selezione direzione sx
#define JOI_ENABLE_BUTTON 5 // pulsante abilitazione joi
#define HOLD_STATUS_PIN 6 // pulsante abilitazione velocita' costante
// IN 7 RESERVED DIR X
// IN 8 RESERVED DIR Y
// IN 9 RESERVED STEP X
// IN 10 RESERVED STEP Y
#define MAIN_ENABLE_PIN_OUT 11 // abilitazione principale
#define JOI_ENABLE_PIN_OUT 12 // led di stato joi abilitato
#define HOLD_STATUS_PIN_OUT 13 // led di stato velocita' costante abilitata
// Define our analog pot input pin
#define SPEED_PIN A0 // riferimento analogico velocita' asse x
#define SPEED_PIN_2 A1 // riferimento analogico velocita' asse x
// Define our maximum and minimum speed in steps per second (scale pot to these)
#define MAX_SPEED 1300
#define MIN_SPEED 10
// VARIABLES
int MAIN_ENABLE = 0;
int JOI_ENABLE_STATUS = 0;
int HOLD_STATUS = 0;
int CENTRAL_ISTERESIS = 498;
int BL_ENABLE = 0;
static float current_speed = 0.0; // HOLD_STATUSs current motor speed in steps/second
static char sign = 1; // HOLD_STATUSs -1, 1 or 0 to turn the motor on/off and control direction
static int analog_value = 0; // HOLD_STATUSs raw analog value.
static int analog_value_2 = 0; // HOLD_STATUSs raw analog value.
Timer t;
void setup() {
// The only AccelStepper value we have to set here is the max speeed, which is higher than we'll ever go
X_AXIS.setMaxSpeed(1500.0);
// Set up the button inputs, with pullups
pinMode(LEFT_PIN, INPUT);
pinMode(MAIN_ENABLE_PIN, INPUT);
pinMode(RIGHT_PIN, INPUT);
pinMode(HOLD_STATUS_PIN, INPUT);
pinMode(JOI_ENABLE_BUTTON, INPUT);
pinMode(JOI_ENABLE_PIN_OUT, OUTPUT);
pinMode(MAIN_ENABLE_PIN_OUT, OUTPUT);
pinMode(HOLD_STATUS_PIN_OUT, OUTPUT);
t.every(250, CLOCK_CICLE);
digitalWrite(MAIN_ENABLE_PIN_OUT, HIGH);
}
void loop() {
if (digitalRead(MAIN_ENABLE_PIN) == 0) { // verifica main enable, resetta a 0 lo stato delle altre modalita'
MAIN_ENABLE = ! MAIN_ENABLE;
digitalWrite (MAIN_ENABLE_PIN_OUT, ! MAIN_ENABLE);
if (MAIN_ENABLE == 0 ) {
HOLD_STATUS = 0;
JOI_ENABLE_STATUS = 0;
}
delay (250);
}
if (MAIN_ENABLE == 0) {
blink_if_not_enable();
}
if (digitalRead(HOLD_STATUS_PIN) == 0) { // abilitazione della modalita' velocita' costante
if (MAIN_ENABLE == 1) {
HOLD_STATUS = ! HOLD_STATUS;
JOI_ENABLE_STATUS = 0;
digitalWrite (HOLD_STATUS_PIN_OUT, HOLD_STATUS);
delay (250);
if (HOLD_STATUS == 1) {
X_AXIS.stop();
}
}
}
if (digitalRead(JOI_ENABLE_BUTTON) == 0) { // abilitazione della modalita' joi
if (MAIN_ENABLE == 1) {
JOI_ENABLE_STATUS = ! JOI_ENABLE_STATUS;
HOLD_STATUS = 0;
digitalWrite (JOI_ENABLE_PIN_OUT, JOI_ENABLE_STATUS);
delay (250);
}
}
if (digitalRead(LEFT_PIN) == 0) { // rotazione sinistra
if (HOLD_STATUS == 0){
sign = 1;
delay (250);
}
}
if (digitalRead(RIGHT_PIN) == 0) { // rotazione destra
if (HOLD_STATUS == 0){
sign = -1;
delay (250);
}
}
// allineamento degli atati ai led fisici
digitalWrite (HOLD_STATUS_PIN_OUT, HOLD_STATUS);
digitalWrite (JOI_ENABLE_PIN_OUT, JOI_ENABLE_STATUS);
// ciclo di esclusione selettiva delle modalita'
if (HOLD_STATUS == 1){
pot_semplice();
}
if (JOI_ENABLE_STATUS == 1){
pot_joi();
}
}
void CLOCK_CICLE () { // legge ogni 250mS il valore dei potenziometri
analog_value = analogRead(SPEED_PIN);
analog_value_2 = analogRead(SPEED_PIN_2);
}
void blink_if_not_enable (){ // ciclo per far lampeggiare i led di stato se l'enable principale è a 0
delay (125);
BL_ENABLE = ! BL_ENABLE;
digitalWrite(HOLD_STATUS_PIN_OUT, BL_ENABLE);
digitalWrite(JOI_ENABLE_PIN_OUT, BL_ENABLE);
delay (125);
}
void pot_joi () { // modalita' joi
if (analog_value > CENTRAL_ISTERESIS - 15 && analog_value < CENTRAL_ISTERESIS + 15) {
current_speed = 0;
}
else {
current_speed = map(analog_value, 0,1023, MAX_SPEED, -MAX_SPEED);
}
X_AXIS.run();
X_AXIS.setSpeed(current_speed);
X_AXIS.runSpeed();
t.update();
}
void pot_semplice() { // modalita' velocita' costante
current_speed = sign * map(analog_value_2, 0,1023, MAX_SPEED, MIN_SPEED);
X_AXIS.run();
X_AXIS.setSpeed(current_speed);
X_AXIS.runSpeed();
t.update();
}
#include <AccelStepper.h>
#include "Timer.h"
// Define the stepper and the pins it will use
AccelStepper X_AXIS(1, 9, 7);
//AccelStepper Y_AXIS(2, 10, 8); // predisposizione per secondo driver
// Define input button pins
// IN 0 RESERVED
// IN 1 RESERVED X AXIS
// IN 2 RESERVED Y AXIS
#define MAIN_ENABLE_PIN 2 // pulsante di abilitazione principale
#define RIGHT_PIN 3 // pulsante selezione direzione dx
#define LEFT_PIN 4 // pulsante selezione direzione sx
#define JOI_ENABLE_BUTTON 5 // pulsante abilitazione joi
#define HOLD_STATUS_PIN 6 // pulsante abilitazione velocita' costante
// IN 7 RESERVED DIR X
// IN 8 RESERVED DIR Y
// IN 9 RESERVED STEP X
// IN 10 RESERVED STEP Y
#define MAIN_ENABLE_PIN_OUT 11 // abilitazione principale
#define JOI_ENABLE_PIN_OUT 12 // led di stato joi abilitato
#define HOLD_STATUS_PIN_OUT 13 // led di stato velocita' costante abilitata
// Define our analog pot input pin
#define SPEED_PIN A0 // riferimento analogico velocita' asse x
#define SPEED_PIN_2 A1 // riferimento analogico velocita' asse x
// Define our maximum and minimum speed in steps per second (scale pot to these)
#define MAX_SPEED 1300
#define MIN_SPEED 10
// VARIABLES
int MAIN_ENABLE = 0;
int JOI_ENABLE_STATUS = 0;
int HOLD_STATUS = 0;
int CENTRAL_ISTERESIS = 498;
int BL_ENABLE = 0;
static float current_speed = 0.0; // HOLD_STATUSs current motor speed in steps/second
static char sign = 1; // HOLD_STATUSs -1, 1 or 0 to turn the motor on/off and control direction
static int analog_value = 0; // HOLD_STATUSs raw analog value.
static int analog_value_2 = 0; // HOLD_STATUSs raw analog value.
Timer t;
void setup() {
// The only AccelStepper value we have to set here is the max speeed, which is higher than we'll ever go
X_AXIS.setMaxSpeed(1500.0);
// Set up the button inputs, with pullups
pinMode(LEFT_PIN, INPUT);
pinMode(MAIN_ENABLE_PIN, INPUT);
pinMode(RIGHT_PIN, INPUT);
pinMode(HOLD_STATUS_PIN, INPUT);
pinMode(JOI_ENABLE_BUTTON, INPUT);
pinMode(JOI_ENABLE_PIN_OUT, OUTPUT);
pinMode(MAIN_ENABLE_PIN_OUT, OUTPUT);
pinMode(HOLD_STATUS_PIN_OUT, OUTPUT);
t.every(250, CLOCK_CICLE);
digitalWrite(MAIN_ENABLE_PIN_OUT, HIGH);
}
void loop() {
if (digitalRead(MAIN_ENABLE_PIN) == 0) { // verifica main enable, resetta a 0 lo stato delle altre modalita'
MAIN_ENABLE = ! MAIN_ENABLE;
digitalWrite (MAIN_ENABLE_PIN_OUT, ! MAIN_ENABLE);
if (MAIN_ENABLE == 0 ) {
HOLD_STATUS = 0;
JOI_ENABLE_STATUS = 0;
}
delay (250);
}
if (MAIN_ENABLE == 0) {
blink_if_not_enable();
}
if (digitalRead(HOLD_STATUS_PIN) == 0) { // abilitazione della modalita' velocita' costante
if (MAIN_ENABLE == 1) {
HOLD_STATUS = ! HOLD_STATUS;
JOI_ENABLE_STATUS = 0;
digitalWrite (HOLD_STATUS_PIN_OUT, HOLD_STATUS);
delay (250);
if (HOLD_STATUS == 1) {
X_AXIS.stop();
}
}
}
if (digitalRead(JOI_ENABLE_BUTTON) == 0) { // abilitazione della modalita' joi
if (MAIN_ENABLE == 1) {
JOI_ENABLE_STATUS = ! JOI_ENABLE_STATUS;
HOLD_STATUS = 0;
digitalWrite (JOI_ENABLE_PIN_OUT, JOI_ENABLE_STATUS);
delay (250);
}
}
if (digitalRead(LEFT_PIN) == 0) { // rotazione sinistra
if (HOLD_STATUS == 0){
sign = 1;
delay (250);
}
}
if (digitalRead(RIGHT_PIN) == 0) { // rotazione destra
if (HOLD_STATUS == 0){
sign = -1;
delay (250);
}
}
// allineamento degli atati ai led fisici
digitalWrite (HOLD_STATUS_PIN_OUT, HOLD_STATUS);
digitalWrite (JOI_ENABLE_PIN_OUT, JOI_ENABLE_STATUS);
// ciclo di esclusione selettiva delle modalita'
if (HOLD_STATUS == 1){
pot_semplice();
}
if (JOI_ENABLE_STATUS == 1){
pot_joi();
}
}
void CLOCK_CICLE () { // legge ogni 250mS il valore dei potenziometri
analog_value = analogRead(SPEED_PIN);
analog_value_2 = analogRead(SPEED_PIN_2);
}
void blink_if_not_enable (){ // ciclo per far lampeggiare i led di stato se l'enable principale è a 0
delay (125);
BL_ENABLE = ! BL_ENABLE;
digitalWrite(HOLD_STATUS_PIN_OUT, BL_ENABLE);
digitalWrite(JOI_ENABLE_PIN_OUT, BL_ENABLE);
delay (125);
}
void pot_joi () { // modalita' joi
if (analog_value > CENTRAL_ISTERESIS - 15 && analog_value < CENTRAL_ISTERESIS + 15) {
current_speed = 0;
}
else {
current_speed = map(analog_value, 0,1023, MAX_SPEED, -MAX_SPEED);
}
X_AXIS.run();
X_AXIS.setSpeed(current_speed);
X_AXIS.runSpeed();
t.update();
}
void pot_semplice() { // modalita' velocita' costante
current_speed = sign * map(analog_value_2, 0,1023, MAX_SPEED, MIN_SPEED);
X_AXIS.run();
X_AXIS.setSpeed(current_speed);
X_AXIS.runSpeed();
t.update();
}
Non esistono domande stupide ma solo risposte inutili
Re: progetto open source per avanzamenti automatici su ardui
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
-
luk2k
- CAPO OFFICINA
- Messaggi: 8597
- Iscritto il: lun set 08, 2008 00:10
- Località: portici (na)
- Contatta:
Re: progetto open source per avanzamenti automatici su ardui
yrag, lo so... fa un po' c...re ma è il codice attuale 
avendo scopiazzato in giro è una mezza accozzaglia di roba, pero' funziona
quando avro' le idee + chiare cerchero' di ottimizzarlo, eliminare le parti ridondanti e magari commentarlo decentemente
detto questo ora cercherei di capire come muoverci, fino a questo punto sta tutto su un arduino 2009 ma ho gia' finito tutti gli ingressi digitali e non sono nemmeno riuscito a portar fuori tutti gli stati ma ho previsto 2 assi...
da qui in poi penso si debba iniziare a ragionare su un arduino mega che ha ben 50 ingressi digitali contro i 13 della board classica
avendo scopiazzato in giro è una mezza accozzaglia di roba, pero' funziona
quando avro' le idee + chiare cerchero' di ottimizzarlo, eliminare le parti ridondanti e magari commentarlo decentemente
detto questo ora cercherei di capire come muoverci, fino a questo punto sta tutto su un arduino 2009 ma ho gia' finito tutti gli ingressi digitali e non sono nemmeno riuscito a portar fuori tutti gli stati ma ho previsto 2 assi...
da qui in poi penso si debba iniziare a ragionare su un arduino mega che ha ben 50 ingressi digitali contro i 13 della board classica
Non esistono domande stupide ma solo risposte inutili