Introducció a la robòtica en trenta-una classes/Sisè dia: vehicle amb motors pas a pas
Avui hem après a fer anar motors pas a pas.

Aquests motors son emprats en tota mena d’aplicacions on es necessita precisió més
que velocitat, per exemple, en les impressores 3D.
Els motors pas a pas, tenen la particularitat que giren una fracció de volta determinada,
sempre la mateixa, i es queden fent força, sense moure’s en acabar, cada vegada que els
donem corrent. Caldrà canviar a quina bobina donem corrent per a un nou gir, que
tornarà a ser de la mateixa magnitut.
Per a la pràctica, hem agafat uns mini motors pas a pas, que ja ens venen amb reductor i
carta electrònica per al seu control. Per exemple:
https://www.electrohobby.es/pap/180-motor-pap-driver.html
Aquesta carta de control té quatre entrades, que hem connectat als pins 2, 3, 4 i 5 de

l’arduino:
La seqüència que ens diu el fabricant necessita aquest motor és:
1. 1 0 0 0
2. 1 1 0 0
3. 0 1 0 0
4. 0 1 1 0
5. 0 0 1 0
6. 0 0 1 1
7. 0 0 0 1
8. 1 0 0 1
El programa que hem fet per a aconseguir la seqüència:
void setup() {
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
}
void loop() {
digitalWrite(2,1);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,0);
delayMicroseconds(1000);
digitalWrite(2,1);
digitalWrite(3,1);
digitalWrite(4,0);
digitalWrite(5,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,1);
digitalWrite(4,0);
digitalWrite(5,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,1);
digitalWrite(4,1);
digitalWrite(5,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,1);
digitalWrite(5,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,1);
digitalWrite(5,1);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,1);
delayMicroseconds(1000);
digitalWrite(2,1);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,1);
delayMicroseconds(1000);
}
Amb això movem un motor. Ara en connectem l’altre als pins 6,7,8 i 9, i fem que vagin alhora:
void setup() {
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}
void loop() {
digitalWrite(2,1);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,0);
digitalWrite(6,1);
digitalWrite(7,0);
digitalWrite(8,0);
digitalWrite(9,0);
delayMicroseconds(1000);
digitalWrite(2,1);
digitalWrite(3,1);
digitalWrite(4,0);
digitalWrite(5,0);
digitalWrite(6,1);
digitalWrite(7,1);
digitalWrite(8,0);
digitalWrite(9,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,1);
digitalWrite(4,0);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(7,1);
digitalWrite(8,0);
digitalWrite(9,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,1);
digitalWrite(4,1);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(7,1);
digitalWrite(8,1);
digitalWrite(9,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,1);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(7,0);
digitalWrite(8,1);
digitalWrite(9,0);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,1);
digitalWrite(5,1);
digitalWrite(6,0);
digitalWrite(7,0);
digitalWrite(8,1);
digitalWrite(9,1);
delayMicroseconds(1000);
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,1);
digitalWrite(6,0);
digitalWrite(7,0);
digitalWrite(8,0);
digitalWrite(9,1);
delayMicroseconds(1000);
digitalWrite(2,1);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,1);
digitalWrite(6,1);
digitalWrite(7,0);
digitalWrite(8,0);
digitalWrite(9,1);
delayMicroseconds(1000);
}
Si fem anar aquest segon programa, i muntem els motors capiculats, veurem que, com
que els dos giren igual si els mirem del davant, resulta que es posa a girar com en el
vídeo. Per tant, si volem que el vehicle vagi endavant, haurem de fer que el segon motor
giri a l’inrevés... com? Doncs invertint la seqüència del segon motor, o sigui fent els
passos del 8 al 1.