Problema Servo Motori per progetto Robot 5 assi

Buongiorno, sto provando a costruire un robot come da oggetto da far programmare ai miei allievi.
Il "presunto" robot ha 5 assi comandati da sevomotori.
Ho usato questi che potete vedere su Amazon.
https://www.amazon.it/dp/B09WQYPP17?ref=ppx_yo2ov_dt_b_product_details&th=1
Sono servomotori da 6V da 13Kg su cm quadro. (almeno dicono)

A parte vibrazioni dovute alla struttura un po troppo leggerina mi sono imbattuto in un problema con i servomotori e non capisco se sono appunto i servomotori che fanno un po' pena oppure è qualche altro problema software/ hardware.
Praticamente i Servo faticano a mantenere la posizione e cominciano a traballare, ovvero a muoversi per fatti loro creando un oscillazione perpetua che si ferma solo se li blocco con le mani. Questo avviene soprattutto quando sono completamente perpendicolari al tavolo (lo potete vedere più giù). Quando i bracci sono giu invece vanno benino ma fanno comunque un rumorino non tanto rassicurante come un modem di vecchia data. Ho pensato che potesse essere quel poco di giogo del motore che crea una sorta di equilibrio instabile. Ovvero quando cade d'avanti il motorino tende a portarlo indietro ma a sua volta cadendo in dietro il motorino lo riporta in avanti, come un cane che si morde la cosa.
Premetto che ho collegato un'alimentazione esterna composta da 4 pile AA da 1,5 per un totale di 6 V. La massa è collegata ovviamente alla scheda e la scheda è alimentata o dal mio pc oppure da una pila da 9V. (ho provato ad alimentare anche tutto solo con le 4 pile AA ma niente) Ho pensato che per i quattro motori che sto usando al momento ci fosse poco amperaggio ma il problema c'è anche se provo soltanto il primo braccio verticale.
Ecco il codice:

#include <Servo.h>
byte pinB1 = 11;
byte pinB2 = 5;
byte pinB3 = 9;

byte pinUp = 4;
byte pinDown =7;
byte pinSwitch = 8; 

Servo b1; //braccio 1
Servo b2; //Braccio 2
Servo b3; //Braccio 3

byte selBraccio = 0; //seleziona il braccio con il pulsante pinSwitch
//Imposta il valore 0 quando il braccio è perpendicolare
float angleB1 = 94; // 0 gradi a 95 gradi; 
float angleB2 = 88; // 0 gradi a 88 gradi e fine corsa a 178
float angleB3 = 135;  // 0 gradi a 135 gradi (inverso) 


void setup() {
  Serial.begin(9600);
  pinMode(pinUp, INPUT);
  pinMode(pinDown, INPUT);
  pinMode(pinSwitch, INPUT);
  
  //setPwmFrequency(10,8);
  b1.attach(pinB1);
  b2.attach(pinB2);
  b3.attach(pinB3);
  
  b1.write(angleB1);
  b2.write(angleB2);
  b3.write(angleB3);
}

void loop() {
  //sleziona il braccio da muovere
  if (digitalRead(pinSwitch)) {
    selBraccio = selBraccio+1;
    if (selBraccio>=3) {
      selBraccio = 0;
    }
    delay(200);
  }
  //pulsante per far muovere in avanti il braccio
  if (digitalRead(pinUp)) {
    switch (selBraccio) {
      case 0: 
      angleB1=angleB1+0.01;
      b1.write((int)angleB1);
      break;
      case 1:
      angleB2=angleB2+0.01;
      b2.write((int)angleB2);
      break;
      case 2:
      angleB3=angleB3+0.01;
      b3.write((int)angleB3);
      break;
      default:
      break;
    }
   
  } 
  //pulsante per far muovere indietro il pulsante
  if (digitalRead(pinDown)) {
    switch (selBraccio) {
      case 0: 
      angleB1=angleB1-0.01;
      b1.write((int)angleB1);
      break;
      case 1:
      angleB2=angleB2-0.01;
      b2.write((int)angleB2);
      break;
      case 2:
      angleB3=angleB3-0.01;
      b3.write((int)angleB3);
      break;
      default:
      break;
    }
  }
}

Ho postato tutto ma il problema me lo da già quando finisce il setUp ed il braccioè perpendicolare alla tavola

Ecco invece lo schema:


Ecco il braccio:

Vorrei un confronto con voi. Io non sono molto esperto in robotica ma ci sto provando :slight_smile:

Grazie in anticipo per le eventuali risposte.

Fabio

Anche io non sono un elettronico ne un esperto (sono softwarista).
Secondo me le pile hanno pochi ampere, anche 4 stilo 1,5V insieme danno pochi ampere. Mi pare quei servo comunque sono decenti ma consumano corrente.
Visto che quei servo sono dati per tensione 4.8V-6V io proverei un alimentatore 5V da almeno 3A ed alimenterei tutto con solo quello.

P.S. le pile 9V non prenderle neppure in considerazione. Se i lego robot/treni sono passati a vani con 6 pile 1,5V un motivo c'e', pila 9V = pochi ampere (mi pare 350mAh) e le consumi in un attimo.

... basta guardare le curve di scarica in funzione degli assorbimenti per capire che, con quello che costano, sono praticamente inutilizzabili in qualsiasi progetto Arduino che utilizzi qualche cosa collegata.

Guglielmo

  1. Alimentazione
    Tensione e corrente devono essere sufficienti. Un servo da 1,5 kg/cm sotto sforzo assorbe anche 1 A, immagino che uno da 9..13 kg/cm possa richiedere molto di più.

  2. Leve
    Ok 13 kg a un cm di distanza, ma a 10 cm siamo a 1,3 kg, a 15 cm siamo a 870 grammi, ed è lo sforzo massimo che può reggere in stallo, non certo muovendosi. Ideare la geometria in modo da ridurre al minimo gli angoli a maggior sforzo dovuti al peso è fondamentale.

  3. Pilotaggio
    Devono arrivare almeno 40..50 impulsi di comando al secondo, altrimenti il controllo/posizione diventa impreciso, lento, cedevole, tremolante. Non so in questo senso come si comporta la libreria servo.

1 Like

La tensione c'è!! Per la corrente....credo che per un servo basti. Ovvero il servo funziona. Eventualmente posso creare un pacco da 8 AA e usare uno stepDown per abbassare la tensione??

Ho già sperimentato che ce la fa compreso la pinza.

credo sia più questo il problema. Conosci qualche altra libreria?
Volevo provare ad alzare la frequenza dei PWM ma bisogna toccare i timer e non mi sembra una bella cosa, e poi non so nemmeno se è una buona idea.
Oppure semplicemente è la meccanica dei bracci da ripensare.

Comunque vi allego un link sul mio drive con un video, per farvi vedere gli effetti e anche come funziona. E anche che ce la fa sia con gli ampere che con la forza. Ho provato anche con la pinza e in massima estensione tira su tutto. (un po lentamente nei primi passi ma ce la fa).

https://drive.google.com/file/d/1M8GJ2eZZprmjXzjnkyr6TgevrEI8Ly7r/view?usp=sharing

Il mio problema è quel traballio quando è perpendicolare.

Grazie per le risposte :wink:

Quale dei tre è il servo che sta in basso? B1, B2 o B3?

1 Like

b2 è quello che sta in basso
b1 è la base
b3 il braccetto più piccolo in alto

Quindi b2 è quello che trema quando è in verticale ?

1 Like

Esattamente !

Io proverei

  1. intanto a togliere il braccio da b2, lasciarlo senza il pezzo di plastica del braccio e vedere se vibra anche senza pesi attaccati.
  2. scambiare i servo, vedere se anche altri messi al posto di b2 vibrano.

Poi, come mai il centro dei servo è a posizioni diverse ? Spieghi meglio ? Non siamo li con te, almeno per me è difficile capire quali sono i servo e quali angoli devono fare ogni singolo servo

float angleB1 = 94;          // 0 gradi a 95 gradi; 
float angleB2 = 88;          // 0 gradi a 88 gradi e fine corsa a 178
float angleB3 = 135;         // 0 gradi a 135 gradi (inverso)

Ho già fatto queste prove e

  1. Levando il braccio B3 dal braccio B2 trema lo stesso.
  2. Con un 'altro motore trema lo stesso.

Gli angoli sono quelli per il quale i bracci sono perpendicolari al piano (al tavolo per intenderci). Quindi quando ad esempio angleB2 è ad 88 è perpendicolare mentre se metto angleB2 a 0 sarà tutto abbassato nella parte posteriore e con angleB2 = 0 sarà abbassato tutto in avanti.

Vorrei fare una prova aumentando gli ampere del circuito. ma non so se posso procedere correttamente in questo modo:

  1. mettere in serie 2 pacchi da 4 stilo AA quindi 1,5*8 = 12V
  2. abbassare la tensione a 6V con uno Step Down.

In questo modo otterrei più ampere??

Un'altra cosa che forse è meglio specificare è che i bracci non hanno boccole che sostengono il peso. In pratica gli assi dei motori sono direttamente ancorati ai bracci come potete vedere nella foto. Ho fatto così perché nella descrizione del motore c'è scritto che hanno internamente doppio cuscinetto a sfera e pensavo che fossero sufficienti.

Inoltre il motore ha un giogo intorno all'asse di rotazione di qualche decimo di millimetro che propagandosi per tutta la lunghezza del braccio diventa particolarmente evidente. Intendo dire che quando sono a 88 gradi e il motore è fermo (quindi perpendicolare) il braccio si muove comunque di qual millimetro avanti ed indietro.
Ora, quando il braccio è perpendicolare tende a cadere a causa di questo giogo, avanti o indietro. In quel momento il servo perde la posizione e per aggiustarsi si corregge spostandosi rispettivamente avanti o indietro. quando si corregge il braccio cade dalla parte opposta e nuovamente si corregge creando un loop infinito. Quando invece il braccio è abbassato questo giogo non ha effetto per la forza di gravità, perchè rimane in tensione verso il basso a causa del peso, e quindi il motore rimane fermo. Non so se mi sono spiegato bene. Potrei anche aver detto delle cavolate però ho avuto questa impressione.
In ogni caso anche creando delle boccole se il problema è questo non si risolverebbe.

Se vuoi ti faccio un video dove i faccio vedere cosa intendo ma magari domani perchè ora si è fatto un po' tardi.

Grazie ancora per esserti preso a cuore il mio progetto :slight_smile:

NO, mettendo in serie batterie aumenti solo la "Tensione" ma NON la "Corrente" che esse possono fornirti ... l'aumento si ottiene con l'uso di batterie di capacità superiore. Per questo lavoro ti consiglio i pacchi di batterie LiPo, magari 2S (7.4V) che trovi con capacità anche molto grosse (trovi tranquillamente le 5Ah). La seccatura è che richiedono un caricatore apposito.

Guglielmo

1 Like

Grazie Guglielmo,
quindi 4 stilo aa duracell quanti Ampere mi forniscono al massimo?

Per calcolare la potenza in ampere fornita da una batteria ad esempio lipo 3,7V 2000mAh. (che ho già) come si fa?
2000mAh significa che la sua potenza è di 2A per un'ora?

Mi conviene comprare un alimentatore da banco forse per i miei esperimenti. Hai dei consigli in merito?

Per le vibrazioni dei bracci se non elimini quei giochi c'è l'avrai sempre perché il servo cerca di tenere la posizioni quindi si muove in continuo.

1 Like

Grazie per la risposta, ho appena ricevuto una risposta su Amazon sul fatto che questi servo vengono venduti come Digitali ma in realtà sono analogici. Infatti il datasheet di questo modello è praticamente introvabile si chiama DM966. Potrebbe essere questo il mio problema?

Il problema se è meccanico non lo puoi risolvere per ché il gioco rimane sempre non lo puoi risolvere se trovando un server che ha poco gioco. L'alimentazione può anche fare la sua parte se non è di potenza adegua, bisogna che leggi le caratteristiche del server per vedere la corrente di stallo e maggiorala del 30%.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.