TUTORIAL
Aquí os
enseñaremos paso a paso a construir este robot siguiendo todo el proceso que
realizamos.
Estos son
todos los materiales que hemos utilizado:
Lo primero
que hicimos fue hacer pruebas de conexiones con leds y resistencias en una
placa para ir practicando y preparándonos para hacer el proyecto:
Una vez que
tuvimos la soltura necesaria para conectar leds, resistencias y cables
empezamos a programar el Arduino con el ordenador y conectarlo al chip para que
empezara a funcionar:
Ahora vamos
con la estructura, lo primero que hicimos fue montar las ruedas, los motores y
el soporte ayudándonos de bridas, tornillos y tuercas:
Y aquí está
la primera apariencia de nuestro robot, aunque por motivos varios decidimos
cambiarla por la que veréis al final:
Esta es una foto de nuestro famoso Arduino:
Esto es lo
que tuvimos que meter en nuestro Arduino para que se moviera y no se chocara
contra las paredes:
const int
numOfReadings = 10; //
number of readings to take/ items in the array
int readings[numOfReadings]; // stores the distance
readings in an array
int
arrayIndex = 0;
// arrayIndex of the current item in the array
int total =
0; //
stores the cumlative total
int
averageDistance = 0;
// stores the average value
// Establecer los pins y las variables para el sensor
de proximidad SRF05:
int echoPin = 12; // SRF05 echo
pin (digital 2)
int initPin
= 13; //
SRF05 trigger pin (digital 3)
unsigned
long pulseTime = 0; //
stores the pulse in Micro Seconds
unsigned
long distance = 0; //
variable for storing the distance (cm)
int
motor1Pin1 = 3;
// pin 2 on L293D
int
motor1Pin2 = 4;
// pin 7 on L293D
int
enable1Pin = 9;
// pin 1 on L293D
int
motor2Pin1 = 5;
// pin 10 on L293D
int motor2Pin2
= 6; //
pin 15 on L293D
int
enable2Pin = 10;
// pin 9 on L293D
void setup() {
// Establecer
los pins de salida de los motores:
pinMode(motor1Pin1,
OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(enable2Pin, OUTPUT);
//Activar los pins para que el motor pueda girar:
digitalWrite(enable1Pin,
HIGH);
digitalWrite(enable2Pin, HIGH);
pinMode(initPin, OUTPUT); // set init pin 3 as
output
pinMode(echoPin, INPUT); // set echo pin 2 as
input
// Crear bucle de matriz para recorrer en iteración todos los elementos de
la matriz
for (int
thisReading = 0; thisReading < numOfReadings; thisReading++) {
readings[thisReading] = 0;
}
}
void loop()
{
digitalWrite(initPin, HIGH); // send 10 microsecond pulse
delayMicroseconds(10); // wait 10 microseconds
before turning off
digitalWrite(initPin, LOW); // stop sending the pulse
pulseTime = pulseIn(echoPin, HIGH); // Look for a return pulse, it
should be high as the pulse goes low-high-low
distance = pulseTime/58; // Distance = pulse time
/ 58 to convert to cm.
total= total - readings[arrayIndex]; // subtract the last distance
readings[arrayIndex] = distance; // add distance reading to array
total= total + readings[arrayIndex]; // add the reading to the total
arrayIndex = arrayIndex + 1; // go to the next item in the
array
// Al final de la matriz (10 elementos) entonces inicio nuevo
if
(arrayIndex >= numOfReadings) {
arrayIndex = 0;
}
averageDistance = total / numOfReadings; // calculate the average distance
delay(10);
// Calcula la
distancia y se mueve de acuerdo con ella
if
(averageDistance <= 10){
// Ir
hacia atrás
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
}
if (averageDistance <= 25 &&
averageDistance > 10) {
// Girar
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
}
if (averageDistance > 25) {
// Ir hacia delante
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
}
}
Y aquí está
nuestro chip que hizo que funcionara el Arduino y por ende, el robot. Tenía 16
patillas y aqui explico la función de cada una
- Enable: Activa todas las patillas de su fila.
- Input: Guía las órdenes para el motor desde el Arduino hasta el chip.
- Output: Guía las órdenes para el motor desde el chip.
- GND: Es el terminal negativo de la alimentación.
- VS: Es el terminal positivo de la alimentación.
Y aquí os
dejo la foto del chip y de sus patillas:
También tuvimos que conectar el sensor de proximidad para que no se chocara:
Pongo dos fotos de las conexiones que tuvimos que hacer y aunque los nombres estén en inglés no hace falta traducirlos, y si queréis hacerlo tampoco es muy complicado:
Además de estas conexiones con cables, luego teniamos que soldar todos los cables que iban a los motores, los leds, el interruptor y el sensor de proximidad.
Una vez hechas todas las conexiones, algunas con empalmes por falta de cables más largos, terminamos de dar los retoques a la forma exterior de nuestro apreciado robot. Nosotros Queriamos que se pareciera a esto:
Aunque finalmente ha quedado así:
En esta foto se puede ver el sensor y los leds (aunque apagados).
Aquí se ve nuestro interruptor que decide si funciona o no nuestro Volkswagen.
Esto es el coche visto desde abajo y se pueden ver las soldaduras de los motores y las bridas.
Y esta es nuestra puerta secreta por donde podemos arreglar algun pequeño fallo que se produzca.
No hay comentarios:
Publicar un comentario