Hier noch einmal die Videos zum Verständnis!
http://www.youtube.com/watch?v=Vy5ps...57F2-yk6BgOc3H
http://www.youtube.com/watch?v=tOEeS...57F2-yk6BgOc3H
Soll noch spektakulärer werden, sind nur die Anfänge!
Druckbare Version
Hier noch einmal die Videos zum Verständnis!
http://www.youtube.com/watch?v=Vy5ps...57F2-yk6BgOc3H
http://www.youtube.com/watch?v=tOEeS...57F2-yk6BgOc3H
Soll noch spektakulärer werden, sind nur die Anfänge!
Hallo thund3r und alle die mir bei meinem Projekt geholfen haben.
Ich wollte hiermit euch allen noch mal danken, die mir bei meinem ASURO-Projekt geholfen haben, hatte heute meine Abschlusspräsentation der FOS über den ASURO gehalten und eine "1" bekommen.
Dank eurer Hilfe hatte ich endlich Erfolg mit dem Greifer! :D
Nun hätte ich noch mal eine Frage, will nicht extra einen neuen Thread öffnen:
Ich kam heute nicht von dem ASURO weg und wollte deshalb das "nachprogrammieren" --> http://www.youtube.com/watch?v=Me5blu9WzzI
Jetzt ist meine Frage, wie kann ich die Linienfolge für eine bestimmte Strecke ausführen?
Ich will den Becher (anstatt ihn runterzuschmeißen) dann stehen lassen, herum fahren und ihn wieder zurückfahren.
Hallo
Freut mich das du mit den Projekten erfolgreich warst! weiter so!
Ich denk mal das hier im Programm beim druecken der Taster (wenn der Asuro gegn den Becher faehrt)
oder bei einem anderen Abbruchsignal (IR Signal, durch Odometrie gemessene Distanz o.ae.) der Linienfolge-part abgebrochen wird und in einen andere Handlungsroutine gewechselt wird.
So oder so aehnlich kann man das auf jedenfall realisieren.
Gruss Thund3r
ja, mein Problem ist nur noch, was kann ich in die while-Schleife für die Linienfolge schreiben. Sleep geht ja ned rein und wie kann ich überhaupt eine bestimmte Strecke fahren. Kann da mir einer mal einen Tipp geben, wie überhaupt eine bestimmte Strecke gefahren werden kann, den Rest kann ich mir vielleicht durch Ausprobieren erschließen!
Hier schon einmal mein bisheriges Programm, bei der zweiten Linienfolge will ich ihm dann eine bestimmte Strecke auf der Linie fahren lassen!
Anhang 22372
DANKE!!!
P.S. Der ASURO macht irgendwie süchtig, wollte eigentlich den ASURO nach meinem Abschlussbericht erst einmal ruhen lassen, aber youtube und die ganzen ASURO-Videos geben immer neue Ideen und ich versuche das mit meinem minimalen Programmierwissen nachzuspielen!
hallo
also mir geht es ähnlich wie powder999 =D ich mach den asuro auch als schulprojekt un das zählt dann ins abi rein. meine idee für das eigene projekt war ebenfalls ein asuro mit greifer. ich hab in youtube einen gesehen, der mit einem servo einen gegenstand hochgehoben und gegriffen hat das hab ich jetzt mal nachgebaut. mechanik funktioniert aber mein problem ist das programm ich bin gerade dabei die frequenz von meinem servo rauszufinden aber ich krieg sie nicht raus xD ich hab einen modelcraft Y-3009 Mini Servo vom Conrad. wie ist das mit der frequenz sind das immer 10er schritte? weil so hab ichs getestet also
BackLED(OFF,ON);
Sleep(10);-->Sleep(20);-->Sleep(30);-->usw
BackLED(OFF,OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
aber mitlerweile bin ich bei 320 un es tut sich immernoch nichts was mach ich falsch?
Hallo
Je nach Servotyp liegt die Mitte des Drehbereichs bei Impulslängen von ca. 1ms bis 1,5ms Dauer (ms bedeutet Millisekunden oder 1/1000 Sekunde). Der Impuls sollte alle 20ms wiederholt werden.
In der orginalen asuro-Library von der CD dauert ein Sleep(1) genau 1/72000 Sekunde, Sleep(72) dauert entsprechend eine 1ms. (Bei den neueren Libs wird ein 36kHz-Timer verwendet, deshalb dauert hier Sleep(36) eine Millisekunde.) Für 20ms Impulswiederholung müßte man Sleep(20*72-Impulslänge) warten. Da Sleep() aber einen 8bit-Parameter benötigt, muss man die Impulspause auf mehrere Aufrufe von Sleep verteilen. 20*72 wären 1440 Sleep(1)-Aufrufe, davon muss man noch die Impulsdauer abziehen und den Rest auf 255er Sleep()-Aufrufe verteilen:
(ungetestet)Code:#include "asuro.h"
#define libversion 72 // 72kHz oder 36kHz Library
int Impulspause;
char Servoimpuls = libversion; // 72 (oder 36) für eine Millisekunde (Servomitte?)
int main(void)
{
Init();
while(1)
{
BackLED(OFF,ON); // Impulsstart
Sleep(Servoimpuls);
BackLED(OFF,OFF); // Impulsende
Impulspause=libversion*20-Servoimpuls; // Anfang Pause; Dauer berechnen
while(Impulspause > 255) // 255er-Schritte
{
Sleep(255);
Impulspause -= 255;
}
Sleep(Impulspause); // Restpause
}
return(0);
}
Gruß
mic
erstmal danke also ich hab das programm getestet un es funktioniert auch aber mein servo bewegt sich nur ca ein drittel. deshalb geht mein greifer auch nicht komplett zu danach hör ich nur noch ein zahnrädchen das vibriert und man kann es auch leicht erkennen wenn man genauer hinsieht aber der servo bewegt sich nicht weiter
ich weis nicht ob das normal ist aber immer wenn ich den asuro ausschalte, egal was für ein programm drauf ist, dann dreht sich der servo ein stück
okay also ich hab jez mal n programm geschrieben un des funktioniert sogar halbwegs =D
#include <asuro.h>
#include <myasuro.h>
int main(void)
{
Init();
int x;
for(x=0; x<15; x++)
{
BackLED(OFF,ON);
Sleep(0.125);
BackLED(OFF,OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
BackLED(OFF,ON);
Sleep(0.125);
BackLED(OFF,OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
}
while(1);
return 0;
}
die frequenz habe ich mir jez mal ausgerechnet und mir dadraus die zeit für die pausen ausgerechnet. soweit geht eig alles
also bei meim asuro läuft des programm so ab: es wird gestartet dann fängt der servo an er dreht sich fast um 90° etwas weniger vielleicht 80° oder so aber dann ist schluss weil der greifer+ das objekt noch zu schwer sind da werd ich noch etwas dran verbessern. mit nem leichteren objekt gehts aber dann hab ich das problem, dass der servo sofort nachlässt wenn in meinem programm x>15 ist. kann man den auch irgendwie feststellen dass er das gewicht hält? oder hängt das auch mit dem gewicht zusammen? das problem dass er sich nochmal um ein stück drehen will, wenn man ihn ausmacht ist immernoch da
Sleep(0.125);
?
hat mich ao gwundert xD ich hab die frequenz so ausgerechnet: Periodendauer =T Frequenz= f un dann mit der Formel T=1/f un mein prozessor hat 8000000Hz also muss ich 1/8000000= 0,000125 rechnen des isch dann T un weil T in sekunden angeben isch hab ich *1000 gmacht damit ich die ms rauskrieg un dann komm raus: T=0,125
lol
Vergiss deine "Berechnungen". 0.irgendwas als Parameter für Sleep() mag der Kompiler ganz sicher nicht. Kannst du das fehlerfrei kompilieren?
Edit: Huch, das kann man fehlerfrei kompilieren. Fraglich ist natürlch, WAS da kompiliert wird. 0.125 ist ganz sicher kein ganzzahliger Parameter für Sleep()
wundert mich auch aber solangs funktioniert ;D wie kann ich eigentlich den servo auf einer bestimmten position halten? meiner geht immer wieder zurück, sobald der teil im Programm abgelaufen ist und ich will ihn eigentlich für eine bestimmte zeit in dieser stellung lassen. er soll einen becher packen+hochheben und mit ihm losfahren aber sobald die frequenz beendet ist entlastet sich mein servo soweit, dass der becher abgestellt ist und der greifer leicht geöffnet ist wie kann ich das ändern?
ich glaube dass ich dem servo solange strom geben muss wie er etwas halten soll kann das sein? un ich habe gleich noch eine frage ich weis nicht wie genau das funktioniert also ich habe ja mein programmabschnitt, dass er zupackt so geschrieben:
for(x=0; x<90; x++) //*for-Schleife um den Greifer zupacken zu lassen*//
{
StatusLED(RED); //*Rückmeldung Gegenstand gefunden*//
BackLED(OFF,ON); //*Start der Frequenz um den Servo an zu steuern: Greifer macht zu!*//
Sleep(0.125);
BackLED(OFF,OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
BackLED(OFF,ON);
Sleep(0.125);
BackLED(OFF,OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
}
muss ich damit er wieder öffnet einfach negative zahlen verwenden also:
for(x=0; x<90; x++) //*for-Schleife um den Greifer zupacken zu lassen*//
{
StatusLED(RED); //*Rückmeldung Gegenstand gefunden*//
BackLED(OFF,ON); //*Start der Frequenz um den Servo an zu steuern: Greifer macht zu!*//
Sleep(-0.125);
BackLED(OFF,OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
BackLED(OFF,ON);
Sleep(-0.125);
BackLED(OFF,OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
}
oder wie funktioniert das? sry wenn ich nerven sollte aber ich muss bald meine dokumentation von dem projekt abgeben =D
Ein Minus gibt´s auf jedenfall schon mal nicht im Sleep.
Beim Servo ist das so, dass in dem Servo ein IC steckt, dass den IST-Wert (mit Poti gemessen, also wo das Servokreuz grad steht) mit dem Soll-Wert(also wo das Kreuz hin soll) verglichen wird und dann alles nachgeregelt wird. Du tust sozusagen mit deinem Sleep dem Servokreuz ein Zielfähnchen (einen Winkel, der angefahren werden soll) stecken, wo dann das Kreuz "hinläuft" Du musst einfach mal ausprobieren, bei welchen Werten dein Servo vorwärts, bzw. rückwärts läuft. http://www.ermicro.com/blog/wp-conte...2/servo_01.jpg
Und wenn du gar nicht klarkommst, kannst du mich noch einmal ansprechen, dann schick ich dir mal meine Programmcodes, die wahrscheinlich jeden zum Schmunzeln bringen, da ich einfach noch ein C-Laie bin, aber hauptsache alles funktioniert.
P.S.: Schau dir einfach mal meinen Kanal an auf youtube --> http://www.youtube.com/user/takahashipowder999
Ich kann dir gerne mal alle Programmcodes bereitstellen, WIR BEIDEN ANFÄNGER meistern das schon! Jeder fängt mal klein an! :D
Auf jedenfall muss man noch einmal dem ganzen roboternetz und allen die einem helfen recht herzlich danken, ohne das alles wär ich niemals soweit gekommen. DDDDAAAANKKKKKEEEE!!!!!!!
okay also muss ich probieren wann er sich in die andere richtung dreht alles klar =D
wie steuerst du deinen asuro fern? über das laptop? weil ich habe mir für mein projekt etwas ähnliches überlegt =D ich wollte ihn über eine tv-fernsteuerung oder ein laptop auf dosen zufahren lassen un ihn dann so auf die dosen fahren lassen, dass die taster gedrückt werden also die 2 in der kule von der platine. dann soll er zugreifen und die dose hochheben dann lass ich ihn wieder über die fernsteuerung irgendwo hinfahren und die dose absetzten.
ich hab mir überlegt die fernbedienung zu nehmen die wäre handlicher um sie in die schule mit zu nehmen =D
Aber irgendwie krieg ich selber kein programm dafür hin =( kannst du mir mal ein code schicken?
danke für die hilfe =D un du hasst recht man muss wirklich mal allen in dem forum danken man wird hier wirklich super unterstützt =D
Dann geb mir am Besten mal deinen Skype-Kontakt oder deine Mail, man muss ja nicht gleich jedem seine Codes preisgeben, hat ja auch Arbeit gekostet! Und außerdem sind die sehr einfach gestrickt, dass die Profis hier in dem Forum mich nur auslachen würden! :D :D :D :D :D :D :oops:
Und zu der Fernsteuerung, ich steuer den ASURO über meine IR-Schnittstelle am Laptop, in den Videos auf meinem Kanal siehst du das auch (Qualität ist halt schlecht, bin ja kein Fotograf und Kameramann! :D )
alles klar =D ich schick dir meine email adresse. in deinem programm lässt du also den asuro über dein laptop in bestimmte richtungen fahren und öffnest/schliest auch den Greifer darüber? ich hab probiert ein programm zum fahren über eine fernseh-fernbedienung zu steuern aber das ist gar nicht so einfach xD und nochmal danke für die hilfe =D
Hi
jetzt hätte ich mal ne Frage: Wo finde ich den GND-Anschluss. Aber soll ich die wirklich am Prozessor hinlöten?
Bild hier
Danke schon mal