TVShow 3X12 Flashing Light Prize (1) Arduino Wave Generator
Probable electrocution? Check.
Deadly noxious fumes? Inhaled.
KY Jelly? Lubricated.
Let's show this prehistoric bitch how we flash bulbs down town.



Ingredients
1. Arduino Uno
2. Micro Servo
3. 5V Regulator
4. (2) 10nf Cap
5. 12V Incandescent Bulb
6. Acrylic (Dollar Store Picture Frame)
7. 10K Potentiometer (Optional)
8. Table Salt or Baking Soda

Notation(s)
1. Discovered the miniaturization of our previous wave generator provided less opportunity for more visually amplified waves. Ended up with a beached wave...so...crap, another words. Tip; depth, shallows and angle of attack. Next FLP (2) project will approach things differently. Vodka and flames?!

2. Plain tap water is a poor electrical conductor. Added table salt and baking soda to increase conductivity. To what ratio? This much to this much by this many.

3. (Update) Attempted several further lever variations w/o any significant increase in wave pattern. Simply requires enlarged length and depth for greater motion...that's what she said.

Sketchy
// Flashing Light Prize (1)
// VijeMiller

#include <Servo.h>
Servo wave;

// Pot Analog Pin 0
int pot = A0;
// Delay Value
int val = 0;
// Servo Positions
int fro = 0;
int bac = 160;
int pos = 0;

void setup() {
Serial.begin(9600);
wave.attach(5);
wave.write(pos);
}

void loop() {
// Read Potentiometer
val = analogRead(pot);
// Print Value
Serial.println(val);
// Map Pot to Delay Value
val = map(val, 0, 1023, 0, 20);
// Print Value
Serial.println(val);
// Back
for (pos = fro; pos <= bac; pos += 1)
{
wave.write(pos);
delay(val);
}
// Forward
for (pos = bac; pos >= fro; pos -= 1)
{
wave.write(pos);
delay(val);
}
}

Archive
https://hackaday.io/project/25715-flashing-light-prize-1-arduino-wave-generator
https://www.flashinglightprize.com/
https://vid.me/gSap
TVShow 3X11 Arduino Darkest Timeline Bot



#SixSeasonsAndAMovie

Notation(s)
1. Adjusting to the new video-contraption i.e. smart phone, left one angle particularly poor and vocal audio equally as dismal. Inadequate tools remain inadequate. Regardless, the governing rule of this series remains stead fast; "Get this piece of shit off my desk top and let us move on..." Sigh.

2. Limitation to distance traveled observed in the video is not present in the sketch posted.

3. Our AI interface "Jacob" present in previous episodes was the go between for response to the auditory key words "no movie" triggering the cruel events that followed.

4. This was built for the sake of stupid; C minus.

5. Why the white boards?! The wheels (see HaD.io project logs) are made from card board and hot glue...they uh, did not do well on uneven worn wood floors.

Ingredients
1. Arduino Uno
2. HC-06 Bluetooth Module
3. SR06 Ultrasonic Sensor
4. 360 Degree Servo
5. Boring Regular Servo
6. Adafruit Neopixel Strip
7. 1000nf Cap
8. 47K Res
9. Cardboard

Cruel Code
// Darkest Timeline Bot
// VijeMiller
// SixSeasonsAndAMovie

#include <Servo.h>
#include <Adafruit_NeoPixel.h>

// Neopixel
#define PINPIXEL 6
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(3, PINPIXEL,
NEO_GRB + NEO_KHZ800);

// Sensor Values
Servo headservo;
Servo rollservo;
#define trigPin 9
#define echoPin 8
// Set Distance (cm)
int setdist = 40;

// Head Positions
int pos = 3;
int good = 3;
int evil = 158;
// Roll Positions
int forw = 75;
int halt = 90;
int back = 105;
int slow = 80;

// Bleu Cheese
char incom = 0;

void setup() {

Serial.begin (9600);

// Servo Pins
headservo.attach(5);
rollservo.attach(7);

// Set Start Position
headservo.write(good);
rollservo.write(halt);

// Sensor Pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

// Load Neopixel
pixels.begin();
}

void loop() {

// Happy Blue
pixels.setPixelColor(0, pixels.Color(0, 0, 255));
pixels.setPixelColor(1, pixels.Color(0, 0, 255));
pixels.setPixelColor(2, pixels.Color(0, 0, 255));
pixels.show();

// Roll Bluetooth (Jacob)
if (Serial.available() > 0) {
incom = Serial.read();
if (incom == '1') {
cruel();
}
else if (incom == '2') {
cool();
}
else if (incom == '3') {
gloat();
}
}

// Sensor Sequence
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Centimeter Conversion
distance = (duration / 2) / 29.1;
// Print for Testing
Serial.print(distance); Serial.println(" cm");

if (distance > setdist) {
forward();
} else if (distance < setdist) {
backward();
} else {
}

delay(10);
}

void forward() {
rollservo.write(forw);
delay(1000);
rollservo.write(halt);
}

void backward() {
rollservo.write(back);
delay(1000);
rollservo.write(halt);
}

void cruel() {
// Black
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.setPixelColor(1, pixels.Color(0, 0, 0));
pixels.setPixelColor(2, pixels.Color(0, 0, 0));
pixels.show();
// Become Evil
for (pos = good; pos <= evil; pos += 1) {
headservo.write(pos);
delay(20);
}
delay(500);
// Evil Red
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
pixels.setPixelColor(1, pixels.Color(255, 0, 0));
pixels.setPixelColor(2, pixels.Color(255, 0, 0));
pixels.show();
delay(1000);
rollservo.write(slow);
delay(5000);
// Murder
rollservo.write(halt);
cool();
incom = 0;
}

void cool() {
// Black
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.setPixelColor(1, pixels.Color(0, 0, 0));
pixels.setPixelColor(2, pixels.Color(0, 0, 0));
pixels.show();
// Become Good
for (pos = evil; pos >= good; pos -= 1) {
headservo.write(pos);
delay(20);
}
incom = 0;
}

void gloat() {
rollservo.write(slow);
delay(5000);
rollservo.write(halt);
}

Archive
https://hackaday.io/project/25434-arduino-darkest-timeline-bot
TVShow S03E08 IoT Sit Counter
Once a luxury, sitting has now become an ailment. Have you yet wondered to just how many times in a day you sit or to what percentage of your day is consumed on bended knee? Making use of a resistance sensor and a NodeMCU ESP-12E, we are able to track our daily lethargy and display it in all of it's aggregated misery. Amend as needed.



Ingredients
1. NodeMCU ESP-12E
2. (2) LEDs
3. (4) 1K Resistor
4. Push Button
5. Slide Switch
6. 10K Pot

Butt-On State Code
// IoT Sit Counter
// Version 0.1
// VijeMiller

// NodeMCU ESP-12E 1.0
#include <ESP8266WiFi.h>

// WIFI Network Access
const char* ssid = "XXXXXX";
const char* password = "XXXXXXX";
WiFiServer server(80);

// ThingSpeak Access
char thingSpeakAddress[] = "api.thingspeak.com";
String APIKey = "XXXXXXXXXXX"; // API
const int updateThingSpeakInterval = 10 * 1000; // Interval
long lastConnectionTime = 0;
boolean lastConnected = false;
WiFiClient client;

// LEDs
int activeled = 13;
int wifiled = 12;

// Sensor
int sensor = A0;
int ssr = 0;
int sensorstart = 0;
int senres = 0;
int sensorstate = 0;

// Button
int button = 14;
int buttstate;

// Stats
int sitdown = 0;
int pretime = 0;
float dattime;
float runpert;

// States
int mainstate = 0;

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

pinMode(button, INPUT);
pinMode(activeled, OUTPUT);
pinMode(wifiled, OUTPUT);

digitalWrite(activeled, LOW);
digitalWrite(wifiled, LOW);

calibrate();
}

void loop() {

digitalWrite(activeled, HIGH);

// WIFI Button Pressed?
buttstate = digitalRead(button);

// WIFI Yes or No?
if (buttstate == HIGH) {
Serial.println("Connecting");
digitalWrite(wifiled, HIGH);

// Load WiFi
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, password);
delay(10000);
}
Serial.println("Connected");
server.begin();

// Calculate Minutes Seated
dattime = pretime / 60.0;
// Truncate
dattime = (int) dattime;

// Calculate Percent Seated
runpert = millis();
// Convert to Seconds
runpert = runpert / 1000.0;
// Convert to Minutes
runpert = runpert / 60.0;
// Convert to Percent
runpert = dattime / runpert;
// Truncate
runpert = (int) runpert;

// Update ThingSpeak
String sitfinal = String(sitdown, DEC);
String timefinal = String(dattime, DEC);
String runfinal = String(runpert, DEC);
updateThingSpeak("field1=" + sitfinal + "&field2=" +
timefinal + "&field3=" + runfinal);
delay(3000);

// Reset Data
sitdown = 0;
pretime = 0;
dattime = 0;
runpert = 0;

} else {

// No WIFI
digitalWrite(wifiled, LOW);

// Read Sensor
sensorstate = analogRead(sensor);

// Sitting?
if (sensorstate > sensorstart) {
// Delay For 5 Seconds To Confirm Sit
if (mainstate == 0) {
delay(5000);
mainstate = 1;
goto escape;
} else if (mainstate == 1) {
// Add A Sit
sitdown = sitdown + 1;
// Run While Sitting To Track Time
// 1 Second Per Loop
while (sensorstate > sensorstart) {
sensorstate = analogRead(sensor);
pretime = pretime + 1;
delay(1000);
}
// Reset State
mainstate = 0;
}
}
}

delay(1000);
digitalWrite(activeled, LOW);
delay(1000);
escape:
}

// Calibrate While Standing
void calibrate() {
for (int x = 0; x < 10; x++) {
ssr = analogRead(sensor);
sensorstart = sensorstart + ssr;
delay(100);
digitalWrite(activeled, HIGH);
}
// sensorstart Equals Average Standing Value
sensorstart = sensorstart / 10;
// Add Leniency
sensorstart = sensorstart + 200;
digitalWrite(activeled, LOW);
}

// ThingSpeak
void updateThingSpeak(String tsData) {
if (client.connect(thingSpeakAddress, 80)) {
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + APIKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(tsData.length());
client.print("\n\n");
client.print(tsData);
lastConnectionTime = millis();
}
}

Archive
https://hackaday.io/project/25152-iot-sit-counter
https://thingspeak.com/channels/281292
TVShow S03E04X76 Arduino Back Scratcher Plotter
Digitally ditch the itch --



Currently embracing a sans-work shop and poverty driven cardboard kick for the gluttony of least-interesting of novelty projects now done solely for critical thinking posterity -- other wise known as boredom.

Unable to reach that nook and/or cranny? Open the Back Scratcher Plotter app on your mobile device and identify the spot where then the X/Y axis is sent via bluetooth to the Arduino Uno affixed to the BSP prototype (sly analogy for rubbish) which then actuates to your -- you know what? Stop wasting your time sitting there even reading this nonsense and go some where -- like Typhoon Lagoon!

Ingredients
1. Arduino Uno
2. Bluetooth Module
3. (2) Servos
4. Motor
5. Cardboard
6. String
7. Masking Tape
8. Power Supply
9. Pulley
10. MIT App Inventor

Back-end Code
// Back Scratcher Plotter
// @VijeMiller
// TVMiller.com

#include <Servo.h>
#include <Stepper.h>

// Scratcher
const int stepsrev = 32;
Stepper scratch(stepsrev, 2, 4, 3, 5);

// For Bluetooth Data
String readString, xaxisdata, yaxisdata;

// X Axis
Servo xaxis;
// Y Axis
Servo yaxis;

int xpos = 90;
int ypos = 90; // Stall
int stall = 90;
int yup = 75;
int ydown = 105;
int pos = 90;

void setup() {
Serial.begin(9600);
// Max(?) Speed
scratch.setSpeed(800);
xaxis.attach(6);
yaxis.attach(7);
xaxis.write(xpos);
yaxis.write(ypos);
}

void loop() {

// Bluetooth Data X-Y Axis String?
while (Serial.available()) {
delay(10);
if (Serial.available() > 0) {
char c = Serial.read();
readString += c;
}
}

if (readString.length() > 0) {
// Serial.println(readString);
// X-Y Axis Combined Sent (ex. 368124)
// First 3 Digits
xaxisdata = readString.substring(0, 3);
// Next 3 Digits
yaxisdata = readString.substring(4, 6);

// Convert String to Int
int prexpos = xaxisdata.toInt();
int preypos = yaxisdata.toInt();

// X-Y Based on 480x800 Phone Dimension & MIT App
// X 100 to 350 High 170 to 320 Low
// Y 220 to 560
// Map X to xPos (Actual)
xpos = map(prexpos, 100, 350, 120, 60);
// Map Y to yPos (Delay)
ypos = map(preypos, 220, 560, 0, 6300);

}

// Final Routine
if (readString.length() > 0) {
if (xpos > 90) {
for (pos = 90; pos <= xpos; pos += 1) {
xaxis.write(pos);
delay(40);
}
}
else if (xpos < 90) {
for (pos = 90; pos >= xpos; pos -= 1) {
xaxis.write(pos);
delay(40);
}
}
yaxis.write(yup);
delay(ypos);
yaxis.write(stall);
// Scratch 2048 Steps = 1 Revolution (2 Up/Down)
// Used Stepper bcz Spare Parts -- Sigh!
// 2048 x 7 Seconds = 14336 Steps
scratch.step(14336);

// Return to Start
if (xpos > 90) {
for (pos = xpos; pos >= xpos; pos -= 1) {
xaxis.write(pos);
delay(40);
}
}
else if (xpos < 90) {
for (pos = xpos; pos <= xpos; pos += 1) {
xaxis.write(pos);
delay(40);
}
}
yaxis.write(ydown);
delay(ypos);
yaxis.write(stall);
}

// Reset
readString = "";
}

Archive
http://hackaday.com/2017/05/07/anatomic ... atch-fever
https://hackaday.io/project/21527-arduino-back-scratcher-plotter
https://vid.me/K3Tx
TVShow S03E03X75 Simone Slouchy
After several dismissive attempts (3) -- we have haphazardly weaved together an Arduino Uno with cardboard, ultrasonic sensor, servo(s) and stepper(s) to remind, pester and intolerate your posture.



This project was hobbled together as a slight against the current incarnation of the maker community that at one time had been invested in improving humanity -- now succumbed to vanity and novelty. This project demonstrates that even with little to nothing applied, useless can harbor solution. Plaguing social venues with the antithesis breeds a consequence of evolutionary latency.

Ingredients
1. Arduino Uno
2. Stepper Motor (28BYJ-48)
3. Stepper Driver (ULN2003)
4. Ultrasonic Sensor (HC-SR04)
5. (2) Servos (High Torque)
6. Cardboard
7. Spite

Notations
1. 28BYJ-48 are cheap bcz they are in fact, rubbish -- do not be fooled by reviews documenting "high torque" and "power" bcz they fail to mention they only used these stepper motors to propel insignificantly sized wheeled robots a few paces before over heating and seizing.

2. Per my review above (Notation 1) may I suggest the alternative of either the purchase of or the modification of a servo to operate at 360 degree rotation -- ref. http://tvmiller.com/index.php?entry=entry160123-071155

3. A modified version of this code applied distance reference to alter the position of the shoulder servo relative to the actual distance of the sloucher -- due to impatience, disinterest and coherence of my typical distance, the code is commented but easily accessible.

Slouchy Codey
// Simone Slouchy (3)
// Vije Miller
// TVMiller.com

#include <Servo.h>
#include <Stepper.h>

// Hand
const int stepsPerRevolution = 64;
Stepper hander(stepsPerRevolution, 19, 17, 18, 16);
// Shoulder
Servo shoulder;
// Elbow (
Servo elbow;

// Sensor
#define trigPin 2
#define echoPin 3

// Servo Position
int pos = 30;

// What Action Next?
int state = 0;

// Distance Adjust (Version 2)
// int newdis = 0;

// Serial For Testing
char incom = 0;

void setup() {
Serial.begin(9600);
shoulder.attach(12);
elbow.attach(5);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Set Start Position (Servo)
shoulder.write(15);
elbow.write(30);
// Stepper Starts 0
}

void loop() {

// Sensor Sequence
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Centimeter Conversion
distance = (duration / 2) / 29.1;
// Print for Testing
Serial.print(distance); Serial.println(" cm");

// IF Slouching || > 5cm
// But Not NOT In Chair || < 40cm
if (distance > 5 && distance < 40) {
if (state == 0) {
tap();
// Change State
state = 1;
}
else if (state == 1) {
grab();
state = 2;
}
else if (state == 2) {
assault();
// Reset
state = 0;
}
}
delay(5000);

// Serial For Testing
// if (Serial.available() > 0) {
// incom = Serial.read();
// if (incom == '1') {
// tap();
// }
// else if (incom == '2') {
// grab();
// }
// else if (incom == '3') {
// assault();
// }
// }

// Reset Value (Else)
incom = 0;
}

void tap() {
// Map Distance for Extension (Coming Soon)
// newdis = map(distance, 5, 20, 70, 110);

// Extend Shoulder and Forearm
// Open Hand
for (int i = 0; i <= 600; i++) {
hander.step(-1);
Serial.println("Open");
}
for (pos = 15; pos <= 30; pos += 1) {
shoulder.write(pos);
delay(20);
}
for (pos = 30; pos <= 90; pos += 1) {
shoulder.write(pos);
elbow.write(pos);
delay(20);
}
for (pos = 90; pos <= 145; pos += 1) {
elbow.write(pos);
delay(20);
}
for (pos = 90; pos <= 110; pos += 1) {
shoulder.write(pos);
delay(20);
}
delay(1000);
// Tap
for (pos = 145; pos >= 110; pos -= 1) {
elbow.write(pos);
delay(10);
}
for (pos = 110; pos <= 145; pos += 1) {
elbow.write(pos);
delay(10);
}
for (pos = 145; pos >= 110; pos -= 1) {
elbow.write(pos);
delay(10);
}
for (pos = 110; pos <= 145; pos += 1) {
elbow.write(pos);
delay(10);
}
// Fold Back
for (pos = 110; pos >= 70; pos -= 1) {
shoulder.write(pos);
delay(50);
}
delay(750);
for (pos = 145; pos >= 70; pos -= 1) {
elbow.write(pos);
delay(20);
}
for (pos = 70; pos >= 30; pos -= 1) {
shoulder.write(pos);
elbow.write(pos);
delay(30);
}
for (pos = 30; pos >= 15; pos -= 1) {
shoulder.write(pos);
delay(30);
}
for (int i = 0; i <= 600; i++) {
hander.step(1);
Serial.println("Close");
}
}

void grab() {
// Open Hand
for (int i = 0; i <= 600; i++) {
hander.step(-1);
Serial.println("Open");
}
for (pos = 15; pos <= 30; pos += 1) {
shoulder.write(pos);
delay(20);
}
for (pos = 30; pos <= 90; pos += 1) {
shoulder.write(pos);
elbow.write(pos);
delay(20);
}
for (pos = 90; pos <= 145; pos += 1) {
elbow.write(pos);
delay(20);
}
for (pos = 90; pos <= 110; pos += 1) {
shoulder.write(pos);
delay(20);
}
delay(1000);
// Close Hand
for (int i = 0; i <= 250; i++) {
hander.step(1);
Serial.println("Close");
}
// Lower On Sloucher
for (pos = 145; pos >= 115; pos -= 1) {
elbow.write(pos);
delay(30);
}
// Pull Back
for (pos = 115; pos >= 80; pos -= 1) {
shoulder.write(pos);
elbow.write(pos);
delay(30);
}
// Open Hand
for (int i = 0; i <= 250; i++) {
hander.step(-1);
Serial.println("Open");
}
// Extend Forearm
for (pos = 80; pos <= 145; pos += 1) {
elbow.write(pos);
delay(30);
}
// Fold Back
for (pos = 80; pos >= 50; pos -= 1) {
shoulder.write(pos);
delay(40);
}
for (pos = 145; pos >= 50; pos -= 1) {
elbow.write(pos);
delay(30);
}
for (pos = 50; pos >= 30; pos -= 1) {
elbow.write(pos);
shoulder.write(pos);
delay(40);
}
for (pos = 30; pos >= 15; pos -= 1) {
shoulder.write(pos);
delay(40);
}
// Close Hand
for (int i = 0; i <= 600; i++) {
hander.step(1);
Serial.println("Close");
}
}

void assault() {
for (int i = 0; i <= 600; i++) {
hander.step(-1);
Serial.println("Open");
}
for (pos = 15; pos <= 30; pos += 1) {
shoulder.write(pos);
delay(20);
}
for (pos = 30; pos <= 90; pos += 1) {
shoulder.write(pos);
elbow.write(pos);
delay(20);
}
for (pos = 90; pos <= 145; pos += 1) {
elbow.write(pos);
delay(20);
}
for (pos = 90; pos <= 110; pos += 1) {
shoulder.write(pos);
delay(20);
}
delay(1000);
for (int i = 0; i <= 250; i++) {
hander.step(1);
Serial.println("Close");
}
for (pos = 145; pos >= 115; pos -= 1) {
elbow.write(pos);
delay(30);
}
for (pos = 115; pos >= 60; pos -= 1) {
shoulder.write(pos);
elbow.write(pos);
delay(30);
}
for (int i = 0; i <= 250; i++) {
hander.step(-1);
Serial.println("Open");
}
for (pos = 60; pos <= 80; pos += 1) {
elbow.write(pos);
delay(30);
}
delay(1500);
for (pos = 60; pos <= 80; pos += 1) {
shoulder.write(pos);
delay(20);
}
for (pos = 80; pos <= 115; pos += 1) {
shoulder.write(pos);
elbow.write(pos);
delay(5);
}
for (pos = 115; pos <= 135; pos += 1) {
elbow.write(pos);
delay(5);
}
delay(500);
for (pos = 115; pos >= 80; pos -= 1) {
shoulder.write(pos);
delay(10);
}
for (pos = 135; pos <= 80; pos += 1) {
elbow.write(pos);
delay(30);
}
for (pos = 80; pos >= 30; pos -= 1) {
shoulder.write(pos);
elbow.write(pos);
delay(40);
}
for (pos = 30; pos >= 15; pos -= 1) {
shoulder.write(pos);
delay(40);
}
for (int i = 0; i <= 600; i++) {
hander.step(1);
Serial.println("Close");
}
}

Archive
Hackaday.io - Simone Slouchy
Instructables - Simone Slouchy
Kathrine Becker (Suzy Sellout) - Gone For A While
Failed Simone Slouchy Endeavor 1 and 2
Pursuing an attempt at spite, ironically -- the humorous self deprecating variety -- we have now twice failed at constructing an Arduino project to which we shall explain in detail further following a hypothetical successful third attempt soon...and subsequent fourth attempt. Son of a-- any who -- our first attempt was interrupted by time and our second venture was deterred by stepper motors (28BYJ-48) proving to be far more feeble than anticipated.



TVShow S03E02X74 Arduino Splash Resistant Toilet Foamer




Splash back is a scourge of our archaic crapping technology. As alternative to perching several feet above the bowl comes the Arduino Toilet Foamer -- permitting a user to create a more splash-resistant, sanitary and refreshing bowl environment.

Bowels a-grumblin'? Activate the Arduino Toilet Foamer from your phone app -- triggering the Arduino relay(s) for the aerator and solenoid value which injects a specified dosage of glycerin and soap in to the bowl water where it becomes en-frothed by gyrating bubbling action. Exhume waste as necessary.

Ingredients
1. Arduino Uno
2. 1/8ID 1/4OD Vinyl Tube
3. TIP120 (2)
4. 2.2K R (2)
5. 4001 Diode (2)
6. 5V Relay
7. Aerator (40 Gal)
8. 1/8 Tee for Two
9. 12V Solenoid Valve
10. Plastic Container
11. 1/8 Check Valve
12. 12V Power Supply
13. Glycerin
14. Liquid Dish Soap
15. Aerator Bubbler
16. Bluetooth or WiFi
(Optional)
Adafruit Neopixel Strip
1Knf C
47 R

Notations

1. Advice to straighten vinyl tubing is to boil water and quickly submerge.
Dry in the desired angle. Cure shorter pieces by submerging in cold water.

2. Do not use concentrated liquid dish or hand soap -- aka "Ultra" brand.

3. Would-a could-a shd-a larger aerator, (2) more valves and a variant bubbler to increase foaming efficiency.

4. Hypothetically, water reduction could be obtained by foaming water in a toilet.
Elon Musk, you can send a check or money order to...

Bubble Recipe
Soap 4:1 Glycerin

Foam Code (Bluetooth and Neopixel Version)
// Toilet Foamer
// VijeMiller
// TVMiller.com

// Neopixel
#include <Adafruit_NeoPixel.h>
#define PINSTRIP 10
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5,
PINSTRIP, NEO_GRB + NEO_KHZ800);

// Aerator
int aerator = 7;
// Valve
int valve = 8;

void setup() {

Serial.begin(9600);

// Pin Values
pinMode(aerator, OUTPUT);
pinMode(valve, OUTPUT);

// Load Neopixel
strip.begin();
strip.show();

digitalWrite(aerator, LOW);
digitalWrite(valve, LOW);

}

void loop() {

// Listen
if (Serial.available() > 0)
{
digitalWrite(aerator, HIGH);
// Prime Soap Container
delay(3000);
digitalWrite(valve, HIGH);
// FOR to Delay w/ LED
for (int i = 0; i < 15; i++) {
colorWipe(strip.Color(255, 0, 0), 70);
colorWipe(strip.Color(0, 255, 0), 70);
colorWipe(strip.Color(0, 0, 255), 70);
}
digitalWrite(valve, LOW);
// FOR to Delay w/ LED
for (int i = 0; i < 1000; i++) {
colorWipe(strip.Color(255, 0, 0), 70);
colorWipe(strip.Color(0, 255, 0), 70);
colorWipe(strip.Color(0, 0, 255), 70);
}
digitalWrite(aerator, LOW);
}

}

void colorWipe(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

Archive
HackaDay - http://hackaday.com/2017/05/04/hackaday ... let-foamer
Hackaday.io - Arduino Splash Resistant Toilet Foamer
Instructables - Arduino Splash Resistant Toilet Foamer
TVShow S03E01X73 Arduino Motion Mute




Every male and occasional female (send nu--never mind) has been caught, for so many nefarious things. Puberty often needs a helping hand--wait--I mean to say that there is a solution to secure your dignity from prying ears -- or eyes depending on applied hex code.

Ingredients
1. Arduino Uno (2)
2. PIR Motion Sensor Module
3. Nerf Walkie Talkies (5$US on eBay)
4. IR LED Transmitter
5. IR Receiver (Salvaged)
6. 47 R
7. 2.2K R
8. TIP120
9. 330 R
10. 5V Relay
11. 4001 D
(Optional) Adafruit NeoPixel LED Strip, 1Knf C and 47 R

As the motion sensor is activated, the host MCU triggers the high tone pulse (morse code button) to the other walkie talkie which in turn, the alternate MCU analog reads (A0) voltage from the receiving speaker. When elevated beyond a threshold (identified here as 25) the MCU signals the IR to mute the television and optionally display a LED alert.

A note on refinement for alternative applications -- reduce the delay and transmit pulses (on/off) in Morse so as to reproduce data streams for a broader exchange.

Uh hem, adult entertainment industry, uh hem -- this thing. Eh?!

Sensor Code
// Motion Mute
// Sensor Code
// VijeMiller

int pir = 3;
int beep = 4;

int state = 0;

void setup()
{
pinMode(pir, INPUT);
pinMode(beep, OUTPUT);
}

void loop()
{
state = digitalRead(pir);
if (state == 1) {
digitalWrite(beep, HIGH);
delay(2000);
digitalWrite(beep, LOW);
} else {
digitalWrite(beep, LOW);
}
delay(100);
}

Mute Code
// Motion Mute
// Mute Code
// @VijeMiller

// IRLED pin 3
#include <IRremote.h>
IRsend irsend;

// Neopixel
#include <Adafruit_NeoPixel.h>
#define PINSTRIP 9
Adafruit_NeoPixel strip = Adafruit_NeoPixel(3,
PINSTRIP, NEO_GRB + NEO_KHZ800);

int rec = 0;
int recpin = A0;

void setup()
{
Serial.begin(9600);
// Load Neopixel
strip.begin();
strip.show();
// Loading Alert
colorWipe(strip.Color(0, 255, 0), 100);
colorWipe(strip.Color(0, 0, 0), 70);
}

void loop()
{
// Read Speaker
rec = analogRead(recpin);
// 0 to 1023
if (rec > 25) {
// Send Mute Signal
for (int i = 0; i < 3; i++) {
// Designated by IRRecDemo
// Mute for Samsung
irsend.sendSony(0xF0A01BE, 12);
delay(40);
}
// Red Alert
colorWipe(strip.Color(255, 0, 0), 100);
colorWipe(strip.Color(0, 0, 0), 100);
// Reduce Redundancy
delay(3000);
} else {
// Light Blue
colorWipe(strip.Color(0, 0, 10), 100);
}
delay(100);
}

void colorWipe(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

Archive
Hackaday.io - Arduino Motion Mute
Instructables - Arduino Motion Mute
NEW Orbital Time Clock Day Adjustment
Spring is emblematic of renewal as it often identifies with foliage's return from a barren Winter landscape. It begs the question as to why, as the majority of evolved populace reside in the Northern Hemisphere, and while arbitrary, that we celebrate the initiation of the year amidst the harshest of seasons. Would it not be more conducive to revelers having the new year brought about in a more favorable atmosphere with some resemblance of association to a tangible element? Indeed, it would.

Years of developing Orbital Time as an alternative to the haphazard Gregorian calendar, has taken in to consideration a requisite conditioning - as have all things through out humanity. The mannerism of human adaptation has bestowed confidence in me to push forward a radical change to the calendar that (again) while fantasy, will demand the greatest hedging of acclimatization.

Hence forth, the New Year will commence upon the day of the Northern Hemisphere Vernal Equinox (Spring) and be accounted as Day 001. The number of days of the year will be divided by 24 hours until the following Vernal Equinox (Spring).

Upon authoring this decree, the day is presently 300 (299.7) of the year 4,574,724,016 (16.8)
OTC tvmiller.com/otc

OTC Day and Year Javascript

<script type="text/javascript">
var today = new Date();
var timestmp = new Date().setUTCFullYear(new Date().getUTCFullYear(), 0, 1);
var yearFirstDay = Math.floor(timestmp / 86400000);
var todaydoy = Math.abs((new Date().getTime()) / 86400000);
var theDay = todaydoy - yearFirstDay;
if (theDay < 79) {
var setday = theDay + 287;
} else if (theDay >= 79) {
var setday = theDay - 78;
}
var fday = Math.ceil(setday);
var setYear = today.getUTCFullYear()-1999.9;
var holdyear = setYear.toFixed(1);
if (theDay < 79) {
var theYear = holdyear - 1;
} else {
var theYear = holdyear;
}
document.write("" + fday + " 0" + theYear + " OTC");
</script>

Previous posting dates shall reflect the new OTC date so as described above.
Pre-existing non-scripted dates may not reflect these changes until adjusted by hand.
TV's Annual Fast Food Assessment Awards 076
Best Value - KFC
Best Quality - Pizza Hut
Best Item - KFC 5$ Fill Up (#6)
Best Interior - Popeye's
Honorable Mention - Del Taco
Honorable Item Mention - McDonalds Sweet Iced Tea

Worst Value - Five Guys and Taco Bell (tie)
Worst Quality - Subway (New York City)
Worst Item - In-N-Out French Fries
Worst Interior - McDonald's
No Honorable Mention - Shake Shack
No Honorable Item Mention - McDonald's Crispy Chicken Snack Wrap