Los músculos de los robots

 

Los robots utilizan para moverse, sistemas eléctricos, neumáticos o bien hidráulicos. Los sistema hidráulicos son los más adecuados cuando se quieren transmitir grandes fuerzas. Piensa, por ejemplo, en las excavadoras o en los frenos de los coches, mediante los cuales a través de un pequeño esfuerxo en el pedal, podemos detener un vehículo que circula a gran velocidad y puede pesar varios miles de kilos.

Muchos brazos de robots utilizan cilindro hidráulicos para conseguir gran fuerza y mucha precisión. Esto es posible gracias a dos principios fisicos:

Los líquidos casi no pueden comprimirse.

Al aplicar presión a un líquido, ésta se transmite por igual en todas las direcciones.

Gracias a estos dos principios, si unimos dos jeringas idénticas mediante un tubo y las rellenamos de líquido, al apretar una, toda la fuerza aplicada se transmite a la otra. pero, si la otra es mayo, la fuerza que se transmite también será mayor.




Desplazamiento de los robots

 

Si nos limitamos a analizar cómo se desplazan los robots por tierra, comprobaremos que la mayoría de ellos disponen de ruedas, orugas o patas.



Cuando el desplazamiento se realiza mediante patas, es aconsejable que los robots tengan un mínimo de tres patas para garantizar su estabilidad. Algunos vehículos robotizados se han diseñado con un gran número de patas, al igual que muchos insectos, para aumentar su estabilidad  y que puedan desplazarse por terrenos muy abruptos.

Cuando el terreno presenta pequeños obstáculos o pendientes, las orugas son las más adecuadas, pero si el terreno es llano, resultan más apropiadas las ruedas.

Actualmente existen robots que pueden subir y bajar escaleras gracias a sensores de posición y ángulo que posibilitan que el robot equilibre su peso.

Los robots que tiene ruedas no emplean, para girar, el mismo sistema que los coches, en los que giran las ruedas delanterass. En los robots se hacen girar al ruedas laterales a distintas velocidades, tal como se representa en la figura correspondiente a un vehículo de tres ruedas.

¿Qué es la robótica?

 

El término robótica es dado por Isaac Asimov para describir la tecnología de los robots. Él mismo predijo hace años el aumento de una poderosa industria robótica, predicción que ya se ha hecho realidad.
El término robótica se definen desde diversos puntos de vista:

Las definiciones son tan dispares como se demuestra en la siguiente relación:

  • Ingenio mecánico controlado electrónicamente, capaz de moverse y ejecutar de forma automática acciones diversas, siguiendo un programa establecido.
  • Máquina de apariencia o comportamiento imita a las personas y sus acciones, por ejemplo en el movimiento de sus extremidades.
  • Es una máquina que hace algo automáticamente en respuesta a su entorno.
  • Esta compuesto de motores controlados por un programa de ordenador.
  • Es un ordenador con músculos.

Es cierto, como acabamos de observar, que los robots son difíciles de definir. Sin embargo, no es necesariamente un problema el que no esté todo el mundo de acuerdo sobre su definición. Quizás, Joseph Engelberg (padre de la robótica industrial) lo resumió inmejorablemente cuando dijo: “Puede que no se capaz de definirlo, pero sé cuándo veo uno”.

En definitiva cuando hablamos de robots imaginamos una maquina con características propias a  la del ser humano, sin embargo esta es solo una parte de la robotica.

Sketch Robot seguidor de líneas

int VelocidadMotor1 = 5; //ENA

int VelocidadMotor2 = 9; //ENB

int Motor1A = 6; //IN2

int Motor1B = 7; //IN1

int Motor2C = 8; //IN4

int Motor2D = 10; //IN3

int infraPin = 1; // izquierdo - pin del infrarrojos utilizado como entrada digital

int infraPin1=4; // derecho

int valorInfra = 0; // Valor inicial de la lectura digital del infrarrojos izquierdo

int valorInfra1 = 0; // derecho

void setup() {

delay(5000);

pinMode(infraPin, INPUT);

pinMode(infraPin1, INPUT);

pinMode(Motor1A,OUTPUT);

pinMode(Motor1B,OUTPUT);

pinMode(Motor2C,OUTPUT);

pinMode(Motor2D,OUTPUT);

pinMode(VelocidadMotor1, OUTPUT);

pinMode(VelocidadMotor2, OUTPUT);

analogWrite(VelocidadMotor1, 250); //motor izquierdo

analogWrite(VelocidadMotor2, 250); //motor derecho

digitalWrite(Motor1A, LOW);

digitalWrite(Motor1B, LOW);

digitalWrite(Motor2C, LOW);

digitalWrite(Motor2D, LOW);

}

void loop() {

valorInfra = digitalRead(infraPin); // valor de la entrada que lee el infrarrojo izquierdo

valorInfra1 = digitalRead(infraPin1); // derecho

// 0 = blanco / 1 = negro

if(valorInfra == 0 && valorInfra1 == 0){ // Hacia delante

digitalWrite(Motor1A, HIGH);

digitalWrite(Motor2D, HIGH);

delay(20); // Tiempo para control de velocidad

digitalWrite(Motor1A, LOW);

digitalWrite(Motor2D,LOW);

delay(20); // Tiempo para control de velocidad

}

if(valorInfra == 0 && valorInfra1 == 1){ // Giro derecha

digitalWrite(Motor1A, LOW);

digitalWrite(Motor2D,LOW);

delay(25);

digitalWrite(Motor1A, LOW);

digitalWrite(Motor2D,HIGH);

delay(20);

}

if(valorInfra == 1 && valorInfra1 == 0){ // Giro izquierda

digitalWrite(Motor1A,LOW);

digitalWrite(Motor2D, LOW);

delay(25);

digitalWrite(Motor1A,HIGH);

digitalWrite(Motor2D, LOW);

delay(20);

}

if(valorInfra == 1 && valorInfra1 == 1){ // STOP

digitalWrite(Motor1A, LOW);

digitalWrite(Motor1B, LOW);

digitalWrite(Motor2C, LOW);

digitalWrite(Motor2D, LOW);

}

}

Sketch para el control de un robot mediante del bluetooth

//Sketch para controlar el funcionamiento de un robot móvil mediante un teléfono móvil y utilizando la señal de bluetooth

#include <SoftwareSerial.h>
int pinE1=10;
int pinI1=9;
int pinI2=8;
int pinE2=11;
int pinI3=12;
int pinI4=13;
//Pin para el LED

SoftwareSerial ModuloHC05 (5, 6); //pin TX, pin RX
 

void adelante(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}
void atras(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,LOW);
digitalWrite(pinI4,HIGH);
}
void girarDerecha(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,LOW);
digitalWrite(pinI4,HIGH);
}
void girarIzquierda(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}

void parar(){
digitalWrite(pinE1,LOW);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,LOW);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}
void setup() {

Serial.begin(9600);
ModuloHC05.begin(9600);
pinMode(pinE1,OUTPUT);
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(pinE2,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
}

void loop() {
char dato;
if (ModuloHC05.available()) { //Llega algo por bluetooth?
dato=ModuloHC05.read(); //Leer el dato recibido
Serial.write(dato); //Mostrar el dato por el monitor serie

if (dato=='1') adelante(); //Si el dato recibido es "1", el robot avanza adelante
if (dato=='0') atras(); //Si el dato recibido es "0", el robot retrocede
if (dato=='3') girarDerecha(); //Si el dato recibido es "3" el robot gira a la derecha
if (dato=='2') girarIzquierda(); // Si el dato recibido es "2" el robot gira a la izquierda
if(dato=='5') parar(); //Si el dato recibido es "5", el robot se detiene
}


}

Sketch para el control de un robot seguidor de luz

// Sketch de para el robot seguidor de luz

//El robot incorpora dos ldrs

int E1=12;

int I1=11;

int I2=10;

int E2=7;

int I3=8;

int I4=9;

int ldr1=0;

int nivelLuz1=0;

int nivelLuz2=0;

int ldr2=1;

void setup()

{

Serial.begin(9600);

pinMode(E1, OUTPUT);

pinMode(I1, OUTPUT);

pinMode(I2, OUTPUT);

pinMode(E2, OUTPUT);

pinMode(I3, OUTPUT);

pinMode(I4, OUTPUT);

}

void loop()

{

nivelLuz1=analogRead(ldr1);

Serial.println(nivelLuz1);

nivelLuz2=analogRead(ldr2);

Serial.println(nivelLuz2);

if (nivelLuz1>450 && nivelLuz2>450)

{

adelanteMotor1();

adelanteMotor2();

}

if (nivelLuz1<450 && nivelLuz2<450)

{

pararMotor1();

pararMotor2();

}

if (nivelLuz1<450 && nivelLuz2>450)

{

derechaMotor1();

pararMotor2();

}

if (nivelLuz1>450 && nivelLuz2<450)

{

pararMotor1();

izquierdaMotor2();

}

}

void adelanteMotor1()

{

digitalWrite(E1, HIGH);

digitalWrite(I1, HIGH);

digitalWrite(I2, LOW);

}

void adelanteMotor2()

{

digitalWrite(E2, HIGH);

digitalWrite(I3, HIGH);

digitalWrite(I4, LOW);

}

void pararMotor1()

{

digitalWrite(E1, LOW);

}

void pararMotor2()

{

digitalWrite(E2, LOW);

}

void atrasMotor1()

{

digitalWrite(E1, HIGH);

digitalWrite(I1, LOW);

digitalWrite(I2, HIGH);

}

void atrasMotor2()

{

digitalWrite(E2, HIGH);

digitalWrite(I3, LOW);

digitalWrite(I4, HIGH);

}

void derechaMotor1()

{

digitalWrite(E1, HIGH);

digitalWrite(I1, HIGH);

digitalWrite(I2, LOW);

}

void derechaMotor2()

{

digitalWrite(E2, LOW);

digitalWrite(I3, LOW);

digitalWrite(I4, LOW);

}

void izquierdaMotor1()

{

digitalWrite(E1, LOW);

digitalWrite(I1, LOW);

digitalWrite(I2, LOW);

}

void izquierdaMotor2()

{

digitalWrite(E2, HbIGH);

digitalWrite(I3, HIGH);

digitalWrite(I4, LOW);

}

Sketch para el control del robot polilla

/*Robot que incorpora como sensor una ldr*/

int E1=12;
int I1=11;
int I2=10;
int E2=7;
int I3=8;
int I4=9;
int ldr=0;
int nivelLuz=0;

void setup()
{
Serial.begin(9600);
pinMode(E1, OUTPUT);
pinMode(I1, OUTPUT);
pinMode(I2, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(I3, OUTPUT);
pinMode(I4, OUTPUT);
}

void loop()
{
nivelLuz=analogRead(ldr);
Serial.println(nivelLuz);

if (nivelLuz>50 && nivelLuz<338)
{
adelante();
delay(1000);
}
if (nivelLuz>338 && nivelLuz<679)
{
atras();
delay(1000);
}
if (nivelLuz<50)
{
parar();
delay(1000);
}
}

void adelante()
{
digitalWrite(E1, HIGH);
digitalWrite(I1, HIGH);
digitalWrite(I2, LOW);
digitalWrite(E2, HIGH);
digitalWrite(I3, HIGH);
digitalWrite(I4, LOW);
}

void parar()
{
digitalWrite(E1, LOW);
delay(1000);
digitalWrite(E2, LOW);
delay(1000);
}

void atras()
{
digitalWrite(E1, HIGH);
digitalWrite(I1, LOW);
digitalWrite(I2, HIGH);
digitalWrite(E2, HIGH);
digitalWrite(I3, LOW);
digitalWrite(I4, HIGH);
}