Forum: Mikrocontroller und Digitale Elektronik analogRead läßt servo verstummen


von Carsten H. (enavantblabla)


Angehängte Dateien:

Lesenswert?

hallo liebes forum,

ich habe ein problem mit einer servo-steuerung über arduino. über zwei 
potentiometer soll ein servo gesteuert werden. ein poti ist für die 
stellung des servos, der zweite poti realisiert eine "shutter"-funktion, 
also der servo bewegt sich von seiner ausgangsstellung 30° nach links 
und wieder zurück. über den poti wird die geschwindigkeit dieser 
bewegung gesteuert. (ca. von 0/min bis 20/min)
mein programm dazu ist vielleicht nicht das schönste und schlankeste, 
funktioniert jedoch eigentlich. es hatte den makel, dass das einlesen 
des poti-wertes über analogRead schwankende werte liefert und der servo 
damit etwas zuviel hin- und herspringt. um dieses problem zu beseitigen, 
wollte ich neben einer hysterese die werte des potis 10x hintereinander 
einlesen lassen und dann mitteln.
und da sitze ich jetzt seit stunden vor und komm nicht weiter:
mein programm liefert mir zu jedem zeitpunkt (über serielle ausgabe 
tausendfach gegengecheckt) für alle größen die richtigen werte; also die 
stellung der potis werden zu jedem zeitpunkt richtig erkannt; die 
berechnungen kommen hin; das programm hängt sich nicht auf, sondern 
liefert stets alles so, wie es sein soll. jedoch: der servo bewegt sich 
nicht - kein mucks zu hören oder zu sehen.
nehme ich hingegen im code das zehnmalige auslesen und mitteln des 
poti-wertes weg, stellt sich der motor, wie er soll (dann machen aber 
die schwankenden poti-werte probleme...)
nun habe ich gesucht und wenig gefunden; ein delay hinter analogRead 
bringt nichts.
vermutlich hat es was mit der größe des potis zu tun (180k)..? aber wenn 
das der grund sein soll, verstehe ich nicht, warum ich mir meine werte 
direkt vor und nach dem befehl myservo.write() ausgeben lassen kann, und 
sie immer stimmen, der motor sich mit diesen werten jedoch nicht bewegt. 
wie gesagt, kürze ich die mittelung raus, funktioniert es. und die 
mittelung funktioniert auch...
weil es im gleichen aufbau mit weniger analogRead alles klappt, schließe 
ich eine zu geringe stromversorgung als fehlerursache aus...
über anregungen wäre ich sehr dankbar, ich versteh es einfach nicht.
was macht dieses analogRead mit dem arduino? warum wäre 10k poti besser 
als 180k?
gute nacht euch allen und danke für etwaige hilfe,
carsten
und ich bin noch anfänger, bitte nicht über den schlampigen code 
schimpfen...
p.s. nochmal nachgemessen: der arduino sendet einfach kein signal am 
servo-pin. doch es liegt nicht am pin, der funktioniert beim 
servo-beispielprogramm einwandfrei...

von Carsten H. (enavantblabla)


Lesenswert?

...im quelltext muss es heißen:
int pos_average[10], shut_average[10];
anstelle von
int pos_average[5], shut_average[5];

aber hat mit dem problem nichts zu tun und ist generell etwas unnütz, so 
wie es dann im code realisiert wurde. is aber auch ncit schlimm....

von Bastian W. (jackfrost)


Lesenswert?

Du greifst auf die arrays falsch zu.

Ein Array mit n Elementen hat immer den Index 0 bis n-1.

Du greifst aber auf 1 bis n zu. Das Element mit dem Index n gibt es 
nicht. Sollte der MC doch an diese Adresse schreiben wird die Variable 
die da steht überschrieben.

Deine for Schleife müsste lauten
1
   for (int i=0; i<Anzahl; i++)

Gruß JackFrost

: Bearbeitet durch User
von Carsten H. (enavantblabla)


Lesenswert?

Danke jackfrost! Das wars! Schönen Tag dir noch...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.