Controllo di un servomotore
Creazione un oggetto servo e sua calibrazione
1- Per prima cosa è necessario creare un oggetto Arduino includendo la libreria Servo.
>> a = arduino('COM4', 'Uno', 'Libraries', 'Servo');
2- Creare successivamente un oggetto Servo (il servomotore è attaccato al pin D4).
>> s = servo(a, 'D4')
s =
Servo with properties:
Pin: 'D4'
MinPulseDuration: 5.44e-04 (seconds)
MaxPulseDuration: 2.40e-03 (seconds)
Se il servomotore non funziona correttamente è necessario impostare i valori dell'intervallo di larghezza di impulso nella scheda tecnica del servomotore per calibrare il motore in modo che ruoti nell'intervallo previsto. L'esempio qui sotto riportato imposta la larghezza dell'impulso da 700e-6 a 2300e-6 secondi corrispondenti ad una rotazione da 0 a 180 gradi.
>> s = servo(a, 'D4', 'MinPulseDuration', 700e-6, 'MaxPulseDuration', 2300e-6)
s =
Servo with properties:
Pin: 'D4'
MinPulseDuration: 7.00e-04 (seconds)
MaxPulseDuration: 2.30e-03 (seconds)
Scrivere e leggere la posizione del servo
Lo sketch qui sotto riportato modifica la posizione dell'albero del servomotore da 0 (minimo) a 1 (massimo) con incrementi di 0.2, corrispondenti a 36 gradi e visualizza la posizione corrente ogni volta che la posizione cambia.
a = arduino('COM4', 'Uno', 'Libraries', 'Servo'); s = servo(a, 'D4', 'MinPulseDuration', 700e-6, 'MaxPulseDuration', 2300e-6); for angle = 0:0.2:1 writePosition(s, angle); current_pos = readPosition(s); current_pos = current_pos*180; fprintf('Current motor position is %d degrees\n', current_pos); pause(2); end
L'output sarà il seguente:
Current motor position is 0 degrees Current motor position is 36 degrees Current motor position is 72 degrees Current motor position is 108 degrees Current motor position is 144 degrees Current motor position is 180 degrees
Cancellare gli oggetti
Quando la connessione non è più necessaria i due oggetti (che fanno riferimento ad Arduino e al sensore si7021) possono essere cancellati
>> clear s a