Sketch
Lo sketch completo è disponibile nel repository Github; vediamo le parti di codice principali:
#define PIN_STEP 2 #define PIN_DIR 3 [...] pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); |
Per collegare Arduino al driver, sono sufficienti 2 PIN digitali:
- PIN 2 (Arduino) -> PIN STEP (driver)
- PIN 3 (Arduino) -> PIN DIR (driver)
Entrambi i PIN vanno configurati come output.
int button = read_buttons(); if(button == btnLEFT || button == btnRIGHT) { if((actual_direction == FORWARD && button == btnLEFT) || (actual_direction == BACKWARD && button == btnRIGHT)) change_direction(); make_step(); update_lcd(); delay(200); } |
All’interno del loop() controllo se è stato premuto il pulsante SINISTRA o DESTRA dello shield. Verifico quindi se la direzione attuale è già corretta in base al pulsante premuto; in caso negativo la cambio; quindi faccio eseguire un passo al motore.
void make_step() { digitalWrite(PIN_STEP, HIGH); digitalWrite(PIN_STEP, LOW); step_count++; if(step_count == 7) step_count = 0; } |
Per far avanzare il motore di un passo, è sufficiente inviare un impulso sul PIN STEP del driver; il conteggio dei passi serve per visualizzare una barra di avanzamento sul display.
void change_direction() { if(actual_direction == FORWARD) actual_direction = BACKWARD; else actual_direction = FORWARD; digitalWrite(PIN_DIR, actual_direction); step_count = -1; } |
Per cambiare la direzione di rotazione, va cambiato lo stato logico del PIN DIR.
Funzionamento
Tutti gli elementi collegati:
e un breve filmato che mostra come funziona lo sketch:
ciao luca e complimenti per il tuo tutorial..volevo, se possibile, un tuo consiglio:ho da poco finito di assemblare un ramps 1.4 con arduino mega,ma quando ho provato afar girare i motori nema 17
due (collegati in parallelo)su 5 non girano correttamente si muovono ad impulsi.ho provato a regolare il trim del driver A4988 senza risultato.premetto che all’inzio dell’assemblaggio avevo dimenticato di montare i jumper potresti darmi qualche consiglio oppure pensi che abbia bruciato il driver? grazie
Ciao Alfredo
hai provato a invertire i drivers A4988 sulla RAMPS?
Ciao Luca,
dispongo di un motor shield arduino ufficiale r3 di arduino mega 2560 r3 e del keypad lcd shield che hai indicato sopra. Il mio problemino è: se collego gli shield singolarmente, funzionano ma se li impilo no.
Ho visto su qualche forum che si dovrebbe trattare di conflitto di pin (lo A0 per esempio è quello che trasmette il segnale del pulsante premuto). Il motor shield mi serve per controllare un motore passo passo utilizzando i pulsanti del LCD shield. Sono un neofita e chiederei qualche suggerimento, se possibile. Ringrazio e saluto
Ciao Claudio
purtroppo guardando le descrizioni dei due shield, hai conflitti sui PIN A0 (utilizzato dal motor shield per “sentire” la corrente assorbita dal motore e dal keypad shield per leggere lo stato dei pulsanti) e sui alcuni PIN utilizzati per l’LCD. Non è quindi possibile impilarli.
Grazie Luca per i preziosi tutorial. Con Arduino e A4988 sto motorizzando uno slider video. E’ possibile impostare inizio e fine corsa in prossimità degli estremi dello slider?
Grazie ancora.
Ciao Federico, direi di sì… ti basta aggiungere due microswitch o sensori ottici (un po’ come fanno le stampanti 3d) che ti diano il segnale di fine corsa e modificare di conseguenza lo sketch
Ciao ho appena visto il tuo editing, che ho trovato grande.
Ma non riesco a trovare lo schema di montaggio e cablaggio (il collegamento del lcd all’arduino e al motore) può essere un file per la frittzing?
Grazie per la tua risposta.
Desolato per la traduzione Non parlo italiano.
Ciao Bruno, lo schema di collegamento si trova nella prima parte del tutorial.