Project tutorial
EscoriaBot

EscoriaBot © CC BY

EscoriaBot is a robot made with recycled material and Arduino electronics.

  • 1,993 views
  • 2 comments
  • 5 respects

Components and supplies

Necessary tools and machines

Apps and online services

About this project

Since I saw R2-D2 more than 40 years ago in my childhood I wanted to have a robot.

But there was a great barrier between me and my dreams, the Electronics and this problem remained for many more years.

As a user, an advocate of free software, I had heard of arduino but it seemed too difficult for me until my friend Gustavo helped me choose my first kit.

I put it together and kept going.

I did not like the chassis because it was stuck with any obstacle I decided to make my own chassis And it worked but I wanted something more powerful

So I started looking for alternatives and researching I found several YouTube channels such as The Post Apocalyptic Inventor or Espacio de César where I realized that I could take advantage of many discard devices and incidentally make the planet cleaner.

I started looking for all kinds of gadgets from which I could get parts.

I started recycling printer motors, and as I was learning I rescued more and more parts.

Today I disassemble all kinds of devices and take advantage of many more parts, such as gears, gearboxes, LEDs, capacitors, resistors, etc.

I ended up making two versions: a 60 cm long x 37 cm wide caterpillar robot called EscoriaBot and another more modest 36 cm x 25 cm called BotSura

It is made from recycled poster plastic, I don't know what type of plastic it is but it seems like a very dense foam, anyway it could be made of any type of plain material or recycled plastic.

Plans of the robot The plans are made in inkscape to the scale of the final robot but can easily be scaled.

https://drive.google.com/file/d/1gIeu_Nfqf8OKlPs3iF4hUQFp0k1Tc_Qh/view?usp=sharing

The repository

https://github.com/EstebanJPagano/EscoriaBot

Step 1: The chassis

The chassis is large to be able to mount various things on top.

It is a box with the tips at an angle which helps to overcome obstacles.

It is a good idea to make the holes before cutting, if the design is well decided.

Step 2: The wheels

The wheels are made of two circles joined by a piece of smaller diameter tube in the middle and glued together with silicone.

In my case everything is cut with a cutter and perforated so they are not super precise, I also realized that they did not need to be perfect for them to work well.

To make sure they were straight, I put them on a recycled fiberglass rod of broken tents and rotated them, since the silicone allows corrections, I used to make sure they rotated as perfectly as possible.

Step 3: The bogies

Then design the bogies based on the Sherman tank design, this allows the wheels to adapt to the terrain and to better overcome obstacles.

For this I printed the patterns that appear in the plans and then cut and pasted them on the plastic to cut them.

Of course all this with a cnc would be much easier but I don't have one (for now) and I still like to do things by hand.

Then I assembled the bogies using fiberglass rods as axles

To align the wheels, I decided to go through the entire chassis with fiberglass rods to make sure everything was aligned and incidentally give the chassis more rigidity.

Step 4: The drive wheel

Now comes the complicated.

In the past I had made tracks whose drive wheel worked by rubbing on the track but this is not the way that those of track vehicles work and it is not the best way either since it loses power in friction and also often turns false.

So design a track that is simpler than a tank and also simple to make by hand. made of plastic plates that mesh with gears.

Step 5: The caterpillar

Once the gears were designed and cut, I measured the distance between them and cut some plates that would be the links, when I was happy I put it together by gluing the piece on a strip of fabric that connects the links.

When I glued the first pieces I already had the measurement that separates the links and with this I made a separator to make sure that the distance was always the same.

I also measured and glued some center pieces that keep the track aligned fitting inside the grooves of the wheels, this is important to make sure they do not come off, they have all their sides beveled so that they fit well.

Another problem is that the tracks lost tension, vibrated a lot and came out especially when turning backwards,

That's why I put two wheels on top of the chassis so that the track wouldn't hang on the volve.

I also made some grooves to the chassis where the front axle is, which allows the axle to be tensioned using two elastic bands. With this I managed to minimize the problem of vibration.

I also added two strips of fabric to the outer and inner sides of the tracks which makes them stiffer and better mesh on the sprocket and won't come off.

Finally I installed the electronics which is an Arduino Mega with an HC-05 Bluetooth module and an L298N.

I am Spanish-speaking and I translated this article with Google translate.

Code

Escoriabot Arduino
/* include library */
#include <Servo.h>           // Add Servo library
#include <SoftwareSerial.h> // libreria que permite establecer pines digitales
#include <AFMotor.h>


SoftwareSerial miBT(19, 18);   // pin 19 como RX, pin 18 como TX

// ----------- Puenteh

int ENA = 40;      // ENA de L298N a pin digital 5    gris
int ENB = 50;      // ENb de L298N a pin digital 5    naranja
//derecho
int IN1 = 42;      // IN1 de L298N a pin digital 2    violeta
int IN2 = 44;      // IN2 de L298N a pin digital 3    azul
//izquierdo
int IN3 = 46;      // IN2 de L298N a pin digital 2    verde
int IN4 = 48;      // IN3 de L298N a pin digital 3    amarillo
int ALIMENTACION1 = 52;      // pin de alimentacion siempre on

int speedCar = 1024;   // variable para almacenar valor de velocidad
int speedMAX = 1024;  // variable para almacenar valor de velocidad
int speedMED = 768;     // variable para almacenar valor de velocidad
int speedMIN = 130;      // variable para almacenar valor de velocidad
int speedOff = 0 ;

// ---------- Servo
Servo myservoH;               // Define any servo name
int contador;
int powerServ = 30;


// ----------- definir led
int PinLED0 = 32; //blanco adelante
int PinLED1 = 34; //blanco adelante
int PinLED2 = 36; //rojo
int PinLED3 = 38; //rojo

void setup(){
  
  Serial.begin(38400);
  Serial1.begin(38400);

  pinMode(ALIMENTACION1, OUTPUT);   // ENB como salida
  digitalWrite(ALIMENTACION1,HIGH);
  
  // l298n
  pinMode(IN1, OUTPUT);   // IN1 como salida  
  pinMode(IN2, OUTPUT);   // IN2 como salida
  pinMode(ENA, OUTPUT);   // ENA como salida
  pinMode(IN3, OUTPUT);   // IN3 como salida
  pinMode(IN4, OUTPUT);   // IN4 como salida
  pinMode(ENB, OUTPUT);   // ENB como salida

 //Servos
   myservoH.attach (2);          // Define the servo signal pins
   pinMode(powerServ, OUTPUT);   // IN1 como salida  
   digitalWrite(powerServ, HIGH);
   
  // LED
  
  pinMode(PinLED0, OUTPUT);              
  pinMode(PinLED1, OUTPUT);
  pinMode(PinLED2, OUTPUT);
  pinMode(PinLED3, OUTPUT);
  
}

void loop(){

    //------------Bluetooth
  if (Serial1.available()){     // si hay informacion disponible desde modulo
    char DATO = Serial1.read();   // almacena en DATO el caracter recibido desde modulo
    Serial.write(DATO);
    Serial.println('\r\n'); 
     Serial.println("dato" + DATO);

    
      if(DATO == '1') { MotorForward();}
      else if(DATO == '3') {MotorBackward();}
      else if(DATO == '4') {TurnLeft();}
      else if(DATO == '2') {TurnRight();}
      else if(DATO == '0') {MotorStop(); }  //motor stop
      
      else if(DATO == 'a') SetSpeedCarMax ();
      else if(DATO == 'b') SetSpeedCarUp();
      else if(DATO == 'c') SetSpeedCarDown();
      
      else if(DATO == 'd') {goLuces();}
      else if(DATO == 'e') {goLucesOff();}
      else if(DATO == 'f') {led_blink();}
    
      else if(DATO == 'h') { rotarCabeza_H_I(); }//rotar horizontal izquierda
      else if(DATO == 'i') { rotarCabeza_H_D(); } //rotar horizontal derecha
      else if(DATO == 'j') { rotarCabeza_H_90(); } //rotar horizontal derecha
      else if(DATO == 'k') { goLucesColor(); } 
      else if(DATO == 'l') { goLucesOffColor(); }
      
  }
  delay(50);
  
}


// Funciones de motores
/* FORWARD */
void MotorForward(){
  Serial.println(speedCar);
  goLuces();
  analogWrite(ENA, speedCar);  // velocidad mediante PWM en ENA
  analogWrite(ENB, speedCar);  // velocidad mediante PWM en ENB

  digitalWrite(IN1,HIGH);  
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
}

/* BACKWARD */
void MotorBackward(){
  Serial.println(speedCar);
  goLucesColor();
  analogWrite(ENA, speedCar);  // velocidad mediante PWM en ENA
  analogWrite(ENB, speedCar);  // velocidad mediante PWM en ENB
  
  digitalWrite(IN1,LOW);  
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
}
/* TURN RIGHT */
void TurnRight(){
  Serial.println(speedCar);

  analogWrite(ENA, speedCar);  // velocidad mediante PWM en ENA
  analogWrite(ENB, speedCar);  // velocidad mediante PWM en ENB

  digitalWrite(IN1,HIGH);  
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);  
}

/* TURN LEFT */
void TurnLeft(){
   Serial.println(speedCar);
  analogWrite(ENA, speedCar);  // velocidad mediante PWM en ENA
  analogWrite(ENB, speedCar);  // velocidad mediante PWM en ENB

  digitalWrite(IN1,LOW);  
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);  
}

void MotorStop(){
  analogWrite(ENA, speedOff);    // deshabilita motor A
  analogWrite(ENB, speedOff);    // deshabilita motor B
  goLucesOffColor();
  goLucesOff();
}

//  -----------------------  SPEED  -----------------------
int SetSpeedCarMax(){
  speedCar = speedMAX;
    Serial.print("speedCar "+ speedCar);

  delay(90);  
}


int SetSpeedCarUp(){
  speedCar = speedMED;
    Serial.print("speedCar "+ speedCar);

  delay(90);  
}


int SetSpeedCarDown(){
  speedCar = speedMIN;
  delay(90);  
}

//--------------------- SERVO --------------------- 

int rotarCabeza_H_I(){
  if(contador == 0){ contador = 90; }
  contador = contador + 25;               //Incrementa el contador
  delay (300);           // Retardo
  myservoH.write(contador); 
 }
 
void rotarCabeza_H_D(){ 
 if(contador == 0){ contador = 90;  }
 contador= contador - 25;               //Incrementa el contador
 delay (300);           // Retardo
 myservoH.write(contador);
}

void rotarCabeza_H_90(){ myservoH.write(90); }

// ----------------- LUCES  -----------------
void led_blink(){
 int var = 0;
  while (var < 3) {
    digitalWrite(PinLED0,  HIGH);
    delay(90); 
    digitalWrite(PinLED1, HIGH);
    delay(90);
    digitalWrite(PinLED2, HIGH);
    delay(90);
    digitalWrite(PinLED3, HIGH);
    delay(90);

    digitalWrite(PinLED0,  LOW);
    delay(90); 
    digitalWrite(PinLED1, LOW);
    delay(90);
    digitalWrite(PinLED2, LOW);
    delay(90); 
    digitalWrite(PinLED3, LOW);
    delay(90); 
    
    var ++;
  }
}

void goLuces(){ 
  digitalWrite(PinLED0, HIGH);
  digitalWrite(PinLED1, HIGH);
}

void goLucesOff(){ 
  digitalWrite(PinLED0, LOW);
  digitalWrite(PinLED1, LOW);
}

void goLucesColor(){ 
  digitalWrite(PinLED2, HIGH);
  digitalWrite(PinLED3, HIGH);
}

void goLucesOffColor(){ 
  digitalWrite(PinLED2, LOW);
  digitalWrite(PinLED3, LOW);
}

Custom parts and enclosures

Escoriabot Blueprints
robot60_solo_ABMKGi7HoS.svg

Schematics

Comments

Similar projects you might like

Arduino Robot w/ GoPro and FPV iPhone Control via Bluetooth

Project in progress by AlxArd

  • 8,359 views
  • 7 comments
  • 41 respects

Convert Your Old Phone to a Remote Switch

Project tutorial by Vishwas Navada

  • 12,338 views
  • 5 comments
  • 44 respects

Bluetooth Controlled Car with Arduino Mega

Project showcase by DANNY003

  • 4,819 views
  • 6 comments
  • 13 respects

Bracc.ino - Robotic Arm

Project in progress by Team Basso&Delmoro&Gramaglia

  • 2,773 views
  • 1 comment
  • 16 respects

Otto DIY+ Arduino Bluetooth robot easy to 3D Print

Project tutorial by Team Otto builders

  • 82,299 views
  • 136 comments
  • 227 respects

Bluetooth Controlled Servo

Project tutorial by JANAK13

  • 27,946 views
  • 25 comments
  • 48 respects
Add projectSign up / Login