Posts Tagged 'toaster'
2013-08-04

A few weeks ago, while being entranced by a software bug, I failed to keep an eye on the clock and thus I missed a work meeting. Do you know when that tragedy is going to happen again? never. Obviously, I need to set some sort of alarm...

In my minds eye, I had a vision of what I wanted the alarm to do: play an audio file and flash some lights. Fortunately, the software I've been writing could almost do what I wanted to do. almost. A bit of code hacking needed to be done.

For audio playback, MuttonChop media player was installed on the toaster(which has an amplifier and speaker). A Star Trek Alert was selected as the audio to play when the alarm goes off. However, before the alarm would work as I wanted, I needed to add a bit of code to MuttonChop to make a playing file loop over and over. In the MuttonChop API, this resulted in the following new API calls:

  1. HOST:PORT/player/loop
    retrieves the loop state of the player
  2. HOST:PORT/player/loop/true
    set the player loop state to 'true'
  3. HOST:PORT/player/loop/false
    set the player loop state to 'false' (to be fair, anything that is not 'true' will result in 'false')

Rad, that takes care of the audio aspect of the alarm. On to the lights!

GLMR(the GLRM Light Manipulation Regulator) installed on a Raspberry Pi affectionately named "shitbird", will handle the light needs. However, after running some tests I quickly realized that I would need a quick and easy way to revert the lights to their "pre-alarm" state. A bit of code caking later and two new API paths were added to GLMR:

  1. HOST:PORT/color/previous
    set the LEDs to their previous set color
  2. HOST:PORT/mode/previous
    set the LEDs to their previous set mode

Booyah! Now it is simply a matter of creating an alarm for the Ruby Web Alarm project.

enter the shell script

#!/bin/sh
# call the API to play audio file with ID of 1
curl fruity:2876/audio/play/1
# set the looping to 'true'
curl fruity:2876/player/loop/true
#crank up the volume
curl fruity:2876/player/volume/100

#set the glmr mode to 'twinkle'
curl shitbird:4567/mode/twinkle
#set the LEDs to full red
curl shitbird:4567/color/ff0000

...And finally, there needs to be a way to turn off the alarm. To keep shit sweet, I decided to use the 'Cancel' button on the face of the toaster to run a 'cancel alarm' ruby script.

Enter the Ruby

#!/usr/bin/env ruby
require 'json'
require 'open-uri'

#get the status of muttonchop on fruity
url "http://fruity:2876/player/status"
openurl do |f|
  status JSON.parsef.read() )
  #is the machine playing an alert?
  if status['state']=="PLAYING" && status['album']=='Alert'
    #stop the muttonchop player
    open("http://fruity:2876/player/stop")
  end
end

#check the glmr status on shitbird
open("http://shitbird:4567/status"do |f|
  status JSON.parse(f.read() )
  # if the alarm is running
  if status['color']=='ff0000' && status['mode']=='twinkle'
    #revert the color
    open("http://shitbird:4567/color/previous")
    #revert the mode
    open("http://shitbird:4567/mode/previous")
  end
end

Alrighty! The alarm goes on, and the alarm goes off; but what does it look/sound like?

It may not be the greatest alarm ever, but it is highly effective. Now quite reading, and go set an alarm.

Comments
2013-08-05 Alison Chaiken:
Okay, I admit it's cooler than the Pebble watch.
Name:
not required
Email:
not required (will not be displayed)
Website:
not required (will link your name to your site)
Comment:
required
Please do not post HTML code or bbcode unless you want it to show up as code in your post. (or if you are a blog spammer, in which case, you probably aren't reading this anyway).
Prove you are human by solving a math problem! I'm sorry, but due to an increase of blog spam, I've had to implement a CAPTCHA.
Problem:
7 minus 5
Answer:
required
2013-02-02

Solitude is my muse, and taking things apart keeps me from getting depressed. However, it is still nice to hear other people say nice things so I decided to convert a toaster into an interactive art project that says nice things when something (usually me) walks in front of it.

The Build

TAKE IT APART!

The first step to any great project seems to begin with a bit of destruction. Good. Nothing really clears my mind like taking something apart. Yea, I laughed when I bought the toaster and I'm still laughing now.

The toaster was soon gutted and a bunch of innards where chucked in the waste bin.

Make some mounting thingies

For this build, I planned on using the Raspberry Pi from the NaNoBox and since someone is a hobby hardware hacker hater, there are no mounting holes on my Raspberry Pi. sigh. Who's a liar? ME (sort of). I said I wouldn't use the Raspberry Pi for a similar project. Fortunately, this project isn't too similar.

A small wooden block was epoxied to the toast box (at least that is my name for it). Similarly, a piece of thick plastic from VHS case was also epoxied to the toast box.

Circuit from the shell

Surrounding the toast box is the toaster shell, and this is the circuit board that was mounted inside of the toaster shell. On the circuit are 3 buttons and two LEDs.

After a bit of scratching at the circuit board and some soldering, the buttons and LEDs where ready to be wired up.

The circuit back in the shell

Oh man, look at that rat's nest of wires.

This is the inside of the shell with most of the wiring finished. This includes the PIR thingy. What's a PIR thingy you might ask? good question.

PIR Thingy

Hey look, kids, it's a PIR thingy! This Passive InfraRed sensor thingy was purchased at https://www.adafruit.com/products/189 for 10 bucks.

A notch was cut in the toaster's lever channel and the PIR was hot glued into place. Damn, I love adhesives.

Sound!

My buddy gave me a small USB amplifier and speaker combo used for plugging into a mobile phone.

In my haste, I obliterated the amplifier before taking a pictures. What a shame. The wires on the amp were to frail for my needs so I soldered on some heavier wires for audio in, audio out, and the power connector. Since the amp was originally powered over USB I figured I could wire it to the 5v pin on the Raspberry Pi. The speaker is from another portable amplifier.

Buckle up

Like I've said may times, the designer of the Raspberry Pi hates me and didn't include mounting holes on the board. Because of this, I needed to find a creative way to keep the board in place and my solution was a nice little 'belt'.

To keep the number of cable going to the toaster to a minimum, an old USB 802.11g was connected to the board.

Add some more LEDs

Aside from the two bright blue LEDs on the toaster shell, I added a green LED to each slot of the toaster box.

All Together

With much finagling, the toaster box and the copious amount of wires was stuffed into the toaster shell and the end result was put on a desk and pointed at the busiest foot traffic area of my home.

The toaster lever, although no longer in use, was hot glued back where it belongs and helps hide the PIR sensor.

What does it do?

When the sensor detects movement, an audio file is selected at random from a directory of audio files, and played through the speaker. While the audio is playing, the LEDs are flashing.

some of the setup

The code for running the toaster is written in python and utilizes gstreamer-0.10 for audio playing. In order to get gstreamer to default to playing through the 'audio out' on the Raspberry Pi, I had to edit the /etc/asound.conf file to look like the following:

pcm.mmap0 {  
  type mmap_emul;  
  slave {  
    pcm "hw:0,0";   
  }  
}   
  
pcm.!default {  
  type plug;  
  slave {  
    pcm mmap0;  
  }  
}  

Switches

Due to the lack of GPIO documentation for the Raspberry Pi, most tutorials for the device involved wiring in "pull-up" resistor which means that extra work is involved just to get a simple button press to register. However, pins 3,5,7,24, and 26 have built in pull up resistors which makes these pins ideal for connection switches.

Most (if not all) of the information I needed for programming the pins on the Raspberry Pi came from http://www.panu.it/raspberry/ and not from the Raspberry Pi website. Seriously, this is wrong. The RPi website should have some useful information, but alas, it does not.

What's next?

The power for the amplifier was specifically not taken from the one remaining USB port. It would be fairly trivial to plug a USB camera into the USB and, when the PIR detects motion, have the camera take a picture and then upload the picture to a back up server. Hella cheap home security system. booyah!

Also, I need to figure out what to do the the buttons.

if your browser doesn't play ogg files, you should switch browsers

Why? Because if your browser doesn't play ogg:

  1. your browser hates freedom
  2. you won't be able to hear
    duh!

The System

Like almost all of my computers, the toaster is running Arch Linux

Now quit reading and go make something...

Comments
2013-02-03 Kathy:
So all that taking apart of toys has come in handy! Interesting project. Brilliant thinker.....
2013-02-14 Alison Chaiken:
I can think of lots of other household items that don't make toast. I'll give you one the next time I see you.
2013-05-10 James F:
Dude! You've gotta recreate the toaster from Red Dwarf, you cant not! :D
2013-05-10 jezra:
James, the toaster has a few audio files from "Talky" on it.

"Talky's the name, toasting's the game."
Name:
not required
Email:
not required (will not be displayed)
Website:
not required (will link your name to your site)
Comment:
required
Please do not post HTML code or bbcode unless you want it to show up as code in your post. (or if you are a blog spammer, in which case, you probably aren't reading this anyway).
Prove you are human by solving a math problem! I'm sorry, but due to an increase of blog spam, I've had to implement a CAPTCHA.
Problem:
1 plus 8
Answer:
required
subscribe
 
2019
2016
2015
2014
2013
2012
2011
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008