Barqunics
Published © GPL3+

Making a Real Den Den Mushi (One Piece)

A real-life One Piece Den Den Mushi speaker whose mouth moves automatically in sync with any sound it plays.

IntermediateShowcase (no instructions)15 hours16
Making a Real Den Den Mushi (One Piece)

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1

Story

Read more

Schematics

Schematic

Code

Code

Arduino
#include <Servo.h>

Servo servo1;
Servo servo2;

const int micPin = A1;

int baseLower = 70;
int baseUpper = 90;
int maxOpen = 27;

int openSmooth = 0;

unsigned long lastPulse = 0;
bool forceClose = false;

void setup() {
  Serial.begin(9600);
  servo1.attach(9);
  servo2.attach(10);

  servo1.write(baseLower);
  servo2.write(baseUpper);
}

void loop() {

  int signalMax = 0;
  int signalMin = 1023;

  unsigned long startTime = millis();

  while (millis() - startTime < 25) {
    int sample = analogRead(micPin);

    if (sample > signalMax) signalMax = sample;
    if (sample < signalMin) signalMin = sample;
  }

  int amplitude = signalMax - signalMin;
  Serial.println(amplitude);

  int target = 0;

  if (amplitude > 320) {  
    target = map(amplitude, 320, 900, 0, maxOpen);
    target = constrain(target, 0, maxOpen);
  }

  // ===== PULSE MOUTH =====
  if (millis() - lastPulse > 180) {  
    forceClose = !forceClose;
    lastPulse = millis();
  }

  if (forceClose) {
    target = 0;  // paksa tutup sebentar
  }

  // smoothing
  openSmooth = openSmooth * 0.7 + target * 0.3;

  servo1.write(baseLower - openSmooth);
  servo2.write(baseUpper + openSmooth);

  delay(50);
}

Credits

Barqunics
7 projects • 75 followers
Hello, My name is Ikhsan

Comments