PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Avoider III BrainBug



stochri
18.12.2005, 09:59
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.


************************************************** *******************

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;
}

stochri
19.12.2005, 20:50
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.

linux_80
19.12.2005, 21:54
Hi stochri,
hast Du noch mehr Infos zum Avoider III selber,
ich kannte den zumindest noch nicht ?

stochri
19.12.2005, 22:42
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/Der%20Avoider%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