Il motore viene gestito da un driver incluso nella confezione e che funziona con una tensione compresa tra i 5 ed i 12 VCC.
Il nome del driver è: X113647.
https://duckduckgo.com/?t=ffab&q=x11364 ... &ia=images
Amazon: https://www.amazon.it/ELEGOO-28BYJ-48-U ... C84&sr=8-4
Lo schema di collegamento è molto semplice ed utilizza solo 6 fili; 2 per l'alimentazione a 5VCC e 4 per il controllo del motore.
I pin di Arduino UNO da utilizzare sono: GND, +5VCC per l'alimentazione del driver e D4, D5, D6 e D7 che devono essere collegati alla piccola scheda del driver stesso in corrispondenza rispettivamente di: - e + 5-12V, IN1, IN2, IN3 e IN4.
Lo schema elettrico è visibile qui sotto:
Nello schema ho inserito 2 pulsanti normalmente aperti con resistenza di pullup per gestire la rotazione oraria e antioraria del motore.
Tali pulsanti sono collegati ai pin di Arduino UNO D2 e D3.
Inoltre nello schema è rappresentato anche un piccolo circuito per invertire la polarità dell'alimentazione sulle rotaie della piattaforma.
Questo per consentire di avere sempre la corretta alimentazione in caso di rotazione del piatto di 180°.
Il dispositivo ha diverse possibilità di sviluppo, in quanto sono disponibili ancora diverse porte di I/O di Arduino UNO.
Ad esempio è possibile inserire dei sensori in corrispondenza dei punti di arresto del piatto rotante per automatizzare il movimento dello stesso.
Il software:
Codice: Seleziona tutto
// Definizione dei pin
#define IN1 4
#define IN2 5
#define IN3 6
#define IN4 7
#define BUTTON_CW 2 // Pulsante per rotazione oraria
#define BUTTON_CCW 3 // Pulsante per rotazione antioraria
// Numero di passi per una rotazione completa (dipende dal motore)
#define STEPS_PER_REV 4
void setup() {
// Imposta i pin come output
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Imposta i pin dei pulsanti come input
pinMode(BUTTON_CW, INPUT_PULLUP); // Attiva la resistenza di pull-up interna
pinMode(BUTTON_CCW, INPUT_PULLUP); // Attiva la resistenza di pull-up interna
}
void loop() {
// Controlla il pulsante per rotazione oraria
if (digitalRead(BUTTON_CW) == LOW) { // Pulsante premuto
rotateMotorClockwise();
}
// Controlla il pulsante per rotazione antioraria
if (digitalRead(BUTTON_CCW) == LOW) { // Pulsante premuto
rotateMotorCounterclockwise();
}
}
// Funzione per ruotare il motore in senso orario
void rotateMotorClockwise() {
for (int i = 0; i < STEPS_PER_REV; i++) {
stepMotor(i % 4);
delay(10); // Ritardo per controllare la velocità
}
}
// Funzione per ruotare il motore in senso antiorario
void rotateMotorCounterclockwise() {
for (int i = STEPS_PER_REV; i > 0; i--) {
stepMotor(i % 4);
delay(10); // Ritardo per controllare la velocità
}
}
// Funzione per controllare il motore passo-passo
void stepMotor(int step) {
switch (step) {
case 0:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 1:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
}
}
Nota: ho voluto sperimentare Chat GPT 4 ed ho fatto scrivere il programma dall'AI.
Risultato, il programma ha funzionato al primo colpo; ho solo dovuto regolare alcuni parametri per ottenere un funzionamento soddisfacente.
Qui qualche foto ed un video di esempio: