Servo-motore. Apri e chiudi la porta con un pulsante

Il progetto non funziona. Solo se metto un tester (voltmetro) tra la massa e il pin digitale 3, per verificare la presenza del segnale del pulsante, allora il progetto funziona. Come può influenzare la presenza del tester sul progetto? Qualcuno può aiutarmi ?

#include <Servo.h>

Servo myServo;  // create a servo object

int Angolo = 90;   // variable to hold the angle for the servo motor
int Porta;

void setup() {
  analogReference(DEFAULT);
  myServo.attach(9); // attaches the servo on pin 9 to the servo object
  Serial.begin(9600); // open a serial connection to your computer
  pinMode(3, INPUT);
  myServo.write(Angolo);
}

void Chiudi(){
  if (Angolo > 0){
    Serial.print("Sto chiudendo la porta ... ");
    while (Angolo >= 0){
      myServo.write(Angolo);
      Angolo--;
      delay(15);
    }
    Serial.println("CHIUSA");
  }
}

void Apri(){
  if (Angolo < 90){
    Serial.print("Sto aprendo la porta ... ");
    while (Angolo <= 90){
      myServo.write(Angolo);
      Angolo++;
      delay(15);
    }
    Serial.println("APERTA");
  }
}

void loop() {

  delay(500);
  Porta = digitalRead(3);
  Serial.println(Porta);
  if (Porta == LOW)
    Chiudi();
   else
    Apri();
}

Ovviamente non funziona, serve un debouncing del pulsante e una resistenza di pullup o pulldown. Il tester fa proprio questo, fa da resistenza di pullup. Ricordo che il tester non ha impedenza infinita, ma può andare dall'ordine dei kiloohm a quello dei megaohm.

é importante conoscere gli strumenti che si usano, sopratutto nel vasto mondo delle misure.

Se metti il tester tra massa e pin di entrata il tester fa da pulldown.

Un entrata di Arduino ha un impednza cosí alta che sente anche i disturbi elettromagnetici o campi elettrostatice e li interrpreta come HIGH. Devi mettere una resistenza tra il pin di entrata e massa (pulldown) per mettere il pin a un potenziale definito quando il pulsante non é premuto (aperto). In questo modo l' entrata attraverso la resistnza sente LOW. Quando premi il pulsante al entrata arrivano i 5V e legge HIGH. Nello stasso momento visto che la resistenza sta tra massa e +5V circolerá una corrente. Per tenere piccola questa corrnete si usano resistenze tra 10 kOhm e 100 kOhm (in certi casi anche piú piccole o piú grandi).

Aggiungi una resistenza da 10 KOhm tra pin e massa.

Ciao Uwe

uwefed:
Se metti il tester tra massa e pin di entrata il tester fa da pulldown.

Un entrata di Arduino ha un impednza cosí alta che sente anche i disturbi elettromagnetici o campi elettrostatice e li interrpreta come HIGH. Devi mettere una resistenza tra il pin di entrata e massa (pulldown) per mettere il pin a un potenziale definito quando il pulsante non é premuto (aperto). In questo modo l' entrata attraverso la resistnza sente LOW. Quando premi il pulsante al entrata arrivano i 5V e legge HIGH. Nello stasso momento visto che la resistenza sta tra massa e +5V circolerá una corrente. Per tenere piccola questa corrnete si usano resistenze tra 10 kOhm e 100 kOhm (in certi casi anche piú piccole o piú grandi).

Aggiungi una resistenza da 10 KOhm tra pin e massa.

Ciao Uwe

RISOLTO !
Purtroppo le mie conoscenze di elettronica sono quasi nulle, ho esperienza di programmazione e ho avuto la sensazione/pretesa che si potesse prescindere da queste conoscenze. Per fortuna c'è un forum che aiuta in maniera veloce e precisa.
Grazie !!! (Buon anno a tutti)