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... :
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
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?
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);
}
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..
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).
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..