More Internet of Things

This week, we continued our exploration in Internet of Things.

First, we connected an LED to Adafruit IO.  In the video below you’ll see that the app on the screen receives inputs when I press the button

In the next section of the assignment, the app sends me an email each time I press the button that also turns on the LED

We also added a neopixel into the mix by incorporating the Adafruit Neopixel library!

I also played around with a widget on my phone.  It was a little hard to take a video, but here is a snapshot of my phone screen

This next part was fun as well as we saw two circuits react identically to an input

Since I am still a little behind on the project, I will need just a little extra time to submit the BOM and circuit.  Will update shortly!

Aquaponic Farm

I am looking at this tutorial: https://www.instructables.com/id/Simple-Arduino-Controlled-Aquaponic-System/

Felix, Helen Marko and I are going to work on it the aquaponic farm.

BOM from the tutorial:

Full BOM

Principal Components
Pump
Grow bed
Fish tank
Sump tank
Stand

Bell Siphon
25mm polypropolene tank fitting
1 off. 25mm female threaded fitting
1 off. short length* ~100mm length of pvc pipe.  note that this length is critical in determining the top level of the water during the flood cycle.
1 length off 50mm PvC pipe
1 off. 50mm Pvc endcap

Media Filter
90mm PVC pipe
90mm end cap

Outlet Pipe
1 off. 25mm male threaded fitting
1 off. 25mm 90 deg elbows
2 off. short lengths of 25mm pvc pipe to join fittings
2 off. 25mm 90 deg elbows
1 off. 25mm ‘T’ fitting
1 off. 25mm female threaded adapter
2 off. 25mm threaded male to 19mm barbed hose fitting (poly propylene)
2 off. 25mm end caps
2 off. 25mm pvc pipe cut to 200mm (depends on width of your grow bed)
various short lengths of 25mm pvc pipe to join fittings

Overflow Pipe
1 off. 50mm polypropolene tank fitting
1 off. 50mm female threaded adapter
Chicken wire

Electronics
Arduino
ATX power supply
Relay Kit
Enclosure

Final Project Proposals.

My three ideas all revolve around home automation. Something I have long desired to geek out in.

Concept 1 – On-Time Light Switch

On-Time Light Switch.jpeg

The idea is to replace the light switch in my wall with an Arduino, a motion sensor and an arcade button.

The Arduino will connect with an online calendar to drive several different behaviors.

  • Night time : lights turn on low or dimmed. They stay on for 1 min.
  • Morning (but after my alarms) : Light fades up from dim to bright. They stay on for 10 min.
  • Morning Routine (class days) : Lights blink/fade to indicate the amount of time until departure. 30 min out / 15 min out / 5 min out / GO
  • Arcade button flips through several preset behaviors (eg, guest mode, cleaning time, entertaining, etc)

 

Concept 2 – Guitar Pedal Wireless Light Control Center

Light Control Center.jpg

This device would act as Mission Control for a bunch of relays and dimmers that are running on each cluster of lights in each of the zones of my apartment.

The rocking pedal adjusts the “effect” be it brightness, color, pattern, etc. Primarily brightness.

The other buttons and switches control the different “zones of light. (each room tends to have both direct and ambient lighting.)

 

Concept 3 – Guitar Pedal Wireless iTunes control

iTunes Control.jpg

The rocking on the pedal will adjust the master volume. The tap switch pauses and plays the music.

Additionally, I would like to imbed the ability for it to auto-pause when I leave the apartment/area and to play again when I get home.

 

 

Halloween Costume by Group HeyHeyHey

The members of group Hey Hey Hey are: Sherry, Leng and Annapenguin

Above showcase our final concept for our costume. It is a penguin floating on a cloud. The concept was inspired by our combined admiration for penguins and the addition for the cloud is for the penguin to float around trying to find a new home because his home back in the Antartica is slowly melting away.

Here is our making process.

资源 2.png

Week one: we figured out the pattern of the hood and made the prototype of it, and started coding and sawing at the same time.

S2

Week 2: We continued sewing and soldering from last week. We also made the “cloud” by stuffing and placed the circuit inside it. Then we connected the hood and the cloud, which was quite hard because the circuit needs to go through both the hood and the cloud and stay still on its proposed position, and we also need to find ways to hide the Arduino board and the wires. At last, we filled the hood with stuffing and finished all the connection and details.

s1

6.jpg

Feeling from Leng:

I feel very excited to interact with the audience and see others taking pictures with us. And as an international student, I feel the enthusiasm of local people. Although it is a little hot to wear, I am very happy to experience different cultures.

Two Fridas

The photos from the parade!

The parade was a lot of fun and definitely worth the effort we put into make the costume.

IMG_8462P2290614IMG_8422img_8391.jpg

IMG_8389

Embroidering the heart – we created the graphics in vector and used the embroidery machine to stitch the outline of the heart on the fabric. We learned that the density of the stitch is very important as it broke the needle while stitching! Testing the density and how stable the tension is imperative.

DSC_0086

img_8368.jpgTesting the circuit for two LEDs fading

 

The code used for the two fading hearts and LED strip in between the hearts that goes back and forth.

 

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 4

LORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRBW + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

int led = 9;// the PWM pin the LED is attached to
//int led2 = 3;
int brightness = 0;    // how bright the LED is
int fadeAmount = 8;    // how many points to fade the LED by

void setup() {
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code

pinMode(led, OUTPUT);
//pinMode(led2, OUTPUT);

strip.begin();
strip.show(); // Initialize all pixels to 'off'
}

void loop() {
// Some example procedures showing how to display to the pixels:
colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color(0, 0, 0), 50); // Red
colorWipeReverse(strip.Color(255, 0, 0), 50); // Red
colorWipeReverse(strip.Color(0, 0, 0), 50); // Red

}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {

//analogWrite(led2, brightness);
analogWrite(led, brightness);

// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect

strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
// Fill the dots one after the other with a color
void colorWipeReverse(uint32_t c, uint8_t wait) {
for(uint16_t i=strip.numPixels(); i>0; i--) {

//analogWrite(led2, brightness);
analogWrite(led, brightness);

// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}

strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}