Pages: [1]   Go Down
Author Topic: Problema con sensore di flessione e servo motore  (Read 96 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti!
Ho un problema che da due settimane a questa parte non riesco a risolvere. smiley-sad-blue
Sto realizzando una mano "robotica" utilizzando Arduino Uno, 5 sensori di flessione e 5 servo motori.
L'alimentazione di Arduino la prendo da una batteria 9v e quella per i servo da un alimentatore 5V (del pc), quindi penso che con corrente e tensione sono apposto.
Ora veniamo al PROBLEMA.
Se vado a leggere i valori del sensore di flessione (con uno sketch semplice per la lettura della porta Analogica) nel piegare il sensore, quindi aumentando la resistenza, ho dei valori che scendendo o salendo danno degli "SBALZI". Ad esempio:
...
800
799
798
797
810      <<<
796
795
794
803     <<<
793
792
...

Questo mi comporta un tremolio continuo dei servo motori mentre si muovono!
Sto utilizzando una resistenza, messa tra la massa e il sensore, di 47K.
Spero mi possiate aiutare! Grazie in anticipo.
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 37
Posts: 1298
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Innanzi tutto assicurati che le masse della pila quella dell'alimentatore dei servo siano in comune.
Poiché il flex aumenta la propria resistenza quando flesso, si dovrebbe inserirlo nel partitore nel ramo verso massa, in modo che quando la flessione aumenta il valore ADC aumenti proporzionalmente.
Ma c'è un altro problema: l'impedenza.
Non hai detto qual'è la resistenza nominale (a riposo) del flex, ma immagino sia attorno ai 20k.
L'ADC accetta in ingresso attorno ai 10k e, con un valore superiore, il condensatore dell'ADC potrebbe non fare in tempo a caricarsi.
Quindi, la soluzione è quella di fare la media di più letture (almeno 4 sino a 10), magari scartando la prima.
Un'altra soluzione hardware potrebbe essere quella di inserire un condensatore elettrolitico in parallelo al ramo di massa da 1 sino a 47 uF che però diminuisce la risposta temporale del sensore.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per la risposta cyberhs.
Quindi da quanto ho capito si può risolvere anche a livello di programmazione? Come posso fare una media corretta in Arduino?

Per quanto riguarda i condensatori, non ho capito dove dovrei inserirli. In parallelo alla resistenza  verso massa dei sensori?

Scusami per la mia ignoranza nel campo. smiley-confuse
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 37
Posts: 1298
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
  byte Sample = 10;
  unsigned int Sum = 0;                                    // tot
  unsigned int Result = 0;                                    // tot

...

void loop()  {
  analogRead(Pin);                                         // discard first sampling

  for (byte I = 0; I < Sample; I ++) {                     // ADC reding (max 120 µs/sample)
    Sum += analogRead(Pin);
  }

  Result = Sum / Sample;                                     // noise reduction
}
Logged

Pages: [1]   Go Up
Jump to: