ARDUINO VS PIANO TILES 2, Servo funktioniert nicht

Hallo liebe Community,

ich möchte, dass der Arduino mit den Servos Pianotiles 2 spielt und das ist mein Programmcode für einen Servomotor:

#include <Servo.h>
Servo myservo1;
int photocellPin1 = 0;     
int photocellReading1;

void setup(void) {
 Serial.begin(9600);   
 myservo1.attach(9);
}

void loop(void) {
 photocellReading1 = analogRead(photocellPin1);  

 Serial.println("Analog reading = ");
 Serial.print(photocellReading1);                         //Wert des Lichtwiderstands wird angegeben

 if (photocellReading1 > 350) {                          
   Serial.println(" - Dark");
   myservo1.write(90);                                    //Falls Wert größer als 350, bewegen auf 90°
 } else if (photocellReading1 < 350) {
   Serial.println(" - Dim");
   myservo1.write(0);                                     //Falls Wert kleiner als 350, bewegen auf 0°
 }
}

Mit dem mitgelieferten Servo vom Arduino Starter Kit funktioniert das bewegen des Servos einwandfrei jedoch hab ich mir vier andere Servos gekauft und zwar die HK-5320 Ultra-Micro Digital Servos und sie drehen sich nicht, obwohl ich alles gleich anstecke wie davor..
Wo könnte hier das Problem liegen ? (es ist nur ein Servo angesteckt)

Was genau funktioniert nicht.

Einfach nur "es funktioniert nicht", ist zu dürftig.

Ich rate mal, der Strom reicht nicht aus.

Der HK 5320 Servo dreht sich nicht mit diesem Programm und steht halt immer an der gleichen Stelle..
Aber wenn der Strom nicht ausreicht würde dürfte sich doch der mitgelieferte Servo ebenfalls nicht drehen oder?

MatthiasR:
....
Aber wenn der Strom nicht ausreicht würde dürfte sich doch der mitgelieferte Servo ebenfalls nicht drehen oder?

Wie kommst du da drauf ?
Jeder Servo (leider lieferst du keine Daten oder Links zu deinen Teilen) hat seine eigene, andere Stromaufnahme.
Ich kann die nicht alle kennen.

Anderer Fehler könnte ein falsch angeschlossener Servo sein.

Also hier ist der Link zum Servo:

Und ich bin mir sicher, dass er richtig angesteckt ist, da er auch mit dem Beispielprogramm hier funktioniert und sich vollständig dreht

#include <Servo.h>

Servo myservo;  

int pos = 0;   

void setup() {
 myservo.attach(9);
}

void loop() {
 for (pos = 0; pos <= 180; pos += 1) { 
   // in steps of 1 degree
   myservo.write(pos);             
   delay(15);                   
 }
 for (pos = 180; pos >= 0; pos -= 1) { 
   myservo.write(pos);            
   delay(15);                    
 }
}

Da du anfangs von 4 Servos schriebst, hatte ich das auch so angenommen.
So steht es im Sketch......der leider sehr schlecht zu lesen ist.

Setze bitte alle deine Sketche in Code-Tags, dazu Schaltfläche </> verwenden.
Oben links im Editorfenster. Das kannst du auch nachträglich mach, damit alle den gut lesen können.

Evtl. liegt dein Problem auch an den Pins.
D0 und D1 solltest du nicht verwenden, die sind schon vom USB-Port belegt.

Dein Servo ist kein Link, das ist eine URL, die kann ich mobil nicht öffnen.

Okay ich hab das ganze jetzt einfach abgekürzt, dürfte verständlicher sein :smiley:

Und warum gehst du nicht auf meine Bitte ein ?
Verwende Code-Tags, das ist so üblich.

Was sagt denn der serielle Monitor, welcher Wert wird angezeigt ?

also wenn ich den Lichtsensor nicht beleuchte, dann wird ein Wert von ca. 100 ausgegeben und wenn er beleuchtet wird dann wird ein Wert von 800 angezeigt.

Warum benutzt Du nicht endlich Codetags?

Gruß Tommy

Zeigt der serielle Monitor "dark" oder "dim" an ?

Hallo,
wenn es mit dem Servo aus dem Kit funktioniert, mit den neuen Servos aber nicht, wird es wohl an den Servos liegen. :wink:

Und das ist auch verständlich. Du steuerst nur 2 Positionen an: 90 und 0 Grad. Bei 0 erzeugt die Servolib einen Impuls, der deutlich kürzer als der nominale Mindestwert von 1ms ist. Einfache analoge Servos machen das mit. Digitale Servos überprüfen die Pulslänge, und wenn sie ausserhalb ihres Drehbereiches ist, ignorieren sie das. Dein Servo stellt sich also auf 90° und bleibt da stehen, da es den 0° Impuls ignoriert.

Du musst die Impulsgrenzen, die die Lib für 0° bzw. 180° ausgibt, an deine Digitalservos anpassen.

Mit

myservo.attach(9, 1000,2000);

sollte es auf jeden Fall funktionieren, denn das sind die nominellen Werte für die kleinste und größte Impulsbreite. Inwieweit dein digitales Servo auch noch kleinere bzw größere Pulsweiten mitmacht, musst Du ausprobieren.

Hallo,

Alles was man zu dem Servo findet:

HK-5320 Ultra-Micro Digital Servo

Spec.
Gewicht: 1,7 g
Geschwindigkeit: 0.07sec 60deg @ 2.8V / 0.05sec 60deg @ 4.2V
Drehmoment: 0,05 kg @ 2.8V / 0.075kg @ 4.2V
Totband: <4us
Stecker: Micro JST - 1.25 Pitch

Der läuft mit einer Spannung von bis zu 4,2V. Also für nen S1 (1 zellen LiPoly Akku) gedacht.

Grüße,
Donny