Salve a tutti
Mi sto cimentando, pian piano, nella creazione di un robot. Per muoversi l'ho dotato di due servomotori a 360°, ed ho scritto il seguente codice elementare unicamente per farlo andare avanti:
void loop() {
int i, j;
i=j=1500;
while (i>500 && j<2500) {
ruotadestra.writeMicroseconds(i);
ruotasinistra.writeMicroseconds(j);
i-=100;
j+=100;
}
}
Il problema è che Arduino dopo l'incremento e il decremento di 100, perde la connessione al PC per poi subito riaverla (si sente ogni secondo questo continuo tic). Ho capito che è un errore di codice, ma non so il perché.
Grazie in anticipo
l'esecuzione del loop è rapidissima , la i decrementa in pochi microsecondi fino a 500 e anche la j incrementa fino a 2500, dopodiche si esce dal while vengono reinizializzate a 1500 e ricomincia la solfa, cioè è tutto sbagliato e non sai il perchè, semplice, perchè prima di programmare bisogna studiare un libro di programmazione in linguaggio C
Oltre allo sketch, devo porre attenzione all'assorbimento dei motori dei servo.
Essendo a rotazione continua, quando sono in movimento assorbono parecchio, sopratutto se sotto sforzo.
Se la corrente complessiva assorbita da Arduino più motori supera quella che può erogare la porta USB (500mA), Arduino si resetta poiché la tensione scende al di sotto di 4.5V e questo spiega la perdita momentanea della connessione USB.
Arduino non sopporta due servo in movimento. Lo sketch come dovrei impostarlo? Mi interessa solo come coordinare il movimento in avanti e sul web non ho trovato granché sui servo 360.
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
E' buona norma alimentare a parte i servo, ad esempio con 4 batteria AA in serie.
Non è necessario usare writeMicroseconds() ma il semplice write(): con il valore 90 il servo è fermo, mentre con un valore superiore a 100 va in un senso e con un valore inferiore a 80 nel senso contrario.
Scusa ma io ho letto che non è consigliabile utilizzare Arduino con doppia alimentazione. Se volessi fare dei test (per capire di quanto il servo si muove in un determinato range) posso collegare sia la batteria (ho una lipo 7,4 V ma posso utilizzare il 7806 per portarlo a 6V, valore di tensione max accettato dal servomotore) che il cavo USB insieme?
ho provato a caricare il tuo sketch ma non dà nessun segno di vita.
Nel primo ciclo il servo della ruota destra parte in una direzione alla massima velocità e progressivamente inverte la direzione passano per il fermo e nel secondo ciclo esegue il contrario.
Forse il delay(15) è troppo piccolo per apprezzare la cosa, ma il servo dovrebbe muoversi.
Ovviamente non è uno sketch completo, ma solo la parte riguardante il loop da sostituire a quello che hai.
io ho letto che non è consigliabile utilizzare Arduino con doppia alimentazione
Dove hai letto questa cosa?
La Li-PO da 7.4V la deve connettere solo all'alimentazione dei servo e se se vuoi abbassare la tensione a 6V puoi mettere in serie sul positivo due diodi 1N4007.
Ricordati che deve collegare il negativo della batteria con il ground di Arduino, in modo da avere un comune riferimento di massa.
Arduino, invece, riceve l'alimentazione o dal jack (7-12v) oppure dalla connessione USB.