problema servi , non mantengono la posizione , tremano.

ciao ,
ho un problema , credo sia hardware; in pratica quando collego la batteria i servi si muovono per conto loro , rispondendo al comando del potenziometro in magnera del tutto errata.

lista componenti :

  • 2 servo digitali
  • 3 condensatori da 25v 100uf (quelli del kit base)
  • 2potenziometri 10k (quelli del kit base)
  • 1 convertitore DC-DC settato a 6v (alimenta i servo, non lo si vede dallo schema non sapevo metterlo)
  • 1 batteria lipo 2s

arduino è alimentato da alimentatore usb (carica batteria dello smartphone)

metto il codice :

// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
Servo myservo2; // secondo servo

int potpin = 0;  // analog pin used to connect the potentiometer
int potpin2 = 1;  // secondo potenziometro collegato a A1
int val;    // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  myservo.attach(10); // secondo servo al pin 10
}

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
//val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
// myservo.write(val);                  // sets the servo position according to the scaled value
myservo.writeMicroseconds((val*2)+510); // 180° di escursione con risoluzione del comando di 0.18°

  val = analogRead(potpin2);            // secondo servo
  //val = map(val, 0, 1023, 0, 179);
// myservo2.write(val);
myservo2.writeMicroseconds((val*2)+510);

delay(15);                           // waits for the servo to get there
}

nello schema che ho fatto , portate pazienza ma è la prima volta che ho usato questo programma; ho riprodotto fedelmente come ho fatto in realtà , ricordo che non si vede il convertitore DC-DC ; le 2 breadboard son dovute, che una è piccina e gia ci capisco poco e se ancora incasino coi fili… :

grazie

jeshinji00:

  • 1 batteria lipo 2s

si, ma che caratteristiche ? volt ?
dc-dc stepup o stepdown ?

Ciao, secondo lo schema che hai postato hai messo in corto l’alimentazione sia lato Arduino che servo…controlla che in realtà non lo hai fatto
Ciao

nid69ita:
si, ma che caratteristiche ? volt ?
dc-dc stepup o stepdown ?

ciao.

allora la batteria è un 2200mah 7.4v

DC-DC regolabile step-down

tonid:
Ciao, secondo lo schema che hai postato hai messo in corto l'alimentazione sia lato Arduino che servo.....controlla che in realtà non lo hai fatto
Ciao

ma i servi funzionano , se fosse in corto non andrebbe in protezine arduino?

Modello o link dello step-down ? Potrebbe essere che lo step-down eroga pochi ampere ?

nid69ita:
Modello o link dello step-down ? Potrebbe essere che lo step-down eroga pochi ampere ?

grazie della risposta .

ecco le caratteristiche :

CONVERTITORE DC-DC LM2596S
convertitore DC-DC switching di tipo step down incentrato sullo stabilizzatore LM2596S. La funzione di questo convertitore è quella di bbassare la tensione di ingresso, per esempio alimentandolo a 12V potete regolare la tensione in uscita da 1,2Vdc a 11Vdc… Una volta impostata la tensione di uscita questa rimarrà stabile anche se la tensione di ingresso aumenta.

DIMENSIONI 46x26x12mm
TENSIONE DI INGRESSO
4,75Vdc - 35Vdc
TENSIONE IN USCITA
regolabile da 1,25Vdc a 26Vdc
CORRENTE IN USCITA
2A
POTENZA IN USCITA 15W

i servocomandi a circuito solamente alimentato con arduino funzionano , appena gli alimento con la batteria esterna incominciano a vibrare e fare gli affari loro …

ieri ho ridisegnato lo schema , spero si capisca meglio .

mentre il codice l’ho riscritto pensando fosse lui il colpevole :

#include <Servo.h>

Servo myservo;
Servo myservo1;

int const potPin = 0;
int potVal;
int angle;

int const potPin1 = 1;
int potVal1;
int angle1;

void setup() {
  // put your setup code here, to run once:


myservo.attach(9);
myservo1.attach(10);

}

void loop() {
  // put your main code here, to run repeatedly:

potVal = analogRead(potPin);
angle = map(potVal, 0, 1023, 0, 179);
myservo.write(angle);
delay(15);

potVal1 = analogRead(potPin1);
angle1 = map(potVal1, 0, 1023, 0, 179);
myservo1.write(angle1);
delay(15);
}

grazie ancora!!

Scusa, ma ad Arduino il positivo delle batterie come ci arriva?

docdoc:
Scusa, ma ad Arduino il positivo delle batterie come ci arriva?

@sukko, penso che quello schema è per avere arduino e i servo alimentati in maniera separata.
solo il gnd è in comune.

@jes, il codice mi pare strano possa dare problemi. La variante è hardware tra il funzionano e vibrano.
Ma .. potresti eventualmente verificare quali valori vengono letti dalle analogRead() dei potenziometri tra i due sistemi di alimentazione. (Usa Serial.println verso il monitor seriale)

P.S. meglio const byte potPin = A0; rispetto a int const potPin = 0;

nid69ita:
penso che quello schema è per avere arduino e i servo alimentati in maniera separata.
solo il gnd è in comune.

Possibile, ma per sicurezza l'ho chiesto.. :wink:
In ogni caso a me il problema dei servo che vibrano accadeva se c'erano problemi di connessione (tipicamente le masse dei servo non connesso alla massa di Arduino).

ciao, se utilizzi delle batterie di supporto esterne per alimentare i servo ti consiglio di utilizzare un motor driver.

nid69ita:
@jes, il codice mi pare strano possa dare problemi. La variante è hardware tra il funzionano e vibrano.
Ma .. potresti eventualmente verificare quali valori vengono letti dalle analogRead() dei potenziometri tra i due sistemi di alimentazione. (Usa Serial.println verso il monitor seriale)

P.S. meglio const byte potPin = A0; rispetto a int const potPin = 0;

il codice va testato solo con i servi collegati a arduino , ho comunque corretto (A0,A1)

ho ancora provato :

*collegare direttamente senza breadboard il negatico a arduino e il positivo direttamente al servo del le lipo , sempre
con dc-dc ma nn cambia nulla

idem con un pacco di batterie (4) il negativo a arduino e il positivo a un servo .

mi sono recato al fablab della mia città e abbiamo risolto il problema ,il dc-dc step quando l'ho impostato a 6v non l'ho fatto col gnd collegato a arduino , collegandolo la tensione scendeva a 3v , la cosa strana è che per non avere il tremolio su un servo devo settarlo a 8v , l'altro servo è perfetto . inoltre vi era anche un cavo che faceva girare le scatole .

Grazie ancora a tutti i partecipanti alla discusione

jeshinji00:
quando l'ho impostato a 6v non l'ho fatto col gnd collegato a arduino , collegandolo la tensione scendeva a 3v
inoltre vi era anche un cavo che faceva girare le scatole .

Hehe, bene, lo dicevo che era in genere un problema di cablaggi e/o masse non connesse al gnd di Arduino.. :wink: