buongiorno a tutti
ho un problema che non riesco a risolvere
tramite chatgpt ho inserito il seguente codice:
#include <AccelStepper.h>
// Configurazione del motore passo-passo------pulse400 con pulsante di start e stop
const int stepsPerRevolution = 200; // Il numero di passi per una rotazione completa
const int pinPUL = 8; // Colleghiamo PUL+ del driver a questo pin
const int pinDIR = 9; // Colleghiamo DIR+ del driver a questo pin
// Pulsanti per cambiare direzione
const int pinPulsanteOrario = 2; // Collega il pulsante orario a questo pin
const int pinPulsanteAntiorario = 3; // Collega il pulsante antiorario a questo pin
// Pulsanti per avvio e stop
const int pinPulsanteAvvio = 4; // Collega il pulsante di avvio a questo pin
const int pinPulsanteStop = 5; // Collega il pulsante di stop a questo pin
// Pin del potenziometro
const int pinPotenziometro = A0; // Collega il potenziometro a questo pin analogico
// Variabile di stato per il controllo del motore
boolean motoreAbilitato = false;
// Variabile booleana per il cambio di direzione
boolean cambioDirezione = false;
// Variabile per memorizzare la direzione attuale del motore
int direzione = 1; // 1 per orario, -1 per antiorario
// Variabili per il debounce dei pulsanti
unsigned long ultimoTempoPremutoOrario = 0;
unsigned long ultimoTempoPremutoAntiorario = 0;
unsigned long ultimoTempoPremutoAvvio = 0;
unsigned long ultimoTempoPremutoStop = 0;
unsigned long debounceInterval = 700;
// Inizializzazione dell'oggetto stepper
AccelStepper mioMotore(AccelStepper::DRIVER, pinPUL, pinDIR);
void setup() {
// Configura i pin dei pulsanti e del potenziometro come input
pinMode(pinPulsanteOrario, INPUT);
pinMode(pinPulsanteAntiorario, INPUT);
pinMode(pinPulsanteAvvio, INPUT);
pinMode(pinPulsanteStop, INPUT);
mioMotore.setMaxSpeed(2500); // Imposta la velocità massima in step/secondo
mioMotore.setSpeed(0); // Inizialmente, la velocità del motore è impostata a 0
}
void loop() {
// Leggi lo stato dei pulsanti di avvio e stop
int statoPulsanteAvvio = digitalRead(pinPulsanteAvvio);
int statoPulsanteStop = digitalRead(pinPulsanteStop);
// Se il pulsante di avvio è premuto, abilita il motore
if (statoPulsanteAvvio == HIGH) {
motoreAbilitato = true;
}
// Se il pulsante di stop è premuto, disabilita il motore
if (statoPulsanteStop == HIGH) {
motoreAbilitato = false;
mioMotore.setSpeed(0); // Imposta la velocità a 0 quando si preme il pulsante di stop
}
// Se il motore è abilitato, controlla il motore normalmente
if (motoreAbilitato) {
// Leggi lo stato dei pulsanti di inversione
int statoPulsanteOrario = digitalRead(pinPulsanteOrario);
int statoPulsanteAntiorario = digitalRead(pinPulsanteAntiorario);
// Inverti la direzione se viene premuto uno qualsiasi dei pulsanti
if (statoPulsanteOrario == HIGH) {
if (millis() - ultimoTempoPremutoOrario > debounceInterval) {
cambioDirezione = !cambioDirezione;
ultimoTempoPremutoOrario = millis();
}
}
if (statoPulsanteAntiorario == HIGH) {
if (millis() - ultimoTempoPremutoAntiorario > debounceInterval) {
cambioDirezione = !cambioDirezione;
ultimoTempoPremutoAntiorario = millis();
}
}
// Utilizza la variabile booleana per impostare la direzione
direzione = cambioDirezione ? 1 : -1;
// Leggi il valore del potenziometro (da 0 a 1023)
int valorePotenziometro = analogRead(pinPotenziometro);
// Mappa il valore del potenziometro sulla velocità del motore (da 0 a 2500)
int velocita = map(valorePotenziometro, 0, 1023, 900, 2500);
// Imposta la velocità del motore con il valore del potenziometro
mioMotore.setSpeed(velocita * direzione);
// Fai ruotare il motore nella direzione attuale con accelerazione e decelerazione
mioMotore.runSpeed();
}
// Puoi aggiungere un piccolo ritardo se necessario
delay(0);
}
in sostanza tramite arduino e driver dm542t con motore passo passo sanyo 3.5 A 1.8 gradi, 2.9 v con annesso potenziometro per regolare la velocita',mi gestisce un va e vieni in sostituzione di una grossa camma, non ho ancora preso la guida lineare perche' prima mi piacerebbe risolvere questo problema.
non riesco ad implementare tramite i pulsanti start e stop rispettivamente una accellerazione e decellerazione. vorrei che con il pulsante start iniziasse da fermo e arrivasse alla velocita' impostata gradualmente , in modo dolce , e la stessa cosa con il pulsante stop ovviamente dalla velocita' impostata fino al fermo motore. il tutto modificando (penso 2 variabili) all' interno dello sketch.
Grazie a chi vorra' darmi una mano