Pilotare due motori stepper , rispetto ad una funzione

Premetto che è un mio progetto per la tesi della maturità, vi ho allegato già la foto del modello 3d della parte meccanica che ho realizzato, manca quindi la parte software. Cosa dovrà fare questa macchina? Semplicemente un motore per asse che scorre su dei cuscinetti ed al centro dei due assi una matita . Venendo al sodo all inizio il programma chiede in input una funzione , successivamente un ciclo che mi incrementa di 1 il valore di x e lo sostituisce nella funzione per ottenere Y e il valore di x ed y sono i passi che dovrà fare per giungere al nuovo punto del tipo :
Y=2X.
X farà un passo ogni ciclo mentre Y ne dovrà fare due . Il mio problema sta che non ho ben capito dal codice riperito online la funziome moveforward() e comunque se avete ulteriori consigli per migliorare il progetto ditemi pure ! Vi ringrazio

Quale codice?

eh pensare che alla matura ho portato una incubatrice
roba con il PID, analogico, EQ-diff, ah, sti GioVini :stuck_out_tongue:

che poi, stavo pensando

se la funzione y(x) non e' hard-coded
nel codice arduino ma richiesta come stringa
allora ti tocca prima di tutto implementare
un expr_evaluator

y=expr_evaluator(string)

aggiunge un po' di complexity
dovrebbe anche capire se string in input
e' una expr in x formalmente corretta

e valutare le precedenze delle operazioni
riempire uno stack RPN, etc

il caso hard-coded e' il piu' semplice
pero' per cambiare expr tocca ricompilare il codice
e ricaricarlo su arduino

e' giusto un appunto

Grego1998:
mi incrementa di 1 il valore di x

mah, se valuti la funzione y(x) con x+=dx, dx=1
per mantenere il continuo tra i vari y(x)…y(x+dx)
ti tocca anche sviluppare una funzione interpolatrice
che fa da motion planner per i due stepper

mi sa che ci sono un sacco di cose da fare :stuck_out_tongue:

Quello che avevo in mente era per esempio prima di tutto di creare un piccolo menù tramite un tastierino ed uno schermo a due righe quello dei kit da qui si seleziona per esempio retta e quindi dovra solo inserire tramite tastierino le variabili m e q di y=mx+q non so se te l'ho semplificato

ottimo!

se puoi permetterti di selezionare il tipo
di curva (retta, parabola, etc)
e parametrizzarla da user interface

eviti di dover scrivere l'eval_expr :smiley:

elimini complexity e risparmi tempo

ora puoi passare allo step successivo
ovvero valutare se interpolare, e come
tra una coppia di punti A(x,y) B(x,y)

A:(x,f(x))
B:(x+dx, f(x+dx))

l'interpolante e' utile per il motion planner
che in ultimo pianifica gli step dei motori

Perdona la mia ignoranza ma è la prima volta che tratto motori e non so cosa intendi per interpolare

Grego1998:
e non so cosa intendi per interpolare

l'interrogatrice lavora non con motori
ma prima ancora con coppie di punti
ovvero come riempire lo spazio tra A e B

questo problema ce l'hai anche sugli LCD
se dovessi plottare una funzione

praticamente intendi che è impossibile passare per tutti i punti presenti fra A e B dato che sarebbero infiniti ma devo prendere diciamo una costante , io intendevo ( e non so se rispondo a ciò che intendi te) aumentare x sempre di un passo di motore o mezzo quelo devo vedere a quando mi corrisponde poi effettivamente sulla macchina

Grego1998:
ciò che intendi te

*tu, non *te :wink:

Grego1998:
devo vedere a quando mi corrisponde
poi effettivamente sulla macchina

esattamente, hai a che fare con passi finiti
lo stepper ragiona per "passo", "mezzo passo"
anche un "quarto di passo": passi discreti

le curve definite in R* di classe C infinito
come p.e. la retta, la parabola, l'esponenziale, etc
tutte le funzioni trigonometriche di primo ordine
(seno e coseno), hanno tutte sotto il T.di Dini

le curve definite discretizzate sono una campionatura
a passo "tal dei tali" (sopra ho usato dx) dall'insieme R*

va da se che se cerchi di riprodurre una curva continua
con un sistema discreto, dato che hai perso informazione
durante la discretizzazione, dovrai per forza interpolare
ovvero sopperire in qualche modo a quanto hai perso

purtroppo e' la regola del gioco del digitale

Non si trovano pezzi di codice già fatti per interpolare i dati?

ciao

Qui (e 2 post sotto) un modo per l'interpolazione lineare.

ciao
pippo72

Scusatemi ma mi sa ho cambiato repentinamente idea, che dovrebbe facilitare le cose , correggetemi se sbaglio.
Usare un programma come gbrl o mach3 che mi esporta direttamenti i dati ad arduino il quale li rigira ad un driver per i motori .. Almeno ho visto che questa è la soluzione adottata da molti e dovrebbe essere più completa e forse semplice(?)

Piccola premessa considerazione, nata da molti progetti che vedo per la maturità, che hanno buoni apprezzamenti dalla commissione.

E' interessante questo periodo storico, dove gli allievi portano progetti e gli insegnanti ne restano stupiti, perché della materia non ne conoscono niente :slight_smile: tra 15-20 anni sarete voi gli insegnanti e non rimarrete più stupiti, perché saprete che lavoro ha fatto lo studente, molto di suo o poco usando codice e o hardware già disponibile :wink:

Tornado più seri e cercando di aiutarti veramente, il sistema gbrl è il più adatto e il più economico,
ci sono cnc shield arduino, che contengono , clone arduino, shield cnc e driver, a meno di 20 euro, ti serviranno 2-3 motori stepper, ma se quello che vuoi fare è una specie di plotter 2 motori recuperati da vecchie stampanti.
ecco un link
http://www.ebay.it/itm/Arduino-CNC-kit-CNC-Shield-V3-0-uno-R3-4pcs-a4988-driver-GRBL-compatible-/252046431414

Altro aiuto, se nell'arduino fornito non è istallato gbrl, dovrai installarlo tu, NON ESSENDO un sorgente di codice, ma un file compilato, dovrai farlo attraverso un apposito programma, troverai informazioni su come installare hex, file compilato su arduino digitando su google "come installare grbl su arduino".

GRBL è un interprete di un linguaggio per cnc, detto GCODE. per fare muovere la macchina dovrai scrivere un programma gcode, manualmente o tramite un cam.

esempio di programma che andrai a usare

G1 (LINEA RETTA )
G2 (ARCO O CINCONFERENZA)

G1 X100 Y20 F200 (Interpolazione lineare a velocità f200 mm/min)

Comunque fidati che è la cosa più semplice, mentre mach3 richiede hardware che parte da 100 euro, e per il tuo scopo è sovradimensionato e potresti spaventarti della complessità del programma, inutile per i tuoi scopi "adatto a una cnc 3 assi che deve asportare materiale tramite mandrino"

Esatto è quello che ho intenzione di fare, possengo un arduino mega ed ho intenzione di comprare tre motori nema 17 (14 euro uno) con tre schede driver pololu(5 euro una) una vite a riciclo per asse z di 15-20 cm (5-6 euro) poi per l'asse x ed y ho messo i cuscinetti e pensavo di usare solo delle pulegge e cinghie con una molla che le tiene sempre in tensione ma non sono sicuro perchè tutti usano viti senza fine . Poi al posto di mach3 usare universal gcode sender che è molto semplificato e si collega appositamente ad arduino e penso di essere giunto a cosa volevo

l'esito del presentare il progetto pheee-go
va molto a seconda della commissione
che per meta' e composta da elementi esterni

il caso peggiore, per quanto riguarda ITIS
e' trovarsi il prof di sistemi e quello di elettronica
come membri esterni