Projektvorstellung: Microcontrollerbasierter Roboter mit Infrarotsensor (1) und -entfernungsmesser (2)

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);
}
&#91;/javascript&#93;

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