- LiTime Speicher und Akkus         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Erfahrungen und Erfahrungsaustausch mit Arexx Robot-Arm-mini

  1. #1
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21

    Erfahrungen und Erfahrungsaustausch mit Arexx Robot-Arm-mini

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Nach der Beschäftigung mit RP6 +M32 leistete ich mir diesen Roboterarm.

    1. Das Metallgrundgestell ist stark mit schwarzen Lack bespritzt, so daß es fast unmöglich war, die Gewindeabstandshalter einzudrehen --- etwas mehr Kraft – und KNACK der erste ist abgebrochen ---- Also mit Gewindeschneider die restlichen 3 nachschneiden, aber wer hat schon passende Gewindeschneider ständig vor Ort?

    2. Die mitgelieferte CD war zerkratzt (an einer Stelle durchsichtig), trotz vom großen "C" in Berlin mit festem Band verschlossen – war also kein Kunde dran. Es gelang mit trotzdem die Daten auf Festplatte zu übertragen.

    3. Nach erheblichen Schwierigkeiten den Arm über den PC anzusprechen (Gerät nicht erkannt, und wenn zufällig doch --- war kein Programm ladbar ---falsche Id ....) gelangt es mir trotzdem, aber ein Servo arbeitete nicht ---- Ursache nachdem ich alle Servos mit einem Tester überprüft hatte ----ein Verlängerungskabel war defekt. Also Anschluß abgeschnitten und neuen Stecker angelötet.

    4. Im Testprogramm mit der "Tastatur" funktionierte eine Taste nicht (Servo6 UP).
    Nachdem ich das Programm umgeschrieben habe und die Funktion auf eine andere Taste umgelegt hatte, konnte ich erleichtert feststellen, daß zumindest der Port i.O. ist.
    Die Fehlersuche auf der Tastatur ergab, daß die Diode D9 auf der einen Seite nicht angelötet war. Nun geht es, bis zum nächsten Fehler ))

    Nachdem ich tagelang für die "Inbetriebnahme" gebraucht habe, ist es doch ein sehr interessantes Gerät.

    Gibt es hier jemanden, der kein "Montagsgerät aus Hinter-China" erwischt hat, und schon eigene Programme für den Arm vielleicht in Verbindung mit dem RP6 geschrieben hat ?

    Es gibt ja leider kein eigenes Forum für den Arm.

    Bin noch nicht tiefer eingestiegen, da ich fast nur mit der Fehlerbehebung beschäftigt war, daher noch eine Frage:

    Es gibt ja für mini und den teuren Metallarm auf der CD zwei verschiedene Programmverzeichnisse, obwohl die Elektronicplatine mit dem µProzessor scheinbar gleicht ist. Wo ist der Unterschied ??

    o.k viele Fragen , aber wo ist man besser aufgehoben, als im roboternetz?

    Ralf

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

    da will ich mich gern beteiligen:

    1. Beim Auspacken fiel auf, dass der Beutel der Hauptplatine auf der Lötseite an einer Stelle durchgescheuert war, da lagen auch 2 Leiterbahnen blank (d.h. ohne Lötstoplack). Durchgemessen: Leiterbahnen noch ok, mit Schutzlack nachlackiert.

    2. In der Tüte der Tastatur lag eine halbe Diode 4148. Das war D12, die mechanisch (wohl im Karton) einseitig abgebrochen war. Neue SMD-Diode eingelötet (Problem: Die eine Lötfläche war mit abgerissen, so dass ich da tricksen mußte).

    3. Aufbau: Auch bei mir war das Grundgestell dick schwarz lackiert. Die Abstandhalter für die Hauptplatine konnte man bei 2 Löchern nicht eindrehen, so dass ich mit M3 Stahlschrauben vorgedreht habe. Trotzdem ist dann ein Gewinde eines Abstandhalters abgebrochen. Ich konnte eine M3 Mutter auf beide "Stummel" setzen, so dass das auch so hält.

    4. Es gibt (zu) viele Sorten von Schrauben, die man sich sorgfältig vorsortieren muss, um hinterher nicht durcheinander zu kommen.

    5. Der mechanische Aufbau des Arms gelang erstaunlich gut, keine wesentlichen Probleme. Er ist auch recht gut beschrieben. Es gibt ein paar Hürden, wo man sich etwas mehr Hilfe von der Anleitung wünschen würde:
    - Montage Bodenservo: Es fehlt ein Hinweis, dass man die Mittelstellung des Bodenservos später nur noch mechanisch ändern kann, wenn man umständlich den Maxi-Servohalter öffnet und das Maxi-Servo wieder entfernt. Überhaupt sollte noch deutlicher erwähnt werden, dass man die Servos in Mittelstellung montieren muss.
    - Scheibe mit Achse: Die Schraube M3x8 ließ sich bei mir nur extrem schwer in die Scheibe eindrehen. Ich habe das Loch bei allen Scheiben leicht aufgeweitet.
    - Montage Doppelservohalter: In den Zeichnungen sieht es so aus, dass das Loch im Doppelservohalter (Kabelauslaß) oben beim Handgelenk liegt. Dann sind aber die Kabel zu kurz, so dass ich den Halter umgekehrt montiert habe.
    - Verkabelung (S. 19/20): Es ist nicht sofort erkennbar, welches Servo 1 und welches 6 ist. Ich bin dann erst im Kapitel 7.2 RACS-Verbindungsaufbau, Abbildung 2, darauf gestoßen, das der "gripper" Servo 1 ist.
    - Servo-Kabellänge: Ich finde: Ziemlich knapp. Ich habe mir noch 2 kurze Verlängerungskabel geleistet.

    6. Die Software-Installation klappte bei mir gut (auch durch den RP6 schon geübt!). Bei mir auch zunächst eine falsche ID, die ich nur durch Installation eines anderen RobotLoaders wegbekommen konnte.

    7. Tastatur-Test: Trotz meiner Reparatur der Tastatur (siehe 2.) funktionierten einzelne Tasten nicht. Durchmessen: Beim Tastaturkabel war ein Stecker so schräg aufgequetscht, dass 1 Ader keinen Kontakt bekam. Reparatur: Neuen Stecker aufgequetscht. Danach: Funktion der Tastatur ok.

    Materialeinsatz bis hier:
    - SMD Diode LL4148
    - Schutzlack
    - M3-Stahlschrauben, M3-Mutter
    - 2 Servo-Verlängerungskabel
    - Quetschstecker 8-pol für Tastaturkabel
    - Ein bißchen Lötzinn und Kleinigkeiten

    8. Programme und Library:
    Nur sehr basale Demos. In der Library Fehler bei ...
    - Port-Initialisierung PortC, E, G
    - Zu niedriger ADC Vorteiler
    - Für den Beeper wird PWM benutzt. Besser wäre eine echte Frequenzerzeugung (z.B. mit CTC), wenn man "Musik" machen will.
    Lösung: Habe die Library angepaßt an meine Bedürfnisse.

    Jetzt kanns losgehen ...

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo Dirk,
    deine Probleme signatisieren mir, daß ich nicht ganz allein dastehe.
    Ich habe es jetzt auch hinbekommen, den Arm mit der Loader-Software vom RP6 zu kombinieren.
    Der Loader vom Arm brachte fast nur Fehler, brauchte 2 Rechner.
    Wie sieht es bei dir mit " ID nicht erkannt" aus ?

    Ich habe festgestellt, daß der Arm sich schlecht "resetten" läßt, d.h. es wird sofort das Programm im
    µP gestartet. Damit ist das Loaderprogramm nicht aktiv und der µP über serielle Schnittstelle nicht
    erreichbar.
    Durch schnelles Drücken der Reset/Start-Taster komme ich jetzt doch rein ---ist aber nicht normal.
    Beim RP6 klappt das problemlos ---- ist ja fast das gleiche System.
    Vom Schaltplan ist RP6 und ARM fast gleich ---Resettaste ----ich dachte schon an Kontaktprellen---
    aber der Sofortstart beim einschalten ist der Taster noch garnicht betätigt ?????
    Daher bin ich etwas ratlos , ist ja fast der gleiche µP wie M32 (32 / 64).

    Kannst du bei deinen erkannten Library Fehlern etwas genauer werden, ehe ich auch darauf reinfalle ?

    es soll jetzt bei mir auch endlich losgen, ohne viel Fehlersuche

    Ralf

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Ralf,
    Wie sieht es bei dir mit " ID nicht erkannt" aus ?
    Das hatte sich nach Neuinstallation des Loaders erledigt.

    Ich habe festgestellt, daß der Arm sich schlecht "resetten" läßt, ...
    Ja, das habe ich auch bemerkt. Vor allem betrifft das bei mir die Demos, die die Tastatur benutzen.
    Eine Erklärung habe ich (noch) nicht. Das Prellen des Reset Tasters kann keine Rolle spielen, weil das (Software-)Reset aus dem Loader ja auch nicht funktioniert.

    Gruß Dirk

  5. #5
    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

    Ich habe auch einen RA2, gesponsert von arexx. Es handelt sich allerdings um ein Versuchsgerät das teilweise nicht dem Auslieferstand entspricht. Da ich den Arm eh nach eigenen Vorstellungen zusammengebaut habe, kann ich zu den mechanischen Mängeln nichts sagen. Das ID-Problem hatte ich auch mit der Installation das aktuellen Loaders gelöst. Das Resetproblem umgehe ich mit einer langen Pause beim Programmstart. Erst nach dieser Pause aktiviere ich die Servos, weil ich den Verdacht habe, dass der Start der Servos erneut einen Reset auslöst. Flashprobleme treten bei mir nicht mehr auf, seit ich das Board mit 4X4000mA-Babyzellen versorge. Da mein Arm auf dem RP6 sitzt, habe ich erfolglos versucht, beide mit den Akkus des RP6 zu versorgen. Die nominalen 7,2V sind aber scheinbar zu wenig für den Spannungsregler auf der arm64-Platine. Selbst mit überbrückter D1 hatte das nicht funktioniert. Möglicherweise liegt das aber auch an den Akkus meines RP6, es ist immer noch der erste Satz den ich gnadenlos mit mit einem Steckernetzteil über Nacht nachlade ;)

    Leider habe ich noch nicht viel damit angestellt. Mein Hauptproblem war die fehlende Erfahrung mit I2C. Da ich bisher keine Erweiterungsplatinen hatte, war das völliges Neuland für mich. Erste zaghafte Schritte waren die Anpassung der m32-Lib an das arm64 um den RP6 über I2C und und das RP6-Slave-Demo zu steuern:
    Code:
    // RA2 steuert RP6                                                   1.11.2010 mic
    
    // Das I2C-Masterdemo6 des m32 angepasst an das arm64-Modul.
    // Eine Ergänzung in der Abfrage des Keypads ermöglicht gleichzeitige Bewegungen
    // aller Servos und des RP6.
    // Auf dem RP6 läuft das unveränderte I2C-Slave-Demo.
    
    // Verbindung zwischen RP6-XBUS Pin8(E_INT), Pin10(SCL), Pin12(SDA) und Pin14(GND)
    // und IIC Pin 8-14 auf dem arm64. Beide Boards werden getrennt versorgt.
    
    // PollSwitch16() liefert ein 16bit Abbild der Tasten
    // scan_keyboard1() liefert die Tastennummer mit geänderter Portabfrage
    
    // Infos zum Portexpander
    // http://www.mikrocontroller.net/artic...pander_PCF8574
    
    #include "RobotArmBaseLib.h"
    #include "RP6I2CmasterTWI.h"
    #include "RP6Control_I2CMasterLib.h"
    
    #define I2C_RP6_BASE_ADR 10 // The default address of the Slave Controller (RP6)
    
    /*****************************************************************************/
    // I2C Error handler
    
    /**
     * This function gets called automatically if there was an I2C Error like
     * the slave sent a "not acknowledge" (NACK, error codes e.g. 0x20 or 0x30).
     * The most common mistakes are:
     *   - using the wrong address for the slave
     *   - slave not active or not connected to the I2C-Bus
     *   - too fast requests for a slower slave
     * Be sure to check this if you get I2C errors!
     */
    void I2C_transmissionError(uint8_t errorState)
    {
    	writeString_P("\nI2C ERROR - TWI STATE: 0x");
    	writeInteger(errorState, HEX);
    	writeChar('\n');
    }
    
    
    /*****************************************************************************/
    // Motor function
    
    uint8_t transmit_buffer[10]; // temporary transmit buffer
    							 // A global variable saves space on the heap...
    
    #define CMD_ROTATE 8
    
    #define LEFT 2
    #define RIGHT 3
    
    /**
     * Rotate function - you can define nearly the same functions as you have on
     * the RP6 and just forward the commands with I2C Bus transfers...
     * We will make an improved version of this and other functions in another example!
     */
    void RP6_rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle)
    {
    	transmit_buffer[0] = 0;
    	transmit_buffer[1] = CMD_ROTATE;
    	transmit_buffer[2] = desired_speed;
    	transmit_buffer[3] = dir;
    	transmit_buffer[4] = ((angle>>8) & 0xFF);
    	transmit_buffer[5] = (angle & 0xFF);
    	I2CTWI_transmitBytes(I2C_RP6_BASE_ADR, transmit_buffer, 6 );
    }
    
    #define CMD_MOVE 7
    
    #define FWD 0
    #define BWD 1
    
    void RP6_move(uint8_t desired_speed, uint8_t dir, uint16_t ticks)
    {
    	transmit_buffer[0] = 0;
    	transmit_buffer[1] = CMD_MOVE;
    	transmit_buffer[2] = desired_speed;
    	transmit_buffer[3] = dir;
    	transmit_buffer[4] = ((ticks>>8) & 0xFF);
    	transmit_buffer[5] = (ticks & 0xFF);
    	I2CTWI_transmitBytes(I2C_RP6_BASE_ADR, transmit_buffer, 6 );
    }
    
    /*****************************************************************************/
    // Read all registers function
    
    uint8_t RP6data[32]; // This array will contain all register values of RP6
    					 // after you called readAllRegisters()
    
    					 // It is better to keep such big arrays GLOBAL as
    					 // they otherwise fill up the stack in memory...
    
    /**
     * This function reads ALL registers available in the standard I2C Bus Slave
     * Example program for the Robot Base and outputs their values on the serial interface.
     * You will see a lot of zeros when the Motors are not running. The main values that are not
     * zero are the two Light Sensors and the two free ADC Channels.
     */
    void readAllRegisters(void)
    {
    	I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 0); // Start with register 0...
    	I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 30); // and read all 30 registers up to
    													// register Number 29 !
    
    	// Now we output the Data we have just read on the serial interface:
    	writeString_P("\nREADING ALL RP6 REGISTERS:");
    	uint8_t i = 0;
    	for(i = 0; i < 30; i++)
    	{
    		if(i % 8 == 0) 		  // add some newline chars otherwise everything
    			writeChar('\n');  // is printed on ONE single line...
    		else
    			writeString_P(" | ");
    		writeChar('#');
    		writeIntegerLength(i,DEC,2);
    		writeChar(':');
    		writeIntegerLength(RP6data[i],DEC,3);
    	}
    	writeChar('\n');
    }
    
    /**
     * Here we demonstrate how to read a few specific registers.
     * It is just the same as above, but we only read 4 registers and
     * start with register Number 13...
     * We also show how to combine values from high and low registers
     * back together to a 16 Bit value...
     */
    void readLightSensors(void)
    {
    	uint8_t lightSens[4];
    
    	I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 13); // Start with register 13 (LSL_L)...
    	I2CTWI_readBytes(I2C_RP6_BASE_ADR, lightSens, 4); // and read all 4 registers up to
    													// register Number 16 (LSR_H) !
    	writeString_P("Light Sensor registers:\n");
    	writeString_P(" | LSL_L:"); writeInteger(lightSens[0], DEC);
    	writeString_P(" | LSL_H:"); writeInteger(lightSens[1], DEC);
    	writeString_P(" | LSR_L:"); writeInteger(lightSens[2], DEC);
    	writeString_P(" | LSR_H:"); writeInteger(lightSens[3], DEC);
    
    	writeString_P("\n\n Light Sensor Values:");
    	writeString_P(" | LSL:"); writeInteger(lightSens[0] + (lightSens[1]<<8), DEC);
    	writeString_P(" | LSR:"); writeInteger(lightSens[2] + (lightSens[3]<<8), DEC);
    	writeChar('\n');
    
    	//setCursorPosLCD(1, 3);
    	//writeIntegerLengthLCD(lightSens[0] + (lightSens[1]<<8), DEC, 4);
    	//setCursorPosLCD(1, 11);
    	//writeIntegerLengthLCD(lightSens[2] + (lightSens[3]<<8), DEC, 4);
    }
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int PollSwitch16(void)
    {
    	int i, j, mask=0, x=0;
    
    	for(j=0; j<4; j++)
    	{
    		DDRA = (1<<j); 		// PAj auf Ausgang
    		PORTA = ~(1<<j);		// PA7 bis PA4 ist Eingang mit Pullup, PAj ist LOW (Tilde!)
    		sleep(10);           // Warten auf Pegel
    		x=(PINA>>4);        	// Eingang PA7-4 wird zu Bit3-0 in x
    		for(i=0; i<4; i++)   // Bits 0-3 überprüfen
    			if(!(x & (1<<i))) // Wenn Eingang low ist wurde die Taste gedrückt
    				mask += (1 << (i*4)) * (1<<j); // entsprechendes Bit in Maske setzen
    	}
    	PORTA = 0;              // Port A deaktivieren
    	DDRA = 0;
    
    	return(mask);
    }
    
    int scan_keyboard1(void)
    {
    	int i, mask = PollSwitch16();
    
    	for(i=0; i<16; i++)     // wurde eine Taste gedrückt?
    	{
    	   if(mask & (1<<i))    // Taste i gedrückt?
    	   {
    		   if(mask & ~(1<<i))
    	         return(0); 		// mehrere Tasten gleichzeitig gedrückt!
    			else
    			   return(i+1); 	// Tastennummer zurückgeben
    		}
    	}
    	return(0);					// keine Taste gedrückt
    }
    
    int speed;
    void Event( int x )
    {
    	if(x == 0)
    	{
    		if(PING & LED_GREEN) PowerLEDoff(); else PowerLEDgreen();
    		mSleep(300);
    	}
    	else
    	{
    		PowerLEDred();
    		//Power_Servos();
    		if(x & (1<<0)) { Pos_Servo_1-=speed; Power_Servos();}
    		if(x & (1<<1)) { Pos_Servo_1+=speed; }
    		if(x & (1<<2)) { Pos_Servo_2+=speed; } // Drehrichtung invers!
    		if(x & (1<<3)) { Pos_Servo_2-=speed; }
    		if(x & (1<<4)) { Pos_Servo_3-=speed; }
    		if(x & (1<<5)) { Pos_Servo_3+=speed; }
    		if(x & (1<<6)) { Pos_Servo_4-=speed; }
    		if(x & (1<<7)) { Pos_Servo_4+=speed; }
    		if(x & (1<<8)) { Pos_Servo_5-=speed; Pos_Servo_6-=speed; }
    		if(x & (1<<9)) { Pos_Servo_5+=speed; Pos_Servo_6+=speed; }
    		if(x & (1<<10)) { PowerLEDorange(); speed=5; }
    		if(x & (1<<11)) { PowerLEDorange(); speed=1; }
    		if(x & (1<<12)) { RP6_rotate(35,BWD,40); }
    		if(x & (1<<13)) { RP6_rotate(35,FWD,40); }
    		if(x & (1<<14)) { RP6_rotate(35,RIGHT,40); }
    		if(x & (1<<15)) { RP6_rotate(35,LEFT,40); }
    	}
    /*
    	writeInteger(Pos_Servo_1, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_2, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_3, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_4, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_5, 10);
    	writeString_P(" | ");
    	writeInteger(Pos_Servo_6, 10);
    	writeString_P("\n");
    	*/
    }
    int  Batterie(void)
    {
    	#define BATTERIE 6
    	ADMUX = (1 << REFS0) | (1 << REFS1) | BATTERIE;	// internal 2.56V reference with external capacitor
    	ADCSRA |= (1 << ADSC);			// Start conversion
    	while (!(ADCSRA & (1 << ADIF)));	// wait for conversion complete
    	ADCSRA |= (1 << ADIF);			// clear ADCIF
    	return ADCL + (ADCH << 8);
    }
    
    void printUBat(uint16_t ubat)
    {
    	writeIntegerLength((((ubat/204.8f)+0.1f)), DEC, 2);
    	writeChar('.');
    	writeIntegerLength((((ubat/2.048f)+10)), DEC, 2);
    	writeChar('V');
    }
    int main(void)
    {
    	initRobotBase();
    	PORTA = 0;              // Port A deaktivieren
    	DDRA = 0;
    
    	writeString_P("\n\nRA2 arm64 I2C Master Example Program!              3.11.2010 mic\n\n");
    	int ubat = readADC(ADC_UBAT);
    	printUBat(ubat);
    	writeString_P("\n");
    	
    
    	// IMPORTANT:
    	I2CTWI_initMaster(100); // Initialize the TWI Module for Master operation
    							// with 100kHz SCL Frequency
    	// Register the event handlers:
    	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
    
    	//char counter = 1;
    
    	//Start_position(); //Use this function to set the servomotor in the centre.
    					  //This function must be called before using Power_Servos();
    
    	speed=1; //Speed for servo from '1'(slow) - '10'(fast!)
       Pos_Servo_1=1500;
    	Pos_Servo_2=1530;
    	Pos_Servo_3=1100;
    	Pos_Servo_4=1640;
    	Pos_Servo_5=580;
    	Pos_Servo_6=580;
    	//Power_Servos();  //Use this function to power the servo motors on
    
    	while(true)
    	{
    		Event(PollSwitch16());
    
    /*
    		if(scan_keyboard1())
    		{
    			writeInteger(scan_keyboard1(), 10);
    			writeChar('\n');
    			switch(0)
    			{
    				case 1: // Increment a counter and send value to LEDs of the
    						// Slave Controller:
    					//setLEDs(0b0001);
    					//showScreenLCD("INCREMENT", "LED COUNTER");
    					I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, 3, counter);
    					counter++;
    				break;
    				case 2: // Read and display ALL registers of the slave controller:
    					//setLEDs(0b0010);
    					//showScreenLCD("READ ALL RP6", "REGISTERS");
    					readAllRegisters();
    				break;
    				case 3: // Read the light sensors and show value on display:
    					//setLEDs(0b0100);
    					//showScreenLCD("LIGHT SENSORS:", "L:      R:");
    					readLightSensors();
    				break;
    				case 4: // Rotate a very small distance to the left:
    					//setLEDs(0b1000);
    					//showScreenLCD("ROTATE A BIT...", "... LEFT!");
    					RP6_rotate(35,LEFT,40);
    				break;
    				case 5: // Rotate a very small distance to the right:
    					//setLEDs(0b1001);
    					//showScreenLCD("ROTATE A BIT...", "... RIGHT!");
    					RP6_rotate(35,RIGHT,40);
    				break;
    			}
    			while(scan_keyboard1());
    		}
    */
    	}
    	return 0;
    }
    Außerdem mußte ich meine Tastenabfrage ändern, weil das Keypad nicht vollständig bestückt war:
    http://www.arexx.com/forum/viewtopic.php?f=19&t=1179

    Mein Arm ist nicht drehbar, dafür besitzt er die zwei gespiegelten Servos die ich noch rumliegen hatte:
    https://www.roboternetz.de/phpBB2/vi...=462535#462535

    Das Keypad und ein LCD betreibe ich inzwischen über I2C mit je einem PCF8574:
    https://www.roboternetz.de/phpBB2/ze...=525681#525681

    Mein RA2 auf dem RP6 sieht im Moment so aus:

    Bild hier  
    (Leider wie immer extrem unscharf)

    Weiter bin ich nicht gekommen, denn dann bin ich über das Pong gestolpert. Und zur Zeit versuche ich den RP6 zu einer Ladestation zu locken. Es gibt noch viel zu erforschen ;)

    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!

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Ralf:
    Kannst du bei deinen erkannten Library Fehlern etwas genauer werden, ehe ich auch darauf reinfalle ?
    Ich hänge 'mal die Lib an, wie ich sie z.Zt. verwende. Sie ist so kompatibel zur 1. Version. Hauptänderung ist eigentlich erst einmal nur der CTC Modus für den Beeper.

    Gruß Dirk
    Angehängte Dateien Angehängte Dateien

  7. #7
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    hallo,
    danke Dirk für die Software.
    Mein Arm ist gerade "teilzerlegt", da ich Servo 6 (unten Grundgestell) mit einem stabileren tauschen will.
    Der Arm wackelte ziemlich mit dem Plastelager, nun baue ich gerade ein Servo (Metallgetriebe und Kugellager)ein (12,95 Euro).
    Na ja, radbruch dürfte das Problem ja nicht haben, da die Drehbewegung von seinem RP6 ausgeführt wird.
    Hoffe, daß es jetzt einigermaßen stabil läuft, sonst wird mir die Sache langsam zu teuer.

    Ralf

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... nun baue ich gerade ein Servo (Metallgetriebe und Kugellager)ein (12,95 Euro).
    Ralf, welches Servo nimmst du denn dafür? Bei mir wackelt der Arm auch ziemlich.
    Auch mit dem "Bottom"-Servo bin ich nicht so zufrieden, weil es den Arm gestreckt z.B. kaum heben kann, mit einem Gewicht im Greifer schon gar nicht. Das müßte man fast auch tauschen ...

    Gruß Dirk

  9. #9
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo Dirk,
    habe Servo ohne Probleme eingebaut und brauchte nicht mal den Servohebel am schw. Plastekasten wechseln.
    Es lief auf Anhieb und macht einen stabilen Eindruck, aber habe es natürlich noch nicht im Dauerbetrieb.

    Das Servo ist bei Conrad erhältlich, bei mir in Berlin sogar direkt in der Filiale:
    TOP-LINE STANDARD SERVO RS 2 MG/BB
    Best.-Nr.: 205111 - 62 [Teilenummer: RS2 MG/BB] 12,95 €

    Unter "Bottom-Servo" meinst du sicherlich Servo 5 /Schulter, ja das ist auch mein nächster Wechselkandidat.
    Einziges kleines Problem vielleicht, dieses Servo ist geringfügig breiter
    --unten ist das kein Problem, paßt wie angegossen.
    In dem unteren "Plastekasten" könnte es ev. Probleme mit dem Deckel geben, aber der ist bei mit jetzt in der
    Testphase sowieso offen.
    Maße des neuen Servo LBH 41x20x42

    Gruß Ralf

  10. #10
    Neuer Benutzer Öfters hier Avatar von ralf
    Registriert seit
    13.01.2004
    Ort
    Berlin
    Beiträge
    21
    Hallo Dirk,
    habe nun auch den zweiten Standard-Servo ausgetauscht, da in Grundstellung der Arm zitterte. Servo hat auch problemlos gepaßt und auch der Deckel ließ sich anschrauben....
    aber dann --trotz korrekten Einbau mußte ich feststellen, daß die Drehrichtung vertauscht war ??????????
    Servotester benutzt --- mit meinem Oszi Pulse überprüft ---bei gleicher Einbauweise (Antriebswelle ist ja nicht in der Mitte, Verwechslungen ausgeschlossen) Drehrichtung rechts/links entgegengesetzt.
    Bin da nicht so der SERVO-Pofi, aber gibt es links- oder rechtsdrehende Servos und wenn ja, wie kann man aus den techn. Daten das erkennen?

    Na ok, man kann ja die Programme umschreiben --trotzdem nicht so toll [-(

    Der etwas x-drehende
    Ralf

Seite 1 von 3 123 LetzteLetzte

Stichworte

Berechtigungen

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

LiTime Speicher und Akkus