- 12V Akku mit 280 Ah bauen         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 27 von 27

Thema: RP6 mit Greifer

  1. #21
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    40
    Beiträge
    211
    Anzeige

    E-Bike
    Um schnell mal in der Ansteuerung Fortschritte zu machen habe ich mir gedacht den Servoarm über IR zu bedienen.

    Das ist mein Code:
    Code:
    /* 
    
     * ****************************************************************************
    
     * RP6 ROBOT SYSTEM - Base
    
     * ****************************************************************************
    
    Dieses Prorgamm wird gebaut um mienen  Servoarm mit Hilfe einer IR-vernbedienung zu bedienen. 
     *************************************************
    
     */
    
    
    
    
    #include "RP6RobotBaseLib.h" 
    
    
    uint8_t  i, pause, servo_stellzeit, servo_delay;
    
    
    //#define RC_EURO_SKY
    
    #define RC_PROMO8
    
    
    
    
    #ifdef RC_PROMO8		// RC Type:  Conrad - Promo8			
    
    	#define RC5_KEY_LEFT 				21		
    
    	#define RC5_KEY_RIGHT 				22		
    
    #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');
    
    
    
    	switch(rc5data.key_code)
    
    	{
    
    		case RC5_KEY_LEFT: 	 		// Turn left:
    
    			writeString_P("LEFT\n");
    
    			int arm 
    			{
    				i=0;
    				servo_stellzeit=16;
    				DDRA |= E_INT1;            // E_INT1 als Ausgang
    				DDRC |= 3;                  // SCL und SDA als Ausgang
    				// 5 - 15 - 25             // Min - Mitte - Max
     				servo(15);          // Grundstellung
     				while (1)
    				{
     				servo(17);
     				servo(18);
     				servo(19);
     				servo(20);
     				servo(21);
     				servo(22);
     				servo(23);
     				servo(24);
     				}
    
    			setLEDs(0b100000);
    			}
    
    		break;
    		case RC5_KEY_RIGHT: 		// Turn right:
    
    			writeString_P("RIGHT\n");
    						int arm 
    			{
    				i=0;
    				servo_stellzeit=16;
    				DDRA |= E_INT1;            // E_INT1 als Ausgang
    				DDRC |= 3;                  // SCL und SDA als Ausgang
    				// 5 - 15 - 25             // Min - Mitte - Max
    
    	 			servo(15);          // Grundstellung
    	 			while (1)
    				{
     				servo(14);
     				servo(13);
     				servo(12);
     				servo(11);
     				servo(10);
     				servo(9);
     				servo(8);
     				servo(7);
     				servo(6);
     				}
    
    			setLEDs(0b000100);
    			}
    
    		break;
    
    	}	
    
    
    }
    
    
    /*****************************************************************************/
    
    
    int main(void)
    
    {
    
    	initRobotBase(); 
    
    	
    
    	setLEDs(0b111111);
    
    	writeChar('\n');
    
        writeString_P("RP6 controlled by RC5 TV Remote\n");
    
    	writeString_P("___________________________\n");
    
    	mSleep(500);	 
    
    	setLEDs(0b000000); 
    
    	powerON();
    
    	
    
    	// Set the RC5 Receive Handler:
    
    	IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    
    
    
    	return 0;
    
    }
    Aber er scheint Fehler zu haben ,da ich ine Aussage wie diese erhalte.
    Code:
    Compiling: RP6Base_tvarm.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Base_tvarm.lst -I../../../RP6Lib/ -I../../../RP6Lib//RP6base -I../../../RP6Lib//RP6common -std=gnu99 -MD -MP -MF .dep/RP6Base_tvarm.o.d RP6Base_tvarm.c -o RP6Base_tvarm.o
    RP6Base_tvarm.c: In function 'receiveRC5Data':
    RP6Base_tvarm.c:40: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    RP6Base_tvarm.c:46: warning: implicit declaration of function 'servo'
    RP6Base_tvarm.c:65: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i'
    RP6Base_tvarm.c:85: error: break statement not within loop or switch
    RP6Base_tvarm.c: At top level:
    RP6Base_tvarm.c:88: error: expected identifier or '(' before '}' token
    make: *** [RP6Base_tvarm.o] Fehler 1
    carlitoco

  2. #22
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo carlitoco,

    ein Teil der Fehlermeldungen verschwindet, wenn du die Definition "int arm" wegläßt (wird ja gar nicht gebraucht) oder zumindest ein Semikolon anhängst: "int arm;"

    Ganz fehlerfrei wird das erst kompiliert, wenn du noch die Funktion "servo" irgendwo definierst.
    Was das Programm aber eigentlich so machen soll, kann ich auch dann nicht erkennen.

    Gruß Dirk

  3. #23
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    40
    Beiträge
    211
    Ziel soll es sein die Servos über die IR Fernbedienung zu steuern.

    Es würde erstmal reichen wenn ich 2 Servos ansteuern könnte, das wäre eine gute Grundlage. Doch scheint das so noch nicht richtig zu sein.
    hier nochmal der
    neue code:
    Code:
    /* 
    
     * ****************************************************************************
    
     * RP6 ROBOT SYSTEM - Base
    
     * ****************************************************************************
    
    Dieses Prorgamm wird gebaut um mienen  Servoarm mit Hilfe einer IR-vernbedienung zu bedienen. 
     *************************************************
    
     */
    #include "RP6RobotBaseLib.h" 
    uint8_t  i, pause, servo_stellzeit, servo_delay;
    
    //#define RC_EURO_SKY
    
    #define RC_PROMO8
    #ifdef RC_PROMO8		// RC Type:  Conrad - Promo8			
    
    	#define RC5_KEY_LEFT 				21		
    
    	#define RC5_KEY_RIGHT 				22		
    
    #endif
    
    void servo(uint8_t w0)
    
    {}
    
    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');
    
    	switch(rc5data.key_code)
    
    	{
    
    		case RC5_KEY_LEFT: 	 		// Turn left:
    
    			writeString_P("LEFT\n");
    
    			{
    				i=0;
    				servo_stellzeit=16;
    				DDRA |= E_INT1;            // E_INT1 als Ausgang
    				DDRC |= 3;                  // SCL und SDA als Ausgang
    				// 5 - 15 - 25             // Min - Mitte - Max
     				servo(15);          // Grundstellung
     				while (1)
    				{
     				servo(17);
     				servo(18);
     				servo(19);
     				servo(20);
     				servo(21);
     				servo(22);
     				servo(23);
     				servo(24);
     				}
    
    			setLEDs(0b100000);
    			}
    
    		break;
    		case RC5_KEY_RIGHT: 		// Turn right:
    
    			writeString_P("RIGHT\n");
    						
    			{
    				i=0;
    				servo_stellzeit=16;
    				DDRA |= E_INT1;            // E_INT1 als Ausgang
    				DDRC |= 3;                  // SCL und SDA als Ausgang
    				// 5 - 15 - 25             // Min - Mitte - Max
    
    	 			servo(15);          // Grundstellung
    	 			while (1)
    				{
     				servo(14);
     				servo(13);
     				servo(12);
     				servo(11);
     				servo(10);
     				servo(9);
     				servo(8);
     				servo(7);
     				servo(6);
     				}
    
    			setLEDs(0b000100);
    			}
    
    		break;
    
    	}	
    
    
    }
    
    
    /*****************************************************************************/
    
    
    int main(void)
    
    {
    
    	initRobotBase(); 
    
    	
    
    	setLEDs(0b111111);
    
    	writeChar('\n');
    
        writeString_P("RP6 controlled by RC5 TV Remote\n");
    
    	writeString_P("___________________________\n");
    
    	mSleep(500);	 
    
    	setLEDs(0b000000); 
    
    	powerON();
    
    	
    
    	// Set the RC5 Receive Handler:
    
    	IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    
    
    
    	return 0;
    
    }
    Gruss und danke für die Hilfe carlitoco
    carlitoco

  4. #24
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    40
    Beiträge
    211
    Hier eine kliene Bewegung des Servoarms als Video:
    noisia.sytes.net/text/SV_A0074.mp4
    carlitoco

  5. #25
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    40
    Beiträge
    211
    Würfel sammler
    noisia.sytes.net/text/Cube-collector.avi

    Code:
    #include "RP6RobotBaseLib.h"
    
    uint8_t  i, pause, servo_stellzeit, servo_delay;
    
    void servo(uint8_t w0, uint8_t w1, uint8_t w2, uint8_t w3, uint8_t w4)
    {
    unsigned int count=0;
       do{
          PORTA |= E_INT1;      // E_INT1 (Pin8)
          sleep(w0);
          PORTA &= ~E_INT1;
          PORTC |= 1;            // SCL (Pin10)
          sleep(w1);
          PORTC &= ~1;
          PORTC |= 2;            // SDA (Pin12)
          sleep(w2);
          PORTC &= ~2;
          PORTB |= 1;
          sleep(w3);
          PORTB &= ~1;
          PORTB |=2;
          sleep(w4);
          PORTB &=~2;
          sleep(servo_delay-(w0+w1+w2+w3+w4));
          //sleep(127);
       } while (count++ < servo_stellzeit);
       mSleep(20*pause);
    }
    
    int main(void) {
    
    initRobotBase();
    i=0;
    servo_stellzeit=20;
    DDRA |= E_INT1;            // E_INT1 als Ausgang
    DDRC |= 3;                  // SCL und SDA als Ausgang
    // 5 - 15 - 25             // Min - Mitte - Max
    servo(25,15,20,10,10); 
    servo(15,5,20,10,10);           // Grundstellung
    servo(10,5,15,10,10);
    while (1)
    {
    servo(25,24,20,10,10); 
    servo(25,24,10,10,10); 
    servo(25,24,5,10,10); 
    servo(20,24,5,10,10); 
    servo(10,24,5,10,10); 
    servo(10,24,7,10,10); 
    servo(10,24,9,10,10); 
    servo(10,24,10,10,10); 
    servo(10,24,12,10,10); 
    servo(10,24,13,10,10); 
    servo(10,24,15,10,10); 
    servo(10,24,18,10,10); 
    servo(10,24,21,10,10); 
    servo(10,24,23,10,10); 
    servo(10,24,25,10,10); 
    servo(10,8,25,10,10); 
    servo(10,7,22,10,10); 
    servo(10,8,18,10,10); 
    servo(20,8,18,10,10); 
    servo(25,8,16,10,10); 
    
    /*
    servo(15,8,20,10,10);  //runter&greifer auf
    servo(16,8,19,10,10);    
     servo(17,8,17,10,10);
     servo(18,8,15,10,10);  
    servo(17,8,14,10,10);  
    servo(16,8,14,10,10);  
    servo(15,8,14,10,10);//greifer zu
    servo(14,8,14,10,10);
    servo(13,8,14,10,10);
    servo(12,8,14,10,10);
    //=(greifer,baseturn,beuger1
    servo(12,8,14,10,10);//hoch
    servo(12,8,14,10,10);
    servo(12,8,16,10,10);  //links drehung beginn    
    servo(12,10,19,10,10);
    servo(12,13,21,10,10);  
    servo(12,15,23,10,10);
    servo(12,18,21,10,10);  
    servo(12,21,19,10,10);    
    servo(12,22,17,10,10);  
    servo(12,23,16,10,10);  
    servo(12,24,13,10,10); //links drehung ende
    servo(12,24,12,10,10);//runter greifer auf
    servo(13,24,10,10,10);  
    servo(19,24,10,10,10); 
    servo(19,24,15,10,10); */
    }
    
    return 0;
    }
    gruss
    carlitoco

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

    Sehr hübsch. Um die Abläufe etwas flüssiger zu gestalten habe ich bei meinen Greifern solche Konstruktionen verwendet:

    Code:
    // Als Ersatz für z.B.:
    servo(25,24,20,10,10);
    servo(25,24,10,10,10);
    servo(25,24,5,10,10);
    servo(20,24,5,10,10); 
    
    // Startposition
    servo(25,24,20,10,10);
    // das Servo sollte noch genug Zeit haben um die neue Position zu erreichen
    servo_stellzeit=5;
    for(i=20;i>5; i--) servo(25,24,i,10,10);
    // oder mit variablen Schrittweiten:
    for(i=20;i>5; i--)
    {
    	servo(25,24,i,10,10);
    	if(i>10) i--;
    }
    // oder eine zweite Achse gleichzeitig
    for(i=20;i>5; i--) if(i>10) servo(25,24,i,10,10); else servo(20,24,i,10,10);
    Weiterhin viel Spaß mit deinem Greifarm

    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. #27
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    40
    Beiträge
    211
    So sind die Bewegungen auch etwas schöner:
    computerkalle.de/rp6.php RP6 Servoarm Video

    Code:
    #include "RP6RobotBaseLib.h"
    
    uint8_t  i, pause, servo_stellzeit, servo_delay;
    
    void servo(uint8_t w0, uint8_t w1, uint8_t w2, uint8_t w3, uint8_t w4)
    {
    unsigned int count=0;
       do{
          PORTA |= E_INT1;      // E_INT1 (Pin8)
          sleep(w0);
          PORTA &= ~E_INT1;
          PORTC |= 1;            // SCL (Pin10)
          sleep(w1);
          PORTC &= ~1;
          PORTC |= 2;            // SDA (Pin12)
          sleep(w2);
          PORTC &= ~2;
          PORTB |= 1;
          sleep(w3);
          PORTB &= ~1;
          PORTB |=2;
          sleep(w4);
          PORTB &=~2;
          sleep(servo_delay-(w0+w1+w2+w3+w4));
          //sleep(127);
       } while (count++ < servo_stellzeit);
       mSleep(2000*pause);
    }
    
    int main(void) {
    
    initRobotBase();
    i=0;
    servo_stellzeit=2;
    DDRA |= E_INT1;            // E_INT1 als Ausgang
    DDRC |= 3;                  // SCL und SDA als Ausgang
    // 5 - 15 - 24             // Min - Mitte - Max
    //servo(24,15,20,10,10); 
    //servo(15,5,20,10,10);           // Grundstellung
    servo(24,24,20,10,10);
    servo(24,24,20,10,10);
    servo(24,24,20,10,10);
    while (1)
    {//servo(greifer auf/zu,links/rechts,up/down,10,10);
    servo(24,24,20,10,10); //runter
    servo(24,24,19,10,10); 
    servo(24,24,18,10,10); 
    servo(24,24,17,10,10); 
    servo(24,24,16,10,10); 
    servo(24,24,15,10,10); 
    servo(24,24,14,10,10); 
    servo(24,24,13,10,10); 
    servo(24,24,12,10,10); 
    servo(24,24,11,10,10); 
    servo(24,24,10,10,10); 
    servo(24,24,9,10,10); 
    servo(24,24,8,10,10); 
    servo(24,24,7,10,10); 
    servo(24,24,6,10,10); 
    servo(24,24,5,10,10);//greifen 
    servo(23,24,5,10,10); 
    servo(22,24,5,10,10); 
    servo(21,24,5,10,10);  
    servo(20,24,5,10,10); 
    servo(19,24,5,10,10); 
    servo(18,24,5,10,10); 
    servo(17,24,5,10,10); 
    servo(16,24,5,10,10); 
    servo(15,24,5,10,10); 
    servo(14,24,5,10,10); 
    servo(13,24,5,10,10); 
    servo(12,24,5,10,10); 
    servo(11,24,5,10,10); 
    servo(10,24,5,10,10); //hoch
    servo(10,24,6,10,10); 
    servo(10,24,7,10,10); 
    servo(10,24,8,10,10); 
    servo(10,24,9,10,10); 
    servo(10,24,10,10,10); 
    servo(10,24,11,10,10); 
    servo(10,24,12,10,10); 
    servo(10,24,13,10,10); 
    servo(10,24,14,10,10); 
    servo(10,24,15,10,10); 
    servo(10,24,16,10,10); 
    servo(10,24,17,10,10); 
    servo(10,24,18,10,10); 
    servo(10,24,19,10,10); 
    servo(10,24,20,10,10); 
    servo(10,24,21,10,10); 
    servo(10,24,22,10,10); 
    servo(10,24,23,10,10); //Drehung, von recht nach links
    servo(10,23,24,10,10);
    servo(10,22,24,10,10);
    servo(10,21,24,10,10);
    servo(10,20,24,10,10);
    servo(10,19,24,10,10);
    servo(10,18,24,10,10);
    servo(10,17,24,10,10);
    servo(10,16,24,10,10);
    servo(10,15,24,10,10);
    servo(10,14,24,10,10);
    servo(10,13,24,10,10);
    servo(10,12,24,10,10);
    servo(10,11,24,10,10);
    servo(10,10,24,10,10);
    servo(10,9,24,10,10);
    servo(10,8,23,10,10); //runter
    servo(10,8,22,10,10); 
    servo(10,8,21,10,10); 
    servo(10,8,20,10,10); 
    servo(10,8,19,10,10); 
    servo(10,8,18,10,10); 
    servo(10,8,17,10,10); 
    servo(10,8,16,10,10); 
    servo(11,8,15,10,10);//greifer auf
    servo(12,8,15,10,10); 
    servo(13,8,15,10,10); 
    servo(14,8,15,10,10); 
    servo(15,8,15,10,10); 
    servo(16,8,15,10,10); 
    servo(17,8,15,10,10);
    servo(18,8,15,10,10); 
    //servo(19,8,14,10,10); //hoch
    servo(18,8,16,10,10); 
    servo(18,8,17,10,10); 
    servo(18,8,18,10,10);  
    servo(19,8,19,10,10); 
    servo(20,8,20,10,10); 
    servo(20,8,21,10,10); 
    servo(20,8,22,10,10); 
    servo(20,8,23,10,10); 
    servo(20,8,24,10,10); 
    servo(20,9,24,10,10); //Drehung, von links nach rechts
    servo(20,10,24,10,10); 
    servo(20,11,24,10,10); 
    servo(20,12,24,10,10); 
    servo(20,13,24,10,10); 
    servo(20,14,24,10,10); 
    servo(20,15,24,10,10); 
    servo(20,16,24,10,10); 
    servo(20,17,24,10,10); 
    servo(20,18,24,10,10); 
    servo(20,19,24,10,10); 
    servo(20,20,24,10,10); 
    servo(20,21,24,10,10); 
    servo(21,22,24,10,10); 
    servo(22,23,24,10,10); 
    servo(23,24,24,10,10); 
    }
    
    return 0;
    }
    carlitoco

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Solar Speicher und Akkus Tests