microBot -- Schwarmvehikel auf der Basis eines Arduino Micro
(EN google-translate)
(PL google-translate)
Vorstudien
|
1. Minimalaufbau zu Linienverfolgung
|
Bild 0-1: Aufbau. Verwendung vier verschiedener Ports, um Motore direkt ansteuern zu können.
Bild 0-2: Entwurf Pinlayout.
Bild 0-3: Verdrahtung der Motore, Vorderansicht.
Bild 0-4: Verdrahtung der Motore, Rückansicht / Sandwichaufbau: Winkel, Gummimatte, Powerbank, Gummimatte, Steckboard.
Bild 0-5: Fahrt.
void setup()
{
DDRB|=(1<<PB4);
DDRC|=(1<<PC6);
DDRD|=(1<<PD7);
DDRE|=(1<<PE6);
PORTB&=~(1<<PB4);
PORTC&=~(1<<PC6);
PORTD&=~(1<<PD7);
PORTE&=~(1<<PE6);
//Serial.begin(9600);
}
int zaehler=0;
int pwm1 = 0;
int pwm2 = 0;
int wert=25;
void loop()
{
int x = analogRead(0); //grün 330...250 schwarz
if(x<400 && wert<50)
wert++;
else if(x>410 && wert>0)
wert--;
int y = 405-x;
if(y<-20) y=-20;
if(y>20) y=20;
int pwm1 = 40+(50+wert+y)/2; //15...60
int pwm2 = 40+(100-wert-y)/2;
if(zaehler<pwm1)
{
PORTB|=(1<<PB4);
PORTC|=(1<<PC6);
}
else
{
PORTB&=~(1<<PB4);
PORTC&=~(1<<PC6);
}
if(zaehler<pwm2)
{
PORTD|=(1<<PD7);
PORTE|=(1<<PE6);
}
else
{
PORTD&=~(1<<PD7);
PORTE&=~(1<<PE6);
}
/*
if(zaehler%20==0)
{
Serial.print(x);
Serial.print(" ");
Serial.print(pwm1);
Serial.print(" ");
Serial.println(pwm2);
}
*/
delay(1);
zaehler++;
zaehler%=100;
}
Code 0-1: swarmvehicle007 -- Testprogramm mit I-Regler.
2. Datenübertragung per Infrarot
Bild 0-6: Testaufbau Datenübertragung per Infrarot.
Grundaufbau: 76_Mikroprozessoranwendungen/06_Infrarot
void initTimer1()
{
TCCR1B &= ~(1<<WGM13); //Mode 4
TCCR1B |= (1<<WGM12);
TCCR1A &= ~(1<<WGM11);
TCCR1A &= ~(1<<WGM10);
//Vorteilung 1: 16000000Hz
TCCR1B &= ~(1<<CS12);
TCCR1B &= ~(1<<CS11);
TCCR1B |= (1<<CS10);
//f = fclk/(2*N*(OCR1A+1))
//OCR1A = (fclk/(f*2*N))-1
//OCR1A = 8000000/440 - 1 == 18181
//KORRIGIERT:
//********************************
//OCR1A = 4000000/440 - 1 == 9091
//OCR1A = 16000000/(f*4*N) - 1 == 9091
//********************************
//OCR1A=9091; //0,5Hz == 4 Schläge!
OCR1A=133; //30kHz
// OCR1A=132; //30kHz
// OCR1A=131; //30kHz
// OCR1A=132/2; //30kHz
//Toggle auf OC1A:
TCCR1A &= ~(1<<COM1A1);
TCCR1A |= (1<<COM1A0);
pinMode(9,OUTPUT);
}
void setup()
{
initTimer1();
Serial1.begin(300);
}
int x=' ';//code 32
void loop()
{
Serial1.write(x);
x++;
if(x>'z')
x=' ';
delay(100);
}
Code 0-2: Sender
void setup()
{
Serial.begin(9600);
Serial1.begin(300);
}
void loop()
{
while(Serial1.available())
{
int x = Serial1.read();
Serial.write(x);
if(x=='z')
Serial.write('
');
}
}
Code 0-3: Empfänger
3. Skriptverarbeitung
Damit die Library beim Arduino kompiliert...
|
|
MathParser.zip
Siehe Beispiel aus Library: WithVariables
Code 0-4: Beispielcode mit Variablen.
MathParser_WithVariables_ArdMicro001.zip