Aiuto Braccio Robotico.

Salve a tutti ragazzi, ho un piccolo problema.
Ho costruito un braccio meccanico mosso da dei servomotori e comandato da dei joystick.
Per testare il loro singolo funzionamento ho utilizzato questo programma:

#include <Servo.h> 
 
Servo servo1;

int joystick1 = A0;
int val1 = 90;

void setup() 
{
servo1.attach(1);
} 
 
void loop() 
{
  if (analogRead( joystick1  ) > 700)
  {              
    val1 = val1-1;  
    servo1.write(val1);
    delay(15);
  }
  if (analogRead( joystick1  ) < 400)
  {              
    val1 = val1+1; 
    servo1.write(val1);
    }
}

Fin qui tutto ok, il servo risponde perfettamente ai comandi del joystick.
Dopodichè ho provato con due joystick e 2 servomotori con questo programma:

#include <Servo.h> 
 
Servo servo1;
Servo servo2;

int joystick1 = A0;
int joystick2 = A1;
int val1 = 90;
int val2 = 90;


void setup() 
{
servo1.attach(1);
servo2.attach(2);
} 
 
void loop() 
{
  if (analogRead( joystick1  ) > 700)
  {              
    val1 = val1-1;  
    servo1.write(val1);
    delay(15);
  }
  if (analogRead( joystick1  ) < 400)
  {              
    val1 = val1+1; 
    servo1.write(val1);
    }
     if (analogRead( joystick2  ) > 700)
  {              
    val2 = val2-1;  
    servo2.write(val2);
    delay(15);
  }
  if (analogRead( joystick2  ) < 400)
  {              
    val2 = val2+1; 
    servo2.write(val2);
    }
}

Purtroppo però i servomotori non rispondono più ai comandi.
Spero qualcuno possa aiutarmi a risolvere questo problema.

PS. il braccio è controllato da un arduino mega che dovrebbe gestire in tutto 13 servomotori connessi in parallelo e alimentati da un alimentatore per PC da 450W a 5V e con un amperaggio di 35A

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Il codice deve essere racchiuso nei tag code, altrimenti alcune parti possono essere interpretate come attributi del testo e quindi venir visualizzati male.
Vedi regolamento, sezione 7, spiega bene come fare.

Oltre al codice, dicci anche come hai collegato tutto (TUTTI i pin). Oppure un bel disegnino :smiley:

Ciao, grazie della risposta!
Ti allego un file Fritzing dello schema elettrico (l'ho fatto di fretta, esteticamente non è molto bello!)
Ho testato contemporaneamente tutti i sensori ( sia joystick che flex sensor) e funzionano perfettamente!
Come ho già detto in precedenza, finche devo muovere un solo servo, tutto ok, ma appena ne provo a mettere 2 non funziona!
Ecco un idea di come dovrebbe il programma!(fai presente che ho le conoscenze base di programmazione, quindi ci potrebbe essere qualche errore!)

#include <Servo.h> 
 
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;
Servo servo9;
Servo servo10;
Servo servo11;
Servo servo12;
Servo servo13;


int joystick1x = A0;
int joystick1y = A1;
int joystick2 = A2;
int joystick3x = A3;
int joystick3y = A4;
int sensPollice= A5;
int sensIndice = A6;
int sensMedio = A7;
int sensAnulare = A8;
int sensMignolo = A9;
int val1 = 90;
int val2 = 90;
int val3 = 90;
int val4 = 90;
int val5 = 90;
int val6 = 90;
int val7 = 90;
int val8 = 90;
int val9 = 0;
int val10 = 0;
int val11 = 0;
int val12 = 0;
int val13 = 0;



void setup() 
{
servo1.attach(1);
servo2.attach(2);
servo3.attach(3);
servo4.attach(4);
servo5.attach(5);
servo6.attach(6);
servo7.attach(7);
servo8.attach(8);
servo9.attach(9);
servo10.attach(10);
servo11.attach(11);
servo12.attach(12);
servo13.attach(13);
} 
 
void loop() 
{
  if (analogRead( joystick1x  ) > 700)
  {              
    val1 = val1-1;  
    servo1.write(val1);
    delay(15);
  }
  if (analogRead( joystick1x  ) < 400)
  {              
    val1 = val1+1; 
    servo1.write(val1);
    }
     if (analogRead( joystick1y  ) > 700)
  {              
    val2 = val2-1;
    val3 = val3+1;  
    servo2.write(val2);
    servo3.write(val3);
    delay(15);
  }
  if (analogRead( joystick1y  ) < 400)
  {              
    val2 = val2+1;
    val3 = val3-1;  
    servo2.write(val2);
    servo3.write(val3);
    delay(15);
    }
     if (analogRead( joystick2  ) > 700)
  {              
    val4 = val4-1;
    val5 = val5+1;  
    servo2.write(val4);
    servo3.write(val5);
    delay(15);
  }
  if (analogRead( joystick2  ) < 400)
  {              
    val4 = val4+1;
    val5 = val5-1;  
    servo4.write(val4);
    servo5.write(val5);
    delay(15);
    }
    if (analogRead( joystick3y  ) > 700)
  {              
    val6 = val6-1;
    val7 = val7+1;  
    servo2.write(val6);
    servo3.write(val7);
    delay(15);
  }
  if (analogRead( joystick3y  ) < 400)
  {              
    val6 = val6+1;
    val7 = val7-1;  
    servo6.write(val6);
    servo7.write(val7);
    delay(15);
    }
    if (analogRead( joystick3x  ) > 700)
  {              
    val8 = val8-1;
    servo8.write(val8);
    delay(15);
  }
  if (analogRead( joystick3x  ) < 400)
  {              
    val8 = val8+1;
    servo8.write(val8);
    delay(15);
    }
  val9 = analogRead( sensPollice );
  val9 = map(val9, 0, 1023, 0, 179);
  servo9.write(val9);
  val10  = analogRead( sensIndice  );
  val10 = map(val10, 0, 1023, 0, 179);
  servo10.write(val10);
  val11   = analogRead( sensMedio );
  val11 = map(val11, 0, 1023, 0, 179);
  servo11.write(val11);
  val12 = analogRead( sensAnulare );
  val12 = map(val12, 0, 1023, 0, 179);
  servo12.write(val12);
  val13 = analogRead( sensMignolo );
  val13 = map(val13, 0, 1023, 0, 179);
  servo13.write(val13);
    
}

schema elettrico.fzz (14.8 KB)

Non c'è nessuno che mi può aiutare?

Se potessi fare uno schema con Eagle sarebbe meglio. Fritzing non è molto utile per capire i circuiti perché non è un software molto professionale. E magari esportato come immagine, così anche chi non è a casa può vederlo :wink:

Quello che è evidente è l'assegnazione dei pin:

servo1.attach(1);
servo2.attach(2);
...
In pratica rinunci al comodissimo Serial Monitor che utilizza i pin 0 (RX) ed 1 (TX): visto che usi la MEGA, ti conviene usare i pin a partire da 2 o meglio ancora da 22 (connettore ausiliario)

in quello schema manca il collegamento di massa in comune tra l'alimentatore esterno e la Mega