Buonasera a tutti, innanzitutto vorrei mettere alla luce il mio livello scolastico di conoscenza del c++, quindi vi espongo il mio problema.
Avevo intenzione di presentare all' esame di maturità un braccio robotico Rot2U 6Dof con 6 servomotori mg996r. In particolare mi trovo a dover registrare tramite sei potenziometri da 10k i movimenti tramite un braccio secondario movimentato dal sottoscritto, in modo che i valori dei potenziometri, posizionati negli snodi del braccio animato da me, vengano immagazzinati in degli array di memoria nel mio arduino mega 2560. Quando viene premuto il pulsante di play, il braccio con i potenziometri non ha più peso nel movimento del braccio con i servo, poichè esso viene mosso semplicemente dai valori all' interno degli array di memoria. Il mio problema sta nel fatto in cui alimento arduino con un alimentatore stabilizzato a 9 volt fai da te da 2,5A massimi, mentre per il braccio robotico, e quindi l' alimentazione dei servo e dei potenziometri a 5 volt, utilizzo un alimentatore usato di un computer, il quale mi fornisce 25A come massima corrente. Nonostante per i servomotori abbia quindi abbastanza potenza, o almeno presumo viste le schede tecniche riguardo ai miei servomotori che ho trovato online, le quali affermano che i servo mg996r assorbono un massimo di 900mA, essi tendono a vibrare durante il movimento e quindi non solo ad inizio e fine corsa, ma anche nel mezzo della mappatura. Inoltre spesso due dei 6 servomotori fanno fatica, o addirittura non riescono neppure nel movimento che dovrebbero compiere. Sono consapevole del fatto che i due servo in questione siano coloro che hanno il maggior peso da alzare, nonostante ciò, essi dovrebbero avere una torsione pari a 17kg, cosa che non mi è assolutamente sembrata reale.
La mappatura dei servo la indico qua sotto, sarei grato se qualcuno sapesse illuminarmi sul perchè questi servo vibrino e non riescano a mantenere la posizione, o addirittura non riescano, in determinati casi ad iniziare il loro movimento.
void readPot()
{
SensVal[0] = analogRead(sensorPin0); //Nel void readPot, assumo i valori letti dai pin analogici
SensVal[1] = analogRead(sensorPin1);
SensVal[2] = analogRead(sensorPin2);
SensVal[3] = analogRead(sensorPin3);
SensVal[4] = analogRead(sensorPin4);
SensVal[5] = analogRead(sensorPin5);
//Serial.println(SensVal[2]);//Serial.print(" "); // CHECK
}
void mapping()
{
ist[0] = map(SensVal[0], 0, 1023, 600, 2193); //Questa di seguito è la mappatura dei servo
ist[1] = map(SensVal[1], 0, 700, 400, 1500); //in base a valori a me utili
ist[2] = map(SensVal[2], 400, 1023, 450, 1700);
ist[3] = map(SensVal[3], 50, 900, 1700, 900);
ist[4] = map(SensVal[4], 0, 1023, 600, 2193);
ist[5] = map(SensVal[5], 0, 1000, 300, 900);
//Serial.println(ist[2]);
//delay (100);
Serial.println(SensVal[1]);// CHECK
delay(100);
}
ho letto inoltre che la mappatura va fatta da 544 a 2400 che se non erro sono ms, ebbene io ho regolato i ms che mi appaiono a monitor seriale in modo da ottenere dei valori a me utili ed evitare soprattutto vibrazioni dovute ad un' errata mappatura.
Ringrazio chiunque voglia cercare di chiarirmi il problema.