-         

Seite 2 von 8 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 71

Thema: monoleg - Der einbeinige Roboter

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Klingon77
    Registriert seit
    26.09.2006
    Ort
    Hunsrück
    Alter
    56
    Beiträge
    2.543
    Anzeige

    hi radbruch,

    nun machst Du also doch Ernst mit deinem Namen und verabschiedest dich von drehenden Vortriebselementen...?

    Feines Projekt!
    Bin mal gespannt, wo es hinläuft...

    Mal was anderes:
    Habe letzens beim Surfen (leider den Link nicht mehr da) einen Zweibeiner gesehen.
    Die Füße waren mit Unterdruck-Saugnäpfen versehen.
    Die Beine standen in Ruhe wie beim Spagat auseinander.

    Lange Rede, kurzer Sinn:
    Das Teil ist mit Hilfe der Saugnäpfe prima gelaufen!
    Wände, Treppen, Decken - solang halbwegs glatt - kein Problem.

    Hat auch toll ausgesehen, so ein "nur-Beiner".

    Gruß, Klingon77
    Der kürzeste Weg zwischen zwei Menschen ist ein Lächeln - http://www.ad-kunst.de

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.787
    Blog-Einträge
    8
    Hallo

    Es freut mich sehr, dass euch mein kleines Projekt so viel Freude bereitet. Eigentlich sollte es nur dazu dienen, Servos für einen Roboterarm zu beherrschen. Aber es verselbständigt sich zunehmend. Hier nun der neuste Stand des Projekts.

    Nachdem ich lange genug gejammert hatte, wurde mir von der besten Ehefrau von allen ein USB-ISP-Interface genehmigt. *juhu* Das Teil (ein mysmartusb für 30€) wurde gestern geliefert. Hier nun die ersten Videos und Pics nach dem Abnabeln vom RP6:


    http://www.youtube.com/watch?v=6ZNNRiDPIao
    http://www.youtube.com/watch?v=dHDhgpYCXm0
    http://www.youtube.com/watch?v=Z7gb-9V5KY4
    Orginalvideos: 1 2 3 4


    Nach meinem heutigen ISP- und ATtiny-Marathon steuert nun ein ATtiny13 den Roboter. Bei 1,2MHz CPU-Taktfrequenz werden die Servos mit einer Counter-ISR angesteuert. Der Code hat im Moment 516 Bytes:

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    #define x_mitte 17
    #define y_mitte 17
    #define z_mitte 17
    
    unsigned int x, y, z, demo;
    
    void delay(uint16_t d)                                // Warteschleife
    {
    	uint16_t d1, dummy;
    	for (d1=d; d1>0; d1--) dummy^=d1;
    }
    ISR(TIM0_COMPA_vect)                                  // Servoansteuerung
    {
    static uint16_t count=0;
    	if (count>x) PORTB &= ~(1<<PB0); else PORTB |= (1<<PB0);
    	if (count>y) PORTB &= ~(1<<PB1); else PORTB |= (1<<PB1);
    	if (count>z) PORTB &= ~(1<<PB2); else PORTB |= (1<<PB2);
    
    	if (count < 200) count++; else count=0;
    }
    
    int main(void)
    {
    	x=x_mitte;                                         // Servos Basisposition
    	y=y_mitte;
    	z=z_mitte;
    	demo=5;                                            // 5 Einzelschritte
    	
    	DDRB = (1<<PB2) | (1<<PB1) | (1<<PB0);             // Servoausgänge
    	PORTB= (1<<PB3);                                   // PullUp Taster ein
    	
    	TCCR0A =  (0 << WGM00) | (1 << WGM01);					// CTC-Mode
    	TCCR0A |= (0 << COM0A0) | (0 << COM0A1);				// ohne OCR-Pin
    	TCCR0B = (0 << CS02)  | (0 << CS01) | (1 << CS00);	// no prescaler
    	TIMSK0 =  (1 << OCIE0A); 									// Interrupt ein
    	OCR0A  = 50;  // nicht wissenschaltliche Frequenz
    	sei();
    
    	while(1)
    	{
    		y=y_mitte+4; delay(400);                        // Schritt
    		if (demo) while(PINB & (1<<PB3)); // warten auf Taste
    		for (; x>x_mitte-12; x--)
    		{
    		   if (x==5) y=y_mitte+7;
    		   if (x==0) y=y_mitte+5;
    		   if (x==-11) y=y_mitte+3;
    			delay(120+x);
    		}
    		x=x_mitte-15; y=y_mitte+4; delay(100);
    		y=y_mitte; delay(300);
    		x=x_mitte+5; delay(1000);
    		if (demo) demo--;
    	}
    	return(0);
    }
    Lager für die Gelenke sind übrigens Reiszwecken:




    Gruß

    mic

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

  3. #13
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.617
    Hei, irre gut. Find ich herrlich kreativ!! Hat das Ding schon einen Namen? z.B. ALFd ?? (A dvanced L octite F ischertechnik design).

    Und ich popel immer noch mehr oder weniger mit "Trockenübungen" herum
    Ciao sagt der JoeamBerg

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.06.2005
    Alter
    29
    Beiträge
    364
    Ist ja geil das Board hab ich auch, und ich Idiot hab noch nicht damit gearbeitet! Ich kann gar nicht glauben was damit alles möglich ist, fetter Respekt. Ne Idee schnell, unkompliziert und vor allem Zweckmäßig umgesetzt.

  5. #15
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.787
    Blog-Einträge
    8
    Hallo

    Ein kleines Update der Steuerplatine:

    - ein 100uF-Kondensator hilft bei schwachen Akkus die Anlaufströme der Servos zu verkraften.
    - 2,2k-Widerstände in den Servo-Impuls-Leitungen.
    - Zusätzlicher Jumper trennt GND der Servos um ein Zucken beim Flashen zu verhindern.
    - gedrehte hohe ISP-Buchsen.
    - Testanschluß für zwei weitere Pins.

    Diesen "Boxenstopp" nutzte ich noch für einen kleinen Versuch. Ich nenne ihn "Kippler":



    Das Teil besteht aus:

    - Der Steuerplatine mit ATtiny13
    - Zwei kleine und ein großer 5€-Servos
    - Vier Akkus(900mA) mit Halter
    - 9V-Batterieklipp
    - Servoanschlußadapter vom Einbein
    - Zwei Schraubdeckel
    - Heißkleber (und zwei Kabelbinder weil die Federn im Akkuhalter diesen auseinanderdrücken)

    Selbstverständlich gibt's auch wieder ein Video:


    http://www.youtube.com/watch?v=5ZSN3rLdAOM

    Hier noch der Code (mit EEProm-Routinen zum Debugen 534Bytes):
    Code:
    // steuert den Wankenden, 1. Versuch
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    #define x_mitte 27
    #define y_mitte 27
    #define z_mitte 25
    #define schritt 15
    #define kipp 4
    
    unsigned char x, y, z, demo, count;
    unsigned char linie_links, linie_rechts;
    int eeprom_adr;
    
    void delay(uint16_t d)                                // Warteschleife
    {
    	uint16_t d1, dummy;
    	for (d1=d; d1>0; d1--) dummy^=d1;
    }
    
    ISR(TIM0_COMPA_vect)                                  // Servoansteuerung
    {
    	if (count>x) PORTB &= ~(1<<PB0); else PORTB |= (1<<PB0);
    	if (count>y) PORTB &= ~(1<<PB1); else PORTB |= (1<<PB1);
    	if (count>z) PORTB &= ~(1<<PB2); else PORTB |= (1<<PB2);
    	if (count < 200) count++; else count=0;
    }
    
    void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
    {
    /* Wait for completion of previous write */
    while(EECR & (1<<EEPE));
    /* Set Programming mode */
    EECR = (0<<EEPM1)|(0>>EEPM0);
    /* Set up address and data registers */
    EEARL = ucAddress;
    EEDR = ucData;
    /* Write logical one to EEMPE */
    EECR |= (1<<EEMPE);
    /* Start eeprom write by setting EEPE */
    EECR |= (1<<EEPE);
    }
    
    unsigned char EEPROM_read(unsigned char ucAddress)
    {
    /* Wait for completion of previous write */
    while(EECR & (1<<EEPE));
    /* Set up address register */
    EEARL = ucAddress;
    /* Start eeprom read by writing EERE */
    EECR |= (1<<EERE);
    /* Return data from data register */
    return EEDR;
    }
    
    int main(void)
    {
    	x=x_mitte;                                       // Servos Basisposition
    	y=y_mitte;
    	z=z_mitte;
    	demo=3;                                          // 5 Einzelschritte
    	eeprom_adr=2;                                    // ersten Speicherstelle
    	
    	DDRB = (1<<PB2) | (1<<PB1) | (1<<PB0);          // Servoausgänge
    	PORTB= (1<<PB3);                                   // PullUp Taster ein
    
    	TCCR0A =  (0 << WGM00) | (1 << WGM01);					// CTC-Mode
    	TCCR0A |= (0 << COM0A0) | (0 << COM0A1);				// ohne OCR-Pin
    	TCCR0B = (0 << CS02)  | (0 << CS01) | (1 << CS00);	// no prescaler
    	TIMSK0 =  (1 << OCIE0A); 									// Interrupt ein
    	OCR0A  = 50;  // nicht wissenschaltliche Frequenz
    	sei();
    
    	while(PINB & (1<<PB3)); // warten auf Taste
    	while(1) {
       	while(z-- > z_mitte-kipp) delay(150);
    		delay(5000);
       	y=y_mitte+schritt;
    		while(x++ < x_mitte+schritt) delay(100);
    		delay(1000);
    		
       	while(z++ < z_mitte+kipp) delay(150);
    		delay(5000);
       	x=x_mitte-schritt;
    		while(y-- > y_mitte-schritt) delay(100);
    		delay(1000);
    		
    		if(demo) demo--; else
    		{
    		   while(z-- > z_mitte-kipp) delay(150);
    			delay(5000);
       		y=y_mitte+schritt;
    			delay(1000);
    
    			while(z++ < z_mitte+kipp) delay(150);
    			delay(5000);
       		x=x_mitte-schritt;
    			while(y-- > y_mitte-schritt) delay(100);
    			delay(1000);
    			demo=3;
    		}
    	}
    	return(0);
    }
    Gruß

    mic
    Geändert von radbruch (10.08.2014 um 11:53 Uhr) Grund: Bilder-URL geändert

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

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    56
    Beiträge
    534
    Super Sache!
    Der Kippler gefällt mir .. ulkig .. mal was ganz anderes ... Hmmm .. da fehlen dann nur noch kreisende Umgebungssensoren und eine Möglichkeit Hindernisse zu überwinden ... klasse! Viel Spaß weiterhin!
    Ich kann mir keine Signatur leisten - bin selbständig!

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von squelver
    Registriert seit
    20.07.2006
    Ort
    Hoykenkamp
    Alter
    37
    Beiträge
    2.474
    Das is n Spitze Projekt, komme ausm Schmunzeln garnicht mehr raus =D>
    Erinnert mich an eine Comicfigur
    * Da geht noch was *

  8. #18
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.787
    Blog-Einträge
    8
    Hallo

    Für die Kippler-Fans hier noch ein letztes Video. Ich muss ihn leider wieder zerlegen, weil ich die Teile brauche.
    Für Erweiterungen wie Radar oder Fernbedienung ist der tiny13 vermutlich zu klein.

    Die kurzen Stopps im Video werden von den 9V-Klipps verursacht; durch Erschütterung kurzer Spannungsausfall. Hier werde ich wohl auf Modelbaustecker umrüsten.



    http://www.youtube.com/watch?v=j334i_YCwoI
    Orginales 12MB-mpeg


    Gruß

    mic

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

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    56
    Beiträge
    534
    Klasse && schade! Bist Du Schotte? So'n geniales Bürschchen töten
    Ich kann mir keine Signatur leisten - bin selbständig!

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    Respekt! Nette Ideen

Seite 2 von 8 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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