SADbot: el robot dibujo afectados estacionalmente (11 / 11 paso)

Paso 11: Haga interesante

Ahora vamos a hacer SADbot sacar algo interesante. Cortar dos aproximadamente 5
longitudes de pies de pesca línea y atar cada uno en a través del agujero en el centro de la
poleas. Atar los otros extremos de la línea a una abrazadera de resorte y de la abrazadera en un
marcador. Monte el libro blanco sobre la tabla de la lona con cinta o abrazaderas.

Digamos los motores paso a paso para dibujar en direcciones aleatorias por defecto y entonces
a comportarse como lo hicieron antes cuando alguien está cubriendo una célula fotoeléctrica. Esta voluntad
crear un dibujo como los SADbot realizado en Galería de ventana de Eyebeam.   ¡ Disfrute! Juega con las fotocélulas para que pueda interactuar con SADbot y hacer dibujos interesantes.

/*
SADbot v.03
SADbot dibujará una distancia al azar en dirección aleatoria hasta un
fotocélula está bloqueada. Cuando SADbot detecta una fotocélula ha sido bloqueada, se
se recurrirá a ella. Motores paso a paso son conducidos a través de Sparkfun
EasyDriver v4.3
CC-GNU GPL por Ben Leduc-molinos y Dustyn Roberts
Creado: 2010.06
*/

Biblioteca de #include //import paso a paso
#define 200 pasos / / 360/1.8 (ángulo de paso) = 200 pasos/revolución
declarar objetos nuevos pasos de biblioteca paso a paso (uno por motor)
Right_motor paso a paso (pasos, 6, 7); 6 = DIR, 7 = PASO
Left_motor paso a paso (pasos, 11, 12); 11 = DIR, 12 = PASO
int distancia; hasta dónde deben llegar motores
int menor; para almacenar el valor más bajo de la fotocélula
int i; para bucle

variables para 4 fotocélulas
int photo_up;
int photo_down;
int photo_left;
int photo_right;

Establecer el tamaño de la lona. 1000 pasos es aproximadamente.4 pulgadas
#define CANVASWIDTH 32000
#define CANVASHEIGHT 20000

distancia total de comprobación de límites
SADbot comienza en el centro (canvaswidth/2 y canvasheight/2)
flotador totalWidth = CANVASWIDTH 2;
flotador totalHeight = CANVASHEIGHT 2;
int randomDirection;
int randomDistance;

void setup() {}
Serial.Begin(9600); iniciar impresión serie para que podamos ver cosas
ajustar la velocidad del motor (en RPM)
right_motor.SETSPEED(200);
left_motor.SETSPEED(200);
utilizar semilla aleatoria para obtener mejores números aleatorios
* ajuste a un pin analógico que no usas
randomSeed(analogRead(4));
} / / fin de programa de instalación

void loop() {}
leer e imprimir los valores de los sensores de pernos analógicos 0-3
photo_up = analogRead(0);
Serial.Print("up");
Serial.println(photo_up);

photo_down = analogRead(1);
Serial.Print("Down");
Serial.println(photo_down);

photo_left = analogRead(2);
Serial.Print("left");
Serial.println(photo_left);

photo_right = analogRead(3);
Serial.Print("Right");
Serial.println(photo_right);

Delay(1000); me da tiempo a leer en el monitor

antes de dibujar, ver las totalHeight totalWidth
Serial.Print("totalHeight:");
Serial.println(totalHeight);
Serial.Print("totaWidth:");
Serial.println(totalWidth);
Delay(1000); me da tiempo a leer en el monitor

almacenar valores de fotocélula en una matriz
int photoValues [] = {photo_up, photo_down, photo_left, photo_right};
menor = 9999; Ajuste este parámetro superiores a valores posibles de la fotocélula
lazo para encontrar el valor más bajo de la fotocélula

para (i = 0; i < 4; i ++) //4 = número de sensores
{
Serial.println(photoValues[i]); Imprime la matriz de photoValue
asignar valor de fotocélula real a la variable "menor" si es menor
que lo "más bajo" se establece en (comienza a 9999)
Si (menor > = photoValues [i]) {}
menor = photoValues [i];
}
Imprima para confirmar que el valor más bajo está siendo seleccionado
Serial.Print("Lowest:");
Serial.println(Lowest);
Delay(1000); Espere un segundo antes de bucle por lo que podemos leer los valores
} //end para

distancia = más bajo; establecer la distancia de recorrido = menor valor

Si el valor más bajo indica una fotocélula cubierta, dibujar hacia más bajo
cambiar este umbral dependiendo de la iluminación
Si (bajo < 550)
{
encontrar el sensor que coincidió con la marcha más baja, esa dirección,
pero sólo si SADbot está dentro de los límites del lienzo
Si ((menor == photoValues[0]) & & ((totalHeight + distance) <
CANVASHEIGHT))
{
(distancia);
totalHeight += distancia; variable de incremento totalHeight
}
else if ((menor == photoValues[1]) & & ((totalHeight-distance) > 0))
{
abajo (distancia);
totalHeight = distancia; decremento totalHeight variable
}
else if ((menor == photoValues[2]) & & ((totalWidth-distance) > 0))
{
izquierda (distancia);
totalWidth = distancia; decremento de totalWidth variable
}
else if ((menor == photoValues[3]) & & ((totalWidth + distance) <
CANVASWIDTH))
{
derecho (distancia);
totalWidth += distancia; variable de totalWidth incremento
}
} //end si

de lo contrario, nadie está cubriendo los sensores, sorteo según al azar
otra cosa
{
selección de número aleatorio de 1 a 9 para asignar a la dirección
randomDirection = al azar (1, 9);
Serial.Print ("dirección al azar:");
Serial.println(randomDirection);

escoger al azar número del 1 al 200 para asignar a distancia
randomDistance = al azar (1, 200);
Serial.Print ("distancia al azar:");
Serial.println(randomDistance);
direcciones para cualquier valor de randomDirection generado
interruptor (randomDirection)
{
caso 1: //go a
Si ((totalHeight + randomDistance) < CANVASHEIGHT)
{
up(randomDistance);
totalHeight += randomDistance;
}
rotura;

caso 2: //go abajo
Si ((totalHeight-randomDistance) > 0)
{
Down(randomDistance);
totalHeight = randomDistance;
}
rotura;

caso 3: //go a la izquierda
Si ((totalWidth-randomDistance) > 0)
{
Left(randomDistance);
totalWidth = randomDistance;
}
rotura;

caso 4: derecho de //go
Si ((totalWidth + randomDistance) < CANVASWIDTH)
{
Right(randomDistance);
totalWidth += randomDistance;
}
rotura;

caso 5: vertical //go
Si (((totalWidth + randomDistance) < CANVASWIDTH) & & ((totalHeight
+ randomDistance) < CANVASHEIGHT))
{
upRight(randomDistance);
totalWidth += randomDistance;
totalHeight += randomDistance;
}
rotura;

caso 6: upLeft //go
Si (((totalWidth-randomDistance) > 0) & & ((totalHeight +
randomDistance) < CANVASHEIGHT))
{
upLeft(randomDistance);
totalWidth = randomDistance;
totalHeight += randomDistance;
}
rotura;

caso 7: //go es
Si (((totalWidth + randomDistance) < CANVASWIDTH) & & ((totalHeight-randomDistance) > 0))
{
downRight(randomDistance);
totalWidth += randomDistance;
totalHeight = randomDistance;
}
rotura;

caso 8: //go downLeft
Si (((totalWidth-randomDistance) > 0) & & ((totalHeight-randomDistance) > 0))
{
downLeft(randomDistance);
totalWidth = randomDistance;
totalHeight = randomDistance;
}
rotura;

por defecto: //just en caso
Left(0);
} //end interruptor
} //end más
} //end loop()

/*
Aquí están las funciones direccionales. Tamaño del lazo = distancia.
Números de paso positivo hacia la derecha, negativo hacia la izquierda
*/

void a (int distancia)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(1);
left_motor.Step(-1);
}
}

void a (int distancia)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(-1);
left_motor.Step(1);
}
}

Anular izquierdo (int distancia)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(-1);
left_motor.Step(-1);
}
}

anular derecho (int distancia)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(1);
left_motor.Step(1);
}
}

vacío en posición vertical (distancia de int)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(2);
left_motor.Step(-.2);
}
}

void upLeft(int distance)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(.2);
left_motor.Step(-2);
}
}

vacío es (int distancia)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(-.2);
left_motor.Step(2);
}
}

void downLeft(int distance)
{
para (i = 0; i < distancia; i ++) {}
right_motor.Step(-2);
left_motor.Step(.2);
}
}

Artículos Relacionados

Robot dibujo mural de $100 (también funciona como un gigante etch-a-sketch)

Robot dibujo mural de $100 (también funciona como un gigante etch-a-sketch)

en Hack-a-day!Lo que me encanta de robots es que usted puede hacer una cosa que hace otras cosas.  Meta así!  Utiliza gcode dibujar cualquier imagen que te gusta, o usted puede conducirlo alrededor como un etch-a-sketch.  Puede escalar este robot has
Makelangelo Robot dibujo escritorio construir (anteriormente conocido como Drawbot)

Makelangelo Robot dibujo escritorio construir (anteriormente conocido como Drawbot)

este instructable le mostrará cómo hacer un escritorio para tu robot de Makelangelo máquina de dibujo.Mientras que el Makelangelo es bastante fácil para que cualquiera pueda utilizar, lo más probable es que apelará a maestros de la madre, fans de Ard
Borracho robot dibujo!

Borracho robot dibujo!

Inspirados en el robot de bolsillo borracho, quería darle el robot un trabajo que hacer. Decidí dejar que el robot borracho a hacer algunos dibujos. Para hacer tu propio necesitarás lo siguiente:materiales:3 marcadores con punta de fieltrouna pila de
MiniSADbot - edición

MiniSADbot - edición

este miniSADbot fue creado para los soportes de Kickstarter que apoyaron el original SADbot exhiben que Ben Leduc-Mills y lo he creado.  ¡Gracias!  Aquí aprenderás qué hacer con el kit de piezas que le enviamos.  Si no el proyecto de nuevo pero todav
Dibujo Robot

Dibujo Robot

Por favor vote por Robot dibujo en este enlace.Gracias de antemanoFijación de mi incapacidad de dibujo con mis conocimientos de robótica y me los resultados no eran malo. Ahora al menos puedo guardar a mi auto de la humillación en mi clase de dibujo.
Cómo hacer un Artbot: color sensores, robots Arduino arte generativo del dibujo

Cómo hacer un Artbot: color sensores, robots Arduino arte generativo del dibujo

Para el curso de Hardware y computación física bajo la supervisión de Paul Klomp como parte de la tecnología de los medios de comunicación programa de la Universidad de Leiden, creamos dos robots dibujos. Cada robot fue construido alrededor de un Ard
Locomoción extraña

Locomoción extraña

Extraño locomotion es una exploración lúdica de las posibilidades de introducir nuevas funciones (siempre útiles) a máquinas, centrándose en sus "manos y piernas", sus sistemas de locomoción y efectores.Paso 1: Paso uno: hoja material robot... q
Jugar con Makeblock mDrawBot-mScara

Jugar con Makeblock mDrawBot-mScara

Recientemente llego un regalo sorpresa de mi amigo en Makeblock, por el manual es un 4 en 1 dibujo robot, llamar al mDrawBot.Menuda sorpresa, veo su lanzamiento solo en Kickstarter ayer ~ http://kck.st/1EMsfpz(actualización 8/22: está a la venta ahor
Garabato fácil Bot

Garabato fácil Bot

No dejes que te engañe el número de pasos en este Instructable. Este Bot garabato es tan fácil como se anuncia. Si tienes todas las piezas en mano y cualquier experiencia para soldar los alambres juntos, probablemente puede construir este bot en cinc
Drawbot floppy

Drawbot floppy

hacer un divertido robot dibujo espiral de una vieja disquetera y arduino!Haga clic aquí para el video!Stuart y yo quería diseñar un proyecto que sería una buena introducción al upcycling electrónica, robótica, arduino, arte con el código de matemáti
¿Vamos a montar un escudo de Adafruit Motor

¿Vamos a montar un escudo de Adafruit Motor

Sabe usted cómo algunas personas juegan en youtube mientras que usted mira?  Pensé que sería más útil hacer las cosas en youtube mientras que usted mira.Soldar un por-agujero circuito impreso o PCB puede parecer intimidante con las diferentes partes
Cómo obtener una sonrisa de Brit

Cómo obtener una sonrisa de Brit

hace ya un tiempo el Bot lado c Instructables Robot dibujos animados han sido escritos así que pensé que sería divertido para mostrar cómo se dibujan. Vieja escuela a mano alzada con lápiz y un marcador de tinta. Algunos dicen skillz pero digo que so
Cómo dibujar Manga Anime

Cómo dibujar Manga Anime

Manga es un cómic que nació en Japón. Fue hecho por creadores japoneses en japonés. El cómic se basa en el estilo que fue inculcado durante finales del siglo XIX en Japón. El Manga tiene un muy largo, así como una complicada historia previa en el art
Ingeniería dibujo Robot

Ingeniería dibujo Robot

En este proyecto proponemos un sistema de dibujo robótico educativo para el aprendizaje de propósito. Nuestro sistema utiliza robot para dibujar la proyección de líneas y toda la ingeniería geometría como el cubo, triángulo, cuadrado, polígono autóno