-         

Ergebnis 1 bis 4 von 4

Thema: Avoider III BrainBug

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2

    Avoider III BrainBug

    Anzeige

    Hallo zusammnen,
    da ich ein Fan von kleinen Mikrocontrollern bin, beschäftige ich mich gerade mit dem Attiny13. Um damit mal praktisch was zu steuern, habe ich einfach einen an meinen Avoider III Roboter drangebastelt, damit der mal ein komplexers Verhalten zeigen kann, als immer nur zurückzulaufen, wenn er auf eine Wand trifft.
    Der Controller ist über einen Steckverbinder angeschlossen, beim entfernen des Controllers erhält der AVOIDER seine ursprüngleich Funktion zurück.

    Code:
    *********************************************************************
    
    	AVOIDER III Brain Bug
    
    	This progam can control a AVOIDER III robot with an Attiny 13 processor.
    	First M1 and M2 are used as inputs. The program detects an IR-Reflection
    	by a change of PortB4. 
    	If a change is detected the Ports are switched to output and the Attiny 
    	controls the Motors.
    	
    	Processor: Attiny13
    	Make shure to set the internal fuses to 9.6Mhz systemclock
    
    	PORTB0: 
    	PORTB1: 
    	PORTB2: 
    	PORTB3: M1
    	PORTB4: M2
    	PORTB5: RESET
    
    	AVOIDER III modifications:
    	1. cut conducting path from pin 10 of the OP and insert a 100KOHM resistor between
    	2. cut conducitng path between pin 6 and pin 8 and insert a 100kOhm resistor
    	3. connect signal M1 to pin 10
    	4. connect signal M2 to pin 6
    	
    
    	The rights of this program are under GNU license. 
    	You may copy,modify and redistribute the program with open source code
    	
    	18.12.2005 stochri
    	
    **********************************************************************/
    
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    typedef unsigned char byte;
    
    void init_timer()
    {
    
    
    	TCCR0A=(1<<COM0A0) | 0x02; //CTC mode and toogle OC0A port on compare match
    
    	
    	TCCR0B=0x01; // internal clock source no prescaling
    	OCR0A=138; // Compare value 
    	// calculated frequency at 9.6Mhz for 36.36kHz at toogle pin (*2 toogle )=(9.6e6/((132+1))) 
    	// 36kHz->27.77us , 27.77us*36=1ms
    	// counter runs with 72kHz
    	// OCR0A soll: 132 with frequncy counter ajusted value 5%=+6
    
    
    }
    
    #define MILISECOND 72
    
    void delay(unsigned int ticks)
    {
    	unsigned int n;
    	for (n=0;n<ticks;n++)
    	{
    		while(!(TIFR0<<OCF0A)); // wait for compare flag
    		TIFR0|=1<<OCF0A; // clear compare flag
    	}
    }
    void msdelay(unsigned int ms)
    {
    	unsigned int n;
    	for (n=0;n<ms;n++)
    	{
    		delay(MILISECOND);
    	}
    }
    
    
    #define R_L_FAST 0x00 
    #define R_SLOW 0x08
    #define MOTORS_OFF 0x10
    #define L_BACK 0x18
    
    
    int main(void)
    {
    	byte n,flag;
    
    
    
    
    	init_timer();
    	cli();
    
    	DDRB=0; // All ports as input
    
    
    
    	while(1)
    	{
    
    
    		flag=(PINB&(1<<PINB4)); // detect an IR reflection
    		for(n=1;n<10;n++) // make 10 loops to suppress motor disturbances
    		{
    			flag&=(PINB&(1<<PINB4)); // Test PORT bin if IR-Reflektion	
    			msdelay(1);
    
    		}
    		if(flag) // control the motors
    		{
    			DDRB=(1<<PINB3) | (1<<PINB4); // Pins set to OUTPUT
    			PORTB=MOTORS_OFF;
    			msdelay(1000);
    			PORTB=R_L_FAST;
    			msdelay(500);
    			PORTB=MOTORS_OFF;
    			msdelay(500);
    			PORTB=R_L_FAST;
    			msdelay(500);
    			PORTB=MOTORS_OFF;
    			msdelay(500);
    			PORTB=L_BACK;
    			msdelay(2500);
    
    			PORTB=R_L_FAST;
    
    			DDRB=0; // All ports as input
    			msdelay(2000); 
    		}
    
    
    	}
    
    	return 0;
    }
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken avoideriiibrainbug.jpg  

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Mit nur wenig Auwand läßt sich der AVOIDER III über den BrainBug mit einer Infrarotfernsteuerung steuern.
    Die Schaltung besteht nur aus 5 Bauelementen ( die 2 Widerstände, die ich in den Avoider III einbauen musste, nicht mitgezählt ).
    Leider habe ich hier im Forum kein Programm für meine Yamaha-Fersteuerung gefunden. Sie verwendet kein RC5 Protokoll, für das es hier ja viele Beispielprogramme gibt.,
    Es hat mich ungefähr einen ganzen Tag gekostet, ein Programm für meine Fernsteuerung zu schreiben, das debuggen des Attiny gestaltet sich etwas schwierig.
    Meine Fernsteuerung scheint änlich wie hier beschrieben
    http://www.hifi-remote.com/infrared/IR-PWM.shtml
    codiert zu sein.

    Mit der Fernsteuerung kann ich jetzt vorwärts, rückwärts, stop und in den Avoider-Orginalmodus zurückschalten, indem ich die Attiny-Ausgänge hochohmig setze.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken yahama_ir_2.jpg   avoiderii_brainbug_kleiner.jpg  

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hi stochri,
    hast Du noch mehr Infos zum Avoider III selber,
    ich kannte den zumindest noch nicht ?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Hallo linux_80,
    den Avoider III habe ich mir vor 4 oder 5 Jahren mal gekauft. Den gab's mal beim Conrad.
    Er läuft auf 6 Beinen, die mit zwei Motoren angetrieben werden. Vorne ist eine blinkende Leuchtdiode und ein Fototransistor, mit dem der Avoider ein Hindernis detektiert und dann umdreht.

    http://www.buno.de/produkt-1608332/D...der%20III.html

    Er sieht haupsächlich gut aus, hat aber nicht viel auf dem Kasten ( sowas soll's ja geben ). Die Mechanik hat allerdings eine gewisse Ästhetik. Er stammt aus Japan und man merkt beim Zusammenbau, das da ein Konstrukteur mit Hingabe am Werk war.

    Da der Roboter schon länger bei mir rumsteht und ich für meine Attiny-Test nicht extra eine Motorsteuerung bauen wollte, habe ich die Schaltung "gehackt" und die Attiny Ports an die Eingänge des OP's im Avoider wie im Programm weiter oben beschrieben, angeschlossen.

    Ich habe mit auch überlegt, ob ich nicht versuchen solte, eine Mikro-Car mitdem Attiny zu steuern, da wüde die Größe gut passen. Aber vorerst werde ich das Projekt mal zurückstellen.

    Gruss,
    stochri

Berechtigungen

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