Go Down

Topic: Domanda uso servo.deatch() (Read 360 times) previous topic - next topic

salvatore_94

Jan 26, 2014, 03:22 pm Last Edit: Jan 26, 2014, 03:24 pm by salvatore_94 Reason: 1
Salve ragazzi,
stavo scrivendo uno sketch per porvare i miei servomotori e per iniziare a programmare il mio braccio robotico.
Avevo una domanda però: se utilizzo troppe volte attach() e detach(), c'è qualchè problema? nel senso, si possono rovinare i motori o arduino? oppure ci sono altri problemi?
Lo sketch è questo:
Code: [Select]
// ** Braccio robotico **

//M:includo le librerie utili
#include<Servo.h>

//M: dichiaro la costante per la pausa e per i pin dei servi
#define pausa 400
#define pin_base 3
#define pin_spalla 5
#define pin_gomito 6
#define pin_polso 9
#define pin_mano 10

//M: creo gli oggetti dei 5 servi
Servo base;   //A: servomotore alla base del braccio
Servo spalla; //A: servomotore iniziale del braccio
Servo gomito; //A: servomotore a metà braccio
Servo polso;  //A: servomotore che gira la mano
Servo mano;   //A: servomotore che apre e chiude la mano

//M: dichiaro le variabili utili


//M: dichiaro i prototipi delle funzioni e delle procedure
void azzera_braccio();
void prova_servo(Servo motore);

void setup()
{
 Serial.begin(9600);
}

void loop()
{
 int scelta;
 
 if(Serial.available())
 {
   scelta=Serial.read()-48;
   Serial.println(scelta);
   switch(scelta)
   {
     case 1: azzera_braccio(); delay(pausa); break;
     case 2: prova_servo(base, pin_base); delay(pausa); break;
     case 3: prova_servo(spalla, pin_spalla); delay(pausa); break;
     case 4: prova_servo(gomito, pin_gomito); delay(pausa); break;
     case 5: prova_servo(polso, pin_polso); delay(pausa); break;
     case 6: prova_servo(mano, pin_mano); delay(pausa); break;
   }
 }
   
}

void azzera_braccio()
{
 //M:dichiaro la variabile per la posizione dei servi
 int pos=0;
 
 delay(pausa/2);
 
 //M:posiziono i servi su pos
 base.attach(pin_base);
 base.write(pos);
 delay(pausa);
 base.detach();
 
 spalla.attach(pin_spalla);
 spalla.write(pos);
 delay(pausa);
 spalla.detach();
 
 gomito.attach(pin_gomito);
 gomito.write(pos);
 delay(pausa);
 gomito.detach();
 
 polso.attach(pin_polso);
 polso.write(pos);
 delay(pausa);
 polso.detach();
 
 mano.attach(pin_mano);
 mano.write(pos);
 delay(pausa);
 mano.detach();
 
}

void prova_servo(Servo motore, int pin)
{
//M: dichiaro la variabile pe rla posizione
int pos=0;

motore.attach(pin);

for(pos=1;pos<=180;pos++)
{
  motore.write(pos);
  delay(5);
}

motore.detach();

}


Come potete vedere ho usato varie volte attach() e detach() perchè altrimenti i servi iniziavano a vibrare e non smettevano più, se non durante il posizionamento.
Con detach e attach ho risolto questo problema, ma non avendoli mai usati, ho vari dubbi.
Grazie, Salvatore

salvatore_94

E' forse una domanda troppo stupida?  :smiley-sweat:

uwefed

Non é stupida se spiegi perche devi fare un detach().
Un detach() disattiva il segnale che riceve il servo. Dipende poi dal tipo di servo cosa fa.
Ciao Uwe

salvatore_94

Perchè se non uso detach i servi iniziano a vibrare e a fare tantissimo rumore anche se non si muovono, invece con detach non ho alcun problema

salvatore_94

Vabbè, spero non ci siano problemi  :(

icio

La maggior parte dei servo se non invii più l'impulso di comando ogni 20 mSec oppure se lo invii dopo un tempo molto superiore a 20mSec non resta fermo ma si porta in posizione di riposo che corrisponde alla posizione estrema sinistra

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy