Introduction: Smart Pillow... How to Make an Alarm Clock Pillow

How to make an Alarm Clock Pillow!

When presented with the challenge to create a "smart object" I choose to concentrate on objects that effect my life everyday. My pillow and my alarm clock. One I adore. The other I do not. I was searching for a solution to my incessant knack for oversleeping, thus the “Alarm Clock Pillow”. This object utilizes the Arduino micro-controller to wake 3 of your 5 senses, not just your ears! The “Alarm Clock Pillow” additionally exemplifies my interest in functional art.

Fuse together the purpose of two separate objects into one "smart-object" in an aesthetically appealing functional piece of art.

Create an “Smart Pillow: Alarm” for all those heavy sleepers out there…

The alarm clock pillow could potentially include:
... Digital Alarm
... Vibrate Function - LilyPad Vibe Board
... Multiple LED Display

Hand and Machine Embroidery

Step 1: List of Supplies:

Supplies for Smart Pillow:

What to make your pillow out of?
Anything!  In this example, I recycled an old t-shirt and an old pillowcase.

ClockIt 1

Real Time Clock - DS3234 1
$9.95 9

4-Digit 7-Segment Display - Yellow

LilyPad Pro Kit
$ 39.95

LilyPad Vibe Board

Fuse-able Interfacing

Conductive Thread


Sewing Machine

Grommet Punch

Solder Iron

Clothes Iron




Red Thread

Blue Thread


Step 2: LED Layout in MAX

MAX/ MSP is a great place to layout LED Matrices.

IMAGE - A proposed LED layout created in MAX 5.

Step 3: Embroidery Work

Create Embroidery Work...

Step 4: Layout - Conductive Thread

After completing embroidery work...

Test connections of LilyPad with conductive thread and LEDs

Choose a piece of cloth, cut to size and apply interfacing to piece of cloth to stitch conductive thread on.

Layout design for conductive thread

Step 5: Machine Stitch Conductive Thread

Use a sewing machine to stitch conductive thread
Color coding the bottom stitch helps to prevent crossing of negative and positive thread lines.

Glue ends of threads

Step 6: Insert Grommets

Insert Grommets to help anchor LEDs.
I’ve used a soldering Iron to make holes to insert grommets into.
The grommets also connect the patch of cloth with conductive thread with embroidery patch.

Step 7: Connect LEDs and Vibe Board

Step 8: Build ClocKit

Follow instructions with kit.  Do not attach speaker.

Step 9: Put All the Pieces Together

Step 10: Completed Pillow and CODE


int digPin[6] = {8, 9, 10, 11, 12 }; // LEDs // 5 "Rounds" of LED's (LED's connected to PIN 2 with light first, then LED's
int vibePin = 7; // VIBE BOARD //
int buzzPin = 4; // ALARM
int isOn = LOW;
int isBuzzerOn = 0;
unsigned long zeroCount = 0;
unsigned long timestash = 0; // Last time I did something.

/* SETUP - initialize variables; runs once; after each powerup/reset of LilyPad (micro-controller) */
void setup()
pinMode(digPin[0], OUTPUT);
pinMode(digPin[1], OUTPUT);
pinMode(digPin[2], OUTPUT);
pinMode(digPin[3], OUTPUT);
pinMode(digPin[4], OUTPUT);
pinMode(digPin[5], OUTPUT);
pinMode(vibePin, OUTPUT);
pinMode(buzzPin, INPUT);

/* LOOP - loops consectively, allowing program to change and respond, actively controls the LilyPad */
void loop()
unsigned long currTime = millis(); // Get my current time // -- This is the mechanism we use to do something every second without using a delay
unsigned long difTime = currTime - timestash; // current time subtracted from saved time to find the difference

// Is the Buzzer On?
if(digitalRead(buzzPin) > 0)
isBuzzerOn = 1;
zeroCount = 0;
} else {
// 20 zeros?
zeroCount +=1;
if(zeroCount > 20)
isBuzzerOn = 0;

if (isBuzzerOn==1) {

if (difTime > 1000) {
timestash = currTime; // I have to put the current time in timestash so I restart the timing
difTime = 0;

if (isOn == LOW) {
isOn = HIGH;
digitalWrite(vibePin, HIGH);
} else {
isOn = LOW;
digitalWrite(vibePin, LOW);

// turn on all the LEDs
digitalWrite(digPin[0], HIGH);
digitalWrite(digPin[1], HIGH);
digitalWrite(digPin[2], HIGH);
digitalWrite(digPin[3], HIGH);
digitalWrite(digPin[4], HIGH);
digitalWrite(digPin[5], HIGH);


// -- end of the one second thing
if (difTime > 100) {
digitalWrite(digPin[0], LOW);
if (difTime > 200) {
digitalWrite(digPin[1], LOW);
if (difTime > 300) {
digitalWrite(digPin[2], LOW);
if (difTime > 400) {
digitalWrite(digPin[3], LOW);
if (difTime > 500) {
digitalWrite(digPin[4], LOW);
if (difTime > 600) {
digitalWrite(digPin[5], LOW);
if (difTime > 700) {
digitalWrite(digPin[6], LOW);