Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Servo e sensore conflitto

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Servo e sensore conflitto

Messaggioda Foto Utenteandrea080690 » 29 mag 2017, 17:54

Ciao a tutti, sto provando a realizzare un progetto che permetta di muovere un servo dopo che un lettore di impronte digitali abbia riconosciuto una impronta previamente registrata. Ho gia scritto il codice e funziona abbastanza bene, il problema è che il servo fa dei micromovimenti strani e non riesco a risolvere il problema.
Sto utilizzando un servo DXW90 ed un lettore GT 511 e le loro librerie.
Il circuito è cosi realizzato:

LYD2ojC.png


Il codice è questo:
Codice: Seleziona tutto
#include "FPS_GT511C3.h"
#include "SoftwareSerial.h" // usata dalla FPS_GT511C3.h
#include "Arduino.h"
#include "ServoTimer2.h"  // the servo library

#define rollPin  13// define the pins for the servos
int pos = 0;    // variable to store the servo position
FPS_GT511C3 fps(8, 7);
ServoTimer2 servoRoll;    // declare variables for up to eight servos

void setup() {
  Serial.begin(9600);
  delay(100);
  fps.Open();
  fps.SetLED(true);
  servoRoll.attach(rollPin);     // attach a pin to the servos and they will start pulsing
}

void loop()
{
  if ((fps.IsPressFinger()) == true)
  {
    fps.CaptureFinger (true);         // cattura l’impronta del dito sul sensore e la memorizza nella memoria del sensore stesso. Andrà poi confrontata con il DB per individuare l’id. Restituisce true se la cattura ha successo, false se il sensore è vuoto.
    if (fps.Verify1_1(0) == 0 || fps.Verify1_1(1) == 0 || fps.Verify1_1(2) == 0 || fps.Verify1_1(3) == 0 || fps.Verify1_1(4) == 0 || fps.Verify1_1(5) == 0 || fps.Verify1_1(6) == 0 || fps.Verify1_1(7) == 0 || fps.Verify1_1(8) == 0 || fps.Verify1_1(9) == 0 || fps.Verify1_1(10) == 0 || fps.Verify1_1(11) == 0 || fps.Verify1_1(12) == 0 || fps.Verify1_1(13) == 0 || fps.Verify1_1(14) == 0 || fps.Verify1_1(15) == 0 || fps.Verify1_1(16) == 0 || fps.Verify1_1(17) == 0 || fps.Verify1_1(18) == 0 || fps.Verify1_1(19) == 0)
      // int Verify1_1(int id): verifica se l’impronta catturata con la funzione CaptureFinger corrisponde all’impronta memorizzata nello slot identificato da id (da 0 a 199). Ritorna: 0 se corrispondono, 1 se la posizione non è valida (id < 0 o id > 199), 2 se l’id non in uso (vuoto), 3 se l’impronta non corrisponde a quella nello slot id
    {
      pos = 0;
      servoRoll.write(pos);              // motore in posizione 0 gradi
      delay (2000);
    }
    pos = 75;
    servoRoll.write(pos);              // motore in posizione 75 gradi
    delay (500);
  }
}


Ed il problema che da è possibile vederlo qui:
https://www.youtube.com/watch?v=vxnQHaX2LfA

Qualcuno sa cosa puo essere e come risolverlo?
Ho gia provato ad utilizzare una tensione esterna con 3 batteria ma niente, il problema non sembra essere di corrente, inoltre il servo singolarmente funziona bene, non fa questi micromovimenti qundi sembra che sia un problema di interferenza tra la comunicazioni dei due componenti.
Ultima modifica di Foto UtenteIlGuru il 30 mag 2017, 11:53, modificato 1 volta in totale.
Motivazione: Allega le immagini, non sono permessi collegamenti a server esterni
Avatar utente
Foto Utenteandrea080690
10 3
 
Messaggi: 19
Iscritto il: 2 apr 2009, 14:28

0
voti

[2] Re: Servo e sensore conflitto

Messaggioda Foto UtenteWALTERmwp » 29 mag 2017, 21:36

Ciao @andrea080690, dal video si osserva quel che accade ma non si capisce come invece si dovrebbe comportare.
Ho qualche dubbio che il codice riportato sia esattamente quello dell'applicazione, devi inserire esattamente quello che staresti provando.
Se le librerie non hanno problemi, una delle ipotesi è che tu non gestisci le isteresi temporali: dopo il tentativo di lettura dell'impronta, a prescindere dall'esito, è bene evitare la quasi immediata ripetizione dello stesso codice.
Non penso ci siano errori a livello di collegamenti ma se intendi proporre uno schema, anche semplicficato, leggi qui !

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
22,9k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6725
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: Servo e sensore conflitto

Messaggioda Foto Utentepgiagno » 3 giu 2017, 8:19

Ho avuto un'esperienza simile con quel servo. Sembra che i micromovimenti siano dovuti ad una non precisa "traduzione" dei gradi in ampiezza dell'onda quadra di comando, per certi valori dei gradi impostati. Puoi provare a risolvere il problema cambiando i gradi di posizionamento (ad esempio sostituendo pos = 0 con pos = 1, oppure pos = 2 e così via) e vedere se il fenomeno si attenua o sparisce.

Ciao,
P.
Avatar utente
Foto Utentepgiagno
355 2 5
Frequentatore
Frequentatore
 
Messaggi: 231
Iscritto il: 5 gen 2015, 21:27

0
voti

[4] Re: Servo e sensore conflitto

Messaggioda Foto Utentexyz » 3 giu 2017, 13:03

Ho esaminato le due librerie in questione, da una rapida occhiata non hanno parti in conflitto.

Mettere il test dell'impronta e il controllo del servo nello stesso loop principale può generare problemi dovuti ai ritardi di elaborazione delle varie parti. Se il sensore impiegato tanto tempo a elaborare l'impronta questo genera problemi al comando del servo basato sui ritardi presenti sempre nel loop principale.
Avatar utente
Foto Utentexyz
6.125 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1626
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[5] Re: Servo e sensore conflitto

Messaggioda Foto UtenteWALTERmwp » 3 giu 2017, 13:58

pgiagno ha scritto:(...) Sembra che i micromovimenti siano dovuti ad una non precisa "traduzione" dei gradi in ampiezza dell'onda quadra di comando (...)
può darsi sia come scrivi, in tal caso però bisognerebbe risolvere la contraddizione perché lo OP afferma che la sola gestione del servo soddisfa le aspettative; non ho letto il suo datasheet ma il principio di controllo presumo sia simile a quello applicato ad altri.

Resto dell'idea che il problema risieda nella scrittura di un programma che non considera le implicazioni del caso, come ha ripreso anche @xyz.
Ad esempio, anche quei delay() riportati dopo il pilotaggio sembrerebbero più che azzardati.
Comunque, per avere qualche informazione in più sarebbe buona cosa se lo OP riportasse anche il codice riferito al solo test del servo.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
22,9k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6725
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti