Wallbots: Robots magnéticos autónomos que atraviesan las superficies verticales (11 / 12 paso)

Paso 11: Añadir el código en el Arduino

Estoy pegando mi código a continuación. Cada sensor se muestrea, y el robot se mueve dependiendo del sensor que detecta una mano humana, y si es rojo, verde o amarillo (debe moverse lejos o hacia objetos).

/*
Código Wallbots
Stacey Kuznetsov
06 de mayo de 2009
para hacer cosas interactivas, primavera ' 09

Este es el código básico para conducir movimiento robótico de 2 motores de sevo basado en entrada
de 4 sensores de luz. Movimiento admite varias opciones, basados en el modo de robot.
Robot rojo moverse rápido, hacia los objetos (cuando los sensores de luz detectan oscuridad)
Mover robots verde a velocidad media, lejos de objetos (lejos de las áreas más oscuras)
Amarillo robots mover slowerly y dejar de parpadear cuando se detectan objetos

El propósito de estos robots es mover las paredes usando ruedas magnéticas.
Movimiento de apoyo incluye, direcciones izquierdas y hacia adelantadas. Varios
velocidades se implementan basados en el modo de robot.

Los sensores de luz auto-calibran en el reinicio o cuando se cubre el sensor superior
durante más de 3 segundos.

*/

#include < Servo.h >

Servos de derecha e izquierdos
Servo1 servo;
Servo servo2;

Sensores de luz
int topSensor = 0; 700
int leftSensor = 1; Umbral es 400
int frontSensor = 2; 400
int rightSensor = 3; 300

Umbrales de codificado (no se usa porque auto-calibre)
int topThreshhold = 400;
int leftThreshhold = 550;
int frontThreshhold = 200;
int rightThreshhold = 650;

Tipo de robot actual (gree rojo o amarillo)
int estado = 0;

Valores de estado
int rojo = 0;
int verde = 1;
int naranja = 2;

Pernos para manejar el LED superior tri-color
redPin int = 5;
int greenPin = 6;

Valores para mantener las lecturas del sensor
int frente;
int derecha;
int izquierda;
int cima;

Umbrales de sensor de luz automático-calibre
void calibrate() {}
Serial.println("calibrating");
largo int val = 0;
para (int i = 0; i < 5; i ++) {}
Val += analogRead(frontSensor);
Delay(10);
}
frontThreshhold = (val 5) - 80;
Val = 0;

para (int i = 0; i < 5; i ++) {}
Val val = analogRead(topSensor);
Serial.println(analogRead(topSensor));
Serial.println(Val);
Delay(10);
}

topThreshhold = (val 5) -200;

Val = 0;
para (int i = 0; i < 5; i ++) {}
Val += analogRead(rightSensor);
}
rightThreshhold = (val 5) - 100;
Val = 0;
para (int i = 0; i < 5; i ++) {}
Val += analogRead(leftSensor);
}
leftThreshhold = (val 5) - 100;

Imprimir valores umbral para depuración
Serial.Print ("top:");
Serial.println(topThreshhold);
Serial.Print ("derecho:");
Serial.println(rightThreshhold);
Serial.Print ("izquierda:");
Serial.println(leftThreshhold);
Serial.Print ("delante:");
Serial.println(frontThreshhold);

}

void setup()
{
convertir el pin 13 para depuración
pinMode (13, salida);
digitalWrite (13, HIGH);
configuración de pines del sensor
para (int i = 0; i < 4; i ++) {}
pinMode (, entrada);
}
Serial.Begin(9600);
Calibrate();
generar un estado aleatorio
Estado = al azar (0, 3);
setColor(STATE);
}

FUNCIONES MOTORAS

turnLeft() vacío
{
Serial.println("left");

Start();
Delay(20);
para (int i = 0; i < 20; i ++) {}
servo2.Write(179);
servo1.Write(1);
Delay(20);
}
STOP();
Delay(20);
}

{} void turnRight()
Serial.println("Right");
Start();
Delay(20);
para (int i = 0; i < 20; i ++) {}

servo2.Write(1);
servo1.Write(179);
Delay(20);
}
STOP();
Delay(20);
}

void goForward (int del = 20) {}
Serial.println("forward");
Start();
Delay(20);
para (int i = 0; i < 20; i ++) {}
servo1.Write(179);
servo2.Write(179);
Delay(del);
}
STOP();
Delay(20);
}

void stop() {}
servo1.Detach();
servo2.Detach();
Delay(10);
}

void start() {}
servo1.Attach(10);
servo2.Attach(9);

}

El color del LED tri-color superior basado en el estado actual del sistema
void colores (int color) {}
Si (color == rojo) {}
digitalWrite (greenPin, 0);
analogWrite (redPin, 180);
}
else if (color verde de ==) {}
digitalWrite (redPin, 0);
analogWrite (greenPin, 180);
}
else if (color naranja de ==) {}
analogWrite (redPin, 100);
analogWrite (greenPin, 100);
}
}

Parpadea el color amarillo (al robot se confunde)
void blinkOrange() {}
para (int i = 0; i < 5; i ++) {}
analogWrite (redPin, 100);
analogWrite (greenPin, 100);
Delay(300);
digitalWrite (redPin, 0);
digitalWrite (greenPin, 0);
Delay(300);
}

analogWrite (redPin, 100);
analogWrite (greenPin, 100);

}

void loop()
{

Top = analogRead(topSensor);
int largo = millis();
mientras que (analogRead(topSensor) < topThreshhold) {}
Delay(10); mientras que hay una onda de brazo del usuario no hacen nada
}
Si ((millis()-time) > 3000) {}
Si el sensor fue cubierto por más de 3 segundos, volver a calibrar
Calibrate();
}

Si se cubre el sensor superior, cambiar estado
Si (superior < topThreshhold) {}
ESTADO = (ESTADO + 1) 3 %;
setColor(STATE);
Serial.Print ("Estado cambió:");
Serial.println(State);
}

Leer los otros sensores
derecha = analogRead(rightSensor);
izquierda = analogRead(leftSensor);
frente = analogRead(frontSensor);

Si (estado == rojo) {}
ir hacia los objetos
Si (frente < frontThreshhold) {}
goForward();
} else if (derecha < rightThreshhold) {}
turnRight();
} else if (izquierda < leftThreshhold) {}
turnLeft();
} else {}
goForward();
}
}
Si (estado == verde) {}
ir lejos de objetos
Si (frente < frontThreshhold) {}
dir int = random(0,2);
Si (dir == 0 & & right > rightThreshhold) {}
turnRight();
} else if (dir == 1 & & izquierda > leftThreshhold) {}
turnLeft();
}
} else if (derecha < rightThreshhold) {}
Si (izquierda > leftThreshhold) {}
turnLeft();
} else {}
goForward();
}
} else if (izquierda < leftThreshhold) {}
Si (derecha > rightThreshhold) {}
turnRight();
} else {}
goForward();
}
} else {}
goForward();
}
Delay(200);
}

Si (estado == naranja) {}
mueve sólo si hay que ninguna mano movimientos-parpadean
int dir = al azar (0, 3);
Si (izquierda < leftThreshhold || derecha < rightThreshhold ||
frente < leftThreshhold) {}
blinkOrange();
} else {}
Si (dir == 0) {}
goForward();
} else if (dir == 1) {}
turnRight();
} else if (dir == 2) {}
turnLeft();
}
Delay(1000);
}
Delay(10);
}
}

Artículos Relacionados

Robot autónomo que ya tiene en su bolsillo!

Robot autónomo que ya tiene en su bolsillo!

En este tutorial quiero aprender algo, quizás cambiar de opinión. Y drones autónomos disponibles para todo el mundo.Simple pregunta es: ¿Qué necesitas hacer tu robot autónomo?.Respuesta:-GPS-Acelerómetro-Giroscopio-Sistema inalámbrico telemetría-Cáma
El edificio de Q.T.Pi: un Robot de Sumo autónomo

El edificio de Q.T.Pi: un Robot de Sumo autónomo

¿Quieres aprender a construir un robot?Este Instructables te dirá cómo construimos nuestros 20 libras (9,07185 kilogramos) autónomoRobot de sumo.Esto es como empezamos con la construcción de motores de sumo. La universidad local que lleva a cabo la c
Spider cerdo - robot hexápodo autónomo

Spider cerdo - robot hexápodo autónomo

Proyecto de tesis de licenciatura por un grupo de siete estudiantes (en física aplicada e ingeniería eléctrica) en la Universidad de Linköping, Suecia.Hardware principal:1 x AX PhantomX Metal hexápodo Mark II Kit (incluyendo 18 x servos Dynamixel AX-
DIY aplicador magnético para huellas latentes de desarrollo

DIY aplicador magnético para huellas latentes de desarrollo

Aunque hay muchas tiendas de ciencia forense en los Estados, puede ser frustrante encontrar cosas en tu país (como en mi situación).Si usted quiere hacer sus propios experimentos de ciencia forense, la mejor manera de empezar es las huellas dactilare
Chefbot: Un bricolaje móvil robot autónomo para servir comida en los hoteles

Chefbot: Un bricolaje móvil robot autónomo para servir comida en los hoteles

Como dice el titulo, vamos a ver cómo construir un robot móvil autónomo llamado Chefbot que es para servicio de alimentos y bebidas en hoteles y restaurantes.Este fue un proyecto de hobby y construí este robot después de ver un robot llamado Turtlebo
Frambuesa Pi Web Robot controlado / autónomo

Frambuesa Pi Web Robot controlado / autónomo

Introducción (actualizado 26/12/15)Este es siempre mi primer intento de construir un robot web controlada con construido en modo autónomo. El proyecto comenzado como un Arduino Nano robot de evitación de colisión construido para inspirar a los niños
Robot Solar autónomo etapa 1

Robot Solar autónomo etapa 1

fondo:Hola, mi nombre es Ben Rawstron y este es el robot que he estado trabajando, recientemente en mi segundo año (décimo grado) año de secundaria. He creado este proyecto como un "estudio independiente" en mi escuela local aquí en Waldoboro Ma
Mi Robot de Wall-E casero autónomo

Mi Robot de Wall-E casero autónomo

todo el mundo amó a Wall-E, y no es de sorprender que también hice...Caminaba por la tienda Super comprar comestibles una noche, cuando tomé mi desvío generalmente a través de la sección de juguetes y visto Wall-E. Este es un juguete hecho por Disney
ROBOT de modo DUAL => (autónomo / MANUAL CONTROL)

ROBOT de modo DUAL => (autónomo / MANUAL CONTROL)

DTMF o doble tono multi frecuencia es ingenioso poco controlantes máquinas con su teléfono móvil. Este instructivo usted, amable lector muestra cómo hacer un más barato que la suciedad DTMF controlada robot que puede funcionar autónomamente, yeh! así
Cómo DIY su propio V2 agitador magnético (mejor que la primera versión)

Cómo DIY su propio V2 agitador magnético (mejor que la primera versión)

después he publicado el primer instructivo sobre cómo hacer un agitador magnético y después la critica constructiva que tengo, me decidí a hacer un nuevo agitador magnético, una mejora.A continuación, comenzar la investigación para qué materiales deb
Carpintería magnético plano-embale taburete

Carpintería magnético plano-embale taburete

Aquí está mi opinión sobre el taburete de paso plegable. En primer lugar, soy nuevo en el diseño de paquete plano. Tan nuevo que sólo comencé a comprobar hacia fuera cuando salió el concurso. Me empezó a buscar en él y pensé "¿cómo echo de menos esto
Conector magnético impreso 3D! *UPDATED*

Conector magnético impreso 3D! *UPDATED*

*** Actualización ****Con ayuda de Gravityisweak 3D que imprime la versión temprana de mi diseño así que revisa su Intructables impresionante! Él también gana un 3 meses membresía Pro para ayudarme. Todas las fotos de modelos impresos en 3D son hecha
Tablero magnético de maquillaje

Tablero magnético de maquillaje

este proyecto utiliza un viejo galletas, pintura de aerosol y vinilo para crear una superficie decorativa para la visualización de cosméticos! Hice esto porque mi maquillaje estaba empezando a ocupar valioso espacio en el baño, pero también agrega un
Elegante soporte de cuchillo magnético

Elegante soporte de cuchillo magnético

Quería que un portacuchillos magnético para mis nuevos cuchillos. Tuerca de que los de madera son realmente caros, desde 120 dolares y para los que me ha gustado. Así que hice mi propio.Paso 1: Con estilo magnético portacuchillos Tengo unas planchas