close-circle
Close
0%
0%

Arduino Beatdet Bidet

Select a Jam to Clean That Ham

Similar projects worth following
close

This 4 channel Arduino Beatdet (bidet) rocks your spots off. Select a beat on your phone and the Beatdet will jam out while it cleans you out. The Pirate Radio Bellagio of bidets. Live streaming music. Beatdet Pro allows you to choose any track on your phone to wipe with.

Tutorials on all of the components combined in to this project are identified in the Project Logs below...heh, "logs below"

It should be noted that this, as are most of our projects, a prototype, and surely demands several refinements; for example, superior nozzles for a more effective spray. Unfortunately was limited to use of a defective Delta Orion printer which made a finer nozzle print ineffective.

Butt seriously, "logs"...

Note - that uh, HaD Prize entry was by accident - I had intended to submit this for a Nobel - instead. The issue has since been corrected. C'mon Peace Prize!

How so, you beckon?! 84 million rolls of toilet paper are produced every day - you are effectively wiping your hind quarters as alternative to breathing the oxygen trees reciprocate. I am imploring you to saving humanity and the planet by putting terrible music to good use. Peace prize!

  • 2 × Arduino Uno
  • 1 × wtv020sd16p Music Module
  • 1 × MSGEQ7
  • 4 × 2n2222
  • 5 × Diode

View all 24 components

  • Also...

    Vije10/11/2016 at 13:36 0 comments

    I failed to mention that there is a refilling solenoid valve on the read of the container that is attached to a float switch in side. The valve is then attached to another valve added on to the existing valve attached to the toilet. This valve is valve attached valve attached valve to valve attached valve. Valve.

  • Who What When Where and Some Times Why

    Vije10/08/2016 at 01:54 0 comments

    Tutorial(s)

    DC Motor Control

    https://learn.adafruit.com/adafruit-arduino-lesson-13-dc-motors/breadboard-layout

    MSGEQ7

    http://nuewire.com/info-archive/msgeq7-by-j-skoba/

    BlueTooth

    http://www.allaboutcircuits.com/projects/control-an-arduino-using-your-phone/

    WTV020SD

    http://www.arduinoecia.com.br/2015/06/modulo-mp3-wtv020-sd-arduino.html

    http://electronics.stackexchange.com/questions/96535/playing-sounds-using-wtv020sd-mini

    MIT App Inventor

    http://ai2.appinventor.mit.edu/

    // Arduino Beatdet Bidet | TVMiller
    // MSGEQ7 Script | J Skoba
    // WTV020-SD-16P | Diego J. Arevalo
    
    #include <Servo.h>
    #include <Wtv020sd16p.h>
    
    // Servo
    Servo sprayarm;
    int pos = 45;
    
    // Music Player
    int resetPin = 14;
    int clockPin = 15;
    int dataPin = 16;
    int busyPin = 17;
    Wtv020sd16p wtv020sd16p(resetPin, clockPin, dataPin, busyPin);
    
    // EQ Pins
    int analogPin = A4;
    int strobePin = 2;
    int resetPin = 3;
    int spectrumValue[7];
    
    // LED Pins
    int one = 8;
    int two = 9;
    int thr = 10;
    int fou = 11;
    
    // LED Variables
    int ledone = 0;
    int ledtwo = 0;
    int ledthr = 0;
    int ledfou = 0;
    
    // Pump Pins
    int pumpo = 4;
    int pumpt = 5;
    int pumph = 6;
    int pumpf = 7;
    
    // Pump Variables
    int pmpone = 0;
    int pmptwo = 0;
    int pmpthr = 0;
    int pmpfou = 0;
    
    // BlueTeethes
    char inbound = 0;
    
    void setup()
    {
      Serial.begin(9600);
    
      wtv020sd16p.reset();
    
      sprayarm.attach(12);
      sprayarm.write(pos);
    
      pinMode(analogPin, INPUT);
      pinMode(strobePin, OUTPUT);
      pinMode(resetPin, OUTPUT);
      analogReference(DEFAULT);
    
      pinMode(one, OUTPUT);
      pinMode(two, OUTPUT);
      pinMode(thr, OUTPUT);
      pinMode(fou, OUTPUT);
    
      pinMode(pumpo, OUTPUT);
      pinMode(pumpt, OUTPUT);
      pinMode(pumph, OUTPUT);
      pinMode(pumpf, OUTPUT);
    
      digitalWrite(resetPin, LOW);
      digitalWrite(strobePin, HIGH);
    }
    
    void loop()
    {
    
      // Clear Audio
      wtv020sd16p.stopVoice();
    
      // Wait for Track
      if (Serial.available() > 0)
      {
        // Which Track Number
        inbound = Serial.read();
        if (inbound == '1') {
          // Track 1
          armout();
          wtv020sd16p.playVoice(0);
          spray();
          wtv020sd16p.stopVoice();
          armin();
        }
        else if (inbound == '2') {
          // Track 2
          armout();
          wtv020sd16p.playVoice(1);
          spray();
          wtv020sd16p.stopVoice();
          armin();
        }
        else if (inbound == '3') {
          // Track 3
          armout();
          wtv020sd16p.playVoice(2);
          spray();
          wtv020sd16p.stopVoice();
          armin();
        }
      }
    
    }
    
    // Arm Out
    void armout() {
      for (pos = 45; pos <= 97; pos += 1) {
        sprayarm.write(pos);
        delay(15);
      }
    }
    
    // Arm In
    void armin() {
      for (pos = 97; pos >= 45; pos -= 1) {
        sprayarm.write(pos);
        delay(15);
      }
    }
    
    void spray() {
      // Loop 15 Seconds
      for (int t = 0; t < 60000, t++) {
    
        // EQ Reset
        digitalWrite(resetPin, HIGH);
        digitalWrite(resetPin, LOW);
    
        // EQ Store Values and Print
        for (int i = 0; i < 7; i++)
        {
          digitalWrite(strobePin, LOW);
          delayMicroseconds(30);
          spectrumValue[i] = analogRead(analogPin);
          //    Serial.print(" ");
          //    Serial.print(spectrumValue[i]);
          digitalWrite(strobePin, HIGH);
        }
        //  Serial.println();
    
        // Map Audio to LED and Pumps
        ledone = spectrumValue[0];
        // Constrain Required to Limit Results
        ledone = constrain(ledone, 400, 600);
        // Lower Power to Lower Elevation
        ledone = map(ledone, 400, 600, 0, 190);
        analogWrite(fou, ledone); // 0
        analogWrite(pumpf, ledone); // 0
        //  Serial.print(ledone);
        //  Serial.print(" ");
    
        ledtwo = spectrumValue[1];
        ledtwo = constrain(ledtwo, 550, 600);
        ledtwo = map(ledtwo, 550, 600, 0, 190);
        analogWrite(one, ledtwo); // 1
        analogWrite(pumpo, ledtwo); // 1
        //  Serial.print(ledtwo);
        //  Serial.print(" ");
    
        ledthr = spectrumValue[4];
        ledthr = constrain(ledthr, 130, 160);
        ledthr = map(ledthr, 130, 160, 0, 190);
        analogWrite(two, ledthr); // 2
        analogWrite(pumpt, ledthr); // 2
        //  Serial.print(ledthr);
        //  Serial.print(" ");
    
        ledfou = spectrumValue[6];
        ledfou = constrain(ledfou, 110, 150);
        ledfou = map(ledfou, 110, 150, 0, 190);
        analogWrite(thr, ledfou); // 4
        analogWrite(pumph, ledfou); // 4
        //  Serial.print(ledfou);
        //  Serial.println();
    
      }
    }
    

  • Obscene

    Vije10/08/2016 at 00:26 0 comments

    Often reminded that I build for the efficacy of building's sake.

  • In The Eye of The Solder Holder

    Vije10/06/2016 at 18:48 0 comments

    Beauty if only skin deep...but in the case of every thing I end up making, the skin layer is ugly too. Looked prettier in my head...worried about what's in my head.

  • Unnecessary

    Vije10/04/2016 at 16:23 0 comments

    Now addicted to neopixels because, jingle those keys in my face...sigh.

View all 5 project logs

  • 1
    Step 1

View all instructions

Enjoy this project?

Share

Discussions

wickedcody123456 wrote 09/26/2016 at 12:07 point

water cooling?

  Are you sure? yes | no

Vije wrote 09/26/2016 at 17:43 point

In short time you will see why technically yes it is water cooling butt no, not how you might think.

  Are you sure? yes | no

Vije wrote 10/10/2016 at 18:06 point

Yes. 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates