Op diverse Chinese websites kun je voor weinig geld een leuke robot kit kopen. Ik heb voor 16 euro(!) een robot kit gekocht met 2 aangedreven wieltjes.


In deze kit zitten een Arduino Uno, een Arduino sensor shield, een motor driver, 2 motortjes, servo motor, etc.
Met wat klein gereedschap kom je een heel eind, en een soldeerbout is noodzakelijk om de draadjes aan de motortjes te solderen. In mijn kit zat geen handleiding, maar via afbeeldingen op internet kom je een heel eind. Ook de software is er niet bij, maar er zijn goede start scripts te vinden.

Op internet zijn meerdere beschrijvingen te vinden om een robotje te maken. Je kunt zelf bepalen wat je met de robot wil: autonoom rondrijdend, bestuurt met bluetooth, verschillende sensors, lichtjes, geluid etc.

Zelf ben ik begonnen met deze website: http://mertarduinotutorial.blogspot.nl/2017/03/arduino-project-tutorial-17-obstacle.html






In één avondje heb ik bovenstaande robot in elkaar gezet, en kon zelfstandig rondrijden. Het is nog wat rommelig, ik wil nog bluetooth connectie toevoegen en dan alles wat netter monteren.

Ik heb de volgende code gebruikt. In de originele code zit een foutje, de variabele "distanceRight" werd niet gebruikt.

/*
   Robot 1.1  Solved bug in original version. Variable lookRight wasn't used.
   Robot 1.0  https://www.youtube.com/watch?v=tXsP9STxdBc
              http://mertarduinotutorial.blogspot.nl/2017/03/arduino-project-tutorial-17-obstacle.html
*/

#include           // Servo motor library. This is standard library
#include         // Ultrasonic sensor function library. You must install this library

// Our L298N control pins
const int LeftMotorForward = 7;
const int LeftMotorBackward = 6;
const int RightMotorForward = 4;
const int RightMotorBackward = 5;

// Sensor pins
#define trig_pin A1 //analog input 1
#define echo_pin A2 //analog input 2
#define maximum_distance 200

boolean goesForward = false;
int distance = 100; // Sonar distance

NewPing sonar(trig_pin, echo_pin, maximum_distance); // Sensor function
Servo servo_motor; // Our servo name

void setup(){
  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  
  servo_motor.attach(10); //our servo pin

  servo_motor.write(115);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop(){
  int distanceRight = 0;
  int distanceLeft = 0;
  delay(50);

  if (distance <= 20){
    moveStop();
    delay(300);
    moveBackward();
    delay(400);
    moveStop();
    delay(300);
    distanceRight = lookRight();
    delay(300);
    distanceLeft = lookLeft();
    delay(300);

    // Bug in original version:
    // if (distance >= distanceLeft){
    if (distanceRight >= distanceLeft){
      turnRight();
      moveStop();
    }
    else{
      turnLeft();
      moveStop();
    }
  }
  else{
    moveForward(); 
  }
    distance = readPing();
}

int lookRight(){  
  servo_motor.write(50);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
}

int lookLeft(){
  servo_motor.write(170);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
  delay(100);
}

int readPing(){
  delay(70);
  int cm = sonar.ping_cm();
  if (cm==0){
    cm=250;
  }
  return cm;
}

void moveStop(){ 
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(LeftMotorBackward, LOW);

  digitalWrite(RightMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
}

void moveForward(){
  if(!goesForward){
    goesForward=true;
    
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(LeftMotorBackward, LOW);

    digitalWrite(RightMotorForward, HIGH);
    digitalWrite(RightMotorBackward, LOW); 
  }
}

void moveBackward(){
  goesForward=false;

  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(LeftMotorBackward, HIGH);

  digitalWrite(RightMotorForward, LOW); 
  digitalWrite(RightMotorBackward, HIGH);
}

void turnRight(){
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);

  digitalWrite(RightMotorForward, LOW);
  digitalWrite(RightMotorBackward, HIGH);
  
  delay(500);
  
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);

  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(RightMotorBackward, LOW);
}

void turnLeft(){
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(LeftMotorBackward, HIGH);

  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(RightMotorBackward, LOW);

  delay(500);
  
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);

  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(RightMotorBackward, LOW);
}