Ok Matteo ora ho capito, allora funziona ma deve esserci un contatto sulla presa usb che non lo alimenta.
Poco male dai, però quando lo alimenti dalla scheda è meglio se usi il pin VIN con 7/8 Volt, così sfrutti il suo regolatore interno.
Per usare i servi è semplicissimo, seleziona dal menù "File/Esempi/Servo" il programma "Sweep" e collega un servo all'uscita PWM D9.
Positivo e negativo del servo lo colleghi a +5V e a GND.
Il programma è questo:
[pre]
/" Sweep
by BARRAGAN <
http://barraganstudio.com>
This example code is in the public domain.
modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
"/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
[/pre]
Funzionamento:
[pre]
#include <Servo.h>
[/pre]
carica la libreria "servo.h" già presente nell'IDE per la gestione dei servi tramite Arduino.
La libreria aggiunge funzionalità al sistema tramite nuovi comandi.
[pre]
Servo myservo;
[/pre]
Crea un oggetto chiamato "myservo"; questo nome può essere un nome a tuo piacimento e conterrà il nome del tuo servo.
[pre]
int pos = 0;
[/pre]
crea la variabile intera "pos" e la inizializza a 0 (zero) che conterrà la posizione angolare in gradi dell'astina del servo.
[pre]
void setup()
{
myservo.attach(9);
}
[/pre]
Procedura di setup (eseguita solo una volta) dove viene assegnato il servo di nome "myservo" al pin dell'uscita PWM D9.
[pre]
void loop()
{
[/pre]
Procedura di loop che viene eseguita all'infinito e che contiene il codice di azionamento del servo.
[pre]
for(pos = 0; pos <= 180; pos += 1)
[/pre]
Questo è un ciclo che conta da 0 a 180 con passi di 1.
Qui, ad ogni conteggio la variabile "pos" viene incrementata di 1 fino ad arrivare a 180.
[pre]
{
myservo.write(pos);
delay(15);
}
[/pre]
Muove il servo "myservo" verso la posizione indicata da "pos" e fa un pausa di 15 millisecondi.
Questi 2 comandi vengono eseguiti per 180 volte all'interno del loop specificato da "for", quindi vedrai l'astina del servo ruotare da 0 a 180 gradi.
[pre]
for(pos = 180; pos>=0; pos-=1)
{
myservo.write(pos);
delay(15);
}
[/pre]
Esegue un altro ciclo ma stavolta al contrario, cioè aziona l'astina del servo da 180 a 0 gradi riportandola alla posizione iniziale, cioè 0.
[pre]
}
[/pre]
Finisce "loop" e il programma che si ripeterà all'infinito.
Se tutto va per il verso giusto dovresti vedere l'astina del servo ruotare avanti e indietro di 180 gradi.
Puoi provare a cambiare l'angolo di escursione sotituendo 0 e 180 per restringerne il campo. Tieni presente che questi valori solitamente sono valori massimi per un comune servo e dipendono dalla sua meccanica interna.
Per cambiare la velocità del servo aumenta o diminuisci il numero presente in "delay".
Sempre nello stesso menù degli esempi c'è un'altro programma chiamato "knob" che ti permette di gestire la rotazione del servo tramite un potenziometro.
Gli schemi pratici li trovi cliccando sul link presente nei commenti del programma direttamente dall'IDE.
Spero di esserti stato d'aiuto.
Edgardo