Arduino animatronics-Maak uw geweldige kostuums meer awesome! (12 / 15 stap)

Stap 12: Oorlogsmachine kanon


Voorbeeld 8-oorlogsmachine kanon

U wilt de oorlogsmachine? In dit voorbeeld is gebaseerd op de Predator kanon maar maakt gebruik van een motor die is aangesloten op een transistor te draaien van de vaten kanon. Wanneer u de knop vuur wordt de motor ingeschakeld. Er is een diode 1N4004 om te voorkomen dat terug spanning van de motor de controller uitgang pins schadelijk.

Een oorlogsmachine kanon aanzienlijk groter is dan een Predator kanon en groter, krachtiger servo's zou vereisen, dus ik heb individuele TIP 120 transistoren getoond op het bedradingsschema.

Voor de montage van het kanon verkoopt Servocity pan/tilt mechanismen die perfect voor deze toepassing zijn zou-
http://www.servocity.com/html/spt200_pan___tilt_system.html

/*
* Voorbeeld 8
* Iron Man War Machine kanon
* Deze maakt gebruik van een gemodificeerde Wii nunchuck als een hoofd bijhouden invoerapparaat waarmee een animatronic Iron Man War Machine kanon
* Adafruit Wave shield is gebruikt voor geluidseffecten
* Honus 2010
* Wii nunchuck lezen code aangepast/uitgebreid vanaf nunchuck code door Tod E. Kurt en Windmeadow Labs
* 2007 Tod E. Kurt, http://todbot.com/blog/
* De Wii Nunchuck lezen code is overgenomen uit Windmeadow Labs, http://www.windmeadow.com/node/42
*/

#include "Wire.h" / / de draad bibliotheek

int controlPin1 = 7; Controle pin voor geluidseffecten board met z-knop
int transistorPin1 = 13; Controle pin voor kanon LED met z-knop
int transistorPin2 = 12; Controle pin voor het gebruik van de servo 1 c knop
int transistorPin3 = 11; Controle pin voor het gebruik van de servo 2 c knop
int transistorPin4 = 10; Controle pin voor kanon motor met z-knop
int servoPin1 = 9; Controle pin voor servo 1 met behulp van de versnellingsmeter x-as
int servoPin2 = 8; Controle pin voor het gebruik van de servo 2 versnellingsmeter y-as

int pulseWidth1 = 0; Bedrag aan de pols van de servo 1
int pulseWidth2 = 0; Bedrag aan de servo 2 pulse

int refreshTime = 20; de tijd in millisecs nodig tussen servo pulsen
lange lastPulse1;
lange lastPulse2;

int minPulse = 700; minimale servo pulsbreedte
int loop_cnt = 0;

Boole button_down = false;
niet-ondertekende lange start;

VOID Setup
{
Serial.begin(19200);

pinMode (controlPin1, OUTPUT); Controle pin 1 stellen als uitvoerapparaat
pinMode (transistorPin1, OUTPUT); Transistor pin 1 stellen als uitvoerapparaat
pinMode (transistorPin2, OUTPUT); Transistor pin 2 stellen als uitvoerapparaat
pinMode (transistorPin3, OUTPUT); Transistor pin 3 stellen als uitvoerapparaat
pinMode (transistorPin4, OUTPUT); Transistor pin 4 stellen als uitvoerapparaat
pinMode (servoPin1, OUTPUT); Servo pin 1 stellen als uitvoerapparaat
pinMode (servoPin2, OUTPUT); Servo pin 2 stellen als uitvoerapparaat

pulseWidth1 = minPulse; Stel de positie van de servo tot het minimum
pulseWidth2 = minPulse; Stel de positie van de servo tot het minimum

nunchuck_init(); Stuur de handdruk initilization
Serial.Print ("NunchuckServo ready\n");
}

void loop
{
checkNunchuck1();
updateServo1(); Update servo 1 positie
checkNunchuck2();
updateServo2(); Update 2 servo positie

Als (nunchuck_cbutton()) {}
digitalWrite (transistorPin2, hoge); transistor pin 2 inschakelen als c-knop wordt ingedrukt
digitalWrite (transistorPin3, hoge); transistor pin 3 inschakelen als c-knop wordt ingedrukt
}
else {}
digitalWrite (transistorPin2, laag); transistor pin 2 uitschakelen
digitalWrite (transistorPin3, laag);
}

Als (nunchuck_zbutton())
{
Als (! button_down) / / als net gedrukt werd dit doen
{
digitalWrite (controlPin1, hoge); geluidseffect inschakelen
button_down = true;
Start = millis();
}
anders als (millis() - start > 1200) / / als de timer is verstreken hiervoor
{
digitalWrite (transistorPin1, hoge); kanon LED inschakelen
digitalWrite (transistorPin4, hoge); kanon motor inschakelen
}
}
anders / / als knop omhoog doen dit is
{
button_down = false;
digitalWrite (controlPin1, laag); geluidseffect uitschakelen
digitalWrite (transistorPin1, laag); kanon LED uitschakelen
digitalWrite (transistorPin4, laag); kanon motor uitschakelen
}

delay(1); Dit is hier een bekende tijd per lus te geven
}

VOID checkNunchuck1()
{
Als (loop_cnt > 100) {/ / lus () s is elke 1msec, dit is elke 100msec

nunchuck_get_data();
nunchuck_print_data();

zweven tilt = nunchuck_accelx(); x-as, in dit geval varieert van ~ 70 - ~ 185
kantelen (tilt - 70) = * 1,5; omzetten in hoek in graden, ruwweg
pulseWidth1 = (kantelen * 9) + minPulse; hoek omzetten in microseconden

loop_cnt = 0; Reset voor
}
loop_cnt ++;

}

elke loop genoemd.
Gebruik globale variabelen servoPin, pulsewidth, lastPulse, & refreshTime
VOID updateServo1()
{
Pulse de servo opnieuw als rhe refresh tijd (20 ms) hebt uitgevoerd:
Als (millis() - lastPulse1 > = refreshTime) {}
digitalWrite (servoPin1, hoge); De servo inschakelen
delayMicroseconds(pulseWidth1); Lengte van de pols stelt u de positie van de servo
digitalWrite (servoPin1, laag); De servo uitschakelen
lastPulse1 = millis(); opslaan van het tijdstip van de laatste puls
}
}

VOID checkNunchuck2()
{
Als (loop_cnt > 100) {/ / lus () s is elke 1msec, dit is elke 100msec

nunchuck_get_data();
nunchuck_print_data();

zweven tilt = nunchuck_accely(); y-as, in dit geval varieert van ~ 70 - ~ 185
kantelen (tilt - 70) = * 1,5; omzetten in hoek in graden, ruwweg
pulseWidth2 = (kantelen * 9) + minPulse; hoek omzetten in microseconden

loop_cnt = 0; Reset voor
}
loop_cnt ++;

}

elke loop genoemd.
Gebruik globale variabelen servoPin, pulsewidth, lastPulse, & refreshTime
VOID updateServo2()
{
Pulse de servo opnieuw als rhe refresh tijd (20 ms) hebt uitgevoerd:
Als (millis() - lastPulse2 > = refreshTime) {}
digitalWrite (servoPin2, hoge);  De servo inschakelen
delayMicroseconds(pulseWidth2); Lengte van de pols stelt u de positie van de servo
digitalWrite (servoPin2, laag); De servo uitschakelen
lastPulse2 = millis(); opslaan van het tijdstip van de laatste puls
}
}

//
Functies van de Nunchuck
//

statische uint8_t nunchuck_buf [6]; matrix voor het opslaan van gegevens van de nunchuck,

initialiseren van de I2C-systeem, join de I2C-bus,
en nunchuck vertellen dat we aan het praten
VOID nunchuck_init()
{
Wire.begin(); Join i2c bus als meester
Wire.beginTransmission(0x52); verzenden naar apparaat 0x52
Wire.send(0x40); stuurt geheugenadres
Wire.send(0x00); stuurt verzonden een nul.
Wire.endTransmission(); stoppen met het verzenden van
}

Een verzoek om gegevens verzenden met de nunchuck
was "send_zero()"
VOID nunchuck_send_request()
{
Wire.beginTransmission(0x52); verzenden naar apparaat 0x52
Wire.send(0x00); stuurt één byte
Wire.endTransmission(); stoppen met het verzenden van
}

Gegevens ontvangen terug van de nunchuck,
geeft als resultaat 1 op succesvolle Lees. geeft als resultaat 0 op mislukking
int nunchuck_get_data()
{
int cnt = 0;
Wire.requestFrom (0x52, 6); aanvraaggegevens uit nunchuck
terwijl (Wire.available ()) {}
Ontvangen bytes als integer
nunchuck_buf [cnt] = nunchuk_decode_byte(Wire.receive());
CNT ++;
}
nunchuck_send_request(); verzoek tot volgende gegevenslading sturen
Als we de 6 bytes ontvangen, ga dan afdrukken
Als (cnt > = 5) {}
return 1; succes
}
keren 0; storing
}

Afdrukken van de invoergegevens die we hebben ontvangen
accel gegevens is 10 bits lang
zodat wij 8 bits lezen, dan moeten zullen we toevoegen
op de laatste 2 bits. Dat is waarom ik
Ze vermenigvuldigen met 2 * 2
VOID nunchuck_print_data()
{
statische 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;

nunchuck_buf [5] van de byte bevat bits voor knoppen z en c
het bevat ook de minst significante bits voor de versnellingsmeter-gegevens
dus we hebben om te controleren van elke bit van byte outbuf [5]
Als ((nunchuck_buf [5] >> 0) & 1)
z_button = 1;
Als ((nunchuck_buf [5] >> 1) & 1)
c_button = 1;

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

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

Als ((nunchuck_buf [5] >> 6) & 1)
accel_z_axis += 2;
Als ((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"); newline
i ++;
}

Coderen gegevens opmaken dat meeste wiimote bestuurders behalve
alleen nodig als u een van de regelmatige wiimote stuurprogramma's gebruiken
char nunchuk_decode_byte (char x)
{
x = (x ^ 0x17) + 0x17;
return x;
}

Deze eigenschap retourneert de status zbutton: 1 = ingedrukt, 0 = notpressed
int nunchuck_zbutton()
{
retourneren ((nunchuck_buf [5] >> 0) & 1)? 0: 1; Voodoo
}

Deze eigenschap retourneert de status zbutton: 1 = ingedrukt, 0 = notpressed
int nunchuck_cbutton()
{
retourneren ((nunchuck_buf [5] >> 1) & 1)? 0: 1; Voodoo
}

Deze eigenschap retourneert een waarde voor x-as joystick
int nunchuck_joyx()
{
keren nunchuck_buf [0];
}

Deze eigenschap retourneert een waarde voor y-as joystick
int nunchuck_joyy()
{
terug van nunchuck_buf [1];
}

Deze eigenschap retourneert een waarde van de x-as versnellingsmeter
int nunchuck_accelx()
{
keren nunchuck_buf [2]; FIXME: Dit laat uit 2-bits van de gegevens
}

Deze eigenschap retourneert een waarde van y-as versnellingsmeter
int nunchuck_accely()
{
keren nunchuck_buf [3]; FIXME: Dit laat uit 2-bits van de gegevens
}

Deze eigenschap retourneert een waarde van de z-as versnellingsmeter
int nunchuck_accelz()
{
keren nunchuck_buf [4]; FIXME: Dit laat uit 2-bits van de gegevens
}

Gerelateerde Artikelen

Hoe om uw Andoird UI kijken meer Awesome

Hoe om uw Andoird UI kijken meer Awesome

INTRODUCTIEHallo daar, vandaag zal ik laten u dat hoe kunt u uw android telefoon/tablet meer awesome kijken en als je oude en lelijke Androïde versie (dwz 4.0 ice cream sandwich, 4.1, 4.2 Jellybean, 4.4 Kitkat) en wil het er bijgewerkte en ontzagwekk
Hoe maak je een kostuum van de Terminator Model T-600

Hoe maak je een kostuum van de Terminator Model T-600

zoals u van mijn avatar zien kunt, ik ben een grote fan van de Terminator-serie. Om deze reden dit jaar maakte ik mijn eigen kostuum van een model T-600 Terminator zoals te zien in Terminator Salvation.De definitieve kostuum omvat een minigun, een li
Hoe maak je een kostuum Corvid

Hoe maak je een kostuum Corvid

Ik kan me niet herinneren waarom, maar Halloween feest komen ik besloten om te verkleden als een monsterlijke-Crow / Raven (grote zwarte vogel)Het beste ding over een zelf-gemaakte kostuum is dat kunt u er vrij zeker dat niemand anders gaat er hetzel
Hoe maak je een kostuum Sinestro (paars lantaarn) Corp "Scarecrow"

Hoe maak je een kostuum Sinestro (paars lantaarn) Corp "Scarecrow"

daar gaan we weer! We wisten allemaal dat het uiteindelijk zou gebeuren dat scarecrow zou worden een paars lantaarn voor zijn capaciteit voor het opwekken van grote angst in anderen. Tijden veranderen en wij gotta houden met de trends juiste?Material
Maak een Link kostuum!

Maak een Link kostuum!

Dit instructable zal u tonen hoe een Link kostuum, allermeest naar de componenten aanbrengen van de Legend of Zelda. Met wat ik had, dit geliquideerd wordt een hybride tussen de Link van de Ocarina of Time en Twilight Princess. Dit omvat het maken va
Maak een geweldige zaak-minder flash drive, heb ik al gezegd dat het waterdicht is?

Maak een geweldige zaak-minder flash drive, heb ik al gezegd dat het waterdicht is?

Informatie over het gebruik van sommige algemeen beschikbare materialen die u hebt waarschijnlijk rond het huis om een geweldige zaak-minder flash drive.Stap 1: Verzamel materialen u zal eerst uw materialen die u nodig heeft om de flash drive, verzam
Maak een epische kostuum voor onder $15

Maak een epische kostuum voor onder $15

het is die tijd van het jaar weer, de bladeren vallen van de bomen, Thanksgiving nadert, maar het grootste deel van alle Halloween is de horizon en mensen scramble te hebben de beste kostuum op het blok, of het nu gaat om Iron Man naast de deur, of d
Hoe maak je een kostuum 'Jem'

Hoe maak je een kostuum 'Jem'

Jem was de zanger van een 80's cartoon band genaamd JEM en de hologrammen. Overdag was ze Jerrica, maar haar pseudoniem was Jem. Jem de blik over de afleveringen is geëvolueerd, maar die ik het beste bevalt is haar hete roze omslag jurk, glanzende as
Hoe maak je een kostuum Saber Lily

Hoe maak je een kostuum Saber Lily

ik hield van het ontwerp van dit teken, wanneer ik voor het eerst zag haar, en ten slotte het kostuum van haar maakte te wonen anime verdragen met.  Saber Lily is een alternatieve outfit voor het teken Saber vanaf Fate/Stay Night.  Saber Lily wordt w
Hoe om uw awesome website zelfs meer AWESOME door het toegankelijk te maken

Hoe om uw awesome website zelfs meer AWESOME door het toegankelijk te maken

deel 0: InleidingWanneer haalbaar is, probeer om een website om bruikbaar door zoveel mensen als mogelijk te ontwerpen.  Dit kan mensen die niet kunnen zien, horen of hun muis bewegen goed, of zelfs helemaal omvatten.  Hier zijn enkele hints en tips
Hoe maak je: Lego sleutelhanger + meer

Hoe maak je: Lego sleutelhanger + meer

Hallo iedereen,Ik ben bezig geweest de laatste paar dagen met mijn lego projecten, mijn doel was oude lego voorzien en gebruikt in het dagelijks leven zorg te worden gedragen en genoten:) Dit is een instructable op het proces van het maken van uw eig
Hoe maak je een kostuum voor een hond

Hoe maak je een kostuum voor een hond

ik denk dat ongeacht hoe u persoonlijk gevoel over honden, we er allemaal over eens dat hond kostuums hilarisch zijn. Ja, het klopt dat we op hen, en niet met hen lachen, maar zolang ze bereid bent te spelen mee ik denk niet dat er per se iets mis me
Hoe maak je Locker houden meer Stuff

Hoe maak je Locker houden meer Stuff

ik huurde een locker op mijn lokale TechShop locatie, dus ik houden kan project materialen en hulpmiddelen voor diverse persoonlijke, gunstig gelegen.  De kluisjes zijn lang en smal, zodat alles hoopt zich op in een stapel aan de onderkant.Ik opgeklo
Maak een zeemeermin kostuum uit oude rommel

Maak een zeemeermin kostuum uit oude rommel

ik ben het verblijf in de buurt van het strand in het moment en was geïnspireerd door de rommel er en sommige plastic zak materiële instructables.  Mijn vriend en ik maakte dit kostuum voor een video-shoot. Het is een beetje geïmproviseerde dus hoewe