- Akku Tests und Balkonkraftwerk Speicher         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 37 von 37

Thema: servo mit ir-fernbedieung steuern

  1. #31
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    Anzeige

    Praxistest und DIY Projekte
    also... jetzt programmier ich schon seit über ner woche an ner vernünftigen servoansteuerung mit ir- fernbedienung rum. leider bisher mit mäßigem erfolg, weil mein servo zu ruckartig dreht.
    ich hab es mit verschiedenen programmiervarianten versucht....

    bei der folgenden dreht der servo zwar flüssig, ist aber jedoch nur über zeitgesteuert:

    Code:
    // RP6 steuert ein Servo an der SL1-LED mit Sleep()                 
    
    #include "RP6RobotBaseLib.h"      // Denn vollen Funktionsumfang der Lib bezahlen
                                     // wir mit den störenden Interrupts
    
    uint8_t stellzeit, servopos=10;    
    int main(void)
    {
       initRobotBase();
       setLEDs(0);   
    startStopwatch1();                
       while(true)
       {
                      
          while(getStopwatch1()<2000)       
          {                          
             setLEDs(1);             
             sleep(10);        
             setLEDs(0);             
             sleep(200-10);}
    		while(getStopwatch1()>2000)
    		{setLEDs(1);
    		sleep(20);
    		setLEDs(0);
    		sleep(200-20);
          }                          
          
       }
       return(0);
    }
    im folgende programm dreht lässt sich der servo über ir steuern, aber dreht aber viel zu ruckartig:

    Code:
    // RP6 steuert ein Servo an der SL1-LED mit Sleep()
    
    #include "RP6RobotBaseLib.h" // Denn vollen Funktionsumfang der Lib bezahlen
    
    #define RC_PROMO8
    
    #ifdef RC_PROMO8
    
    #define RC5_KEY_SERVO_RIGHT 46
    #define RC5_KEY_SERVO_LEFT 60
    
    #endif
    
    void receiveRC5Data(RC5data_t rc5data)
    {
    writeString_P("Toggle Bit:");
    writeChar(rc5data.toggle_bit + '0');
    writeString_P(" | Device Address:");
    writeInteger(rc5data.device, DEC);
    writeString_P(" | Key Code:");
    writeInteger(rc5data.key_code, DEC);
    writeChar('\n');
    
    if (rc5data.key_code == RC5_KEY_SERVO_RIGHT)
       {setLEDs(1);
        sleep(10);
        setLEDs(0);
        sleep(200-10);}
     
    if (rc5data.key_code == RC5_KEY_SERVO_LEFT)
       {setLEDs(1);
        sleep(20);
        setLEDs(0);
        sleep(200-20);}
    }
    
    int main(void)
    {
    initRobotBase();
    IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    powerON();
    setLEDs(0);
    
    while(true)
    {
    task_RP6System();
    }
    return 0;
    }
    meiner meinung nach liegt das daran, dass die servo funktion nicht in einer while- schleife ausgeführt wird. d.h. man müsste, was mir bisher noch nicht gelungen ist, das zweite programm so abändern, dass die servofunktion auch hier in einer while schleife ausgeführt wird.
    kann mir vielleicht jemand da weiterhelfen?

    gruß

  2. #32
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    So vielleicht, ich hab's nicht getestet:
    Code:
    // RP6 steuert ein Servo an der SL1-LED mit Sleep()
    
    #include "RP6RobotBaseLib.h"
    
    #define RC_PROMO8
    
    #ifdef RC_PROMO8
    
    #define RC5_KEY_SERVO_RIGHT 46
    #define RC5_KEY_SERVO_LEFT 60
    
    #endif
    
    #define servorechts 10
    #define servolinks 20
    uint8_t servopos=15;
    uint8_t stellzeit;
    
    void receiveRC5Data(RC5data_t rc5data)
    {
    writeString_P("Toggle Bit:");
    writeChar(rc5data.toggle_bit + '0');
    writeString_P(" | Device Address:");
    writeInteger(rc5data.device, DEC);
    writeString_P(" | Key Code:");
    writeInteger(rc5data.key_code, DEC);
    writeChar('\n');
    
    if (rc5data.key_code == RC5_KEY_SERVO_RIGHT)
       if(servopos > servorechts) // wenn nicht in Position
    	 while(--servopos >= servorechts) // Position schrittweise annähern
       	for(stellzeit=0; stellzeit<5; stellzeit++) // Signal mehrmals senden
    			{
    				setLEDs(1);
        			sleep(servopos);
        			setLEDs(0);
        			sleep(200-servopos);
    			}
    
    if (rc5data.key_code == RC5_KEY_SERVO_LEFT)
       if(servopos < servolinks)
    	 while(++servopos <= servolinks)
       	for(stellzeit=0; stellzeit<5; stellzeit++)
    			{
    				setLEDs(1);
        			sleep(servopos);
        			setLEDs(0);
        			sleep(200-servopos);
    			}
    }
    
    int main(void)
    {
    initRobotBase();
    IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    powerON();
    setLEDs(0);
    
    while(true)
    {
    task_RP6System();
    }
    return 0;
    }
    gruß
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #33
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    meiner meinung nach liegt das daran, dass die servo funktion nicht in einer while- schleife ausgeführt wird. d.h. man müsste, was mir bisher noch nicht gelungen ist, das zweite programm so abändern, dass die servofunktion auch hier in einer while schleife ausgeführt wird.
    völliger schwachsinn!!

    der Servo dreht so ruckartig, weil du ihm nur entweder den Befehl linker Anschlag oder rechter Anschlag gibst...

    wenn du es unbedingt ganz flüssig haben willst, dann musst du den Servo nach und nach an seine Position fahren lassen, je mehr schritte, desto flüssiger wird das ganze

    das ist allerdings einiges an programmieraufwand und das werde ich dir hier bestimmt nicht wieder als fertigen Code hier posten, da musst du schon selbst ran...


    Mir ist ausserdem noch aufgefallen, dass du den servo vielleicht am anfang einmal in die mittelstellung fahren lassen könntest...

    Du hast allerdings auch in beiden Programmen noch keine Stellzeit wie ich oben gepostet habe eingebaut...

    Füg das mal an, dann wirds auch flüssiger


    Noch dazu: du lässt gerade die ganze Zeit andere Leute für dich programmieren, hast nichtmal Tipps, die ich zum Programm mitgepostet habe mit dazugeschrieben, also mach das mal zuerst und lies die Antwortposts nochmal genau durch bevor du sowas wieder schreibst...


    MfG Pr0gm4n

    EDIT: hab radbruchs Code nur kurz überflogen, könnte hinhauen, das ist die Kurzversion von dem, was ich meinte

    Ich denke es ist aber garnicht nötig, er muss nur genug stellzeit lassen, das reicht denke ich auch. Das mit der Stellzeit ist auch schnell eingebaut, er sollte das mal lieber kurz zuerst versuchen denke ich.

  4. #34
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo Pr0gm4n

    völliger schwachsinn!
    Bitte etwas freundlicher.

    Manchen macht es Spass anderen zu helfen ein Programm zu entwickeln, es ist eine gute Übung. Wenn es dich nervt dann behalte es für dich und antworte einfach nicht auf die Fragen.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #35
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    Zitat Zitat von radbruch
    Hallo Pr0gm4n

    völliger schwachsinn!
    Bitte etwas freundlicher.

    Manchen macht es Spass anderen zu helfen ein Programm zu entwickeln, es ist eine gute Übung. Wenn es dich nervt dann behalte es für dich und antworte einfach nicht auf die Fragen.

    Gruß

    mic
    seh ich ganz genauso

    @radbruch: danke, hast mir sehr geholfen. das programm funktioniert einwandfrei. aber was bedeutet ++servopos bzw. --servopos?
    ich werd da nicht ganz schlau draus...

    gruß

  6. #36
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    was bedeutet ++servopos bzw. --servopos
    VOR der Überprüfung der Abbruchbedingung in der while-Funktion wird der Wert von servopos um eins erhöht bzw. verringert. servopos++/servopos-- würde den Wert NACH dem Vergleich ändern.

    das programm funktioniert einwandfrei
    Prima. btw: Wenn du while() durch servopos--; bzw. servopos++; ersetzt, fährt das Servo nicht zu den Endpositionen sondern macht nur einen Step pro IR-Kommando.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #37
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hi,

    Bitte etwas freundlicher.

    Manchen macht es Spass anderen zu helfen ein Programm zu entwickeln, es ist eine gute Übung. Wenn es dich nervt dann behalte es für dich und antworte einfach nicht auf die Fragen.
    also erstmal vorweg, mir macht es auch spass, anderen zu helfen, aber nicht, wenn ich bei jemandem merke, dass er von mir einfach die Lösung präsentiert haben will...

    Es gibt einige dinge, die man auch mit 2 Klicks schnell in der Anleitung nachlesen kann

    Das mit der guten Übung kann ich nur bestätigen, nur so kann ich schon einige Sachen, für die ich gar keine Anwendung an meinem Robby hätte

    dann zu

    Zitat:
    völliger schwachsinn!

    Bitte etwas freundlicher.

    Ok, es war schon ein bisschen unfreundlich, sorry proevofreak dafür, ich wollte nur irgendwie deutlich ausdrücken, dass das nichts damit zu tun hat, da ist mir auf die Schnelle halt irgendwas eingefallen, ich mein das ja nicht böse

    Ach was ich aber vergessen habe zu schreiben, ich finde es schon in Ordnung, wenn man mal jemanden bittet, einem einen kurzen Code zu schreiben, aber das mit dem fertige Codes präsentieren usw. meinte ich ist halt dann schon sehr nett und dafür könnte man sich ja bedanken, ich meine dass ich mich zum Beispiel auch gerne hingesetzt hätte und den fertigen Code mit der Stellzeit usw. noch schnell gemacht hätte, aber da sich proevofreak noch nicht einmal bei mir bedankt hat, dass ich für ihn allein für diesen Thread schon bestimmt 2 Stunden was in der Anleitung nachgelesen, Codes getippt, getestet usw. habe finde ich, dass er das auch selbst machen kann

    Ich hoffe das ist verständlich


    MfG Pr0gm4n

    EDIT: @proevofreak: wenn du dich noch längere Zeit mit Mikrocontrollern beschäftigen willst würde ich dir empfehlen, ein AVR-C-Tutorial durchzuarbeiten, das hat mir sehr geholfen, jetzt kann ich mir die meisten Sachen einfach von selbst erschliessen.

    Vorschlag: https://www.roboternetz.de/phpBB2/pa...ad8cf543b6.pdf
    oder: http://derjulian.net/mikrocontroller

Seite 4 von 4 ErsteErste ... 234

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests