Salve a tutti, ho un vecchio hard disk ormai rotto e vorrei utilizzarne il motore per fare una sorta di resistenza a una jogwheel. In pratica, attraverso la un potenziometro sarà possibile regolare la resistenza applicata alla rotazione di questa jogwheel. Avevo pensato di farlo con un motore del genere appunto, accendendo tutte le fasi contemporaneamente e in base al valore del potenziometro mappare il delay.
Quindi per prima cosa vorrei chiedervi: secondo voi funziona questa idea?
Ho effettuato delle prove per capire come controllare il motore con arduino e tuttavia non funziona…
Ho seguito moltissimi tutorial che alla fine facevano sempre la stessa procedura e con lo stesso sketch.
Dei 4 pin sotto il motore dell’hard disk ho trovato quello comune e poi ho usato il modulo driver incluso nel mio kit arduino per provare a controllarlo.
Il modulo è questo: ULN2003APG | Arduino stepper, Arduino stepper motor control, Stepper motor con il chip uln2003apg.
Vi spiego come ho connesso il tutto: ho collegato ai primi 3 in i pin digitali di arduino corrispondenti alle fasi che si attiveranno, ho collegato un generatore esterno da 12V stabilizzato a 5A ai due pin relativi (prima ho unito la passa di arduino e quella del generatore per evitare casini), ai pin di uscita in cui va collegato il motore in ordine partendo dal lato più esterno alla scheda ho collegato il pin comune e a seguire le altre tre fasi.
Una volta caricato lo sketch comunque il motore non dava segni di vita…
Lo sketch è questo:
int phase1 = 2;
int phase2 = 3;
int phase3 = 4;
int led = 12;
unsigned long stepLength = 40000;
int minStepLength = 1400;
int steps = 5;
void setup() {
pinMode(led, OUTPUT);
pinMode(phase1, OUTPUT);
pinMode(phase2, OUTPUT);
pinMode(phase3, OUTPUT);
digitalWrite(led, LOW);
}
void loop() {
switchStep(1);
switchStep(2);
switchStep(3);
if(stepLength > minStepLength)
{
stepLength = stepLength - steps;
} else {
// set the minimum pulse length
stepLength=minStepLength;
}
if (stepLength < 39950) {
digitalWrite(led, HIGH); // second gear
steps = 300;
}
if (stepLength < 20000) {
digitalWrite(led, LOW); // third gear
steps = 50;
}
if (stepLength < 3000) {
digitalWrite(led, HIGH); // fourth gear
steps = 2;
}
}
void switchStep(int stage)
{
switch(stage)
{
case 1:
digitalWrite(phase1, HIGH);
digitalWrite(phase2, LOW);
digitalWrite(phase3, LOW);
myDelay(stepLength);
break;
case 2:
digitalWrite(phase1, LOW);
digitalWrite(phase2, HIGH);
digitalWrite(phase3, LOW);
myDelay(stepLength);
break;
default:
digitalWrite(phase1, LOW);
digitalWrite(phase2, LOW);
digitalWrite(phase3, HIGH);
myDelay(stepLength);
break;
}
}
void myDelay(unsigned long p) {
if (p > 16380) {
delay (p/1000);
} else {
delayMicroseconds(p);
}
}
In pratica fa partire il motore a velocità bassa aumentandola piano piano.
Non funziona nulla però, le luci sulla scheda driver si accendono e si vede che la l’intermittenza è sempre più veloce fino a diventare impercepibile.
A questo punto ho pensato che il motore sia rotto, però aprendolo le bobine sembrano apposto, però magari ci sarà qualcosa invisibile ad occhio.
Aspetto vostre risposte, grazie