PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SR1 V5.1 Gelenkarmroboter



SR1 V5.1
10.03.2010, 11:02
Das ist mein Erster Roboter : SR1 V5.1 (Servomotor Roboter 1 Version 5.1)


NEU jetzt mit Videos:
http://www.youtube.com/user/YellowSR1


Hier ein Auszug aus einem "ALTEN" Programm:

10 '
20 KEY OFF
30 CLS
40 '
50 OPEN "COM1:9600,N,8,1,CS,DS" AS #1 'Aufsetzen RS-232

100 ' Grundstellung
101 'Achse 0
105 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5);
106 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(0);CHR$(15);
107 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(0);CHR$(72);
108 'Achse 1
115 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(1);CHR$(31);
116 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(1);CHR$(15);
117 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(1);CHR$(70);
118 'Achse 2
125 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(2);CHR$(31);
126 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(2);CHR$(15);
127 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(2);CHR$(110);
128 'Achse 3
135 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(3);CHR$(31);
136 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(3);CHR$(15);
137 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(3);CHR$(108);
138 'Achse 4
145 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(4);CHR$(31);
146 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(4);CHR$(15);
147 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(4);CHR$(65);
148 'Achse 5
155 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(5);CHR$(31);
156 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(5);CHR$(15);
157 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(5);CHR$(85);

199 IN$ = INKEY$:IF IN$ = "" THEN 199 'Abfrage Tastatur
200 ' Vorposition Greifer offen Bauteil 1
201 'Achse 0
205 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5);
206 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(0);CHR$(15);
207 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(0);CHR$(57);
211 'Achse 1
215 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(1);CHR$(31);
216 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(1);CHR$(15);
217 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(1);CHR$(79);
221 'Achse 2
225 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(2);CHR$(31);
226 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(2);CHR$(15);
227 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(2);CHR$(10);
231 'Achse 3
235 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(3);CHR$(31);
236 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(3);CHR$(15);
237 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(3);CHR$(90);
238 'Achse 4
245 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(4);CHR$(31);
246 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(4);CHR$(15);
247 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(4);CHR$(65);

299 IN$ = INKEY$:IF IN$ = "" THEN 299 'Abfrage Tastatur

Charly2006
12.03.2010, 15:49
Hi
ich würde die Werte für die Servos nicht direkt ausgeben, sondern über ein Schleife und nach jedem Befehl eine Pause einlegen.
mfg Charly

Richard
12.03.2010, 20:00
Wait? wo im Programm ist ein Wait Befehl? Was für einen Wait
Befehl? Was ist das für ein Basic mit Zeilen NR.?


bitte in code xyz Einfügen, wenn vor dem Schreiben
auf Vorschau geschaltet wird kann man das sehen.

Gruß Richard

SR1 V5.1
14.03.2010, 08:38
Hallo,
danke für eure Antworten!

@charly2006: wie mache ich das? ich hatte mir das selber alles angeeignet quasi von über all nen schnipsel genommen und es hatte funktioniert !
hättest du nen programmauszug damit ich weiss womit ich es "zu tun" habe?

@richard: es gibt den wait befehl nicht im programm da ich es leider nicht geschafft habe ihn zu integrieren, deshalb diese zeile mit ->


199 IN$ = INKEY$:IF IN$ = "" THEN 199 'Abfrage Tastatur


@alle: ich verwende den servo microcontroller von robotikhardware + gw basic ![/code]

SR1 V5.1
14.03.2010, 08:49
ich bin auch im besitz eines Bascom AVR-Basic Entwicklungsumgebung und Compiler war mir damals etwas umständlich und fand das gw basic einfacher und bin dabei geblieben... war das eventuell ein fehler?
und lassen sich die servos auch damit steuern?
auch in verschiedenen geschwindigkeiten und voreingestellten winkeln?

vielen dank

Richard
14.03.2010, 09:34
Ich kenne jetzt nicht den Befehlssatz von GW-Basic.
Als wait Ersatz könnte ich mir einen Timer IRQ vorstellen.
Mit Servos habe ich noch nichts gemacht, würde
das wenn selbst gestrickt, aber über PWM versuchen. Alle 20 ms
ein 3 (?) ms Takt mit entsprechenden Puls/Pausen Verhältnis.
Der Winkel wird ja durch das Puls/Pausenverhältnis eingestellt.

Sollte zumindest Theoretisch klappen?

Gruß Richard

Charly2006
14.03.2010, 11:48
Also, wenn ich dich richtig verstanden habe benutzt du eine Servo Platien von RN um die Servos anzusteuern.

Deine Routine :299 IN$ = INKEY$:IF IN$ = "" THEN 299 'Abfrage Tastatur
ist im Prinzip eine Wait anweisung. Hier wird solange gewartet bis du eine Taste drückst.

Ich meine du mußt zwischen jedem

105 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5) '<- kein Semikolon, das sonst kein Zeilenende gesendt wird.

eine Warteschleife legen.
z.B.
106 for i = 1 to 1000
107 next i

oder


10 '
20 KEY OFF
30 CLS
40 '
50 OPEN "COM1:9600,N,8,1,CS,DS" AS #1 'Aufsetzen RS-232

100 ' Grundstellung
101 'Achse 0

105 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5)
106 Gosub 10000
107 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(0);CHR$(15)


10000 for i = 1 to 1000
10001 next i
10002 return

Auserdem mußt das Semikolon am Ende des Printbefehls weglassen. !!!

Pobier das mal aus. der Wert der For-Next Schleif habe ich willkürlich gewählt, hier muß man noch mal ein bisschen Experimatieren

mfg Charly O:)

.:Sebastian:.
15.03.2010, 01:57
Moin Moin

Wie mein Vorposter schon sagt, du musst das über eine schleife lösen.

Ich hab selber vor 8 oder 9 Jahren das letzte mal was mit GW-Basic gemacht (war meine erste Programmiersprache, hatte extra nen Rechner mit DOS damals).
Allerdings hab ich immernoch die Bücher im Regal. (z.B. GW-Basic Taschenführer von DataBecker)

Mit dem weit Befehl wirst du nicht weit kommen, weil der nicht im Sinne von Wait <Zeit> gedacht ist.
Ordentlich heißt der in GW Basic WAIT <Port>,<Maske1>,<Maske2>.
Mit Port ist dabei ein Register gemeint, z.b. 0x378 für das Datenregister vom Parallelport.
Die Register kann man mit INP lesen und mit OUT schreiben.
Wait ließt das Register solange bis Wert XOR Maske1 AND Maske2 ungleich 0 wird.
(Das steht im Buch und deckt sich mit meinem Wissenstand.)

Also einfach mal mit einer forschleife spiele oder in einer While-schleife
die immer wieder die Systemzeit abfragen und ne Differenz bilden, wenn du x Sekunden warten willst.
Was aber für eine Übertragungspause etwas lang ist.

Abschließend würde ich dir noch empfehlen längerfristig auf eine andre Sprache umzusteigen, GW-Basic ist fast genauso alt wie ich und es wird der Tag kommen, an dem der Compiler nicht mehr einfach so unter dem neusten Windows läuft.

Viele Grüße
Sebastian

SR1 V5.1
22.03.2010, 07:53
DANKE an euch!!!

Leider hat es nicht funktioniert...egal was ich probiert habe !

@Sebastian: kannst du eventuell ein Beispiel anhand meiner Programme schreiben? Dann kann ich mir vorstellen, wie du das meinst. Im Moment sitze ich davor, wie ein Frosch an einem zugefrorenem Fluss

Charly2006
22.03.2010, 16:25
Hallo kannst du noch mal deinen Quellcode posten, damit ich mir das Ansehen kann.
mfg Charly

.:Sebastian:.
24.03.2010, 19:36
Moin

Im Prinzip hab ich nix anderes gesagt als Charly.
Wait bringt dich nicht weiter, du kannst stattdessen eine For-Schleife nehmen.



10000 for i = 1 to 1000
10001 next i
10002 return


Und dann zum warten Gosub 1000

Sebastian

Charly2006
25.03.2010, 08:09
Hallo Sebastian
ich denke das der Fehler nicht in der Wait Routine ( For-Next schleife) liegt.
Ich glaube das der Feher in den Print anweisungen liegt.

Der RN Controler braucht immer ein Zeilenende !! , wenn hinter jeden print befehle am Schluß ein Semicolon gesetzt ist ( wie ganz oben im Code) so wird dieses nicht mit gesendet.

original
105 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5);

Code ohne Semicolon am Ende !!!!!!
105 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5)

Deswegen funktioniert der Code so nicht.

mfg Charly

.:Sebastian:.
25.03.2010, 18:52
Moin Moin

Ja so viel Basic kann ich nach 5 Jahren auch noch gerade so selber.

Sag das net mir sondern SR1 V5.1.

mfg
Sebastian

Charly2006
26.03.2010, 14:11
Hallo Sebastian
ich meinte eigentlich SR1 V5.1
und wollte dir nicht zu nahe treten.

mfg Charly

SR1 V5.1
04.05.2010, 07:57
vielen dank an euch ihr habt mir sehr weitergeholfen und es funktioniert einwandfrei !!!

hier der code damit es läuft:



10 KEY OFF
20 CLS
30 OPEN "COM1:9600,N8,1,CS,DS" AS #1

40 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5);
50 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(0);CHR$(20);
60 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(0);CHR$(72);
69 GOSUB 70

70 FOR I=1 TO 15000
71 NEXT I
72 RETURN 73
73 GOTO 140

140 PRINT #1,CHR$(128);CHR$(1);CHR$(0);CHR$(0);CHR$(5);
150 PRINT #1,CHR$(128);CHR$(1);CHR$(1);CHR$(0);CHR$(20);
160 PRINT #1,CHR$(128);CHR$(1);CHR$(2);CHR$(0);CHR$(13);

170 FOR I=1 TO 15000
171 NEXT I
172 RETURN 173
173 GOTO 200

200 GOTO 40


danke[/code]

SR1 V5.1
16.05.2010, 11:41
http://www.youtube.com/user/YellowSR1