Cómo construir otra máquina inútil: fácil de hacer y difícil de usar! (9 / 9 paso)

Paso 9: Actualización opcional: detección de movimiento

tengo un sensor de proximidad hoy (GP2Y0A21), así que ahora puedo usarla para mover la máquina si el usuario acerca al interruptor :)

Para este paso adicional, estoy suponiendo que ya has construido las ruedas para permitir el movimiento (ver opcional paso 8). Todo lo que queda ahora es agregar el sensor y hacer algunas modificaciones en el código de detección de movimiento.

El sensor tiene 3 cables de señal de cables, amarillo conectado al pin 3 de arduino, mientras el rojo y negro se conectan a v5 y tierra respectivamente en el tablero.

Yo he colocado el sensor oculto debajo de la puerta como se muestra en la imagen, así que puede 'ver' movimiento del usuario sólo cuando la puerta se abre. exactamente lo que necesito!

También tuve que cambiar el código un poco (aquí) para implementar una rutina de detección de movimiento (ver el código, en función zee7()), tal que cuando se detecta movimiento, se moverá la caja, primero a la derecha, luego hacia la izquierda, luego la mano gira el interruptor y el ocultar. El código es muy comentado, espero que no exagere!

Usted puede encontrar el código actualizado a continuación, tenga en cuenta también que he hecho la máquina recoge los movimientos al azar, esto puede ser cambiado a secuencial mediante una simple configuración aleatorizar boolean = false;

Gracias todos por sus sugerencias gran!

El código (mejor para descargar el archivo adjunto a este paso en vez de copiar/pegar desde abajo) :

#include
Servo doorServo;
Servo handServo;

unsigned TimerA largo, TimerB;       contador de tiempo para la rutina de detección de movimiento
int switch_pin = 2;               Ponga el interruptor en el pin 2

variables de motor
int motorThrottle = 11;
int motorDirection = 13;
Resistancia de int = 8;

Variables de distancia
int motionPin = 3;               Motion sensor pin analógico 0
int lastDist = 0;                recordar última distancia
int currentDist = 0;
trille el int = 200;                Umbral para el movimiento (sistema que se obtiene la sensibilidad deseada de detección de movimiento)

int pos = 0;
int selectedMove = 0;             colocar el selector de
int Testmove = 0;                 modo de prueba: sistema para mover el número para probar sólo una jugada seleccionada
(establecido en cero para funcionar normalmente es decir: roundrobbin en todas las jugadas)
aleatorizar el booleano = true;        Si es cierto, la caja hará movers al azar, si establece en false, entonces los movimientos se hará sequencially de 1 a 10

void setup()
{
Serial.Begin(9600);
pinMode (switch_pin, entrada);
doorServo.attach(9);           servo sistema puerta de 9 Pin pwm
handServo.attach(10);          servo de mano set de 10 Pin pwm
doorServo.write(80);           Set puerta para ocultar la posición
handServo.write(0);            sistema mano para ocultar la posición
Configuración canal B, canal A está reservado por servos de puerta y de la mano y no puede ber utilizado al mismo tiempo
pinMode (motorDirection, salida); Clavija de iniciados Motor canal de B
pinMode (resistancia, salida); Pin de B inicia canal de freno

}

void loop()
{

Si el interruptor está encendido, luego mover la puerta y a mano para apagarlo...
if(digitalRead(switch_pin) == HIGH)
{

Si (Testmove == 0)
{

if(RANDOMIZE == false)
{
Si (selectedMove > 10)
{
selectedMove = 0; Cuando se reproducen todos los movimientos, repetir los movimientos desde
}
}
otra cosa
{
selectedMove = random(11);
}
}
otra cosa
{
selectedMove = Testmove;
}
Serial.println(selectedMove);
Si (selectedMove == 0) {switchoff();}
else if (selectedMove == 1) {switchoff();}
else if (selectedMove == 2) {switchoffbitaraddod();}
else if (selectedMove == 3) {crazydoor();}
else if (selectedMove == 4) {crazyslow();}
else if (selectedMove == 5) {m7anika7anika();}
else if (selectedMove == 6) {m3alla2();}
else if (selectedMove == 7) {switchoff();}
else if (selectedMove == 8) {matrix();}
else if (selectedMove == 9) {sneak();}
else if (selectedMove == 10) {zee7();}

Si (Testmove == 0 & & aleatorizar == false) {}
selectedMove ++;         cambiar al siguiente paso si no es en modo de prueba
}

}
}

Biblioteca de movimientos

movimiento básico
void switchoff()
{
Puerta en movimiento
para (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Movimiento de la mano
para (pos = 0; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}

esconder la mano
para (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}

movimiento 3: abrir y esperar, luego mueva la mano y esperar, luego apague y ocultar
void switchoffbitaraddod()
{
Puerta en movimiento
para (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(800);
Movimiento de la mano
para (pos = 0; pos < 100; pos = 4)
{
handServo.write(pos);
Delay(15);
}
Delay(1000);
para (pos = 100; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}

esconder la mano
para (pos = 129; pos > = 0; pos-= 5)
{
handServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);


}

}

movimiento 4: Abra la puerta luego cierre espera muchas veces, entonces rápidamente reoprn una nd apague y ocultar.

void crazydoor()
{

Puerta en movimiento
para (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
Delay(15);
}
Puerta en movimiento
para (pos = 80; pos < 110; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 110; pos > = 80; pos-= 15)
{
doorServo.write(pos);
Delay(15);
}
Delay(700);
Puerta en movimiento
para (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(700);
puerta oculta
para (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
Delay(15);
}

---del interruptor de---/ /
Puerta en movimiento
para (pos = 80; pos < 155; pos = 8)
{
doorServo.write(pos);
Delay(15);
}

Movimiento de la mano
para (pos = 0; pos < 129; pos = 3)
{
handServo.write(pos);
Delay(15);
}

esconder la mano
para (pos = 129; pos > = 0; pos-= 3)
{
handServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 155; pos > = 80; pos-= 15)
{
doorServo.write(pos);
Delay(15);
}

}

mover 5: Abra la puerta, luego mueva la mano lentamente hacia adelante y atrás para ocultar muy lentamente, luego rápidamente cierre puerta
void crazyslow()
{

Puerta en movimiento
para (pos = 80; pos < 155; pos = 1)
{
doorServo.write(pos);
Delay(30);
}

Movimiento de la mano
para (pos = 0; pos < 129; pos = 1)
{
handServo.write(pos);
Delay(30);
}

esconder la mano
para (pos = 129; pos > = 0; pos-= 1)
{
handServo.write(pos);
Delay(30);
}

puerta oculta
para (pos = 155; pos > = 125; pos-= 1)
{
doorServo.write(pos);
Delay(30);
}
Delay(100);
para (pos = 125; pos > = 80; pos-= 4)
{
doorServo.write(pos);
Delay(15);
}

}

movimiento 6:

void m7anika7anika() {}

Puerta en movimiento
para (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Movimiento de la mano
para (pos = 0; pos < 70; pos = 1)
{
handServo.write(pos);
Delay(15);
}
Delay(800);


puerta oculta
para (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
puerta oculta
para (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
puerta oculta
para (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

handServo.write(40);
Delay(1000);

Movimiento de la mano
para (pos = 40; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}

esconder la mano
para (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}


para (pos = 120; pos > = 80; pos-= 1)
{
doorServo.write(pos);
Delay(15);
}



}

void m3alla2() {}
Puerta en movimiento
para (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Movimiento de la mano
para (pos = 0; pos < 127; pos = 4)
{
handServo.write(pos);
Delay(15);
}
puerta oculta
para (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(2000);

para (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

para (pos = 155; pos > = 140; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
para (pos = 140; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(500);
esconder la mano
para (pos = 127; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}

}

matrix() vacío
{

Puerta en movimiento
para (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}

Movimiento de la mano
para (pos = 0; pos < 80; pos = 4)
{
handServo.write(pos);
Delay(15);
}

para (pos = 80; pos < 129; pos = 1)
{
handServo.write(pos);
Delay(30);
}
Delay(300);

para (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(10);
}

puerta oculta
para (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}

}

void sneak()
{
Puerta en movimiento
para (pos = 80; pos < 130; pos = 1)
{
doorServo.write(pos);
Delay(30);
}
Delay(2000);

Movimiento de la mano
para (pos = 0; pos < 40; pos = 1)
{
handServo.write(pos);
Delay(30);
}

Delay(500);

para (pos = 130; pos < 155; pos = 4)
{
doorServo.write(pos);
Delay(15);
}
Delay(100);

para (pos = 40; pos < 90; pos = 4)
{
handServo.write(pos);
Delay(15);
}
Delay(500);
esconder la mano
para (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
Delay(100);
para (pos = 70; pos < 90; pos = 4)
{

handServo.write(pos);
Delay(15);
}
Delay(100);
para (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
Delay(100);

para (pos = 70; pos < 129; pos = 4)
{

handServo.write(pos);
Delay(15);
}

para (pos = 129; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
puerta oculta
para (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}

Este movimiento se abra la puerta y esperar para el movimiento, si detecta cerca del interruptor,
la caja se moverá primero a la derecha y luego a la izquierda, y finalmente la mano se mueve y se apaga el interruptor de
void zee7()
{

Abra la puerta
para (pos = 80; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(1200);    espera para estabilizar las lecturas del sensor después de abrir la puerta

ajustar el temporizador y leer el sensor
esperar para el movimiento que supera el umbral o si el temporizador expira (5 seg),
lastDist = analogRead(motionPin);
TimerA = millis();

mientras que (millis ()-TimerA < = 5000)
{
currentDist = analogRead(motionPin);

¿La distancia actual difiera de la última distancia por encima del umbral?
Si sí, entonces mover el recuadro a la derecha
Si ((currentDist > lastDist trille || currentDist < lastDist - trille) || currentDist > 300)
{

hacia adelante a velocidad media a la izquierda (elegir la velocidad y el retardo
(caja de delay(300), es decir, según usted y voltaje de la batería que el movimiento del tiro es deseable)
digitalWrite (motorDirection, bajo);  Establece la dirección correcta del canal A
digitalWrite (resistancia, LOW);      Soltar el freno para el canal B
analogWrite (motorThrottle, 100);    Gira el motor en canal B a toda velocidad
Delay(300);
digitalWrite (resistancia, HIGH); Eengage el freno para el canal B
rotura;
}
lastDist = currentDist;
}

ajustar el temporizador y leer el sensor
esperar para el movimiento que supera el umbral o si el temporizador expira (5 seg),
Delay(1200);  espera para estabilizar las lecturas del sensor después de abrir la puerta
lastDist = analogRead(motionPin);
TimerB = millis();
mientras que (millis ()-TimerB < = 5000)
{
currentDist = analogRead(motionPin);
¿la caja ya cedió a la derecha y el actual se desvía de distancia de la última distancia por encima del umbral?
Si sí, entonces mover a la izquierda
Si ((currentDist > lastDist trille || currentDist < lastDist - trille) || currentDist > 300)
{

hacia atrás a velocidad media a la derecha (elegir la velocidad y el retardo
(caja de delay(300), es decir, según usted y voltaje de la batería que el movimiento del tiro es deseable)
digitalWrite (motorDirection, HIGH); Establece la izquierda en dirección de canal B
digitalWrite (resistancia, LOW);   Soltar el freno para el canal B
analogWrite (motorThrottle, 100);   Gira el motor en canal B en la mitad de velocidad
Delay(300);
digitalWrite (resistancia, HIGH); Eengage el freno para el canal B
rotura;
}

lastDist = currentDist;

}
Delay(100);
Movimiento de la mano
para (pos = 0; pos < 130; pos = 4)
{
handServo.write(pos);
Delay(15);
}

esconder la mano
para (pos = 130; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}

puerta oculta
para (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}

Artículos Relacionados

Otra máquina inútil - aka iUseless

Otra máquina inútil - aka iUseless

Tenía la caja de un iPhone de Apple disponible e hizo una versión de la máquina inútil con él. Pienso darle a mi hijo que trabaja en Apple.Básicamente he seguido el método mostrado en este Instructable:.He seguido las instrucciones que sólo requieren
Máquina inútil de energía solar

Máquina inútil de energía solar

En este instructable, vamos a hacer una máquina de energía solar, medio ambiente, controlada por arduino, inútil!Cada vez que le da la vuelta el interruptor, la máquina será voltear hacia atrás y así continúa el ciclo. La máquina inútil fue inventada
Construir una máquina de CNC Foamcore

Construir una máquina de CNC Foamcore

construir una máquina CNC de bajo costo en su cocina, por debajo de $120, utilizando herramientas que se puede obtener en el arte local y ferreterías.Este proyecto pretende disminuir la planta de construcción de la máquina CNC. Utiliza cartón pluma -
Máquina inútil avanzada

Máquina inútil avanzada

Hola todos hoy me gustaría presentar mi máquina inútil inusual. Espero que todo el mundo se enteró máquina inútil, pero construí una versión avanzada con siete interruptores de palanca.El marido de mi prima surgió la idea de hacer esta caja. Como se
Cómo construir una máquina de Arcade!

Cómo construir una máquina de Arcade!

Por fin he vuelto, y estoy aquí para mostrarle cómo hacer una máquina de Arcade para su propio disfrute personal. Realmente no es demasiado difícil ni demasiado caro (en comparación con la cantidad real arcade máquinas costo), por lo que este hace pa
Máquina inútil, la aplicación

Máquina inútil, la aplicación

Este tutorial es muy divertido, es una máquina inútil, pero esta vez en la aplicación para teléfonos android.Creo que es un proyecto simple para así disfrutar de la primera aplicación de tiempoUtilizo el inventor del Mit y mi celular, quizás en el fu
Cómo construir una máquina de Arcade en 4 minutos

Cómo construir una máquina de Arcade en 4 minutos

El video de arriba muestra todos los pasos descritos en este instructable así que por favor ver el video antes de leer más.Bueno, en realidad, es sólo el video que dura 4 minutos, pero la construcción tomó cerca de 200 horas. Pero si va a hacerlo, no
Máquina inútil - planes de información y Hardware fuentes

Máquina inútil - planes de información y Hardware fuentes

Horas de diversión y lograr nada con este fascinante de residuosy juguete adictivo! La máquina inútil rápidamente se convierte en el centro de atención en cualquier reunión.Esta pequeña joya está segura de obtener una risa, una mirada burlona y mucho
Máquina inútil de la máscara de calabaza

Máquina inútil de la máscara de calabaza

Es inútil máquina lista para la fiesta de Halloween. Máquina tradicionalmente inútil son obstinados y persistentes. Esta máquina es la misma, pero es más agresivo y trata de morder un intruso (le he advertido!).Paso 1: Diagrama de circuitosSu eléctri
Máquina inútil

Máquina inútil

"se enciende, apaga solo nuevamente. Realmente no hay punto en absoluto".Este Instructable le guiará a través de cómo hacer su propia máquina inútil!Esta máquina inútil fue creada como proyecto final para modelado y Control en la Universidad de
Máquina inútil de huevo de Pascua

Máquina inútil de huevo de Pascua

armé una máquina inútil del huevo de Pascua que incorpora la electrónica, el arte y el bricolaje en un solo paquete. Fue inspirado por el kit de la máquina inútil de Solarbotics . He encontrado este huevo grande llena de dulces que parecían que sería
Construir una máquina de lanzador USB naranja

Construir una máquina de lanzador USB naranja

este paso a paso le mostrará cómo construir una máquina de lanzador naranja controlada por cualquier ordenador mediante un cable USB normal.Se basa en los tabucos antiguo aunque es hecha de cañas y no tiene la eslinga. La electrónica es muy sencilla,
Construir una máquina selfie con una cámara IP en menos de 15 minutos!

Construir una máquina selfie con una cámara IP en menos de 15 minutos!

¿Estás listo para construir una máquina selfie en menos de 15 minutos, que envía a su dirección de correo electrónico una copia instantánea tomada desde una cámara IP? Esto es posibles gracias a TimeSquair.La imagen muestra una cámara del IP cerca de
Diseñar y construir un cargador USB portátil

Diseñar y construir un cargador USB portátil

En esta guía te mostrará cómo diseñar y construir un cargador USB portátil.Deja comienzo...Paso 1: materiales Lo que necesitarás:1) recinto proyecto: 3,34" L x 1,96" W x 0,83 "H.2) USB 0.9V-5V a 5V DC impulso elevador de tensión módulo de a