Go Down

Topic: Servo nach Stromzufuhr nimmt unterschiedliche Positionen ein.  (Read 152 times) previous topic - next topic

meddie

Hallo Leute,

ich versuche gerade ein kleines Projekt mit einem Arduino und einem Servo umzusetzen. Ich habe eine Arduino Nano, ein Servomotor, einen Taster und versorgt wird das ganze von zwei 9V Batterien (parallel).

Bei einem TripleKlick auf den Taster soll der Servo sich um 180 Grad bewegen und 3 Sekunden später wieder in die ursprüngliche Stellung gehen. Am Servo hängt ein kleiner Seilzug der einen Hebel betätigen soll.

Soweit funktioniert mein Code auch, nur habe das ich Problem, dass wenn ich die 9V Batterie anschließe, sich der Server "initialisiert" und fährt in eine scheinbar undefinierte Stellung. Diese ist jedes mal anders.

Könnt Ihr mir helfen wich das vermeiden kann. Zu einem passiert es bei mir dass der Hebel vom Servo bei mir teilweise ungewollt an das Gehäuse anfährt und zu anderem stimmt dann je nach Stellung die Zuglänge nicht mehr.

Ich bedanke mich im Voraus für Eure Hilfe.
Hier der verwendete code:
Code: [Select]
/*
 * TripleClick.ino
 * Author: Jacques Bellavance
 * Date : August 9, 2017
 * Released under the GNU General Public License v3.0
 *
 * Demonstrates how to use the DoubleClick class
 * The .clickCount() method returns the number of times that
 * the switch has been clicked during a specified period
 * 0 = no click
 * 1 = 1 click
 * 2 = 2 clicks
 * 3 = 3 clicks
 *
 * We will click the switch during half a second
 * After that, we will blink the debug LED (pin 13)
 * the number of times that we clicked the switch
 *
 * We use the DoubleClick class, but we use the
 * changeMaxClicks() method to make it a triple click
 *
 * Connections: PULLUP
 * Ground---[Switch]---D2
 *
 * Connections: PULLDOWN
 * +5V---[Switch]---|---[10Kohm Resistor]---Ground
 *                  |-----------------------D6
*/
#include <Servo.h>
#include "SwitchPack.h"

#define KEY_PIN 10
#define LED_PIN 13
#define BLINK_TIME 300
#define REACTION_TIME 1000


Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

DoubleClick key(KEY_PIN, PULLUP, REACTION_TIME);

//blink=========================================
//Blink the debug LED (pin 13) "count" times
//If count = 0, the for loop will not be done
//----------------------------------------------
void blink(byte count) {
  for (int i = 1 ; i <= count; i++) {
    digitalWrite(LED_PIN, HIGH);
    delay(BLINK_TIME);
    digitalWrite(LED_PIN, LOW);
    delay(BLINK_TIME);
  } 
}//blink----------------------------------------

//setup==========
void setup() {
  key.begin();
  key.setMaxClicks(3);
  pinMode(LED_PIN, OUTPUT);
myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

//loop=======================
void loop(){
  blink(key.clickCount());
  if (key.clickCount()==3){
    myservo.write(0);              // tell servo to go to position in variable 'pos'
    delay(3000);       
    myservo.write(180);
    digitalWrite(LED_PIN, HIGH);
    delay(10);
    digitalWrite(LED_PIN, LOW);
    delay(10);
    digitalWrite(LED_PIN, HIGH);
    delay(10);
    digitalWrite(LED_PIN, LOW);
    delay(10);
    digitalWrite(LED_PIN, HIGH);
    delay(10);
    digitalWrite(LED_PIN, LOW);
    delay(10);
    digitalWrite(LED_PIN, HIGH);
    delay(10);
    digitalWrite(LED_PIN, LOW);
    delay(10);
    digitalWrite(LED_PIN, HIGH);
    delay(10);
    digitalWrite(LED_PIN, LOW);
    delay(10);
  }
}

Rentner

Hallo,

ändere das im setup mal so ab, um zu sehen ob damit der Servo gezielt imer auf 0 fährt nach dem einschalten.

myservo.attach(9);  // attaches the servo on pin 9 to the servo object
myservo.write(0);
delay(3000);

Heinz

SteffenP

Hallo,
Ich bin Modellbauer und habe viele Servos im Gebrauch. Wenn man nur Spannung anlegt, springen sie fast alle in irgendeine Richtung. Die Musterlösung: Erst das Signal bereitstellen und dann die Spannung! Gleichzeitig geht auch. Ein Zucken ist aber in beiden Fällen meist nicht zu vermeiden. Wenn alles über den Arduino laufen soll, könnte man die Spannung für das Servo über einen Transistor vom Arduino einschalten, sobald das Steuersignal bereitsteht. (Max. Belastung der Ausgänge beachten! Also Servo nicht am OUT-Pin stromversorgen!)

Steffen

Go Up