Interactive Ironman Repulsor

by Markus Opitz in Circuits > Wearables

78 Views, 0 Favorites, 0 Comments

Interactive Ironman Repulsor

IronManGloveTitle2.jpg
Cast2.jpg

Of all the superheroes, Antman and Ironman are the best. They are above all normal people without superhuman powers who have earned their hero status through their gadgets and skill.

For makers like me, Ironman is of course a role model. Full-body costumes are not my thing. But an interactive Ironman hand for the carnival? I can manage that.

As a carnival “costume” I wore a dark jacket, the power was supplied via a power bank and a 1.5 m. long USB cable through the sleeve.


Based on an older project of mine, I modernized the light (and sound) effects of the Iron Man glove. The wiring is very convenient, a charging unit and sensors no longer need to be installed separately. They are already included in the Xiao nRF, which makes the whole thing pleasantly small. I only have a XIAO nRF and an LED ring here, but even a connected battery would make the USB cable in the sleeve unnecessary.

I got the 3D print file from Thingiverse, mirrored it for the left hand and enlarged it a little.

Supplies

Supplies.JPG

basic:

  1. 3D printed parts on thingiverse.com
  2. XIAO nRF52840 sense
  3. Neopixel LED ring (12)
  4. power bank & long USB cable
  5. black glove

optional:

  1. small LiPo battery
  2. DFPlayer
  3. LiPo battery
  4. small speaker. or. piezo plate
  5. switch

3D Printed Parts

3D_parts.jpg

The first thing I did was download STL files of the glove. Thanks to daDave. I inverted the parts*, I'm right-handed and wanted the left hand to be the Ironman hand. My redone parts can be found here.

After a first test print I realized that the parts are too small for me. I set the slicer program to 110% and it was right now. I also wanted a real glove to fit between my hand and the parts.


*Originally by justinthomaz on thingiverse: https://www.thingiverse.com/thing:4910992

The LED Ring

circuit_new.jpg
circuit_old.jpg

I still had a Neopixel LED ring (12) in the drawer for the lighting. This just had to be fitted into the palm of my hand. I soldered the required three longer cables (+/GND/Data) to the ring. Later, I prefer white light for operation, you can also add a little more blue, it also looks cool.

The ESP NRF Microcontroller

XIAOnRF.jpg

The microcontroller is an XIAO nRF52840 sense. This is very practical, as IMU sensors are already integrated. In the previous project Repulsor-Glove it was still a relatively large setup.

The Software

The software is no big deal. The IMU sensor is read out and the LEDs react accordingly. With regard to the installation position of the ESP, I use the X-coordinate. If the hand is raised above a certain level (trigger = ...), the LED ring lights up.


There are four sub-programs for the LED ring: fade in, fade out, all lights on, lights off.

// XIAO nRF sense
// Iron Man Glove
// Markus opitz 2025, instructables.com
// ====================================

#include "LSM6DS3.h"
#include "Wire.h"

//Create a instance of class LSM6DS3
LSM6DS3 myIMU(I2C_MODE, 0x6A); //I2C device address 0x6A

int flag = 0;
float value;
int newValue;
int trigger = 100; //value for beginning light (and sound)

// LED ring
#include <Adafruit_NeoPixel.h>
#define PIN D0 // or D2
#define NUMPIXELS 12 // How many NeoPixels are attached to the Arduino?
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int x,y,z;

//DF Player //optional
#include <SoftwareSerial.h>
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(D8,D9); // or 13, 14
DFRobotDFPlayerMini myDFPlayer;




void setup() {
Serial.begin(115200);
pinMode(LED_BLUE, OUTPUT); // LED init
digitalWrite(LED_BLUE, LOW); //blue LED on

//IMU sensor configuration
if (myIMU.begin() != 0) {
Serial.println("Device error");
} else {
Serial.println("Device OK!");
}

//mySoftwareSerial.begin(115200); //DF Player
delay(10);

// DF Player init (optional!)
Serial.println();
Serial.println(F("Initializing DFPlayer ... (may take 3-5 seconds)"));

if (!myDFPlayer.begin(mySoftwareSerial)) { //Use SoftwareSerial to communicate with player.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(25); //Set volume value from 0 to 30
Serial.println(F("df player ready"));


pixels.begin(); //LED

Serial.println("setup done");
}


void loop() { // checking the IMU value (here:X) and deciding the action
// fade in, fade out, hold light, light off
getValue();
Serial.println(newValue); // Printing Sensor value on Serial monitor

if ((newValue > trigger) && (flag == 0)) { // start LED light
//myDFPlayer.play(1);
lightfadeon();
flag = 1;
}
if ((newValue > trigger) && (flag == 1)) { // hold LED light
lighton();
}
if ((newValue < trigger) && (flag == 1)) { // fade out light
//myDFPlayer.play(2);
lightfadeoff();
flag = 0;
}
if ((newValue < trigger) && (flag == 0)) { // off
lightoff();
flag = 0;
}
delay(5);

}


void getValue() {

digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_BLUE, HIGH); //blue LED on
digitalWrite(LED_GREEN, LOW); //green LED on
value = myIMU.readFloatAccelX(); delay(10); //according to installation use X, Y or Z

value = value * 100;
newValue = map(value, -100, 100, 180,0);
Serial.println(newValue);

digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_BLUE, LOW);
}


void lightfadeon() { //repulsor fade on

//Serial.println(" + + + + + ON + + + + + +");
for(z=0; z<256; z=z+5)
{
for(int p=0; p<12; p++) {
x = z; y = z;
if (x>225) x = 225; if (y>225) y = 225;
pixels.setPixelColor(p, pixels.Color(x,y,z));
pixels.show();
}
//Serial.print(x);Serial.print(", ");Serial.print(y);Serial.print(", ");Serial.println(z);
}
}

void lightfadeoff() { //repulsor fade off

//Serial.println(" - - - - OFF - - - - - ");
for(z=255; z>=0; z=z-5)
{
for(int p=0; p<12; p++) {
x = z; y = z;
pixels.setPixelColor(p, pixels.Color(x,y,z));
pixels.show();
}
//Serial.print(x);Serial.print(", ");Serial.print(y);Serial.print(", ");Serial.println(z);
}
}

void lighton() { //repulsor on
for(int p=0; p<12; p++) {
pixels.setPixelColor(p, pixels.Color(235,235,255));
pixels.show();
}
}

void lightoff() { //repulsor off
for(int p=0; p<12; p++) {
pixels.setPixelColor(p, pixels.Color(0,0,0));
pixels.show();
}
}

Attention: Depending on the installation direction of the XIAO nRF, the accelerator sensor must be adjusted to x, y or z in the software!

Downloads

Assembly

Glove-inside.jpg
Glove-inside1.jpg

A rubberized black work glove is used as the base. The plastic parts are pulled over the glove one after the other. If everything fits as desired, you should fix the under-glove and parts with an elastic adhesive. It is important to use an elastic glue so that everything remains reasonably flexible. The fingertips in particular should be glued on, otherwise the other parts will slip. The Repulsor hand can be carefully put on and taken off through the glove.

Then the costume as Tony Stark with repulsor hand is ready.


If you like, you can add the appropriate sound. Instructions for the DfRobot mp3 player can be found in the previous project (...)

Installing the microcontroler in the glove can be somewhat tricky and individual. The USB-C socket or the USB cable must be accessible for reprogramming and battery charging.

Attention: Depending on the installation direction of the XIAO nRF, the accelerator sensor must be adjusted to x, y or z in the software!


So, then just plug in the USB and let's go. Raise your hand and make a light!

Optional: Sound

IronManGlove #shorts #fandom #maker

The sound function has not been implemented here. But my old project will help you.

The sound files must be saved as mp3 on the SD card. They do not need a specific name, the software plays the files in order.