Carly’s Final Project

Hello Everyone!

How many people have ignored a text message, by accident (or on purpose!) in the last week? If you are me, the answer is more than one…

Keeping close to all your people can be tough, especially when you have many important people in your life. Social circle keeps all your loved ones in one place, and tells you when you are slacking on the conversation. Nobody likes to be a the person who ignores their friends, and now, you don’t have to be that person!

Check out my (in progress) tutorial on how to build this magical device that builds thriving relationships!

TAZZERO – PA’s Final Project Outline

Inspired by the idea of One Big Thing and the physical form of Tamagotchi, TAZZERO is a task management device that counts down the task one needs to complete each day, which is only one. The aim is to get the sum to 0. If a task is not finished by midnight, a new task will replace the old one and add +1 to your clock.

My rough outline can be found here! 🙂

 

John’s final project outline: Century Clock

For my final project my goal is to create a clock that can display up to 100 years of time past a certain date. It does this through six different dials all powered through independent stepper motors connected to an Arduino reading a real time clock module (thanks Becky!).

I am imagining that a clock like this could be used to mark the exact amount of time since an important event (birth of a child, anniversary, a person starting sobriety), to help mark the occasion exactly. Depending on how the building and coding goes, the resetting of the clock via a button every time it is pressed may be a feature for V2.0.

Below can be found my drawings regarding possible form, as well as my link to the outline and tools/materials list.

This slideshow requires JavaScript.

 

https://docs.google.com/document/d/1SDm_j-oxIthKATLxeyhMz939mIoXOPTdOahBQb70qQE/edit?usp=sharing

The Shootings ArtiFact

Hi all,

My final project is a speculative project.
Its purpose is to raise awareness around how many and how often people die from shootings in this country.
You can find my document here.

This is my code, which needs a lot more work, since it is the hardest part of the project:

 
		
/* -------------------------------------------------------------------------
ShootingsArtefact -- an artefact that reacts to the number of deaths by shooting in the US
using the the Adafruit HUZZAH ESP8266 WiFi microcontroller (can also work on other ESP8266 boards)
with numbers provided by http://www.gunviolencearchive.org/. LED on pin 15 shows status:

Steady on = One-time initialization
Fast flicker = Connecting to network, polling data
Slow blink = Symptoms predicted in forecast (24-48 hrs)
Blip ea. 4 sec = Symptoms not in forecast (sleeping)

----------------------------------------------------------------------------
Configure the code below with your WiFi credentials. Then visit
http://www.gunviolencearchive.org/ and look up the number you wish to display.
Copy the URL into the appropriate spot in the code below.
When changing the number to be displayed, you will need to dig through the page's HTML
source to find a string that uniquely identifies the condition sought, while
avoiding false positives. See additional notes later in the code.
----------------------------------------------------------------------------*/

#include 

#define LED_PIN 13 // LED+ is connected here
#define POLL_INTERVAL (15 * 60) // Time between server queries (seconds)
#define FAIL_INTERVAL 30 // If error, time before reconnect (seconds)
#define READ_TIMEOUT 10000L // Client read timeout, milliseconds

char ssid[] = "AGH",
pass[] = "???",
host[] = "www.gunviolencearchive.org",
page[] = "/";

// This structure is used during string-matching operations. Only the
// 'string' element is initialized here; other elements are initialized
// or modified as needed in multiFind(). This code is NOT AVR-friendly;
// PROGMEM strings are not used, it's assumed this will be running on
// an ESP8266 (or ported to other non-AVR board that just normally puts
// const strings in program memory instead of RAM).
struct stringMatch {
const char * const string;
uint8_t stringLength;
uint8_t matchedLength;
} matchList0[] = {
{ "Number of Deaths1" },
{ NULL } // END OF LIST, don't remove this
}; // Can create add'l string match lists here if needed

WiFiClient client;

String readString;
int deathsThisYear;

void setup(void) {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH); // Steady on = startup
Serial.begin(57600);
Serial.println("Hello!");
}

// STRING-MATCH FUNCTION -----------------------------------------------------

// multiFind() scans a connected Client object for one or more strings
// (NULL-terminated stringMatch array 'list'), returns index of the first
// string matched (0 to n-1) or -1 if timeout or no match.
static int8_t multiFind(struct stringMatch *list) {
uint32_t t;
char c;
uint8_t i;

// Reset all stringMatch items prior to search...
for(i=0; list[i].string; i++) {
list[i].stringLength = strlen(list[i].string);
list[i].matchedLength = 0;
}

for(t=millis();;) {
if(client.available()) { // Data pending from Client?
c = client.read(); // Read it
if(c == 0) break; // End of data reached, no match
for(i=0; list[i].string; i++) { // Compare against each stringMatch item...
if(c == list[i].string[list[i].matchedLength]) { // Matched another byte?
if(++list[i].matchedLength == // Matched whole string?
list[i].stringLength) return i; // WINNER, return index
} else { // Character mismatch, reset counter to start
list[i].matchedLength = 0;
}
}
t = millis(); // Reset timeout
} else if((millis() - t) > READ_TIMEOUT) {
Serial.println("Timeout");
break;
}
}
return -1; // No string match, or timeout
}

void loop() {

uint32_t t, hi, lo, pauseTime = FAIL_INTERVAL;

// Fast blink during WiFi connection...
analogWriteFreq(4); // 4 Hz
analogWrite(LED_PIN, 100); // ~10% duty cycle

Serial.print("WiFi connecting..");
WiFi.begin(ssid, pass);
while(WiFi.status() != WL_CONNECTED) {
Serial.write('.');
delay(500);
}
Serial.println("OK!");

// Slightly slower (but still quick) blink while searching
analogWriteFreq(1); // 1 Hz
analogWrite(LED_PIN, 100); // ~10% duty cycle

Serial.print("Contacting server...");
if(client.connect(host, 80)) {
Serial.print(F("OK\r\nRequesting data..."));
client.print("GET ");
client.print(page);
client.print(" HTTP/1.1\r\nHost: ");
client.print(host);
client.print("\r\nConnection: Close\r\n\r\n");

// multiFind() searches the incoming stream for a list of possible
// string matches, returning the index of the found item (or -1 if
// no match). Stream position will be immediately after the found
// item (allowing further searches to be performed from that point
// forward), or end of stream in -1 case.
// client.find() is the normal Arduino Stream search function, which
// looks for a single item. In this code, we're using multiFind()
// to skip past some of AccuWeather's false positives, to pick a
// starting point for a simple string search that more reliably
// indicates migraine weather in the forecast...
if((multiFind(matchList0) >= 0) &&
client.find("")) { // get past the last HTML before the number we want to capture)
// Found it -- number of kills this year.
Serial.println(F("FOUND"));
for (int i=0; i<6; i++){ // 5 digits and a comma, this will change in January when the count resets char c = client.read(); //gets one byte from serial buffer readString += c; //makes the String readString delay(2); //slow looping to allow buffer to fill with next character } if (readString.length() >0) {
Serial.print("Number of gun deaths in 2017 (as a string): ");
Serial.println(readString); //so you can see the captured String
readString.remove(2, 1); // remove comma (one character at index 2)
deathsThisYear = readString.toInt(); //convert readString into a number
readString="";
Serial.print("now as an integer: ");
Serial.println(deathsThisYear);
}
hi = lo = 500; // 1 Hz, 50% duty cycle
} else { // No match
Serial.println(F("not found"));
hi = 10; // Tiny blip
lo = 3990; // at about 1/4 Hz
}
// This is just one example...more complex code might need multiple
// find() and/or multiSearch() calls with different lists as a sort
// of decision tree.

Serial.println("Closing server connection.");
client.stop();
pauseTime = POLL_INTERVAL;
} else {
Serial.println("failed.");
}
// WiFi is turned off between server queries, to save a little power if
// you decide to make this battery-operated.
Serial.println("Stopping WiFi.");
WiFi.disconnect();
analogWrite(LED_PIN, 0);

// Delay until next server query time. The values of 'hi' and 'lo'
// determine the LED blink speed. This code doesn't use any low-power
// sleep techniques, as the ESP8266 doesn't appear to support PWM while
// sleeping...it has to be blinked in software.
Serial.print("Pausing for ");
Serial.print(pauseTime);
Serial.println(" seconds.");
t = millis();
while((millis() - t) < (pauseTime * 1000)) {
digitalWrite(LED_PIN, HIGH);
delay(hi);
digitalWrite(LED_PIN, LOW);
delay(lo);
}
}

Ben’s Final: Rain Dance

Hey guys, for my final project I’m making a device that plays music counter-intuitive to the weather outside. If it’s bright outside, it plays slow music. When it’s overcast, it plays upbeat music. Here’s the google docs link that contains my rough outline:

https://docs.google.com/document/d/1rBDzoOmlnDeoIzB4RztKJR6GGj0luQSlqoqNkbLG95o/edit?usp=sharing

Evie’s Final Project Outline: Xylophorest

nature-xylophone.jpg

Hi all,

For my final project, I’m exploring how to make a touch-activated xylophone that plays nature sounds (tentative name: Xylophorest). It uses various components by Bare Conductive, a small studio based outside of London (thanks Becky for the recommendation!).

You can read my rough project outline here.

Brainstorming + Huzzah

IMG_0299

1.- Lock Door Alarm: Inspired by my roommates, who never close or lock the door when they come home. The idea is to build an alarm that would turn a light when the door is unlocked and send either an email or ideally lock their phones until they close and lock the door. (I have no idea how you would do the second one)

2.- Lazy-eye patch timer: My niece has a lazy eye and has to wear a patch for an hour each day. She allways forgets to either time it or wear it. The idea is to have a button, and once she presses it the timer would start, the button would the release a patch and a card to play a sort of Tetris – lego game that I can remember what is called. The game helps improve her 3D vision and keep her mind of the fact that she is wearing a patch. once the timer is of she should have finished the game.

3. Plant nanny: I recently bought a plant, because I missed having a garden, the problem is I always neglect my plants. The idea is to have a light, and a reminder sent throughout the day to help me of either water it, take it to het some sun or talk to it.

Huzzah

IMG_0296

 

 

Ben’s Huzzah! and 3 ideas

IMG_20171113_155524.jpgIMG_20171113_155438.jpg

 

IDEAS:

  1. A temperature sensor in a ski boot. This product would be aimed specifically at people on the spectrum who have a difficult time feeling temperature in their extremities.
  2. The same thing (temperature sensor) but for dogs on their collars. Many owners take their dogs out for long walks and having an integrated sensor for your dog while you’re both out on a long walk would give the owner feedback as to when the dog is feeling cold.
  3. This product is for disaster scenarios, specifically floods. When someone is wading through water higher than their knees, it can be difficult to tell what is in front of you, and what, maybe, might trip you and hurt you. I am thinking about a device that would would strap to your shin and include in it a proximity sensor to detect objects in front of you underneath the surface that you would otherwise trip over.