Micro movimenti servo SG90

Ciao a tutti, vorrei riuscire a muovere un servo dopo che un lettore di impronte riconosca l’impronta apposita. Sono praticamente arrivato fin qui.
Il problema che ho adesso è che il servo fa dei micro movimenti in continuazione; ovviamente se aggiungo dei delay nel loop questi micro movimenti si ripetono pero in uno spazio ti tempo maggiore. In cambio lo stesso servo utilizzato per un altro progetto, cioè muovere il servo con un bottone, questo non fa alcun micro movimento, semplicemente va ad una posizione o all’altra.
Ho letto sul forum che potrebbe essere un problema di interferenza a causa dei cavi lunghi ma i cavi che uso sono molto corti.

Grazie in anticipo per il possibile aiuto.

Il codice da me scritto è questo:

#include "FPS_GT511C3.h"
#include "SoftwareSerial.h" // usata dalla FPS_GT511C3.h
#include "Arduino.h"
#include "Servo.h"

Servo myservo;  // create servo object to control a servo


int pos = 0;    // variable to store the servo position

FPS_GT511C3 fps(8, 7);

void setup() {
  // put your setup code here, to run once:

    Serial.begin(9600);
  delay(100);
  fps.Open();
  fps.SetLED(true);


    myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() 
{
delay (700);

  // put your main code here, to run repeatedly:
  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;
        myservo.write(pos);              // motore in posizione 0 gradi
        delay (2500);             
        }
   
             pos =75;
              myservo.write(pos);              // motore in posizione 75 gradi
              delay (800);         
  }
          
}

ciao andrea080690 :slight_smile:

il problema secondo me è che ad ogni ciclo di loop lui comunque entra in tutti e due gli IF e perciò gli viene comunque detto di muoversi da 0 a 75 subito dopo, e lui non raggiungendo la posizione decisa , lui vibra.

prova a sostituire le due posizioni con:

un digitalWrite(pin,HIGH) per la pos =0
e digitalWrite(pin,LOW) per la pos = 75

collegando un led al pin deciso, se il led lampeggia vuol dire che il problema è quello, non trovo altre soluzioni al momento :slight_smile:

facci sapere

MD