UselessOctopusBox

In dieser erweiterten Useless Box wohnt kein gewöhnlicher Mechanismus, sondern ein kleiner Octopus, der mit seinen vielen Armen für Chaos sorgt. Statt nur einen Schalter wieder umzulegen, wie man es von der klassischen Version kennt, warten hier gleich fünf Schalter darauf, von Octopus mit den unterschiedlichsten Bewegungen und Animationen wieder deaktiviert zu werden. 🐙✨
Die Idee stammt von einem inspirierenden Video – und hat sofort nach einem eigenen Nachbau gerufen.

Die Stückliste (tbd):

  • Arduino Nano V3.0
  • Nano Development Shield
  • 5 Schalter
  • 6 mini servos
  • 5V Akku/Powerbank oder Netzteil (2A)

CAD Design

Ich verwende die Software Fusion für das Design. Je ein Schalter und ein Servo bilden eine Baugruppe, die später um den Deckelmechanismus angeordnet werden. Das Ganze wird durch den Plüschoktopus verdeckt.

Der Schaltplan

Durch das Development Board ist keine Platine nötig. Alle Komponenten können hier problemlos angeschlossen werden.

Beispiel-Zuordnung:

GerätPin am NanoHinweis
Servo 1D2PWM nicht nötig, Servo-Lib geht auf allen Pins
Servo 2D3
Servo 3D4
Servo 4D5
Servo 5D6
Servo 6D7
Schalter 1D8mit Pullup (INPUT_PULLUP)
Schalter 2D9mit Pullup
Schalter 3D10mit Pullup
Schalter 4D11mit Pullup
Schalter 5D12mit Pullup

👉 Damit bleiben noch D13, A0–A7 frei für Erweiterungen (z. B. LEDs).
👉Durch die internen Pullups, braucht man keine externen Widerstände bei den Schaltern (einfach Schalter nach GND schalten).

(tbd)

Die Software Arduino

Ich verwende die Arduino IDE und dementsprechend auch die Sprache. Hier ein erstes Beispiel für eine Baugruppe bestehend aus einem Schalter und einem Servo. Nicht getestet, die Servo Positionen müssen auf jeden Fall angepasst werden. (Tbd)

// ======================================
// UselessOctiTest - Version 0.1
// Features:
// - 1 Schalter & 1 Servo
// - 1 Box-Servo
// ======================================

#include <Servo.h>

// Pins
#define SERVO_PIN      2
#define BUTTON_PIN     A0
#define BOX_SERVO_PIN  9

Servo servo1;
Servo boxServo;

// Servo-Positionen
const int CLOSE_POS  = 0;
const int MIDDLE_POS = 90;
const int OPEN_POS   = 180;

// Zustände
int currentServoPos = CLOSE_POS;
bool buttonState = false;
bool lastButtonState = false;
bool boxOpen = false;

// Servo Position setzen
void setServoPosition(int pos) {
  currentServoPos = pos;
  servo1.write(pos);
}

// Bewegungsmuster
void runMotionPattern() {
  int pattern = random(3);
  switch (pattern) {
    case 0:
      setServoPosition(OPEN_POS); delay(300);
      setServoPosition(CLOSE_POS);
      break;
    case 1:
      setServoPosition(MIDDLE_POS); delay(200);
      setServoPosition(OPEN_POS);   delay(200);
      setServoPosition(CLOSE_POS);
      break;
    case 2:
      setServoPosition(OPEN_POS);   delay(100);
      setServoPosition(MIDDLE_POS); delay(100);
      setServoPosition(CLOSE_POS);
      break;
  }
}

// Box steuern
void setBoxOpen(bool open) {
  boxOpen = open;
  boxServo.write(open ? 90 : 0); // 90=open, 0=closed
}

void setup() {
  Serial.begin(9600);

  pinMode(BUTTON_PIN, INPUT_PULLUP);

  servo1.attach(SERVO_PIN);
  setServoPosition(CLOSE_POS);

  boxServo.attach(BOX_SERVO_PIN);
  setBoxOpen(false);
}

void loop() {
  bool anyPressed = false;

  bool currentState = (digitalRead(BUTTON_PIN) == LOW); // LOW = ON

  // Flankenwechsel
  if (currentState != lastButtonState) {
    lastButtonState = currentState;
  }

  if (currentState) anyPressed = true;

  // Button gedrückt → Aktion
  if (currentState && !buttonState) {
    buttonState = true;
    if (!boxOpen) {
      setBoxOpen(true);
      delay(500);
    }
    runMotionPattern();
  }

  if (!currentState && buttonState) {
    buttonState = false;
  }

  // Box schließen wenn Servo wieder zu
  if (!anyPressed && boxOpen) {
    if (currentServoPos == CLOSE_POS) {
      setBoxOpen(false);
    }
  }

  delay(50);
}

Bilder

Hier ein paar Bilder meiner Testkomponente. Die Servohalterung ist noch recht instabil und muss verstärkt werden. Der gedruckte Zahnkranz am Finger funktioniert nicht zuverlässig – selbst mit einer 0,2er Düse und der Arachne-Wandberechnung wird er nicht sauber gedruckt. Daher habe ich eine zweite Version erstellt, die stattdessen ein originales Servohorn verwendet.

Ja, der Plüschoktopus hat schon seine Finger verloren. 😵‍💫😫

Ein paar Wochen später ist der erste Druckversuch gescheitert. Ich habe keine Toleranzen eingebaut, sodass die Servos und Schalter nicht gepasst haben. Nach einigen Drücken der Kanten in Fusion läuft der nächste Versuch.

Nach oben scrollen