Servomotori mg996r _aiuto_

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.

Buonasera, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente [u]evitando[/u] di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, [u]NON[/u] necessariamente inerenti alla tua domanda: - serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - pinout delle varie schede by xxxPighi: Pinout - link [u]generali[/u] utili: Link Utili

Premetto che non ho mai lavorato con ROBOT comandati da Arduino. Comunque, cercando in rete ho trovato un tutorial che mi sembra spieghi un'applicazione tipo quella che vuoi realizzare, chiaramente in un contesto più semplice (3 servomotori gestiti invece di 6). Magari lo conosci già, ma se così non è potresti provare a seguire le istruzioni del tutorial e vedere se riesci a replicare gli stessi risultati adattandoli però alla tua applicazione. Sarebbe già un primo passo per verificare se il problema che hai illustrato è relativo alla programmazione, alle caratteristiche dei servomotori (?) o al montaggio meccanico del ROBOT. https://create.arduino.cc/projecthub/ChanR19/simple-programmable-robotic-arm-bd28a0

Buongiorno, innanzitutto volevo scusarmi con gpb01, tengo a puntualizzare che avevo preso visione del regolamento sulla stesura della domanda, eppure mi sono fermato troppo presto, non finendo di leggere tutto il regolamento. In ogni caso ho provveduto a colmare il mio problema e mi sono anche presentato nel topic relativo. Vorrei quindi rigraziarla per i link che mi ha elencato, dei quali ho preso visione. Riguardo al link indicatomi da krypton18: la ringrazio di avermi ricollegato a tale link poichè era sfuggito a quella che era stata la mia ricerca, cercherò di estendere il programma a sei servomotori per vedere che succede, non prima che lo abbia provato con tre servomotori come indicato. Grazie mille, se qualcuno avesse qualche altra idea sarei molto felice di prenderla in considerazione, buona giornata, Alessandro.