ShaunDark80's Iron Man MKVII - Previously know as Roomiest Iron Man

Re: Roomiest Iron Man

I was lucky enough to get JayCVenlo's awesome neck and chest pieces. That should save me about six months of build time!

2014-04-30 12.33.04.jpg
 
Re: Roomiest Iron Man

Finally got my left hand from Shapeways (They originally sent me two rights).

2014-05-09 10.09.18.jpg

So with the recent arrival of my 3D printed boot, I've got a weekend of fibreglass reinforcement ahead of me :)
 
Re: Roomiest Iron Man

Just found something called a "Mega Stomp Panic". It's very cheap (£40) compared to some of the custom boot sound systems I've seen.

There's a video of it here - Mega Stomp Panic - Audio Reality Costume from ThinkGeek - YouTube

Has anyone tried it?

Yep, they're pretty cool. I got mine for half price from ThinkGeek last Christmas. The amp is pretty good, but you are stuck with the preprogrammed sounds. I never used mine in a suit, I didn't want the background sounds that constantly played as well (the 'hydraulic joint' sounds on the robot setting play all the time, even when not stepping or stomping). Otherwise, pretty cool to have if you can get it for cheap.
 
Re: Roomiest Iron Man

Very nice. Hoping to start on my own MK7 suit before the end of the year I want as many moving parts and as much sound as I can get.
 
Re: Roomiest Iron Man

Have had a last minute change of plans, so now have to get all the key electronics together in a hurry.

I've just ordered a few bits;

Arduino Pro Mini.jpgAccelerometer ADXL335.jpgServo.jpg

I'll hopefully get the Adafruit Triple 3-Axis Accelerometer ADXL335 talking to the Arduino Pro Mini to control both the HS-125MG servo (which fits in TheRealTonyStark's Shapeways servo mechanism) and the eye LEDs. If I can also rig it to power down my Vuzix Wrap 920 video goggles and connected camera when not needed, that would also be nice.

Eye Lights.jpgLenses.jpg

For the eyes, as I'm not planning to look through them at all, I figured I may as well go a bit overkill. I found a "5V 18 Piranha SMD LED Panel Board" which measures 59*28*10mm, which I think should fill the eyes nicely. For the eye lenses, rather than trying to make my own light diffusers, I've ordered a couple of car boot (trunk) lights. I figure that they can be reshaped slightly to fit the faceplate, and do a better job of evening out the light than anything I could make.

I had already built one hand repulsor using a muscle sensor. I'm hoping to modify that to use an accelerometer instead. I plan to mount the Arduino, batteries and speaker in the MK7 forearm bulge, and mount the accelerometer behind the LEDs in the palm.

For the chest I plan to keep things as simple as possible. I've already got Kenlandrum's beautiful 3d printed chest repulsor, and I plan to just mount a lot of LEDs behind it, running off a Lipo. I might look at a firing mode for it later on, but for now I'll be happy if I can just get the basics working.

Hopefully I can start breadboarding the circuits next week. I will of course be following 7sinzz' excellent Iron man motorised faceplate electronics tutorial!!!

I'm still waiting for the camera to arrive so I can figure out where on the helmet to mount it. For the moment, under the chin air vent is the only place I can think of hiding it (though it will still be very visible :( ).
 
Re: Roomiest Iron Man

2014-05-23 11.40.52.jpg

My diffusers just arrived. They measure 64*24mm so should fill the eye holes quite easily. I plan to soften them in hot water and shape them by hand.
 
Re: Roomiest Iron Man

Small update; I've now got most of the electronics - just waiting on the eye LED modules and a relay to brake the helmet servo.

I've posted my modified version of xl97's helmet code at http://www.therpf.com/f78/iron-man-motorised-faceplate-electronics-tutorial-170853/index57.html - This now uses the ADXL335 accelerometer to activate the helmet.

Here's the servo being tested in the helmet - https://www.youtube.com/watch?v=6zvv7hwZa7o (note that without the relay the faceplate easily drops down on its own).

Here's a second test using one of my 12V hand repulsor LED boards as an eye - https://www.youtube.com/watch?v=vaHF5k-XQ-E

A huge thanks to XL97 for sharing his code.
 
Re: Roomiest Iron Man

Looking Awesome
I'm in the procces of doing a Mark VII out of fiberglass, carbon fiber, aluminum and some electronics and servos and cool stuff, I got a fair guess it's going to cost a lot, but I'm not worried with that.
Keep up the good work
 
Re: Roomiest Iron Man

Back is pepped. Just need to fit the flaps, then get a wiggle on with the rest of the suit.

uploadfromtaptalk1402158408676.jpguploadfromtaptalk1402158408676.jpguploadfromtaptalk1402158408676.jpg
 

Attachments

  • uploadfromtaptalk1402158423873.jpg
    uploadfromtaptalk1402158423873.jpg
    39.6 KB · Views: 184
  • uploadfromtaptalk1402158435487.jpg
    uploadfromtaptalk1402158435487.jpg
    37.9 KB · Views: 166
Re: Roomiest Iron Man

Just added the relay to the helmet circuit to enable the servo braking. Works ok, but is a bit jittery, so have ordered a selection of diodes and resistors to sort that out.

2014-06-09 15.13.22.jpg

Started working on the abs yesterday. They're a really tight fit, so I'd best avoid food for the next month if I want to be comfy in the suit. Once they're done, then it's on to the thighs, as I'm pretty worried about how they'll fit.

2014-06-08 17.41.30.jpg
 
Re: Roomiest Iron Man

My first repulsor is done;

2014-06-13 14.18.47.jpg2014-06-13 14.18.23.jpg2014-06-13 14.19.03.jpg

Here's a video of it in action; https://www.youtube.com/watch?v=0JBd5OvG8uA

And in case it's of any use to anyone, here's the code;

Code:
// Iron Man Repulsor triggered by Accelerometer_v1.0
// Bodged together by ShaunDarkLord
// WaveHC code borrowed from Adafruit Industries WaveHC library
// examples (indicated below).
//***************************************************************************
// Example code from wavehc_play6.ino as part of WaveHC Library
//***************************************************************************
#include <FatReader.h>
#include <SdReader.h>
#include <avr/pgmspace.h>
#include "WaveUtil.h"
#include "WaveHC.h"
SdReader card;    // This object holds the information for the card
FatVolume vol;    // This holds the information for the partition on the card
FatReader root;   // This holds the information for the filesystem on the card
FatReader f;      // This holds the information for the file we're play
WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time
#define DEBOUNCE 100  // button debouncer
//***************************************************************************
// Inputs and Outputs
int GloveLED              =  6;          // Pin connected to the repulsor light
const int TiltSensor      =  A1;         // Pin connected to the Accelerometer axis we wish to use.
// Defined variables
int PowerUpAngle          =  410;        // Angle at which the powerup sequence is triggered
int FireAngle             =  400;        // ANgle at which the fire sequence is triggered
const String Angle        =  "Angle: ";  // Used in serial output for displaying current angle.
const String BVal         =  "Brightness: ";  // Used in serial output for displaying current brightness.
long POWERUP_SFX_LENGTH   =  1080;       // Power Up wav file length
long POWERDWN_SFX_LENGTH  =  1250;       // Power Down wav file length
int brightness            =  0;          // how bright the LED is
int fadeAmount            =  5;          // how many points to fade the LED by
int idlebrightness        =  10;        // how bright the idle LED is
int powerupbrightness     =  125;        // how bright the powerup LED is
int maxbrightness         =  255;        // maximum brightness
int fadeValue             =  0;          // fade value for timed event
long currTime             =  0;          // current time
long prevTime             =  0;          // previous time
long timeDivision         =  0;          // clip length in milliseconds divided by the target brightness 
// Defined states
#define S_STARTUP 1
#define S_INIT 2
#define S_ONLINE 3
#define S_IDLE 4
#define S_POWERUP 5
#define S_FIRE 6
#define S_POWERDN 7
static int state = S_STARTUP; // initial state is 1, the "startup" state.
// Setup
void setup() {
  Serial.begin(9600);  // Setup serial port
  //***************************************************************************
  // Example code from wavehc_play6.ino as part of WaveHC Library
  //***************************************************************************
  putstring_nl("WaveHC with 6 buttons");
  putstring("Free RAM: ");       // This can help with debugging, running out of RAM is bad
  // Set the output pins for the DAC control. This pins are defined in the library
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  // enable pull-up resistors on switch pins (analog inputs)
  digitalWrite(14, HIGH);
  digitalWrite(15, HIGH);
  digitalWrite(16, HIGH);
  digitalWrite(17, HIGH);
  digitalWrite(18, HIGH);
  digitalWrite(19, HIGH);
  if (!card.init()) {         //play with 8 MHz spi (default faster!) 
    putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
    sdErrorCheck();
    while(1);                            // then 'halt' - do nothing!
  }
  // enable optimize read - some cards may timeout. Disable if you're having problems
  card.partialBlockRead(true);
  // Now we will look for a FAT partition!
  uint8_t part;
  for (part = 0; part < 5; part++) {     // we have up to 5 slots to look in
    if (vol.init(card, part))
      break;                             // we found one, lets bail
  }
  if (part == 5) {                       // if we ended up not finding one  :(
    putstring_nl("No valid FAT partition!");
    sdErrorCheck();      // Something went wrong, lets print out why
    while(1);                            // then 'halt' - do nothing!
  }
  // Lets tell the user about what we found
  putstring("Using partition ");
  Serial.print(part, DEC);
  putstring(", type is FAT");
  Serial.println(vol.fatType(),DEC);     // FAT16 or FAT32?
  Serial.println();
  // Try to open the root directory
  if (!root.openRoot(vol)) {
    putstring_nl("Can't open root dir!"); // Something went wrong,
    while(1);                             // then 'halt' - do nothing!
  }
  //***************************************************************************
  //Setup IO
  pinMode(GloveLED, OUTPUT);   // Pin connected to the repulsor light
  pinMode(TiltSensor, INPUT);  // Pin connected to the Accelerometer axis we wish to use.
  Serial.print("INTIT STATE: ");
  Serial.println(state);
  Serial.print("Setup Complete");  // Display on console that this sectio is complete
  Serial.println();
}
// Loop
void loop() {
  switch(state)
  {
  case S_STARTUP:   // Begin Startup state
    playcomplete("Import.wav");  //play the J.A.R.V.I.S. "Importing Preferences" sound effect
    delay(1000);
    Serial.print("Startup Complete");
    Serial.println();
    state = S_INIT;
    break;  // End Startup state
  case S_INIT:   // Begin init state
    // set the brightness of pin 9:
    analogWrite(GloveLED, brightness);    
    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;
    Serial.print(BVal + brightness);
    Serial.println();
    // stop fading up when idlebrightness is reached 
    if (brightness >= idlebrightness) {
      Serial.print("INIT complete");
      Serial.println();
      state = S_ONLINE; 
    }     
    // wait for 30 milliseconds to see the dimming effect    
    delay(30); 
    break;  // End init state
  case S_ONLINE: 
    {  // Begin online state
      playcomplete("Online.wav");  //play the J.A.R.V.I.S. "Online and Ready" sound effect
      delay(500);
      state = S_IDLE;
      break;  // End online state 
    case S_IDLE:   // Begin idle state
      if (analogRead(TiltSensor) < PowerUpAngle) {
        Serial.print("Powering Up");
        Serial.println();
        state = S_POWERUP;
      }
      else{
        Serial.print(Angle + analogRead(TiltSensor));
        Serial.println();
        delay(200);
      }
    }
    break;  // End idle state    
  case S_POWERUP:    // Begin powerup state
    playfile("PWRUP1.WAV");
    //fade up the LED
    brightness = idlebrightness;  // set the initial fade brightness
    currTime = millis();  // set the current time
    prevTime = currTime;
    timeDivision = POWERUP_SFX_LENGTH/(powerupbrightness-idlebrightness);  //clip length in milliseconds divided by the target brightness
    Serial.print(timeDivision);
    while (wave.isplaying)
    {
      // fade in from min to max over length of clip:
      currTime = millis();
      if(currTime-prevTime >= timeDivision)
      {
        brightness +=1;
        Serial.print(BVal + brightness);
        Serial.println();
        // update glove LEDs
        if(brightness <= powerupbrightness)
          analogWrite(GloveLED, brightness);    
        prevTime = currTime;
      }
    }
    // Move to firing state    
    Serial.print("Powered Up and waiting for action");
    Serial.println();
    state = S_FIRE;
    break;  // End powerup state    
  case S_FIRE:     // Begin fire state
        // Interupt powerup if hand lowered
        if (analogRead(TiltSensor) > PowerUpAngle) {
          Serial.print("Whoops");
          Serial.println();
          wave.stop();
          delay(1000);
          state = S_POWERDN;
        }
        if (analogRead(TiltSensor) < FireAngle) {
          Serial.print("Firing");
          Serial.println();
          brightness = maxbrightness;
          analogWrite(GloveLED, brightness);
          playcomplete("FIRE1.WAV");
          analogWrite(GloveLED, powerupbrightness); // Reduce brightness after firing
        }
    break;  // End fire state    
  case S_POWERDN: 
    {  // Begin powerdn state
      Serial.print("Powering Down");
      Serial.println();
      delay(500);
      playfile("PWRDOWN1.WAV");
      brightness = powerupbrightness;  // set the initial fade brightness
      currTime = millis();  // set the current time
      prevTime = currTime;
      timeDivision = POWERDWN_SFX_LENGTH/(powerupbrightness-idlebrightness);  //clip length in milliseconds divided by the target brightness
        while (wave.isplaying)
      {
        // fade in from min to max over length of clip:
        currTime = millis();
        if(currTime-prevTime >= timeDivision)
        {
          brightness -=1;
          Serial.print(BVal + brightness);
          Serial.println();
          // update glove LEDs
          if(brightness > idlebrightness)
            analogWrite(GloveLED, brightness);    
          prevTime = currTime;
          // Interupt powerdn if hand raised
          //if (analogRead(TiltSensor) < GloveAngle) {
          //  Serial.print("Firing Again");
          //  wave.stop();
          //  state = S_FIRE;
          //}   
        }
      }
      // Move back to idle state
      Serial.print("Powered down");
      Serial.println();
      state = S_IDLE;  
    }    
    break;  // End powerdn state    
  }   
}
//----------------------------------------------------------------------------
//
/// sdErrorCheck
///
/// @desc
//----------------------------------------------------------------------------
void sdErrorCheck(void)
{
  if (!card.errorCode()) return;
  putstring("\n\rSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  putstring(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}
//----------------------------------------------------------------------------
//
/// playcomplete
///
/// @desc Plays a full file from beginning to end with no pause.
///
/// @param name
//----------------------------------------------------------------------------
void playcomplete(char *name)
{
  // call our helper to find and play this name
  playfile(name);
  while (wave.isplaying)
  {
  }
  // now its done playing
}
//----------------------------------------------------------------------------
//
/// playfile
///
/// @desc
///
/// @param name
//----------------------------------------------------------------------------
void playfile(char *name)
{
  // see if the wave object is currently doing something
  if (wave.isplaying) {// already playing something, so stop it!
    wave.stop(); // stop it
  }
  // look in the root directory and open the file
  if (!f.open(root, name)) {
    putstring("Couldn't open file ");
    Serial.print(name);
    return;
  }
  // OK read the file and turn it into a wave object
  if (!wave.create(f)) {
    putstring_nl("Not a valid WAV");
    return;
  }
  // ok time to play! start playback
  putstring("Playing ");
  Serial.print(name);
  wave.play();
}
//***************************************************************************
 
Re: Roomiest Iron Man

Finally making progress with the build. One leg is complete, the Cod is done, one bicep is mostly done (awaiting elbow) and I just did a hip pod, which I'm quite pleased with.

uploadfromtaptalk1403393596780.jpg

Am definitely getting faster with the foamboard, but with three weeks left, I'm getting pretty worried.

Also, although the Cod fits, I can't pull it over my bottom. If I cut one side, I can get in it , and feel quite comfy, but I have no idea how to accomplish that once it's fibreglassed and ridgid. Has anyone experienced similar problems with the Cod and found a solution?

Sent from my HTC One using Tapatalk
 
Re: Roomiest Iron Man

Stripped down an old tft to nab the diffuser.

uploadfromtaptalk1403735396859.jpg

Initial testing is pretty good. Will post pics once I''ve figured it out.

Sent from my HTC One using Tapatalk
 
Last edited:
This thread is more than 7 years old.

Your message may be considered spam for the following reasons:

  1. This thread hasn't been active in some time. A new post in this thread might not contribute constructively to this discussion after so long.
If you wish to reply despite these issues, check the box below before replying.
Be aware that malicious compliance may result in more severe penalties.
Back
Top