Need help w/ MK5 Iron Man helmet model by Boxandloop

Hey, I need help with the Iron Man helmet model by Boxandloop code. Some of the motors are not working like they should and going in the opposite direction. It is specifically the Brow_side and Nose_side code. Along with that the eyes are lighting up when its upen and not when its closed like it should. I don't really know what Im doing, can someone please help

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

// Adjust for global change in small sg90 servo movement //
#define SERVOMIN 150
#define SERVOMAX 450
/////////////////////////////////////////////////////
#define SERVO_FREQ 50

uint8_t servonum = 0;
int buttonPin = 2;
int ledPin = 6;
int buttonState = 0;
int globalPos = 1;
unsigned long previousMillis = 0;
unsigned long interval = 5000;
int a = 60;

int animDelay = 1;
int mainServoL = 0;
int mainServoR = 1;
int servoBrowCenter = 4;

// Adjust below numbers for individual servos
int mainServoClosed = 750;
int mainServoOpen = 1950;
int servoBrowCenterOpen = 40;
int servoBrowCenterClosed = 120;
int servoCheeksOpen = 20;
int servoCheeksClosed = 90;
int servoNoseSideOpen = 10;
int servoNoseSideClosed = 86;
int servoBrowSideOpen = 30;
int servoBrowSideClosed = 90;
int servoNoseCenterOpen = 1;
int servoNoseCenterClosed = 110;


void setup() {
  Serial.begin(9600);
  Serial.println("Boot Up");
  pwm.begin();
  pwm.setOscillatorFrequency(27000000);
  pwm.setPWMFreq(SERVO_FREQ);
  pinMode(buttonPin, INPUT_PULLUP);
  delay(50);
  pwm.sleep();
}

int getAngleToPulse(int angle) {
  return map(angle, 0, 180, SERVOMIN, SERVOMAX);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == 0) {
    Serial.println("Wake up");
    pwm.wakeup();

    if (globalPos > 0) {
      Serial.println("Opening");
      // CHEEKS
      for (uint16_t pulselen = servoCheeksClosed; pulselen >= servoCheeksOpen; pulselen--) {
        pwm.setPWM(9, 0, getAngleToPulse(servoCheeksClosed + servoCheeksOpen - pulselen));
        pwm.setPWM(8, 0, getAngleToPulse(pulselen));
      }
      delay(animDelay);
      Serial.println("1. Cheeks Open");
      // NOSE Side
      for (uint16_t pulselen = servoNoseSideClosed; pulselen >= servoNoseSideOpen; pulselen--) {
        pwm.setPWM(6, 0, getAngleToPulse(servoNoseSideClosed + servoNoseSideOpen - pulselen));
        pwm.setPWM(7, 0, getAngleToPulse(pulselen));
      }
      delay(animDelay);
      Serial.println("2. Nose Side Open");
      //BROW Center
      for (uint16_t pulselen = servoBrowCenterClosed; pulselen >= servoBrowCenterOpen; pulselen--) {
        pwm.setPWM(servoBrowCenter, 0, getAngleToPulse(pulselen));
      }
      delay(animDelay);
      Serial.println("3. Brow Center Open");
      // BROW Side
      for (uint16_t pulselen = servoBrowSideOpen; pulselen <= servoBrowSideClosed; pulselen++) {
        pwm.setPWM(2, 0, getAngleToPulse(pulselen));
        pwm.setPWM(3, 0, getAngleToPulse(servoBrowSideOpen + servoBrowSideClosed - pulselen));
      }
      delay(animDelay);
      Serial.println("4. Brow Side Open");
      // NOSE Center
      for (uint16_t pulselen = servoNoseCenterClosed; pulselen >= servoNoseCenterOpen; pulselen--) {
        pwm.setPWM(5, 0, getAngleToPulse(pulselen));
      }
      delay(animDelay);
      Serial.println("5. Nose Center Open");
      // EYES
      analogWrite(ledPin, 0); 
      // MAIN SERVOS
      for (uint16_t microsec = mainServoClosed; microsec < mainServoOpen; microsec +=5) {
        pwm.writeMicroseconds(mainServoL, microsec);
        pwm.writeMicroseconds(mainServoR, (mainServoOpen+mainServoClosed-microsec));
      }
      globalPos = 0;
      delay(animDelay);
      Serial.println("6. Main Open");
    } else {
      Serial.println("Closing");
      //MAIN SERVOS
      for (uint16_t microsec = mainServoOpen; microsec > mainServoClosed; microsec-=5) {
        pwm.writeMicroseconds(mainServoL, microsec);
        pwm.writeMicroseconds(mainServoR, (mainServoOpen+mainServoClosed-microsec));
      }
      delay(animDelay);
      //NOSE Center
      for (uint16_t pulselen = servoNoseCenterOpen; pulselen <= servoNoseCenterClosed; pulselen++) {
        pwm.setPWM(5, 0, getAngleToPulse(pulselen));
      }
      
      delay(animDelay);
      
      // BROW Side
      for (uint16_t pulselen = servoBrowSideClosed; pulselen >= servoBrowSideOpen; pulselen--) {
        pwm.setPWM(2, 0, getAngleToPulse(pulselen));
        pwm.setPWM(3, 0, getAngleToPulse(servoBrowSideOpen + servoBrowSideClosed - pulselen));
      }
      delay(animDelay);
      // BROW Center
      for (uint16_t pulselen = servoBrowCenterOpen; pulselen <= servoBrowCenterClosed; pulselen++) {
        pwm.setPWM(servoBrowCenter, 0, getAngleToPulse(pulselen));
      }
      delay(animDelay);
      // NOSE Side
      for (uint16_t pulselen = servoNoseSideOpen; pulselen <= servoNoseSideClosed; pulselen++) {
        pwm.setPWM(6, 0, getAngleToPulse(servoNoseSideClosed + servoNoseSideOpen - pulselen));
        pwm.setPWM(7, 0, getAngleToPulse(pulselen));
      }
      delay(animDelay);
      //CHEEKS
      for (uint16_t pulselen = servoCheeksOpen; pulselen <= servoCheeksClosed; pulselen++) {
        pwm.setPWM(9, 0, getAngleToPulse(servoCheeksClosed + servoCheeksOpen - pulselen));
        pwm.setPWM(8, 0, getAngleToPulse(pulselen));
      }
      delay(animDelay);
      //EYES
      analogWrite(ledPin, 255);
      globalPos = 1;
      delay(100);
      Serial.println("Sleep");
      pwm.sleep();
    }
    delay(500);
  }
  delay(10);
}

Was it ever working right?

No, It was never working right

Contact the seller and return it for a refund.

I can’t return or refund anything. This was a free project, the only problem is that the provided code isn’t working for the nose_side, brow_side, and eyes. I just don’t know what I have to do to fix it.

Well, time to get to work...

Did you do anything with the wires?

Do not try to make this sound trivial. "The only problem" is the code, means EVERYTHING is not working.

You need to Identify the devices and connections: MCU, motors, servos, modules, power... and make a drawing of how it is connected, pin for pin, then post that drawing (photo of a pencil/pen drawing is sufficient).

If you have the the original code, do you have the facilities to edit the code?

If you do not have the original code, and the MCU is Arduino, and you have a computer with the Arduino IDE, you can (with help?) write your own code.

[edit]
Is the MCU an ATtiny85?

int mainServoL = 0;
int mainServoR = 1;
int servoBrowCenter = 4;

I think you might have a helper file (something.h) that has keywords used in the sketch.

This (wokwi code) is a stab at your helmet. The original pins were not for Uno/Nano, so I made pins that work. I do not know if Servo.h can manage ten servos. I tried to make the angles correct. I guessed that NOSE and BROW have a Left, Center and Right. It might not be on-the-mark, but everything is adjustable.

sketch.ino for wokwi.com
#include <Servo.h>

Servo servoMainL;
Servo servoMainR;

Servo servoBrowC;
Servo servoBrowSL;
Servo servoBrowSR;

Servo servoCheekL;
Servo servoCheekR;

Servo servoNoseC;
Servo servoNoseSL;
Servo servoNoseSR;

#define SERVOMIN 150
#define SERVOMAX 450

int ledPin = 13;
int buttonPin = 2;
int buttonState = 0;

int globalPos = 1;
unsigned long previousMillis = 0;
int animDelay = 1;

int servoMainLeftPin = 3;
int servoMainRightPin = 4;
int servoMainClosed = 30;
int servoMainOpen = 150;

int servoBrowCenterPin = 5;
int servoBrowCenterOpen = 40;
int servoBrowCenterClosed = 120;

int servoBrowSideLeftPin = 6;
int servoBrowSideRightPin = 7;
int servoBrowSideOpen = 30;
int servoBrowSideClosed = 90;

int servoCheekLeftPin = 8;
int servoCheekRightPin = 9;
int servoCheeksOpen = 20;
int servoCheeksClosed = 90;

int servoNoseCenterPin = 10;
int servoNoseCenterOpen = 1;
int servoNoseCenterClosed = 110;

int servoNoseSideLeftPin = 11;
int servoNoseSideRightPin = 12;
int servoNoseSideOpen = 10;
int servoNoseSideClosed = 86;

void setup() {
  Serial.begin(9600);
  Serial.println("Boot Up");

  servoMainL.attach(servoMainLeftPin);
  servoMainR.attach(servoMainRightPin);

  servoBrowC.attach(servoBrowCenterPin);
  servoBrowSL.attach(servoBrowSideLeftPin);
  servoBrowSR.attach(servoBrowSideRightPin);

  servoCheekL.attach(servoCheekLeftPin);
  servoCheekR.attach(servoCheekRightPin);

  servoNoseC.attach(servoNoseCenterPin);
  servoNoseSL.attach(servoNoseSideLeftPin);
  servoNoseSR.attach(servoNoseSideRightPin);

  pinMode(buttonPin, INPUT_PULLUP);
  delay(50);
}

int getAngleToPulse(int angle) {
  return map(angle, 0, 180, SERVOMIN, SERVOMAX);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == 0) {
    Serial.println("Wake up");

    if (globalPos > 0) {
      Serial.println("Opening");
      // CHEEKS
      for (uint16_t pulselen = servoCheeksClosed; pulselen >= servoCheeksOpen; pulselen--) {
        servoCheekL.write(servoCheeksClosed + servoCheeksOpen - pulselen);
        servoCheekR.write(pulselen);
      }
      delay(animDelay);
      Serial.println("1. Cheeks Open");

      // NOSE Side
      for (uint16_t pulselen = servoNoseSideClosed; pulselen >= servoNoseSideOpen; pulselen--) {
        servoNoseSL.write(servoNoseSideClosed + servoNoseSideOpen - pulselen);
        servoNoseSR.write(pulselen);
      }
      delay(animDelay);
      Serial.println("2. Nose Side Open");

      //BROW Center
      for (uint16_t pulselen = servoBrowCenterClosed; pulselen >= servoBrowCenterOpen; pulselen--) {
        servoBrowC.write(pulselen);
      }
      delay(animDelay);
      Serial.println("3. Brow Center Open");

      // BROW Side
      for (uint16_t pulselen = servoBrowSideOpen; pulselen <= servoBrowSideClosed; pulselen++) {
        servoBrowSL.write(pulselen);
        servoBrowSR.write(servoBrowSideOpen + servoBrowSideClosed - pulselen);
      }
      delay(animDelay);
      Serial.println("4. Brow Side Open");

      // NOSE Center
      for (uint16_t pulselen = servoNoseCenterClosed; pulselen >= servoNoseCenterOpen; pulselen--) {
        servoNoseC.write(pulselen);
      }
      delay(animDelay);
      Serial.println("5. Nose Center Open");

      // EYES
      analogWrite(ledPin, 255); // ON

      // MAIN SERVOS
      for (uint16_t microsec = servoMainClosed; microsec < servoMainOpen; microsec += 5) {
        servoMainL.write(microsec);
        servoMainR.write(servoMainOpen + servoMainClosed - microsec);
      }

      globalPos = 0;
      delay(animDelay);
      Serial.println("6. Main Open");
    } else {
      Serial.println("Closing");
      //MAIN SERVOS
      for (uint16_t microsec = servoMainOpen; microsec > servoMainClosed; microsec -= 5) {
        servoMainL.write(microsec);
        servoMainR.write(servoMainOpen + servoMainClosed - microsec);
      }
      delay(animDelay);
      //NOSE Center
      for (uint16_t pulselen = servoNoseCenterOpen; pulselen <= servoNoseCenterClosed; pulselen++) {
        servoNoseC.write(pulselen);
      }

      delay(animDelay);

      // BROW Side
      for (uint16_t pulselen = servoBrowSideClosed; pulselen >= servoBrowSideOpen; pulselen--) {
        servoBrowSL.write(pulselen);
        servoBrowSR.write(servoBrowSideOpen + servoBrowSideClosed - pulselen);
      }
      delay(animDelay);

      // BROW Center
      for (uint16_t pulselen = servoBrowCenterOpen; pulselen <= servoBrowCenterClosed; pulselen++) {
        servoBrowC.write(pulselen);
      }
      delay(animDelay);

      // NOSE Side
      for (uint16_t pulselen = servoNoseSideOpen; pulselen <= servoNoseSideClosed; pulselen++) {
        servoNoseSL.write(servoNoseSideClosed + servoNoseSideOpen - pulselen);
        servoNoseSR.write(pulselen);
      }
      delay(animDelay);

      //CHEEKS
      for (uint16_t pulselen = servoCheeksOpen; pulselen <= servoCheeksClosed; pulselen++) {
        servoCheekL.write(servoCheeksClosed + servoCheeksOpen - pulselen);
        servoCheekR.write(pulselen);
      }
      delay(animDelay);
      //EYES
      analogWrite(ledPin, 255);
      globalPos = 1;
      delay(100);
      Serial.println("Sleep");
    }
    delay(500);
  }
  delay(10);
}
diagram.json for wokwi.com
{
  "version": 1,
  "author": "Anonymous maker",
  "editor": "wokwi",
  "parts": [
    { "type": "wokwi-arduino-nano", "id": "nano", "top": 4.8, "left": -0.5, "attrs": {} },
    {
      "type": "wokwi-pushbutton",
      "id": "btn1",
      "top": -51.4,
      "left": 172.8,
      "attrs": { "color": "green" }
    },
    {
      "type": "wokwi-led",
      "id": "led1",
      "top": -87.6,
      "left": 189,
      "rotate": 90,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-servo",
      "id": "servo1",
      "top": -358,
      "left": -179.6,
      "rotate": 180,
      "attrs": {}
    },
    { "type": "wokwi-servo", "id": "servo2", "top": -357.2, "left": 153.6, "attrs": {} },
    {
      "type": "wokwi-servo",
      "id": "servo3",
      "top": -310,
      "left": -179.6,
      "rotate": 180,
      "attrs": {}
    },
    { "type": "wokwi-servo", "id": "servo4", "top": -309.2, "left": 153.6, "attrs": {} },
    {
      "type": "wokwi-servo",
      "id": "servo5",
      "top": -214,
      "left": -179.6,
      "rotate": 180,
      "attrs": {}
    },
    { "type": "wokwi-servo", "id": "servo6", "top": -261.2, "left": 153.6, "attrs": {} },
    {
      "type": "wokwi-servo",
      "id": "servo7",
      "top": -262,
      "left": -179.6,
      "rotate": 180,
      "attrs": {}
    },
    { "type": "wokwi-servo", "id": "servo8", "top": -213.2, "left": 153.6, "attrs": {} },
    {
      "type": "wokwi-servo",
      "id": "servo9",
      "top": -166,
      "left": -179.6,
      "rotate": 180,
      "attrs": {}
    },
    { "type": "wokwi-servo", "id": "servo10", "top": -165.2, "left": 153.6, "attrs": {} }
  ],
  "connections": [
    [ "nano:GND.1", "btn1:2.l", "black", [ "v0" ] ],
    [ "nano:2", "btn1:1.l", "green", [ "v0" ] ],
    [ "nano:GND.1", "led1:C", "black", [ "v0" ] ],
    [ "nano:GND.1", "servo1:GND", "black", [ "v0" ] ],
    [ "nano:GND.1", "servo2:GND", "black", [ "v0" ] ],
    [ "nano:5V", "servo2:V+", "red", [ "v0" ] ],
    [ "nano:5V", "servo1:V+", "red", [ "v0" ] ],
    [ "nano:GND.1", "servo4:GND", "black", [ "v0" ] ],
    [ "nano:GND.1", "servo3:GND", "black", [ "v0" ] ],
    [ "nano:5V", "servo4:V+", "red", [ "v0" ] ],
    [ "nano:5V", "servo3:V+", "red", [ "v0" ] ],
    [ "nano:3", "servo8:PWM", "green", [ "v0" ] ],
    [ "nano:5", "servo6:PWM", "green", [ "v0" ] ],
    [ "nano:4", "servo5:PWM", "green", [ "v0" ] ],
    [ "nano:GND.1", "servo5:GND", "black", [ "v0" ] ],
    [ "nano:5V", "servo5:V+", "red", [ "v0" ] ],
    [ "nano:5V", "servo7:V+", "red", [ "v0" ] ],
    [ "nano:GND.1", "servo7:GND", "black", [ "v0" ] ],
    [ "nano:5V", "servo8:V+", "red", [ "v0" ] ],
    [ "nano:GND.1", "servo8:GND", "black", [ "v0" ] ],
    [ "nano:5V", "servo6:V+", "red", [ "v0" ] ],
    [ "nano:GND.1", "servo6:GND", "black", [ "v0" ] ],
    [ "nano:6", "servo7:PWM", "green", [ "v0" ] ],
    [ "nano:7", "servo4:PWM", "green", [ "v0" ] ],
    [ "nano:8", "servo3:PWM", "green", [ "v0" ] ],
    [ "nano:9", "servo2:PWM", "green", [ "v0" ] ],
    [ "nano:10", "servo1:PWM", "green", [ "v0" ] ],
    [ "nano:11", "servo9:PWM", "green", [ "v0" ] ],
    [ "nano:12", "servo10:PWM", "green", [ "v0" ] ],
    [ "nano:5V", "servo10:V+", "red", [ "v0" ] ],
    [ "nano:5V", "servo9:V+", "red", [ "v0" ] ],
    [ "nano:GND.1", "servo10:GND", "black", [ "v0" ] ],
    [ "nano:GND.1", "servo9:GND", "black", [ "v0" ] ],
    [ "nano:13", "led1:A", "green", [ "v0" ] ]
  ],
  "dependencies": {}
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.