-
        

Ergebnis 1 bis 5 von 5

Thema: Mein erster Roboter

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.12.2007
    Ort
    Wien
    Alter
    22
    Beiträge
    96

    Mein erster Roboter

    Anzeige

    Hi!



    Mein erster Roboter ist fast fertig und da dachte ich mir, ich stelle ihn hier mal rein. Der Roboter war als Projekt zum Einstieg in die Welt der Mikrocontroller gedacht.

    Er ist 22*17cm groß und Besteht größtenteils aus Alu-Platten und Schrauben. Als Antrieb sind 2 fertige Getriebemotor-Module von der Firma Winkler Schulbedarf verbaut. Die Stromversorgung besteht aus 4 AA-Batterien die so verschaltet sind dass 3V herauskommen (für die Motoren), und aus einer 9VBatterie+5V Spannungsregler für den µC.

    Als Mikrocontroller ist ein Atmega 8 verbaut und die Motoren werden über 2 H-Brücken angesteuert. Er hat vorne vier Microschalter als Kollisionssensoren.

    So, jezt Kommen die Bilder:

    http://danielfrank.bplaced.net/bilde...r/IMG_8887.JPG
    Hier sieht man das Chassis (vorne ist ein Stützrad, das man auf dem Bild nicht sieht).

    http://danielfrank.bplaced.net/bilde...r/IMG_8879.JPG
    Diesmal mit aufgesetzter Platine

    http://danielfrank.bplaced.net/bilde...r/IMG_8881.JPG
    Der µC mit 3 Kontroll-Leds und ISP-Anschluss

    http://danielfrank.bplaced.net/bilde...r/IMG_8882.JPG
    Die H-Brücken (Es fehlen bei der einen noch 2 Transistoren)

    http://danielfrank.bplaced.net/bilde...r/IMG_8883.JPG
    Auf diesem Bild sieht man die Anschlüsse zu den Motoren und Batterien, und den Spannnungsregler.

    http://danielfrank.bplaced.net/bilde...r/IMG_8884.JPG
    Die Platine von unten

    So, das wars erstmal, aber wenn es Fortschritte gibt, werde ich sie posten.


    Und falls ihr anregungen, Kritik, Verbesserungsvorschläge... habt dann bitte Posten!



    MfG

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2009
    Beiträge
    23
    Der Robotter sieht wirklich sehr gut aus. Irgndwie erinnerte mich die Aluplatte an meinen AAtis Roboter. Ein Problem wird doch aber sein, dass der Roboter wen er vorne anstößt, beim Rückwärtsfahren hinten gegen eine Wand stößt oder???

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Ja, mir gefällt er auch. Die elektronische Verarbeitung ist ziemlich cool gemacht.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.12.2007
    Ort
    Wien
    Alter
    22
    Beiträge
    96
    Hi!
    Erstmal Danke für das Lob!

    Zitat Zitat von NXTbotFreak
    Ein Problem wird doch aber sein, dass der Roboter wen er vorne anstößt, beim Rückwärtsfahren hinten gegen eine Wand stößt oder???
    Ja das is ein Problem, aber vllt werde ich hinten auch noch einen Schalter dranbauen.

    Der Code ist auch schon fertig:
    Code:
    #define F_CPU 1000000UL
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    int x;
    
    //###############################################################
    
    int main (void)
    {
    	DDRB=0x07;
    	DDRC=0x0f;
    	DDRD=0x00;
    	PORTD=0x0f;
    
    	PORTB=0x01; //Led1 ein
    
    	while(1)
    	{
    		PORTB &= ~(1<<PB3); //Led3 aus
    		PORTB |= (1<<PB2); //Led2 ein
    		x=0;
    		motor_right(1);
    		motor_left(1);
    
    		int taster();
    
    		if (x==1) //Schalter rechts außen gedrückt
    		{
    			PORTB &= ~(1<<PB2); //Led2 aus
    			PORTB |= (1<<PB3); //Led3 ein
    			
    			motor_right(-1);
    			motor_left(-1);
    			_delay_ms(1000);
    			motor_right(1);
    			_delay_ms(700);
    		}
    
    		if (x==2) //Schalter rechts mitte gedrückt
    		{
    			PORTB &= ~(1<<PB2); //Led2 aus
    			PORTB |= (1<<PB3); //Led3 ein
    
    			motor_right (-1);
    			motor_left (-1);
    			_delay_ms(1000);
    			motor_right(1);
    			_delay_ms(700);
    
    			
    		}
    
    		if (x==3) //Schalter links mitte gedrückt
    		{
    			PORTB &= ~(1<<PB2); //Led2 aus
    			PORTB |= (1<<PB3); //Led3 ein
    
    			motor_right(-1);
    			motor_left(-1);
    			_delay_ms(1000);
    			motor_left(1);
    			_delay_ms(700);
    
    			
    		}
    	
    		if (x==4) //Schalter links außen gedrückt
    		{
    			PORTB &= ~(1<<PB2); //Led2 aus
    			PORTB |= (1<<PB3); //Led3 ein
    
    			motor_right(-1);
    			motor_left(-1);
    			_delay_ms(1000);
    			motor_left(1);
    			_delay_ms(700);
    		}
    		
    		else
    		{
    			
    		}	
    	}
    
    	return 0;
    }
    
    //###############################################################
    
    int motor_right (int mr) //mr=1=vorwärts mr=0=aus mr=-1=rückwärts
    {
    	if (mr==0)
    	{
    		PORTC &= ~( (1<<PC0) | (1<<PC1) ); //Pins PC0 und PC1 "low"
    	}
    	
    	if (mr==1)
    	{
    		PORTC &= ~(1<<PC1); //PC1 aus
    		PORTC |= (1<<PC0); //PC0 ein
    	}
    	
    	if (mr==-1)
    	{
    		PORTC &= ~(1<<PC0); //PC0 aus
    		PORTC |= (1<<PC1); //PC1 ein
    	}	
    	
    	return 0;
    } 
    
    //###############################################################
    
    int motor_left (int ml) //ml=1=vorwärts ml=0=aus ml=-1=rückwärts
    {
    	if (ml==0)
    	{
    		PORTC &= ~( (1<<PC3) | (1<<PC4) ); //Pins PC3 und PC4 "low"
    	}
    	
    	if (ml==1)
    	{
    		PORTC &= ~(1<<PC4); //PC4 aus
    		PORTC |= (1<<PC3); //PC3 ein
    	}
    	
    	if (ml==-1)
    	{
    		PORTC &= ~(1<<PC3); //PC3 aus
    		PORTC |= (1<<PC4); //PC4 ein
    	}	
    	
    	return 0;}
    
    //###############################################################
    
    int taster (void)
    {
    	if (bit_is_clear(PIND,0)) //Schalter rechts außen
    	{
    		x=1;
    	}
    
    	if (bit_is_clear(PIND,1)) //Schalter rechts mitte
    	{
    		x=2;
    	}
    
    	if (bit_is_clear(PIND,2)) //Schalter links mitte
    	{
    		x=3;
    	}
    		
    	if (bit_is_clear(PIND,3)) //Schalter links außen
    	{
    		x=4;
    	}
    
    	return x;
    }
    Aber er funktioniert nicht ganz richtig. Ich hab 3 Kontroll-Leds. Eine Leuchtet immer wenn der Controller aktiv ist (das funktioniert auch), die 2 leuchtet wenn er im Forwärts-Fahr-Modus ist (die leuchtet nie, warum?), und eine die dann leuchtet, wenn der Roboter gerade das Ausweichmanöver macht (die leuchtet komischerweise immer, warum?).
    Ob der µC die H-Brücken richtig ansteuert, weiß ich noch nicht, aber die H-Brücken selbst funktionieren (die eine nur theoretisch, weil noch Transen fehlen).

    Ich hoffe ihr findet den Fehler im Code.


    MfG


    Edit: Ich hab den Fehler gefunden und ich stelle den Code bald hier rein.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.12.2007
    Ort
    Wien
    Alter
    22
    Beiträge
    96
    So, das is jetzt der verbesserte Code:

    Code:
    #define F_CPU 1000000UL
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    int x;
    
    //###############################################################
    
    int main (void)
    {
    	DDRB=0x07;
    	DDRC=0x0f;
    	DDRD=0x00;
    	PORTD=0x0f;
    
    	PORTB=0x01; //Led1 ein
    
    	while(1)
    	{
    		PORTB &= ~(1<<PB2); //Led3 aus
    		PORTB |= (1<<PB1); //Led2 ein
    		x=0;
    		motor_right(1);
    		motor_left(1);
    
    		int taster();
    
    		if (x==1) //Schalter rechts außen gedrückt
    		{
    			PORTB &= ~(1<<PB1); //Led2 aus
    			PORTB |= (1<<PB2); //Led3 ein
    			
    			motor_right(-1);
    			motor_left(-1);
    			_delay_ms(1000);
    			motor_right(1);
    			_delay_ms(700);
    		}
    
    		if (x==2) //Schalter rechts mitte gedrückt
    		{
    			PORTB &= ~(1<<PB1); //Led2 aus
    			PORTB |= (1<<PB2); //Led3 ein
    
    			motor_right (-1);
    			motor_left (-1);
    			_delay_ms(1000);
    			motor_right(1);
    			_delay_ms(700);
    
    			
    		}
    
    		if (x==3) //Schalter links mitte gedrückt
    		{
    			PORTB &= ~(1<<PB1); //Led2 aus
    			PORTB |= (1<<PB2); //Led3 ein
    
    			motor_right(-1);
    			motor_left(-1);
    			_delay_ms(1000);
    			motor_left(1);
    			_delay_ms(700);
    
    			
    		}
    	
    		if (x==4) //Schalter links außen gedrückt
    		{
    			PORTB &= ~(1<<PB1); //Led2 aus
    			PORTB |= (1<<PB2); //Led3 ein
    
    			motor_right(-1);
    			motor_left(-1);
    			_delay_ms(1000);
    			motor_left(1);
    			_delay_ms(700);
    		}
    		
    		else
    		{
    			
    		}	
    	}
    
    	return 0;
    }
    
    //###############################################################
    
    int motor_right (int mr) //mr=1=vorwärts mr=0=aus mr=-1=rückwärts
    {
    	if (mr==0)
    	{
    		PORTC &= ~( (1<<PC0) | (1<<PC1) ); //Pins PC0 und PC1 "low"
    	}
    	
    	if (mr==1)
    	{
    		PORTC &= ~(1<<PC1); //PC1 aus
    		PORTC |= (1<<PC0); //PC0 ein
    	}
    	
    	if (mr==-1)
    	{
    		PORTC &= ~(1<<PC0); //PC0 aus
    		PORTC |= (1<<PC1); //PC1 ein
    	}	
    	
    	return 0;
    } 
    
    //###############################################################
    
    int motor_left (int ml) //ml=1=vorwärts ml=0=aus ml=-1=rückwärts
    {
    	if (ml==0)
    	{
    		PORTC &= ~( (1<<PC3) | (1<<PC4) ); //Pins PC3 und PC4 "low"
    	}
    	
    	if (ml==1)
    	{
    		PORTC &= ~(1<<PC4); //PC4 aus
    		PORTC |= (1<<PC3); //PC3 ein
    	}
    	
    	if (ml==-1)
    	{
    		PORTC &= ~(1<<PC3); //PC3 aus
    		PORTC |= (1<<PC4); //PC4 ein
    	}	
    	
    	return 0;}
    
    //###############################################################
    
    int taster (void)
    {
    	if (bit_is_clear(PIND,0)) //Schalter rechts außen
    	{
    		x=1;
    	}
    
    	if (bit_is_clear(PIND,1)) //Schalter rechts mitte
    	{
    		x=2;
    	}
    
    	if (bit_is_clear(PIND,2)) //Schalter links mitte
    	{
    		x=3;
    	}
    		
    	if (bit_is_clear(PIND,3)) //Schalter links außen
    	{
    		x=4;
    	}
    
    	return x;
    }
    Jetzt leuchten die ersten 2 Leds aber die dritte nach dem Tastendruck nicht. d.h. er erkennt den Tastendruck nicht. Warum? Die Taster sind an den Pins 2-5 angeschlossen und sie sziehen die Pins nach Masse.

    Ich hoffe ihr könnt mir helfen.


    Mit freundlichen Grüßen


    Edit:
    Den Schaltplan habe ich ja ganz vergessen:
    http://danielfrank.bplaced.net/bilde...er/roboter.png

Berechtigungen

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