Worst thing about teppanyaki in NY are the NYers who can not shut the hell up and eat. NODA in White Plains earns a 4 of 5 -- every thing was well done -- my only fickle scorn is not halving the shrimp and a soggy salad lettuce. #Assessment - 21:16:41 337 017 Miter
TVShow S02E13X56 Arduino Beatdet
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. Authentic streaming music. Beatdet Pro allows you to choose any track on your phone to wipe with.



Notable thanks to MakerBar in Hoboken, New Jersey

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.

Arduino Speaky
// 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 = A2;
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 < 5000000, t++) {

// EQ Reset
digitalWrite(resetPin, HIGH);
digitalWrite(resetPin, LOW);

// EQ Store Values and Print
for (int p = 0; p < 7; p++)
{
digitalWrite(strobePin, LOW);
delayMicroseconds(30);
spectrumValue[p] = analogRead(analogPin);
// Serial.print(" ");
// Serial.print(spectrumValue[p]);
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();

}
}

Archive
HackADay.io - Arduino Beatdet
DC Motor Control - https://learn.adafruit.com/adafruit-arduino-...motors/breadboard-layout
MSGEQ7 - http://nuewire.com/info-archive/msgeq7-by-j-skoba/
BlueTooth - http://www.allaboutcircuits.com/project ... our-phone/
WTV020SD Module - http://electronics.stackexchange.com/qu ... 020sd-mini
MIT App Inventor - http://ai2.appinventor.mit.edu/
tvmiller.com/index.php?entry=entry161010-01:miller.com/index.php?entry=entry161010-0131.ller.com/index.php?entry=entry161010-013116 287--1 OTC
MakerBar Sign
The while awaiting for the 3D printer to complete the 1 hour and 15 minute run on a series of minute nozzles for another developing project, I had decided in my final days with in the MakerBar space to create a much needed front door sign utilizing the dreaded LEDs I have come to both despise and support...because ooh and ahh. CNC MDF RGB OMG Sigh.



Featuring "I Have No Idea" by Suzy Sellout (Kathrine Becker)

Archive
HackADay.io - MakerBar Sign
tvmiller.com/index.php?entry=entry161007-18:miller.com/index.php?entry=entry161007-1841.ller.com/index.php?entry=entry161007-184140 287--1 OTC
MakerFaire MakerBar Arduino Candy Box
Last (last-last) minute build for the MakerBar booth at NYC MakerFaire. Swipe for candy, the closer your hand, the angrier the box becomes (vibration) then proceeds to open, revealing an unexpected robot arm (false-bottom) that presents you a with piece of candy. All materials were constructed from MDF by way of CNC.



Notation
Limited time did not permit me to complete the build. A reloading system was to be applied to the under side; it was alternatively reloaded by hand as the effect was slow regardless.

Featuring "Lois' Lament" by Suzy Sellout (Kathrine Becker)

Arduino Gibberish
// False Bottom Arduino Candy Box
// TVMiller

#include <Stepper.h>

// Stepper
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

// Stepper Limits
const int topstop = 6;
int topstate = 0;
const int botstop = 5;
int botstate = 0;

// Stepper State
int posstate = 0;

// Sensor Pins
const int trigPin = 4;
const int echoPin = 3;

// Vibration
int motorPin = 12;
int vibration = 0;

void setup() {
// Stepper Speed - Ugh
myStepper.setSpeed(210);

// Stepper Limiters
pinMode(topstop, INPUT);
pinMode(botstop, INPUT);

// Vibration Motor
pinMode(motorPin, OUTPUT);

Serial.begin(9600);
}

void loop() {
// Sensor Polling
long duration;
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
Serial.println(duration);

// Vibration Motor Map
vibration = map(duration, 300, 800, 255, 0);
analogWrite(motorPin, vibration);

// Trigger Candy
if (duration < 300) {
if (posstate == 1) {
up();
}
}
delay(100);
}

// Stepper To Limit
// IF button is LOW then run
// IF button is HIGH then stop
void up() {
while (botstate == LOW) {
botstate = digitalRead(botstop);
myStepper.step(-1);
posstate = 0;
}
// Delay then Return
delay(2000);
down();
}

void down() {
while (topstate == LOW) {
topstate = digitalRead(topstop);
myStepper.step(1);
posstate = 1;
}
}

Archive
HackADay.io - MakerFaire MakerBar Arduino Candy Box
tvmiller.com/index.php?entry=entry161002-10:miller.com/index.php?entry=entry161002-1054.ller.com/index.php?entry=entry161002-105429 287--1 OTC
TVShow S02E12X55 Arduino Water Boarding
A lie is the sin man tells in fear. To seek the truth, we must aide the sinner in crossing a threshold to find deliverance. Problem is, I am binge watching Ally McBeal Season 4, so allow us to automate the process. Attach sensors to said victim...er...suspect and allow our computer (Jacob) and an Arduino Uno to decipher if they are telling the truth or require some, inspiration.


A notation; the quality of this video is sub-par because I often shoot on poverty driven video equipment, namely an elderly Droid Razr. Forgive the potato.

Arduino Linguistics
// Arduino Water Board @TVMiller

#include <Servo.h>

Servo spigot;
Servo rightarm;

// Servo Position
int spigpos = 45;
int armpos = 15;

// Resting State
float lieset = 0;
int lierec = 0;
int lietotal = 0;
int lieavg = 0;
int lienew = 0;
// Variance
int spvar = 20;
int liepin = A0;

// Valve
int valve = 8;

// LEDs
int blue = 13;
int green = 12;
int red = 11;

void setup() {

spigot.attach(9); // Spigot
rightarm.attach(10); // Rag Arm

pinMode(valve, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);

Serial.begin(9600);

// Reset Position
spigot.write(45);
delay(1500);
rightarm.write(15);
digitalWrite(valve, LOW);

// Obtain Resting State -- Calibration
for (int x = 0; x < 100; x++) {
lieavg = analogRead(liepin);
lietotal = lietotal + lieavg;
}
lieset = round(lietotal / 100);
}

void loop() {

Serial.println(analogRead(liepin));

digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);

// Jacob Communication
if (Serial.available()) {
char ser = Serial.read();
switch (ser) {
case '1':
detect();
break;
}
}

delay(20);
}

void detect() {

// Query GV Response
for (int x = 0; x < 50; x++) {
lieavg = analogRead(liepin);
lietotal = lietotal + lieavg;
Serial.println(analogRead(liepin));
delay(2);
}
lienew = round(lietotal / 50);

// Lie or Truth?
// Jacob Polls Serial Response
if (lienew + spvar > lieset || lienew - spvar > lieset) {
Serial.println("Lie");
torture();
}
else if (lieset > lienew + spvar || lieset > lienew - spvar) {
Serial.println("Truth");
truth();
}
else {
Serial.println("Unclear")
detect();
}
}

void torture() {

digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);

for (armpos = 15; armpos <= 85; armpos += 1) {
rightarm.write(armpos);
delay(15);
}
for (spigpos = 45; spigpos <= 90; spigpos += 1) {
spigot.write(spigpos);
delay(15);
}
delay(1500);
digitalWrite(valve, HIGH);
delay(10000);
digitalWrite(valve, LOW);
spigot.write(45);
delay(1500);
rightarm.write(15);
}

void truth() {

digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);

}

Archive
HackADay.io - https://hackaday.io/project/14813-arduino-water-boarding
tvmiller.com/index.php?entry=entry160926-17:miller.com/index.php?entry=entry160926-1715.ller.com/index.php?entry=entry160926-171548 287--1 OTC
Maker Rage
Never firsts. Never is the man or woman leveraged slot A in to slot B with such perfection as to stand nobly after, nod, and immediately envision a future where every hand confidently holds their creation. A more astute reality of invention is the tongue pressing against clenched teeth, eyes closed with a breath counted as a tool or unseated component is firmly set upon a table -- or floor depending on the passing hour or day invested.

Unspoken, as consequence of a more emotionally vain culture, is the anxiety one inevitably and innately encounters when fabricating from scratch. Never firsts, as working through our impatience and frustrations are several incarnations of failure, incongruity and incompatibility.

Such is salvation when discovering the simplicity of a loose wire, and while we under breath scorn our selves for such an uninspired error, it is elation to ease our discomfort from the maker-rage that swelled with in.

Modern conditioning has us damning the man or woman who shows crazed temperament as though it were not an intuitive biological plucking of strands. Never first were you to be looked upon with unease as you squabbled with sudden incarnations of persons who as well have no answer as to the over sight. Betrayed by your own imagination, it is then in this moment of grief you take note of your surroundings, hoping that no one took notice of your momentary fancy.

Well it is them who should be damned. History is littered with the fanatical who birthed inventions that ushered mankind in to new eras of reason. Glancing at documents or hearing dictum on great innovators like Leonardo da Vinci, neglect the unwritten moments of pacing and discontent. It is not unnatural to unearth rage by the very principle that rage exists. It is the wisest of us who embrace it.

As your blood pressure elevates, your brain becomes more oxygenated, neurons hasten in abundance and muscles tense and relieve. Succulent with this higher state, you are refined. Researchers at the University of British Columbia has found that aerobic exercise proliferates the size of the hippocampus (http://www.health.harvard.edu/blog/regu ... 1404097110). Managed tension in the conditions of making are no less than micro-exertions.

No longer rebuff your self from extinguishing that tool or fracturing that formed part, for the very defiance and resistance of this natural progression of making is knowingly unhealthy. Never first were you to shatter objects as an undertaking to achievement. The very endeavour it's self has become an employer's prescription. (http://www.dailymail.co.uk/news/article ... nwind.html)

Maker-rage is inescapable. Apply it with confidence. The fearlessness that drove you to the state to create the unseen must be pure and absolute other wise your methodology becomes polluted with platitudes. Wrong is what chauffeurs reason to right.

Archive
HackADay.io - Maker Rage
tvmiller.com/index.php?entry=entry160926-13:miller.com/index.php?entry=entry160926-1356.ller.com/index.php?entry=entry160926-135644 287--1 OTC
TVShow S02E11X54 Meditation
TVShow S02E10X53 Arduino Licorice Launcher
Voice Activated
Room Tracking
Catapult Launching
Magazine Reloading
Arduino Licorice Launcher



NATO Red Vines Original Standard Issue

Arduino Cuhode
// Arduino Licorice Launcher @TVMiller
// RF Tracking @ Warner K. robowarner.com

#include <EEPROM.h>
#include <Servo.h>

// Centering
// Too small adjusts too frequently
// Too large will pass over signal
#define buffering 26
// Output Pin
#define ANT_WAVEFORM_OUT 8
// Input Pin
#define SPEAKER_FROM_WALKIETALKIE A1
// Calibration Pin
#define CALIBRATE_IN 11

// Variables
uint16_t caliset = 0;
uint16_t voltage = 0;
int state = 1;

// Servo Assignment
Servo turn;
int turnpin = 6;
Servo loader;
int loaderpin = 9;
Servo fire;
int firepin = 10;
Servo arm;
int arm = 11;

// LED Pins
int red = 3;
int blue = 4;

void setup() {

analogReference(DEFAULT);

turn.attach(turnpin);
loader.attach(loaderpin);
fire.attach(firepin);
arm.attach(armpin);

pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);

digitalWrite(red, LOW);
digitalWrite(blue, LOW);

Serial.begin(9600);

delay(6000); // Allow Power Up

pinMode(ANT_WAVEFORM_OUT, OUTPUT);
pinMode(SPEAKER_FROM_WALKIETALKIE, INPUT);
pinMode(CALIBRATE_IN, INPUT);
digitalWrite(CALIBRATE_IN, HIGH);

// Read EEPROM
byte HByte = EEPROM.read(1);
byte LByte = EEPROM.read(2);
caliset = word(HByte, LByte);
Serial.print("EEPROM Calibration number: ");
Serial.println(caliset);

// Calibration Check and Delay
// Aim Receiver and Clear Area
if (digitalRead(CALIBRATE_IN) == LOW) {
delay(10000);
}
}

void loop() {

if (state == 1) {
// Engage Licorice Weapon
digitalWrite(red, HIGH);
// Trigger Position Open
fire.write(45);
delay(1000);
// Arm Launcher
arm.write(180);
delay(1500);
// Lock Trigger
fire.write(90);
// Load Launcher
loader.write(180);
delay(330);
// Stall Position
loader.write(88);
// Remove Arm
arm.write(40);
// Licorice Launcher is Hot
digitalWrite(red, LOW);
digitalWrite(blue, HIGH);
state = 2;

} else {
// Hold for Command from JACOB
if (Serial.available()) {
char ser = Serial.read();
switch (ser) {
case 'L':
load();
break;
case 'F':
fire();
break;
}
}
}
}

void load() {
// Load Launcher
loader.write(180);
delay(330);
loader.write(88);
}

void fire() {

// Antenna Switching Waveform
digitalWrite(ANT_WAVEFORM_OUT, HIGH);
delay(1);
digitalWrite(ANT_WAVEFORM_OUT, LOW);
delay(1);
digitalWrite(ANT_WAVEFORM_OUT, HIGH);
delay(1);
digitalWrite(ANT_WAVEFORM_OUT, LOW);
delay(1);
digitalWrite(ANT_WAVEFORM_OUT, HIGH);
delay(1);
digitalWrite(ANT_WAVEFORM_OUT, LOW);
delay(1);
digitalWrite(ANT_WAVEFORM_OUT, HIGH);
delay(1);
digitalWrite(ANT_WAVEFORM_OUT, LOW);
delay(1);

// Read Speaker Voltage
voltage = analogRead(SPEAKER_FROM_WALKIETALKIE);

// If in Calibration Mode
// Store to EEPROM
if (digitalRead(CALIBRATE_IN) == LOW) {
caliset = voltage;
byte HByte = highByte(caliset);
byte LByte = lowByte(caliset);
EEPROM.write(1, HByte);
EEPROM.write(2, LByte);
delay(5000);
endprogram();
}

// Stall Turning
if (voltage > (caliset - buffering) && voltage < (caliset + buffering)) {
// Fire
launch();
}
// Turn Left
if (voltage > (caliset + buffering)) {
turn.write(180);
delay(15);
Serial.print("In, Cal\t");
Serial.print(voltage);
Serial.print("\t");
Serial.println(caliset);
// Return Cycle
fire();
}
// Turn Right
if (voltage < (caliset - buffering)) {
turn.write(0);
delay(15);
Serial.print("In, Cal\t");
Serial.print(voltage);
Serial.print("\t");
Serial.println(caliset);
// Return Cycle
fire();
}

delay(5);
Serial.print("In, Cal\t");
Serial.print(voltage);
Serial.print("\t");
Serial.println(caliset);
}

void launch() {
// Release Trigger
fire.write(45);
delay(1000);
// Reset
state = 1;
break;
}

void endprogram() {
Serial.print("Calibrated to: ");
Serial.print(caliset);
loopy:
goto loopy;
}

Notable thanks to hackerspace @MakerBar in Hoboken, New Jersey.

Additional notable thanks to @RoboWarner for the RF tracking schematics and code.

Notation
Indeed, this should have implemented a WIFI module how ever at the moment I did not have a MKR1000 on premises, thus the resulted Uno and PC connected USB. Should a MKR1000 be made available, it would be altered to suit. In conclusion, pft.

Archive
HackADay - Licorice Launcher Locks on to your Voice
HackADay.io - Arduino Licorice Launcher
HackerSpace - MakerBar.com
RF Tracking - Radio Homing Robot DIY by RoboWarner
tvmiller.com/index.php?entry=entry160910-13:miller.com/index.php?entry=entry160910-1315.ller.com/index.php?entry=entry160910-131540 287--1 OTC
TVShow S02E09X52 Trends
Personalized Golf Tees

Collaborating a small gift for the parental units, experimenting with golf tee variables and exploiting a 3D printer I had abandoned because, CNC, am I right?!, and...no, no that is it.

Two of the first set of tees are initials while the third is an experiment of a pointer tee. There are numerous more designs that will be added as we go along, including the obligatory HackADay golf tee. Stay tuned.


Archive
HackADay.io - Personalized Golf Tees
tvmiller.com/index.php?entry=entry160826-13:miller.com/index.php?entry=entry160826-1333.ller.com/index.php?entry=entry160826-133309 287--1 OTC
TVShow S02E08X51 Liberty Mutual