Aufgabenstellung
Für die Steuerung kabelloser Geräte (wie z.B. Elektromotoren) wird eine programmierbare, batteriebetriebene Lösung gesucht, die Eingabewerte von Sensoren annehmen und verarbeiten kann.
Ansatz
Durch die Verwendung des programmierbaren Arduino-Boards (arduino.cc) können Motoren mit niedriger Spannung bis zu 5 Volt betrieben werden.
Lösung
Projekt 1: Infrarotsensor
Projekt 2: Entfernungsmesser
Zusammenstellung des Roboters (Projekt 1)
Die folgenden Hardware-Komponenten werden benutzt:
- Tamiya Track&Wheel Set
- Tamiya Twin-Motor Gear Box (Motorkonfiguration: Type C)
- Platine DFRobotShop Rover
- Arduino Duemilanove; Prozessor ATMega 328
- integrierter Motorcontroller (besetzt Pins 5-8)
- USB Schnittstelle
- Battery-Fach
- Infrarotsensor: DFR0094
Zusammenstellung des Roboters (Projekt 2)
Die folgenden Hardware-Komponenten werden benutzt:
- Tamiya Track&Wheel Set
- Tamiya Twin-Motor Gear Box (Motorkonfiguration: Type C)
- Platine DFRobotShop Rover
- Arduino Duemilanove; Prozessor ATMega 328
- integrierter Motorcontroller (besetzt Pins 5-8)
- USB Schnittstelle
- Battery-Fach
- IR Range Sensor: SHARP GP2D12 IR Ranger Sensor
Verdrahtung des Roboters (Projekt 1)
Infrarotsensor:
- Arduino 5V wird an VCC des Sensors angeschlossen
- Arduino GND an Infrarotsensor GND
- D wird (hier in meinem Code) auf Digital Pin 11 gelegt
Die folgenden Software-Komponenten werden benutzt:
- IDE von Arduino CC
- Infrarot-Bibliothek: IRremote.h
Verdrahtung des Roboters (Projekt 2)
Infrarotsensor:
- Arduino 5V mit IR Ranger Sensor roter Draht verbinden
- Arduino GND mit IR Ranger Sensor schwarzer Draht verbinden
- Arduino A2 analoger Eingang mit grünem Draht verbinden
Die folgenden Software-Komponenten werden benutzt:
- IDE von Arduino CC
Mein Code (Projekt 1)
#include <IRremote.h> // use the library
int E1 = 6; //M1 Speed Control
int E2 = 5; //M2 Speed Control
int M1 = 8; //M1 Direction Control
int M2 = 7; //M2 Direction Control
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
int i;
for(i=5;i<=8;i++)
pinMode(i, OUTPUT);
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
int leftspeed = 255; //255 is maximum speed
int rightspeed = 255;
switch(results.value)
{
case 0x802:
{
forward (leftspeed,rightspeed);
}
break;
case 0x804:
{
left (leftspeed,rightspeed);
}
break;
case 0x806:
{
right (leftspeed,rightspeed);
}
break;
case 0x808:
{
reverse (leftspeed,rightspeed);
}
break;
default:
stop();
break;
}
irrecv.resume(); // receive the next value
} // Your loop can do other things while waiting for an IR command
}
void stop(void) //Stop
{
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
}
void forward(char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void reverse (char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void left (char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void right (char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
[/javascript]
<h3>Mein Code (Projekt 2)</h3>
[javascript]
// example 32.1 - IR receiver code repeater
// http://tronixstuff.com/tutorials > chapter 32
// based on code by Ken Shirriff - http://arcfn.com
int E1 = 6; //M1 Speed Control
int E2 = 5; //M2 Speed Control
int M1 = 8; //M1 Direction Control
int M2 = 7; //M2 Direction Control
int irReader = 3; // the analog input pin for the ir reader
int irVal = 0; // stores value from Ir reader
void setup()
{
int i;
for(i=5;i<=8;i++)
pinMode(i, OUTPUT);
Serial.begin(9600); // for serial monitor output
}
void loop()
{
int leftspeed = 255; //255 is maximum speed
int rightspeed = 255;
irVal = analogRead(irReader); // read the value from the ir sensor
Serial.println(irVal); // sends ir val to computer
if (irVal>210) // have we received an IR signal?
{
left (leftspeed,rightspeed);
delay(500);
}
else
{
forward (leftspeed,rightspeed);
}
}
void stop(void) //Stop
{
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
}
void forward(char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void reverse (char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void left (char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void right (char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
