Arduino animatronics-hacer tu vestuario impresionante más impresionante! (12 / 15 paso)

Paso 12: Cañón máquina de guerra

Cañón del ejemplo 8-máquina de guerra

¿Quieres ser la máquina de guerra? En este ejemplo se basa en el cañón del depredador pero utiliza un motor conectado a un transistor para hacer girar los barriles del cañón. Al pulsar el botón se enciende el motor. Hay un diodo 1N4004 para prevenir la tensión posterior del motor, dañar el pin de salida del controlador.

Un cañón de la máquina de guerra es substancialmente más grande que un cañón de depredador y requeriría servos más grandes y más potentes para tener individuales transistores TIP 120 que se muestra en el diagrama de cableado.

Para montar el cañón Servocity vende mecanismos pan/tilt que serían perfectos para esta aplicación,
http://www.servocity.com/html/spt200_pan___tilt_system.html

/*
* Ejemplo 8
* Hierro hombre guerra máquina cañón
* Utiliza un nunchuck Wii modificada como un cabezal de entrada dispositivo de seguimiento para el control de un animatronic de cañón de la máquina de guerra de hombre de hierro
* Protector de la onda de Adafruit se utiliza para efectos de sonido
* Honus 2010
* Wii nunchuck leyendo el código modificado/ampliado de nunchuck código por Tod E. Kurt y Windmeadow Labs
* 2007 Tod E. Kurt, http://todbot.com/blog/
* El Wii Nunchuck código de lectura se toma de los laboratorios de Windmeadow, http://www.windmeadow.com/node/42
*/

#include "Wire.h" / / incluir la biblioteca de alambre

int controlPin1 = 7; Pin de control de panel de efectos de sonido usando botón z
int transistorPin1 = 13; Pin de control de LED de cañón usando el botón z
int transistorPin2 = 12; Pin de control para el uso de servo 1 botón c
int transistorPin3 = 11; Pin de control para el uso de servo 2 botón c
int transistorPin4 = 10; Pin de control de motor de cañón usando botón z
int servoPin1 = 9; Pin de control de servo 1 usando acelerometro eje x
int servoPin2 = 8; Pin de control para el uso de servo 2 eje del acelerómetro

int pulseWidth1 = 0; Cantidad para el servo 1
int pulseWidth2 = 0; Cantidad de pulsos del servo 2

int refreshTime = 20; el tiempo en millisecs necesitaba entre pulsos del servo
largo lastPulse1;
largo lastPulse2;

int minPulse = 700; anchura de pulso mínima de servo
int loop_cnt = 0;

Boolean button_down = false;
Inicio largo sin firmar;

void setup()
{
Serial.Begin(19200);

pinMode (controlPin1, salida); Configurar control pin 1 como salida
pinMode (transistorPin1, salida); Configurar transistor pin 1 como salida
pinMode (transistorPin2, salida); Configurar pin de transistor 2 como salida
pinMode (transistorPin3, salida); Configurar pin de transistor 3 como salida
pinMode (transistorPin4, salida); Configurar pin de transistor 4 como salida
pinMode (servoPin1, salida); Configurar servo pin 1 como salida
pinMode (servoPin2, salida); Configurar servo pin 2 como salida

pulseWidth1 = minPulse; Ajuste la posición del servo en el mínimo
pulseWidth2 = minPulse; Ajuste la posición del servo en el mínimo

nunchuck_init(); enviar el protocolo de inicialización
Serial.Print ("NunchuckServo ready\n");
}

void loop()
{
checkNunchuck1();
updateServo1(); actualizar posición servo 1
checkNunchuck2();
updateServo2(); actualizar posición del servo 2

Si (nunchuck_cbutton()) {}
digitalWrite (transistorPin2, HIGH); activar pin transistor 2 si se presiona el botón c
digitalWrite (transistorPin3, HIGH); activar pin transistor 3 si se presiona el botón c
}
Else {}
digitalWrite (transistorPin2, bajo); Apagar pin transistor 2
digitalWrite (transistorPin3, bajo);
}

Si (nunchuck_zbutton())
{
Si (! button_down) / / si solo se presiona el botón
{
digitalWrite (controlPin1, HIGH); activar efectos de sonido
button_down = true;
Start = millis();
}
else if (millis() - Inicio > 1200) / / si el contador de tiempo transcurrido
{
digitalWrite (transistorPin1, HIGH); Encienda el cañón de LED
digitalWrite (transistorPin4, HIGH); encender motor cañón
}
}
Else / / si el botón es por hacer esto
{
button_down = false;
digitalWrite (controlPin1, bajo); Desactivar efectos de sonido
digitalWrite (transistorPin1, bajo); Apague el cañón LED
digitalWrite (transistorPin4, bajo); Apague el motor del cañón
}

Delay(1); Esto está aquí para dar un tiempo conocido por loop
}

void checkNunchuck1()
{
Si (loop_cnt > 100) {/ / bucle () s es cada 1 mseg, cada 100msec

nunchuck_get_data();
nunchuck_print_data();

inclinación del flotador = nunchuck_accelx(); eje x, en este caso va de ~ 70 - ~ 185
inclinación = (tilt - 70) * 1.5; Convertir ángulo en grados, más o menos
pulseWidth1 = (inclinación * 9) + minPulse; Convertir ángulo a microsegundos

loop_cnt = 0; reajuste para
}
loop_cnt ++;

}

llama cada loop().
utiliza variables globales servoPin, anchura de impulso, lastPulse y refreshTime
void updateServo1()
{
pulso del servo nuevo si ha pasado el tiempo de refresco de rhe (20 ms):
Si (millis() - lastPulse1 > = refreshTime) {}
digitalWrite (servoPin1, HIGH); Encienda el servo
delayMicroseconds(pulseWidth1); Longitud del pulso establece la posición del servo
digitalWrite (servoPin1, bajo); Apague el servo
lastPulse1 = millis(); ahorrar el tiempo de la última pulsación
}
}

void checkNunchuck2()
{
Si (loop_cnt > 100) {/ / bucle () s es cada 1 mseg, cada 100msec

nunchuck_get_data();
nunchuck_print_data();

inclinación del flotador = nunchuck_accely(); eje y, en este caso va de ~ 70 - ~ 185
inclinación = (tilt - 70) * 1.5; Convertir ángulo en grados, más o menos
pulseWidth2 = (inclinación * 9) + minPulse; Convertir ángulo a microsegundos

loop_cnt = 0; reajuste para
}
loop_cnt ++;

}

llama cada loop().
utiliza variables globales servoPin, anchura de impulso, lastPulse y refreshTime
void updateServo2()
{
pulso del servo nuevo si ha pasado el tiempo de refresco de rhe (20 ms):
Si (millis() - lastPulse2 > = refreshTime) {}
digitalWrite (servoPin2, HIGH);  Encienda el servo
delayMicroseconds(pulseWidth2); Longitud del pulso establece la posición del servo
digitalWrite (servoPin2, bajo); Apague el servo
lastPulse2 = millis(); ahorrar el tiempo de la última pulsación
}
}

//
Funciones del nunchuck
//

nunchuck_buf estática uint8_t [6]; array para almacenar los datos del nunchuck,

inicializar el sistema I2C, Únete al bus I2C,
y Dile el nunchuck que estamos hablando de que
void nunchuck_init()
{
Wire.Begin(); a bus i2c como maestro
Wire.beginTransmission(0x52); transmitir al dispositivo 0x52
Wire.Send(0x40); envía la dirección de memoria
Wire.Send(0x00); envía envía un cero.
Wire.endTransmission(); interrumpir la transmisión
}

Enviar una solicitud de datos para el nunchuck
fue "send_zero()"
void nunchuck_send_request()
{
Wire.beginTransmission(0x52); transmitir al dispositivo 0x52
Wire.Send(0x00); envía un byte
Wire.endTransmission(); interrumpir la transmisión
}

Recibir datos del nunchuck,
devuelve 1 lectura exitosa. devuelve 0 en caso de error
int nunchuck_get_data()
{
int cnt = 0;
Wire.requestFrom (0x52, 6); solicitud datos del nunchuck
mientras que (Wire.available ()) {}
recibe byte como un número entero
nunchuck_buf [cnt] = nunchuk_decode_byte(Wire.receive());
CNT ++;
}
nunchuck_send_request(); enviar solicitud para la siguiente carga de datos
Si hemos recibido los bytes de 6, y luego ir imprimir
Si (cnt > = 5) {}
retorno 1; éxito
}
return 0; falta
}

Imprimir los datos que hemos recibido
datos de Accel están largo 10 bits
así leemos 8 bits, entonces tenemos que añadir
en los últimos 2 bits. Es por eso
multiplicar por 2 * 2
void nunchuck_print_data()
{
Static int i = 0;
int joy_x_axis = nunchuck_buf [0];
int joy_y_axis = nunchuck_buf [1];
int accel_x_axis = nunchuck_buf [2]; // * 2 * 2;
int accel_y_axis = nunchuck_buf [3]; // * 2 * 2;
int accel_z_axis = nunchuck_buf [4]; // * 2 * 2;

int z_button = 0;
int c_button = 0;

byte nunchuck_buf [5] contiene bits de botones z y c
también contiene los bits menos significativos de los datos del acelerómetro
así que tenemos que comprobar cada bit del byte telefonía [5]
Si ((nunchuck_buf [5] >> 0) & 1)
z_button = 1;
Si ((nunchuck_buf [5] >> 1) & 1)
c_button = 1;

Si ((nunchuck_buf [5] >> 2) & 1)
accel_x_axis += 2;
Si ((nunchuck_buf [5] >> 3) & 1)
accel_x_axis += 1;

Si ((nunchuck_buf [5] >> 4) & 1)
accel_y_axis += 2;
Si ((nunchuck_buf [5] >> 5) & 1)
accel_y_axis += 1;

Si ((nunchuck_buf [5] >> 6) & 1)
accel_z_axis += 2;
Si ((nunchuck_buf [5] >> 7) & 1)
accel_z_axis += 1;

Serial.Print(i,DEC);
Serial.Print("\t");

Serial.Print("Joy:");
Serial.Print(joy_x_axis,DEC);
Serial.Print(",");
Serial.Print (joy_y_axis, DEC);
Serial.Print ("\t");

Serial.Print("ACC:");
Serial.Print (accel_x_axis, DEC);
Serial.Print(",");
Serial.Print (accel_y_axis, DEC);
Serial.Print(",");
Serial.Print (accel_z_axis, DEC);
Serial.Print("\t");

Serial.Print("but:");
Serial.Print (z_button, DEC);
Serial.Print(",");
Serial.Print (c_button, DEC);

Serial.Print("\r\n"); nueva línea
i ++;
}

Codificar los datos para el formato que la mayoría conductores de wiimote excepto
sólo es necesario si utilizas uno de los pilotos regulares de wiimote
char nunchuk_decode_byte (char x)
{
x = (x ^ 0x17) + 0x17;
return x;
}

Devuelve el estado de zbutton: 1 = pulsado, 0 = notpressed
int nunchuck_zbutton()
{
¿regresar ((nunchuck_buf [5] >> 0) & 1)? 0: 1; Voodoo
}

Devuelve el estado de zbutton: 1 = pulsado, 0 = notpressed
int nunchuck_cbutton()
{
¿regresar ((nunchuck_buf [5] >> 1) & 1)? 0: 1; Voodoo
}

Devuelve valor de palanca de mando de eje x
int nunchuck_joyx()
{
volver nunchuck_buf [0];
}

Devuelve valor de palanca de mando de eje y
int nunchuck_joyy()
{
volver nunchuck_buf [1];
}

Devuelve el valor del acelerómetro de eje x
int nunchuck_accelx()
{
volver nunchuck_buf [2]; FIXME: Esto deja fuera a 2 bits de los datos
}

Devuelve el valor del acelerómetro de eje y
int nunchuck_accely()
{
volver nunchuck_buf [3]; FIXME: Esto deja fuera a 2 bits de los datos
}

Devuelve el valor del acelerómetro z
int nunchuck_accelz()
{
volver nunchuck_buf [4]; FIXME: Esto deja fuera a 2 bits de los datos
}

Artículos Relacionados

Hacer un sofá impresionante muñeca Chic y elegante (fácil-NO-coser)

Hacer un sofá impresionante muñeca Chic y elegante (fácil-NO-coser)

Hacer que este increíble sofá de 2 colores elegante y chic para tus muñecas y figuras de acción.Es fácil, barato y sin coser!!Mira nuestro video tutorial aquí:O leyendo para un completo paso a paso las instrucciones con fotos.:-)Paso 1: Para hacer el
Hacer jabón impresionante

Hacer jabón impresionante

este es el proceso que utilizo para hacer jabon personalizado impresionante.Mi esposa y yo hemos hecho jabones personalizados como favores, regalos y eventos para recaudar fondos.Ordeno mi jabón que hace fuentes de http://www.elementsbathandbody.com/
Conectar el arduino y hacer que el altavoz

Conectar el arduino y hacer que el altavoz

para hacer tu Arduino para jugar una melodía necesita accesorios de thes.Un altavoz de 5 ohmUna placa de Arduino unoUn Push buttomUno 10 kohm resistencia8 LED ' sY un montón de cables de núcleoPaso 1: Conectar el arduino y hacer que el altavoz Se tra
Cómo hacer una comida impresionante

Cómo hacer una comida impresionante

estos pasos van a hacer un impresionante. Puede estar intentando impresionar a tu cita, o quiera demostrar a alguien que realmente puede tirar hacia abajo en la cocina. Sea cual sea la situación es, estos pasos le ayudarán.Paso 1: Ajuste de mesa prim
Cómo hacer una camiseta impresionante

Cómo hacer una camiseta impresionante

cómo hacer una camiseta impresionante con pintura de tela.Paso 1: fuentes de Suministros que necesitarás:CamisetaCartón y cartulinaAlmohadilla de corte y cuchilloPintura de tela + cepillo de espumaHierroPapel de aluminioPaso 2: Paso 1: hacer la plant
RFIDuino - usando un lector de RFID y Arduino para hacer un rompecabezas GeoCache

RFIDuino - usando un lector de RFID y Arduino para hacer un rompecabezas GeoCache

disfruto de Geocaching y electrónica y han hecho un par de electrónico puzzle-caches utilizando un Arduino.Mi más reciente creación (con la ayuda de un compañero cacher del código) está utilizando un Arduino y RFID lector para hacer un geocaché de ro
Hacer un reloj impresionante de Sugru + ramitas

Hacer un reloj impresionante de Sugru + ramitas

En el funcionamiento hasta las vacaciones de Navidad este año que estamos compartiendo una idea de genio cada día, durante 24 días! (algo así como un calendario de Adviento) De ideas para preparar la casa, a hacer regalos impresionantes y planificaci
Cómo hacer un minecraft impresionante piscina y trampolín!

Cómo hacer un minecraft impresionante piscina y trampolín!

Cómo hacer un minecraft piscina y trampolín muy fácilmente y muy rápido y es realmente bueno para partes en minecraft para fin de año 2015 y a pasar un buen rato y espero que ustedes esta y deciden hacerlo usted mismo porque es tan impresionante y di
Cómo hacer un burdel impresionante!

Cómo hacer un burdel impresionante!

Para mi gato impresionante J fue escalada dentro y fuera de una caja de aire acondicionado. Es un poco más así que pensé que quieran mudarse a su propio. Con un poco de creatividad y tiempo libre, hice "burdel de Crazy J!Paso 1: Cortar la caja. No el
Hacer una tortilla impresionante

Hacer una tortilla impresionante

Tortillas son deliciosas y la belleza de ella es las combinaciones que usted puede hacer para hacer emocionantes nuevos sabores.Paso 1: ingredientes -2eggs-atún/jamón-amarillo queso mozzarella/queso/blanco-medio tomate o / y setas/nada de uso-Aceite-
Cómo hacer una tarjeta impresionante con bolso de té plegable

Cómo hacer una tarjeta impresionante con bolso de té plegable

plegable del bolso de té es una forma grande, divertida y fácil de hacer tarjetas grandes y decorar prácticamente cualquier cosa! Requiera ninguna herramienta especial y es barato, también. Además, una tarjeta hecha en casa es muy especial para algui
Hacer un reloj impresionante con palos de polo!

Hacer un reloj impresionante con palos de polo!

Permite hacer un genial reloj con bolas y palos de polo! También no se olvide de revisar mi video al final de esta insuperable!Lo que necesita-Cuartos de galón del kit del movimiento relojPalos de polo - 44 +Perlas de Pony de color elegido - 84 +CDTa
Cómo hacer una tortilla impresionante

Cómo hacer una tortilla impresionante

En este instructable le mostraré cómo hacer una tortilla bonito, caliente, perfectamente coloreado...Paso 1: Lo que usted necesita - Pan-Espátula-Cuchillo-Mantequilla-Estufa (obviamente)-2 o 3 huevos-Queso-Carne; tocino, jamón, etc. (opcional)Paso 2:
Cómo hacer una foto impresionante, personalizada!

Cómo hacer una foto impresionante, personalizada!

me encanta hacer fotos personalizadas! Sé que será, por lo que le mostrará cómo! Me decidí a la mía sobre mi gato!Lo siento si no aparece la foto entera!Paso 1: Descargar la aplicación Por lo tanto, usted tendrá que descargar la aplicación que le ayu