Forum: Mikrocontroller und Digitale Elektronik Plotclock zusammenbauen und programmieren


von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ihr lieben :)

ich habe durch Zufall auf Hackaday ein interessantes cooles projekt 
gefunden nämlich eine Plotclock. Wie sie funktioniert und was das ist 
hier unter im Link zufinden
=====================================================================
http://wiki.fablab-nuernberg.de/w/Ding:Plotclock

Zusammengebaut ist es alles jedoch einwandfrei funktioniert es nicht. 
Ich hab zwar einige Teile im Code verstanden was da gemacht wird so 
genau bin ich mir bei jeder funktion nicht so sicher wie was macht die 
funktion void bogenUZS oder void set_xy

hab einiges auch im Code geändert z.b dass er zu Begin direkt zum 
Wischer fährt und nicht schon vorher mit dem wischen fährt.
Was auch noch nicht so funktionert ist das richtige schreiben ohne 
realtime clock und dass er mit dem Stift genau auf dem wischer geht kurz 
alles sauber wischt und dann wieder mit dem Wischer zurückfährt und erst 
dann mit dem schreiben anfängt.

Ich füge mal den code gerne dabei. Hoffe ihr könnt was damit anfangen

danke schonmal:)

Achja die Calibrierung hat soweit funktioniert nach der anleitung

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

falls der code nicht gelesen werden kann hier stelle ich ein anderes 
format rein :)

von Sabine W. (sabine_w)


Lesenswert?

bogenUZS zeichnet einen Bogen und set_XY bewegt den Stift zu einer 
bestimmten Position.

von joo (Gast)


Lesenswert?

Hier kurz die "Abfolge" der Funktionen:

number:
Bildet Ziffern mittels drawTo (für Linien) und bogen Funktionen

bogenXZS:
Zeichnet Kreisbögen mittels kurzer drawTo Liniensegmente (U/G: 
Uhrzeiger/Gegenuhrzeigersinn)

drawTo:
Die eigentliche Zeichenfunktion, unterteilt Liniensegmente in Punkte 
(set_XY) mit ~0,1mm Abstand.

set_XY:
Rechnet die geforderten X/Y Punkte in Servowinkel um (inverse 
Kinematik).

Für den Aufbau ist vorallem die korrekte Kalibrierung der Servos 
wichtig, so dass der eingestellte "Softwarewinkel" dem der Realität 
entspricht

von chris (Gast)


Lesenswert?

Wie ist denn die Auflösung, laut SW Kommentar sollte dieser ca 0.25mm 
sein.
Trifft dies zu ?

von Sabine W. (sabine_w)


Lesenswert?

Wie groß ist den das Spiel? Ich habe am Wochenende selber ein bisschen 
mit zwei Billig-Schrittmotoren am Raspberry rumgebastelt, und anfangs 
war das gezeichnete schon etwas krumm und schief, weil es doch einen 
ziemlichen Versatz bei Bewegungen in die eine und in die andere Richtung 
gab. Liess sich aber halbwegs beherrschen und ich konnte nette Sachen 
damit machen. Nur das Anheben des Stiftes habe ich noh nicht gelöst 
gekriegt.
Hast du dir die Teile selber mit nem 3D-Drucker gedruckt, oder 
lasergeschnittenen Teile benutzt?

von Rene H. (Gast)


Lesenswert?

Cooles Projekt! Ich werde mal den 3D Drucker anwerfen und mir die Servos 
besorgen.
Mal sehen wie das klappt.

Grüsse,
René

von chris (Gast)


Lesenswert?

Was ist der Verfahrensweg des Stiftes ?

von Adrian (Gast)


Lesenswert?

Sabine W. schrieb:
> Wie groß ist den das Spiel? Ich habe am Wochenende selber ein
> bisschen
> mit zwei Billig-Schrittmotoren am Raspberry rumgebastelt, und anfangs
> war das gezeichnete schon etwas krumm und schief, weil es doch einen
> ziemlichen Versatz bei Bewegungen in die eine und in die andere Richtung
> gab. Liess sich aber halbwegs beherrschen und ich konnte nette Sachen
> damit machen. Nur das Anheben des Stiftes habe ich noh nicht gelöst
> gekriegt.
> Hast du dir die Teile selber mit nem 3D-Drucker gedruckt, oder
> lasergeschnittenen Teile benutzt?

Also da musst du einmal mit der funktion lift(0) für absetzen und 
lift(1) fürs aufsetzen arbeiten.
Dies habe ich alles in der void setup funktion reingeschreiben. Jedoch 
macht der eig nur eins von beiden und ich versuche erstmal dasss erzum 
wicher geht unn den stift da eingsteckt und dann mit dem wischen 
anfängt.

Also mit  drawTo(22.5, 16.5); ist er ungefährt beim wischer oben rechts 
wie er auch im video dahin geht. Aber wenn ich es klappt nichdt so dass 
er erst den stift an hebt mit lift(1) zum wischer geht lift(0) nach 
unten geht und dann beginnt zu wischen und wenn er fertig damit geworden 
ist den wischer an seienm alten platz stellt und erst dann schreibt.

Ich weiss gerade nicht wo in dem code er mit dem wischen anfängt.
Meine zweite Frage ist zeichnet er eig die Zahlen eigentlich richtg? 
könnte ich das z.b in der Calibration mal testen ? Wenn ja wie müsste 
ich dass dann machen stehe gerade echt etwas auf dem Schlauch danke :)

von Adrian (Gast)


Lesenswert?

chris schrieb:
> Was ist der Verfahrensweg des Stiftes ?

Zunächste wischt er und nach jeder minute schreibt er die aktuelle 
Uhrzeit auf und dann wischt er sie nach einer minute

von chris (Gast)


Lesenswert?

Kannst du mir das bitte ausmessen, wie groß der Verfahrensweg ist ?
Hintergrund ist, daß ich die Konstruktion gerne für eine andere 
Anwendung
verwenden würde.

Also das Wischen, das ist die Nummer 111     number(3, 3, 111, 1);
Und die Doppelpunkte sind nummer 11 also     number(28, 25, 11, 0.9);
Du könntest auch
#define WISCHEN     111
#define DOPPELPUNKT 11

dazuschreiben, und dann
 number(3,3,WISCHEN,1)
verwenden, dasselbe mit dem Doppelpunkt, dies sollte es dann leserlicher 
machen, aber auch im switch statement sollte man 111 und 11 mit WISCHEN 
und
DOPPELPUNKT ändern, wie ev. auch ein AUSRUFEZEICHEN, welches z.B. vor 
der
Sommer/Winterzeit Umstellung anstelle des Doppelpunktes gezeichnet 
werden kann, als hypotetisches Beispiel.

von Karl H. (kbuchegg)


Lesenswert?

chris schrieb:
> Kannst du mir das bitte ausmessen, wie groß der Verfahrensweg ist ?

Zeichne dir einen Kreis mit dem Radius der Summe der beiden jeweiligen 
Schenkel um den Drehpunkt des jeweiligen Servos. Die Fläche, die von 
beiden Kreisen überdeckt wird ist die Fläche, die du mit dem 
Schnittpunkt der beiden Arme nach aussen erreichen kannst. Mehr geht 
prinzipiell nicht, denn mehr als einen komplett gestreckten Arm an einem 
der beiden Servos kannst du nicht haben.
Ein klein wenig kannst du noch zugeben, weil der Stift ja nicht in 
diesem Schnittpunkt sitzt, sondern dazu einen kleinen Offset hat.

Es gibt noch weitere begrenzende Kurven. Mit ein wenig nachdenken 
findest du die aber leicht.

: Bearbeitet durch User
von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Kleine Bemerkung(en) am Rande:

1. Ich finde die Idee / das Konzept äußerst originell.

2. Die Schrift sollte um 180° gedreht werden.

3. Würde man die analogen Servos durch digitale Servos oder sogar
   Festplattenarme ersetzen, könnte man die Schreibgeschwindigkeit
   enorm erhöhen...

von joo (Gast)


Lesenswert?

noch paar Hinweise für die, die zurzeit am basteln sind:

Für die "Sauberkeit" wichtig sind primär 2 Faktoren: Die Lagerung der 
Servobefestigung muss ziemlich spielfrei sein und die Armgelenke des 
Stifthalters müssen möglichst frei beweglich sein, da selbst kleine 
Kräfte den normalen billig Servos zu schaffen machen. Wenn das alles 
stimmt ist mit vernünftiger Kalibrierung ne Schrift wie im Video 
möglich.

Klar kann man das ganze auch mit Steppern, Kugellagern etc realisieren, 
aber das Projekt zielt auf die Verwendung der üblichsten billigsten 
Materialien ab, die man im bestfall eh rumliegen hat.

von chris (Gast)


Lesenswert?

Ich bastle auch, mit Holz und Scharnieren, und etwas anderer Z Achsen.
Da bin ich noch am tüfteln. Verfahrensweg 40x100mm ca.
Zusammen mit einer Drehscheibe sollte dies mein neuer Lötroboter werden,
um am Platinenrand THT Bauteile zu löten.

von Sabine W. (sabine_w)


Lesenswert?

Es gibt auch Stepper, die kaum teurer als billige Servos sein dürften. 
Weil ich von denen halt welche rumzuliegen hatte, habe ich was aus denen 
gebaut:
Beitrag "Plotter aus Billig-Steppern ( 28BYJ-48)"

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

ich komme gerade ehrlich gesagt nicht mehr weiter mit mein projekt 
zuhause:( was als erstes nicht mal funktioniert dass er zum wischer 
hinfährt und den annimmt dann wischt und den wieder zurückstellt.

Und ich weiss nicht ob er die zahlen richtig schreibt. Das funktioniert 
ebenfalls nicht hab mich genau an die Anweisung des Tutorials gehalten.

Welche Befehle muss ich denn da schreiben?

von joo (Gast)


Lesenswert?

hast du evtl. Bilder/Videos vom Aufbau? Benutzt du nen Arduino oder nen 
rohen AVR? Die Servofaktoren sind mit 680 und 550 ziemlich 
unterschiedlich, sollten eigenltich kaum abweichen... oder verwendest du 
zwei verschiedene Arten Servos links und rechts?

von Sabine W. (sabine_w)


Lesenswert?

Ich sehe in dem Programm nur eine Sammlung von Funktionen. Braucht es da 
keine main-Funktion, die erstmal setup() und dann loop() aufruft?

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

ich verwende für meine plotclock ein ardunino und dementsprechend die 
arduino software.

Verwende  als servo den HS-55 Multiplex. Die Kalibrierung habe ich so 
eingestellt dass die Servos 90 drehen und den gleichen Nullpunkt haben. 
Und wenn ich dann den Griff auf die Motoren drauf setzte und die 
Kalibrierung nochmalstarte dann  bewegen sich die Arme wie auf dem bild 
hier: http://wiki.fablab-nuernberg.de/w/Datei:calibration.jpg

Jedenfalls die Kalibrierung bei mir funktioniert aber der rest leider 
nicht. Im Anhang findet Ihr zwei bilder wie das ganze gerade bei mir in 
echt aussieht.

von Sabine W. (sabine_w)


Lesenswert?

Wie bewegt sich den dein Teil bisher? kannst ja erstmal das Wischen 
weglassen und schauen, ob überhaupt Ziffern gezeichnet werden.

von Adrian (Gast)


Lesenswert?

Sabine W. schrieb:
> Wie bewegt sich den dein Teil bisher? kannst ja erstmal das
> Wischen
> weglassen und schauen, ob überhaupt Ziffern gezeichnet werden.

ja das habe ich auch versucht in der luft wenn er was zeichnet erkenne 
ich schon die umrisse einer zahl aber wenn er etwas  aufs papier 
zeichnen soll kommen nur striche heraus gerade.

von Sabine W. (sabine_w)


Lesenswert?

Dann ist das Spiel der Konstruktion vielleicht zu groß. Wie sehr läßt 
sich denn der Stift hin- und herbewegen, wenn du an ihm wackelst?

Versuche mal, einzelne Ziffern vergrößert zu zeichnen, etwa mit
number(20,15, 8, 2); eine größere 8 zu zeichnen.

von joo (Gast)


Lesenswert?

Ich persönlich hab beim Testen mir öfter mal einfach ein Rechteck mit:

    drawTo(5, 45);
    drawTo(65, 45);
    drawTo(65, 5);
    drawTo(5, 5);

in Dauerschleife (bei arduino innerhalb der loop() ) laufen lassen, 
dabei den Lift-Servo abgestöpselt und manuell den Stift auf die 
Zeichenfläche malen lassen. Wenn die Linien gerade gezeichnet werden, 
sollte auch der Rest funktionieren.

Auf der Thingiverse Seite haben schon manche das Problem gehabt, dass 
die Servos invertiert angesteuert werden mussten, kann sein das da dann 
auch die komplette Kalibrierung nichts bringt.

dazu einfach in der set_XY Funktion

servo2.writeMicroseconds(floor(((a2 + a1 - M_PI) * SERVOFAKTORLEFT) + 
SERVOLEFTNULL));

in

servo2.writeMicroseconds(3000-floor(((a2 + a1 - M_PI) * SERVOFAKTORLEFT) 
+ SERVOLEFTNULL));

abändern, das gleiche bei servo3 etwas später im code

von Adrian (Gast)


Lesenswert?

joo schrieb:
> Ich persönlich hab beim Testen mir öfter mal einfach ein Rechteck
> mit:


hab das auch mal so ausprobiert wie beschreiben und den den code genauso 
verändert jedoch bekomme ich immer nur ein halbes ordentliches viereck 
raus. der untere Teil sieht nicht geradlinig aus:(

von joo (Gast)


Lesenswert?

hmm, kanns sein, dass deine Arm-Gelenke bei spitzen Winkeln schwergängig 
sind? Hatte bei meinen Tests auch links, oben, rechts schön gerade 
Linien und unten auf einmal iwas halbkreismäßiges. Lag bei mir entweder 
daran, dass die Servos am Anschlag waren, oder schlicht die Gelenke zu 
schwärgängig für meine schwachbrüstigen Servos waren.

von Adrian (Gast)


Lesenswert?

joo schrieb:
> servo2.writeMicroseconds(3000-floor(((a2 + a1 - M_PI) * SERVOFAKTORLEFT)
> + SERVOLEFTNULL));

Ich habe nur diesen code in dem programm geändert und in der calibration 
die koordinaten eines Rechecks angegeben aber bekomme kein vernünftiges 
recheck raus. Hab die Servos so leicht wie möglich angeschraubt

von joo (Gast)


Lesenswert?

hm, ist schwierig ohne bilder/videos die Situation einzuschätzen.

Kurze Erklärung zu:
servo2.writeMicroseconds(3000-floor(((a2 + a1 - M_PI) * SERVOFAKTORLEFT) 
+ SERVOLEFTNULL))

Die Servosignale sind Pulssignale mit einer Pulszeit von 500-2500 µs 
wobei 500 µs = Anschlag rechts, 2500 µs = Anschlag links entspricht. In 
den meisten online-resourcen werden 1000-2000 µs angegeben, das 
entspricht jedoch nur einen Winkel von 90°, die meisten können 180°.

Zieht man den normal gebildeten Pulswert von 3000 ab, so erhält man den 
Wert für "invertierte" servos, da leider nicht alle Servos in die 
gleiche Richtung drehen.

a2 und a1 entsprechen den Winkeln in diesem Bild:

http://wiki.fablab-nuernberg.de/w/Datei:erklaerung.jpg

Abzüglich Pi, Multipliziert mit einem Kalibrierfaktor und addiertem 
Null-Offset ergibt das ganze den gewünschten Servo-Winkel.

Ich würde an deiner Stelle evlt. in der Hauptschleife nur diese eine 
servo2-Funktion kopieren und anstatt (a2 + a1 - M_PI) ne Laufvariable 
setzten (radian!) und schauen wie sich über den gesamten Winkelbereich 
der Servo verhält.

von Adrian (Gast)


Lesenswert?

> Ich würde an deiner Stelle evlt. in der Hauptschleife nur diese eine
> servo2-Funktion kopieren und anstatt (a2 + a1 - M_PI) ne Laufvariable
> setzten (radian!) und schauen wie sich über den gesamten Winkelbereich
> der Servo verhält.

wie setzte ich da ne laufvariable den da ein?

ich kenne nur eine for schleife als laufvariable?

von joo (Gast)


Lesenswert?

Beispiel:

#define STEP 0.001
float winkel = 0;
char richtung = 1;

im loop:

if (richtung) {
 winkel += STEP;
 if (winkel > M_PI) {
   richtung = 0;
 }
} else {
 winkel -= STEP;
 if (winkel < 0) {
   richtung = 1;
 }
}

servo2.writeMicroseconds(3000-floor(((winkel) * SERVOFAKTORLEFT)
+ SERVOLEFTNULL));

von Adrian (Gast)


Lesenswert?

danke :) aber hat wenig mir gebracht:( wenn ich die schleife in der 
setxy funktion mit einbinde dann macht der motor gar nichts sondern 
steht nur da und brummt vor sich hin. Leider funktionert nicht dass sich 
der Servo hin und her bewegt.

Wenn ich z.B eine gerade Linie zeichen möchte
z.B
     drawTo(50, 1;
     drawTo(50, 10);

dann kommt eher was bogenförmiges raus anstatt eine gerade Linie. Und so 
funktionert es auch mit dem Viereck.

Was machen den eig diese Variablen?

volatile double lastX = 75;
volatile double lastY = 47.5;

Mir ist da gerade durch den Sinn gekommen dass wenn die nicht mit meiner 
Plotclock stimmenn er vll wohlmöglich die Punkte woanders setzt als er 
sie eig setzen sollte.

Ich bin mir da nicht sicher und stelle deswegen vielleicht waage 
vermutungen auf.
Auch weiss ich bis jetzt überhaupt noch nicht ob er die Zahlen auch 
richtig schreibt. Ich weiss auch nicht wie ich dies am besten überprüfen 
sollte .

Hätte mal jemand eine beste Anleitung wie ich an sowas am besten ran 
gehen sollte könnte. Hat es schon bei jemanden geklappt der ein 
ähnliches problem wie ich hatte?

von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:

> Ich bin mir da nicht sicher und stelle deswegen vielleicht waage
> vermutungen auf.

Und das ist eigentlich auch das Hauptproblem.
Du gehst nicht systematisch an die Sache ran sondern hoffst dich 
irgendwie und ohne Kentniss der dahinterliegenden Mathematik 
(Trigonometrie) durchmogeln zu können. Und das funktioniert nun mal eben 
nicht.

> Hätte mal jemand eine beste Anleitung wie ich an sowas am besten ran
> gehen sollte könnte. Hat es schon bei jemanden geklappt der ein
> ähnliches problem wie ich hatte?


Leg die Plotclock erst mal beiseite und beschäftige dich damit, wie 
Servos angesteuert werden. Das ist dein erstes Ziel. Du musst vestehen, 
wie das eigentlich funktioniert - das ist unabhängig von der Plotclock. 
Die Plotclock fügt da dann näcmlich noch einen Teil Trigonometrie dazu, 
so dass das alles komplizierter wird. Daher: Plotclock erst mal 
weglassen (Mechanik von den Servos abbauen) und die Servos für sich 
alleine in den Griff kriegen.

Erst dann macht es Sinn, sich die mathematischen Grundlagen anzusehen, 
wie man die Winkel bestimmt, die die Servos anzufahren haben, damit die 
Bleistiftspitze auf der Zeichenfläche eine ganz bestimmte Position 
einnimmt. Aber das kommt später, erst mal müssen die beiden Servos 
unabhängig voneinander genau die Winkel anfahren können, die du für sie 
ausrechnest. Und das kontrollierst du am besten, indem du dich nicht auf 
die Scheren-Mechanik konzentrierst, sondern dich nur um die Servos 
selber kümmerst. Wenn du dich nicht darauf konzetrieren kannst, dann 
musst du halt diese Teile erst mal abbauen und dir eine einfachere 
Mechanik machen, auf die du dich konzentieren kannst ohne ständig 
abgelenkt zu werden. Ein paar simple Zeiger auf den Servo-Achsen, die 
dir einfach nur eine Richtung anzeigen, und die du zb mit einem 
Winkelmesser gegenüber der Basislinie kontrollierst, wirken da Wunder. 
Servo 1 auf 45° fahren lassen und kontrollieren, ob es das auch wirklich 
tut. Auch mit anderen Winkeln kontrollieren. Dann dasselbe Spiel mit dem 
anderen Servo. Sind die beiden Drehrichtungen identisch und so wie sie 
(laut Formel sein müssten). Sind die 0-Punktlagen dort wo sie sein 
sollten oder sind die Servohebel verdreht aufgesetzt? etc. etc. Alle 
Tests, die dir einfallen und die mit Servos alleine sinnvoll sind, ehe 
sie dann im Konzert miteinander spielen müssen.

Wenn ein komplexer Mechanismus nicht auf Anhieb funktioniert, dann ist 
es sinnlos den Mechanismus anzustarren. Der Weg, wie man solche Dinge 
löst, besteht darin, dass man Komplexität rausnimmt, indem man eben 
nicht den ganzen Mechanismus auf einmal betrachtet, sondern an einem 
Ende mit der simpelst möglichen Situation anfängt und dann sukzessive 
Komplexität ergänzt bis man erkennt, wo das Problem entsteht und wie man 
es lösen kann.

: Bearbeitet durch User
von joo (Gast)


Lesenswert?

Naja, bei dem Plotclock Projekt war das Hauptziel, dass es schnell genug 
funktioniert, aber viel Potential für Verbesserung und Erweiterung 
behält.

YouTube nach zu urteilen (nach Plotclock gesucht), hat das wohl so auch 
grob geklappt. Mit etwas funktionierenden anzufangenund und dann Stück 
für Stück abzuändern und so die Auswirkungen zu erleben ist oft 
wesentlich effektiver als von 0 zu versuchen sich mit etwas zu 
beschäftigen, bei dem man dann ewig sich mit trivialen Fehlern 
rumschlägt.

Für Adrian:
Versuche bitte den Plotclock Code so unverändert wie möglich nach 
Anleitung zum laufen zu bekommen. Wenns dann immernoch nicht klappt dann 
mach bitte ein Video im Kalibrations-Modus und im normalen Betrieb, 
anders wird man schwer helfen können.

von Karl H. (kbuchegg)


Lesenswert?

joo schrieb:

> für Stück abzuändern und so die Auswirkungen zu erleben ist oft
> wesentlich effektiver als von 0 zu versuchen sich mit etwas zu
> beschäftigen, bei dem man dann ewig sich mit trivialen Fehlern
> rumschlägt.

ahm,
Ja genau. Ich sehs, wie das klappt.
Nach fast einem Monat hat er seine Probleme immer noch nicht gelöst.

Das Problem ist nicht, dass das so schwierig ist. Dsa Problem ist, dass 
diese Leute nie simple Fehlersuch und Behebungsstrategien lernen. Das 
wäre eigentlich die Hauptlektion aus dem (seinem) Disaster, das ihm auch 
in Zukunft noch zu statten kommt: Wie kann ich rausfinden, was da 
wirklich abgeht?
In der Programmierung, besser gesagt 'gerade in der Programmierung', ist 
das eine ungemein wichtige Fähigkeit.

: Bearbeitet durch User
von Adrian (Gast)


Lesenswert?

Ist ja nicht so als würde ich gar nichts machen! Im Übrigen funktioniert 
es jetzt alles wie ich es haben möchte. Er schreibt vernünftig die 
Zahlen auf dem Tisch. Jedoch stört mich eine Sach gewaltig und zwar 
möchte ich dass die Zahlen gleich groß und in einer Zeile geschrieben 
werden. Er schreibt die unterschiedlich groß und nicht auf gleicher 
ebene. Auch sieht man den Doppelpunkt nicht so richtig. Beim zweiten 
Punkt des Doppelpunktes überschreibt er dies.

Kann ich dies mit der
number(48, 25, (minute() - i * 10), 0.9);

wobei 48 die x-achse ist und 25 die größe der schrift?
Ist dies richtig?

von joo (Gast)


Lesenswert?

Karl Heinz schrieb:
> Das Problem ist nicht, dass das so schwierig ist. Dsa Problem ist, dass
> diese Leute nie simple Fehlersuch und Behebungsstrategien lernen. Das
> wäre eigentlich die Hauptlektion aus dem (seinem) Disaster, das ihm auch
> in Zukunft noch zu statten kommt: Wie kann ich rausfinden, was da
> wirklich abgeht?

Klar, aber speziell wenn man anfängt zu lernen ist es äußerst schwierig 
sich überhaupt zurechtzufinden. Strategien zur Fehlerbehebung entwickeln 
sich zwangsweise wenn man irgendwann eigene Sachen entwickelt, in diesem 
Fall gings ja ehr darum ein bestehendes dokumentiertes Projekt überhaupt 
zum laufen zu bekommen.

Adrian schrieb:
> wobei 48 die x-achse ist und 25 die größe der schrift?
> Ist dies richtig?

siehe Code:
1
// Writing numeral with bx by being the bottom left originpoint. Scale 1 equals a 20 mm high font.
2
void number(float bx, float by, int num, float scale)

Alles weitere liegt jetzt an dir :)

von Sabine W. (sabine_w)


Lesenswert?

Mach doch mal ein Bild von deinen jetzigen Ziffern, damit lässt sich 
vielleicht etwas leichter beurteilen, was noch zu verbessern wäre.

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Hier so sieht das gerade aus. Leider bin ich noch sehr unzufrieden. Den 
Doppelpunkt macht er noch nicht richtig und die Zahlen sind etwas schief

von Karl H. (kbuchegg)


Lesenswert?

Es gibt nur 4 Möglichkeiten

* entweder sind deine geometrischen Werte für die Arme falsch
* oder in der inversen Kinematik ist noch ein Fehler (hab die Mathe noch 
nicht kontrolliert
* oder deine Servo Werte für die Umrechnung Winkel zu Pulslänge bzw. die 
0-Punktsverschiebung der Winkel stimmt nicht.
* oder es gibt noch irgendwo einen Programmfehler in der Art, dass 
irgendwo eine implizite Konvertierung double auf int statt findet, die 
nicht sein sollte.


Punkt 1 und 3 sind Kalibrationssachen. Punkt 3 könnte man leicht 
aussschliessen, indem man sich da mal ein Testprogramm dafür macht, 
welches die Servos den Winkelbereich durchfahren lässt und sich am 
realen Objekt davon überzeugt, dass die geforderten Winkel auch 
tatsächlich erreicht und eingehalten werden. Hat man das überprüft, kann 
man Punkt 3 abhaken

Punkt 1 ist eine reine Messache. Am realen Arm die Werte zwischen den 
Lagermittelpunkten nochmal nachmessen und kontrollieren ob die 
eingetragenen Werte wirklich damit übereinstimmen

Punkt 2 ist eine Sache, die mit der im verlinkten Artikel angegebenen 
Zeichnung kontrolliert werden müsste. Stimmt die Herleitung der Formeln? 
Wahrscheinlich wird sie stimmen, sonst würde es beim Autor auch nicht 
funktionieren (obwohl: in einem seiner Videos sehen die gemalten Zeichen 
auch etwas seltsam verzerrt aus. Die Mathe würde ich daher noch mal 
durchgehen, der traue ich erst mal nicht)

Nachdem Punkt 2 kontrolliert worden ist, würde ich mich auch mal auf das 
Programm und da speziell auf die Funktion SetXY stürzen und nachsehen, 
ob die hergeleitete Mathematik auch korrekt umgesetzt wurde. Spezielles 
Augenmerk auf mögliche implizite Konvertierungen.


Und dann würde ich zum Testen auch keine Buchstaben malen lassen, 
sondern die Plotclock kriegt POsitionen, die sie mittels SetXY 
anzufahren hat und dann messe ich mir am Zeichentisch aus, ob der Stift 
auch tatsächlich dort gelandet ist, wo er hin muss. Wenn ich vorher die 
Servos kontrolliert habe UND die geometrischen Dimensionen korrekt sind, 
dann kann eine Abweichung davon nur in einer fehlerhaften Herleitung der 
Mathematik begründet werden. D.h. Ich nehm mir einen dieser fehlerhaft 
angefahreren Punkte her und mach mal händisch die ganze Mathematik bzw. 
kontrolliere mittels Zeichnung ob das Ergebnis stimmen kann (igitt, 
igitt da muss man ja Papier, Bleistift, Zirkel und Winkelmesser 
verwenden! Keine Angst, alternativ geht auch ein CAD wenn man damit 
umgehen kann). Als Ergebnis davon ergeben sich auf meinem Papier Winkel, 
die die Servos realisieren müssen. Dabei gibt es jetzt 2 
Fragestellungen: Kriegt das Programm dieselben Winkel raus wie ich und 
zweitens: stehen die Servos auch tatsächlich auf diesen Winkeln.


So würde ich die Sache angehen. Und dann ist das Problem in einem 
Nachmittag, längstens zwei, gefixt und nicht nach einem Monat noch immer 
ungelöst.

Aber solange ich den Plotarm mittels SetXY auf eine Koordinate schicke 
und der Stift trifft diesen Punkt nicht, solange brauch ich gar nicht 
erst mit darauf aufbauenden Funktionen wie Buchstaben malen anfangen. 
Ein Plotter, der innerhalb seiner Zeichenfläche eine angegebene 
kartesische Koordinate nicht trifft, ist nichts wert. Das können auch 
darauf aufbauende Softwareschichten nicht mehr ausgleichen. Dieser Teil 
(SetXY) muss innerhalb der kompletten Zeichenfläche korrekt arbeiten. 
Das kann man testen und wenn das Ergebnis nicht zufriedenstellend ist, 
dann muss man eben den Fehler suchen. Siehe vorhergehende Überlegungen.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> Punkt 1 und 3 sind Kalibrationssachen. Punkt 3 könnte man leicht
> aussschliessen, indem man sich da mal ein Testprogramm dafür macht,
> welches die Servos den Winkelbereich durchfahren lässt und sich am
> realen Objekt davon überzeugt, dass die geforderten Winkel auch
> tatsächlich erreicht und eingehalten werden. Hat man das überprüft, kann
> man Punkt 3 abhaken

Und wenn ich mir die Bilder vom 11.05.2014 00:33 so ansehe, dann ist da 
von rechten Winkeln nicht viel zu sehen, selbst dann wenn ich einen 
gewissen optischen Versatz durch die unvermeidliche perspektivische 
Verzerrung auf Photos berücksichtige.

Wenn die Kalibration so erfolgen muss, dass der Hebelarm senkrecht zur 
Servoachse wegstehen soll, dann muss der auch senkrecht wegstehen. Und 
zwar nicht ungefähr oder nahe drann, sondern so genau wie möglich. Das 
der Winkel des linken Servos in 080b6f53.xl.jpg keine 90 Grad sind, bzw. 
im anderen Bild das rechte Servo mehr als 90° gefahren ist, das kann ich 
von hier sehen ohne vor Ort zu sein.

: Bearbeitet durch User
von Adrian (Gast)


Lesenswert?

Eine sehr schöne Anleitung an der ich mich sehr gut orientieren kann. 
Leider kann ich Punkt 3 nicht überprüfen ich weiss nicht genau wo ich 
das testprogramm schreiben soll.
Alles in der Calibration?


Hab versucht ein Testprogramm zuschreiben wo ich überprüfen möchte ob 
auch die Winkel der servos eingehalten werden. Jedoch wenn ich das 
Programm laufen lasse bleiben nur die Arme gestreckt und mehr kommmt da 
auch nicht.

Hier mein testprogramm:

#define STEP 0.001
float winkel = 0;
char richtung = 1;

if (richtung) {
 winkel += STEP;
 if (winkel > M_PI) {
   richtung = 0;
 }
} else {
 winkel -= STEP;
 if (winkel < 0) {
   richtung = 1;
 }
}

servo2.writeMicroseconds(floor(((winkel) * SERVOFAKTORLEFT)
+ SERVOLEFTNULL));

servo3.writeMicroseconds(floor(((winkel) * SERVOFAKTORLEFT+ 
SERVORIGHTNULL))
+ SERVOLEFTNULL));

von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:
> Eine sehr schöne Anleitung an der ich mich sehr gut orientieren kann.
> Leider kann ich Punkt 3 nicht überprüfen ich weiss nicht genau wo ich
> das testprogramm schreiben soll.

Du kannst nicht schreiben?`
1
void loop()
2
{
3
  double winkel1 = 90 * M_PI / 180.0;
4
  double winkel2 =  0 * M_PI / 180.0;
5
6
  servo2.writeMicroseconds(floor(((winkel1) * SERVOFAKTORLEFT) + SERVOLEFTNULL));
7
8
  servo3.writeMicroseconds(floor(((winkel2) * SERVOFAKTORRIGHT) + SERVORIGHTNULL));
9
}

(mit dem Rest des Programmes so wie er ist)
Dann muss das linke Servo auf 90° stehen und das rechte auf 0°

Und dann tauscht du eben bei winkel1 bzw. winkel2 die Werte gegen andere 
aus. zb winkel1 auf 0 und winkel2 auf 90
1
  double winkel1 =  0 * M_PI / 180.0;
2
  double winkel2 = 90 * M_PI / 180.0;
und dann muss das andere Servo auf 90° stehen

WEnn nicht: Die Werte in SERVOFAKTORLEFT, SERVOFAKTORRIGHT bzw. die 
entsprechenden Null-Punkts Werte verändern.


Also: die FAKTOR Werte beeinflussen den Winkel der überstrichen wird. 
Die NULL Werte bestimmen, wo der gedachte 0 Winkel rund um das Servo 
ist.
Wenn man nicht mit WInkelmesser an die Sache rangeht, dann ist das 
zugegebenermassen ein bischen eine Spielerei, aber machbar. Ohne 
Winkelmesser:

Erst mal mit den NULL Werten die 0° Position der Hebel so ausrichten, 
dass die Hebel in der Flucht der Servo-Basislinie stehen. Danach auf 90° 
gehen und mit den FAKTOR Werten so einrichten, dass der jeweilige Hebel 
90° zu dieser Basislinie steht. Noch mal die 0 Position kontrollieren, 
nochmal die jeweiligen 90° Positionen kontrollieren und dann ist die 
Kalibrierung der Winkel-Servo Konstanten erledigt und abgeschlossen.

wo liegt da jetzt das genau Problem?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Keine Ahnung, welcher Teufel mich da geritten hat.
Hab den Code noch mal nachgebessert. Die Umrechnung eines WInkels von 
Grad auf Radianten ist natürlich
1
   Radiant = Grad * PI / 180


Und es wär wahrscheinlich nicht schlecht, wenn man die Mechanik soweit 
schützt (sprich abbaut), dass dir deine Hebelchen nicht zerstört werden, 
wenn die Drehrichtungen massiv falsch sind.
Aber das ist nur so ein Gedanke.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:


> Hier mein testprogramm:

Selbst wenn es laufen würde: was willst du damit?
Wie misst du denn mit einem Geodreieck (oder einem anderen rechten 
Winkel), ob die Arme 90° vom Servo abstehen, wenn sich die Arme dauernd 
bewegen?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Bzgl. Mathe

Den ersten Teil der Berechnung für das linke Servo kann ich 
nachvollziehen. Den zweiten Teil noch nicht ganz. Liegt aber daran, dass 
ich noch keine Zeichnung gemacht habe um zu sehen, welche Winkel da 
eigentlich voneinander abgezogen werden und ob das mit rechten Dingen 
zugeht. Es sieht aber nicht unplausibel aus.
Wenn ich Lust und Laune habe, schreib ich heute mal ein Testprogramm, 
welches die Mathe überprüft, indem sie die Vorwärtskinematik mittels 
Vektoren simuliert und nachsieht, ob die ermittelten Winkel der inversen 
Kinematik aus einer vorgegebenen Position auch tatsächlich diese 
Position ergeben.
Das wäre auch nicht ganz uninteressant, da man so ermitteln könnte, wie 
sich ein Positionierfehler der Servos auf die erzielte Genauigkeit in 
den Koordinaten auf der Zeichenfläche auswirkt und wie sich die 
verändert, je nachdem wo man auf der Zeichenfläche arbeitet.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> Erst mal mit den NULL Werten die 0° Position der Hebel so ausrichten,
> dass die Hebel in der Flucht der Servo-Basislinie stehen. Danach auf 90°
> gehen und mit den FAKTOR Werten so einrichten, dass der jeweilige Hebel
> 90° zu dieser Basislinie steht. Noch mal die 0 Position kontrollieren,
> nochmal die jeweiligen 90° Positionen kontrollieren und dann ist die
> Kalibrierung der Winkel-Servo Konstanten erledigt und abgeschlossen.
>

Wenn die 0 bzw. 90° Positionen dann mittels Kalbrierwerte stimmen, kann 
man natürlich auch mal zur eigenen Erbauung 45° bzw. 60° bzw. 30° 
einstellen und mit einem Zeichendreieck kontrollieren, ob das auch 
stimmt.
Notwendig sollte es eigentlich nicht sein, aber es macht auch ein wenig 
Spass, ist schnell gemacht und verschafft einem eine gewisse Beruhigung, 
dass auch wirklich winkelmässig erst mal alles in Ordnung ist.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> Und es wär wahrscheinlich nicht schlecht, wenn man die Mechanik soweit
> schützt (sprich abbaut), dass dir deine Hebelchen nicht zerstört werden,
> wenn die Drehrichtungen massiv falsch sind.
> Aber das ist nur so ein Gedanke.

Wenn die Richtungen massiv falsch sind: denk dran.
Anstatt 0° könnten es auch 180° sein, bzw. anstelle von +90° auch -90°. 
Ich hab mir im Code jetzt nicht angesehen, wo da die 0° anfangen und ob 
es nicht eigentlich 180° sein müssten bzw. ob die Winkel im mathematisch 
positiven Sinn gerechnet werden.

Wenn ein derartiger 'Vorzeichenfehler' vorliegt, dann kann es dir im 
schlimmsten Fall die Hebelchen um die Servos rumnudeln. Also Vorsicht 
und beim Einschalten sofort zur Stelle sein und abschalten, wenn das 
Servo in die falsche Richtung zu drehen anfängt.

von Adrian (Gast)


Lesenswert?

Vielen lieben Dank für die großartigen Infos, die hätte ich früher 
brauchen können dann wäre ich jetzt viel weiter. Soweit funktionert das 
Testprogramm. Stelle ich den winkel1 auf 0 grad und den winkel2 auf 90 
grad so erhalte ich das der linke servo auf 90 grad steht und der recht 
natürlich auf 0. Vertausche ich die Winkelwerten so steht aaber nicht 
das andere servo auf 90 grad ausser ich ändere was an den Null-Punkt 
Werten.

Weiter bin ich heute nicht gekommen. Mit der Servorechnung werde ich 
mich dann morgen beschäftigen. Falls du neue Erkenntnisse daraus 
gewonnen hast lass mich es wissen.

Ein paar Worte dazu:

>Wenn die Richtungen massiv falsch sind: denk dran.
>Anstatt 0° könnten es auch 180° sein, bzw. anstelle von +90° auch -90°.
>Ich hab mir im Code jetzt nicht angesehen, wo da die 0° anfangen und ob
>es nicht eigentlich 180° sein müssten bzw. ob die Winkel im mathematisch
>positiven Sinn gerechnet werden.

>Wenn ein derartiger 'Vorzeichenfehler' vorliegt, dann kann es dir im
>schlimmsten Fall die Hebelchen um die Servos rumnudeln. Also Vorsicht
>und beim Einschalten sofort zur Stelle sein und abschalten, wenn das
>Servo in die falsche Richtung zu drehen anfängt.

Bis jetzt hatte ich das Phänomen gehabt dass ich die Servos überdreht 
haben das auch die Heblechen darunter leiden mussten.

von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:
> Vielen lieben Dank für die großartigen Infos, die hätte ich früher
> brauchen können dann wäre ich jetzt viel weiter. Soweit funktionert das
> Testprogramm. Stelle ich den winkel1 auf 0 grad und den winkel2 auf 90
> grad so erhalte ich das der linke servo auf 90 grad steht und der recht
> natürlich auf 0. Vertausche ich die Winkelwerten so steht aaber nicht
> das andere servo auf 90 grad ausser ich ändere was an den Null-Punkt
> Werten.

An den Faktoren.

Mit den NULL Werten stellst du die 0 Achse ein. Mit den FAKTOR Werten 
wie weit das Servo dreht.

Sorry. Aber noch einfacher kann ich das nicht ausdrücken.
Und ja. Das bedeutet ein bischen probieren, bis die Werte stimmen.

von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:

> Weiter bin ich heute nicht gekommen. Mit der Servorechnung werde ich
> mich dann morgen beschäftigen. Falls du neue Erkenntnisse daraus
> gewonnen hast lass mich es wissen.

Ein erster schneller CHeck zeigt:

Die Mathematik scheint falsch zu sein.

setze ich bei den Geometrie-Werten
1
#define L1 35
2
#define L2 55.1
3
#define L3 13.2
4
5
// origin points of left and right servo
6
#define O1X 22
7
#define O1Y -25
8
#define O2X 47
9
#define O2Y -25

den in der Kalibrierung angegebenen Punkt
1
-3.0, 29.2
ein, dann errechnet der Originalcode die Servo-Winkel
1
links: -0.0246°
2
rechts: 95.16°

ok, die -0.0246° kann ich noch als 0 durchgehen lassen. Aber ~95° sind 
auch angenähert kein rechter Winkel.
D.h. die Kalibrierposition taugt schon mal nichts.
Und mit der anderen angegebenen Kalbrierposition sieht es nicht besser 
aus.


Rechne ich aber mit den angegebenen Winkeln vorwärts die Position der 
Stiftspitze aus, dann erhalte ich die Koordinaten
1
-14.07, 41.28

und das ist von der Originalposition von der weggerechnet wurde (-3.0, 
29.2) weit entfernt.
Erst konnte ich das gar nicht glauben, dass das rechnerisch so weit weg 
ist, ein paar Hunderstel hätte ich ja noch akzeptiert (wegen der 
Winkelfunktionen), also hab ich es mit einem CAD überprüft. Eine 
schnelle CAD Konstruktion mit den Armlängen 35, 55.1, 13.2 (und dem 
Winkel zwischen dem 2.ten Arm und dem Stift-Ausleger von 35.6°) 
bestätigte aber die Koordinaten, so dass ich recht zuversichtlich bin, 
dass meine Vorwärtsrechnerei stimmt.


Hier noch die Daten für die beiden Kalbierpunkte.
Die erste Zeile ist jeweils der Punkt selber, die jeweils 2.te Zeile 
sind die Winkel, die das Programm errechnet, und die 3.te Zeile sind die 
Koordinaten des Stiftes aus den Winkeln zurückgerechnet. 1.te und 3.te 
Zeile sollten eigentlich übereinstimmen.
1
-3.000000 29.200000
2
-0.000430 (-0.024618) - 1.660992 (95.167816)
3
-14.072315 41.288370
4
5
74.100000 28.000000
6
-1.571455 (-90.037718) - 0.093301 (5.345750)
7
78.963920 43.926982

(Ja, ich habe berücksichtig, dass die Servos um 180° verdreht eingebaut 
sind, und daher unterschiedliche 0 Richtungen haben. Wie es zu der 
riesigen Diskrepanz in Y Richtung kommt, ist mir noch unerklärlich. Hat 
denn der Originalautor in der Realität, sozusagen am lebenden Objekt nie 
mal nachgemessen?)

Ich kontrolliere noch mal alles.
Wenn sich das bestätigt, dann ist es kein Wunder, dass du keinen 
einzigen gerade Strich hinkriegst.

: Bearbeitet durch User
von Adrian (Gast)


Lesenswert?

Das hatte ich mir zu anfangs auch gedacht doch der gedanke darum ist 
schnell verflogen gewesen weil ich mich eher mit der winkelrechnungen 
den Kopf zerbrochen habe.
Danke für diesen Typ werde mal die Werte ausprobieren und schauen ob ich 
diesmal einen geraden Strich hinbekomme.

Sorry dass ich mich jetzt melde aber im mom strikt unser Internet und 
wir bekommen nun eine ganz neue Box von 1 und 1, deswegen hat das mit 
dem Schreiben auch immer was gedauert :D

von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:
> Das hatte ich mir zu anfangs auch gedacht doch der gedanke darum ist
> schnell verflogen gewesen weil ich mich eher mit der winkelrechnungen
> den Kopf zerbrochen habe.
> Danke für diesen Typ werde mal die Werte ausprobieren und schauen ob ich
> diesmal einen geraden Strich hinbekomme.

Vergiss das bitte.
Ich bin gestern die Mathe noch mal durchgegangen und hab festgestellt, 
dass ich mich bei der Interpretation von L2 vertan habe. Auch die 35.6° 
hab ich von der falschen Seite abgetragen. Das hat mich eine Weile 
gekostet, bis mir klar war, wie und warum er hier
1
  a2 = return_angle(L2, L1, c);
2
  Hx = Tx + L3 * cos((a1 - a2 + 0.621) + M_PI); //36,5°
3
  Hy = Ty + L3 * sin((a1 - a2 + 0.621) + M_PI);
den Winkel von der Stiftspitze bis zum Verbindungspunkt der beiden Arme 
berechnet und wie sich die 35.6° (die 36.5 sind offenbar ein Tippfehler) 
in der Armgeometrie wiederfinden.

D.h. meine Vorwärtsrechnung ist nicht korrekt. Ich habe mit einer 
anderen Geometrie gerechnet.

Aus dem vorgegebenem Programm hab ich die Berechnung soweit für den 
linken Arm nachvollzogen. Die ist soweit ok und in allen Details 
nachvollziehbar. Nur der rechte Arm bereitet mir noch Kopfzerbrechen.
Hier
1
   a2 = return_angle(L1, (L2 - L3), c);
habe ich noch keine Begründung für L2-L3 gefunden.
Messe ich im PDF die Armlängen nach, dann kommt da etwas anderes raus.

D.h. ich muss meine Vorwärtskinematic erst mal überarbeiten.
(Was natürlich nichts daran ändert, dass mit den gegebenen 
Referenzpunkten sich keine 0 bzw. 90° Winkel ergeben. Das ist von meiner 
fehlerhaften Dateninterpretation unberührt - ist ja schliesslich der 
Originalcode)

: Bearbeitet durch User
von Adrian (Gast)


Lesenswert?

Ich hab mal eine frage bezüglich der Berechnung mit den Gemeometrischen 
Werten.  Mir ist es immer noch ein Rätsel wie du auf diese Werte 
gekommen bist:

-3.000000 29.200000
-0.000430 (-0.024618) - 1.660992 (95.167816)
-14.072315 41.288370

74.100000 28.000000
-1.571455 (-90.037718) - 0.093301 (5.345750)
78.963920 43.926982

Zeile 1 und 4 ist mir klar. Aber wieso muss zeile 1 gleich wie zeile 3 
sein? und wie rechne ich  die winkel aus der zweiten zeile aus die das 
programm ausrechnet?

Ich weiss ich muss in der void set_XY funktion nachschauen da wird die 
eigentliche berechnung gemacht. Leider habe ich kein CAD sondern nur ein 
normalen taschenrechner ich versuche mir das gerade selber alles auf ein 
blattpapier aufzurechnen.

Also scheint der Winkel von  36.5 Grad vom Stiftpunkt bis zu den beiden 
Verbindungspunken richtig zu sein jetzt oder  nicht?

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

großes dank an Karl Heinz für die großartige Hilfe. Ich weiss gar nicht 
wie sehr dankbar ich für deine Tipps oftmals bin. Sie haben mir sehr 
geholfen. Alle Punkten bin ich habe ich nach einander abgehackt und das 
Ergebnis kann sich sehen.

Nicht zu guter Letzt auch ein großer Dank an die andern.

Nun kommm ich zum wesentlichen meines Eintrages.
Ich fasse mal alle neuen Änderungen unter dem Punkt Update zusammen.

Update:

1. Die Geometrie-Werten sind falsch, deswegen wurden diese geändert
   Die Armlängen sind alle richtig nur die origin points
   (orginal Punkte ich weiss nicht ob das so richtig übersetzt ist)
   der Servos müssen geändert werden bzw angepasst werden.

2. Die Pulslänge der Servos habe ich geändert also musste ich jedenfalls 
in meienr Plotclock ändern.

3. Die Umrechnung für die Zahlen musste ich verändern z.b musste ich 
einzelen Werte in der Funktion so anpassen dass eine halbwegs schöne 
Zahl auf dem Tisch gezeichnet wird siehe unten

case 4:
    drawTo(bx + 10 * scale, by + 0 * scale);  // Startet mit diesem 
Punkt
    lift(0);
    drawTo(bx + 10 * scale, by + 20 * scale); // Strich nach oben 
zeichnen
    drawTo(bx + 2 * scale, by + 6 * scale); //   bogen der Vier zeichnen
    drawTo(bx + 12 * scale, by + 6 * scale); //  Endpunkt der Vier
    lift(1);

Dies fand ich das schwierigste an dem Projekt erstmal das heruaus 
zufinden welche funktion was macht.

Anders als bei den ganzen Videos im Netz schreibt meine Plotclock 
spiegelverkehrt. Wäre einfach die Servos zur anderen Seite verdrehen die 
beste Alternative oder kann man im Programm verändern solange dies kein 
großer aufwand wäre?

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ihr lieben,

ich habe noch einige Verbesserungen an mein Projekt gemacht und möchte 
es jetzt als komplettes vollstängies Projekt hier freigeben für 
diejenigen die auch Probleme mit dem Projekt hatten.

Über Tipps oder Kritik bin weiterhin sehr dankbar.

Zusätlich habe ich noch die Realtimeclock mit eingebunden damit er immer 
die aktuelle Zeit aufschreibt.

Dazu finden sich viele gute Seiten im Internet wie man den RTC richtig 
anschließt und konfiguriert.

Ich persönlich empfehle lieber hier nachzuschauen:
http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
Hier wird alles kurz und knapp auf dem Punkt gebracht und wenn man alle 
Schritte befolgt, wirds auch dann funktionieren.

Beim Programmieren des unten verwendetem Test-code führt zu einem 
Fehler, da er noch keine Uhrzeit aus der Realtimeclock lesen kann. Kein 
Wunder sie ist ja auch gar nicht initialisiert wurden.

Aber hab auch ein kleines Testprogramm gefunden einfach ab spielen 
lassen, einstellen und es kann mit der Plotclock losgehen.

Link: 
http://www.instructables.com/id/LED-Dawn-Sunrise-Alarm-Clock-Nightlight-Secur/step6/Module1-ArduinoRTC-Test-Code/

Letzlich funktioniert das Schreiben und Wischen der Uhr wunderbar mit 
einigen kleinen Macken!!!(bei denen ich leider keinen Rat mehr habe), 
nämlich sie schreibt momentan nur spiegelverkehrt.(siehe Bilder die ich 
in vorherigen Post hochgeladen habe.)

Aber ich denke mal das sollte jetzt nicht das große Problem sein.
Falls ja müsste man in der Mainloop die Positionierung der 
number()-Funktionen ändern und in der Zeichenfunktion die Zahlen einmal 
um 180°drehen.

PS: Habe größtenteils alles mit kleinen Kommentaren zum besseren 
Verständnis beschrieben

Bis dann:)

von Jürgen Anders (Gast)


Lesenswert?

Adrian schrieb:
> Aber hab auch ein kleines Testprogramm gefunden einfach ab spielen
> lassen, einstellen und es kann mit der Plotclock losgehen.
>
> Link:
> 
http://www.instructables.com/id/LED-Dawn-Sunrise-Alarm-Clock-Nightlight-Secur/step6/Module1-ArduinoRTC-Test-Code/


Hallo Zusammen,

scheinbar bin ich zu doof, aber ich verstehe es nicht. Was muss ich da 
machen ?

Ja, ich Neuling in der ganzen Geschichte aber nach vielem lesen und 
probieren komme ich irgendwie nicht weiter.

MFG
Jürgen

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.