Getting up in the morning, well, it kinda sucks.
The Wake-a-tron 3000 is here to change waking up forever. It is designed to both make you wake up comfortably, but also guarantee that you do not snooze and oversleep. But how can we improve our waking up experience?
The most important thing is to use the elements which naturally wakes us up, light and sound. Sunlight is especially effective, and is a big part of why this system works. To make a smooth transition from deep sleep, we gradually increase the amount of light and sound over a period of 15 minutes. To prevent snoozing and oversleeping, the system has a sensor in the bed, which can tell if you are actually up or not. In addition, it heats up the room to a comfortable temperature in good time before waking you up.
Let us first take a look at the components in the system, and then we will go trough its wakeup sequence.
The bed sensor is a weight cell salvaged from a normal bath weight. It is mounted under one of the beds legs, measuring about 1/4 of the total weight of the bed. We could mount one sensor on each leg, but it proved sufficient with just one.
The weight cell is a variable resistor, which changes its resistance with a tiny amount when force is applied to it. This tiny change in resistance cannot be detected with a simple voltage divided circuit, so we must use a Wheatstone bridge and an instrumentation amplifier. The output from the amplifier is a voltage which can be read by analog input on a microcontroller.
The lights and heat oven are controlled by wireless power switches from Nexa. These operate on 433 Mhz, and can easily be used with a simple 433 Mhz transmitter from ebay or similar sources. The Nexa protocol is described here, and several libraries exist that allows easy implementation of the protocol. I will get back to this further down. The lights are normal lamps connected to the Nexa switch. The heater oven is a wall mounted electric oven, also connected to a Nexa switch.
Sunlight is let into the room by rolling up a motorized rolled blind. It is a standard IKEA roller blind, which has been fitted with a strong 12v DC motor. Two holes was drilled into the standard bracket for the roller blind, which fit the motor. The motor shaft is connected to the roller blinds though a motor coupling fastened with two-component epoxy. The motor is supplied by a dedicated 12v motor driver, able to deliver about 2A of current.
In order to control the roller blinds correctly, there is two IR proximity sensors mounted in the window frame. On detects when the roller blind is up, and one when is is down. The are fitted with some simple 3d-printed casings and mounted with blue tack.
A simple control box is also included to be able to control the blinds manually. This box has been trough many revisions, hence the many unnecessary holes.
A Raspberry Pi mini-computer is used to play music, as well as to execute the alarm sequence at the right time and in the right order. The PI is running a python script using the pygame library to play music. The music is played on a small portable speaker, connected to the PI with a mini-jack cable.
An Arduino Nano is connected to the Raspberry Pi through a USB cable, and they communicate with with each other through a serial link. The Arduino is mounted on a small prototyping board, along with some connectors and the instrumentation amplifier. All sensors in the system is connected to the arduino, including the buttons controls for the roller blind. The Arduino also handles the motor control and 433 Mhz radio transmissions for turning on the lights and heater oven. It uses a library called NexaCtrl to transmit to the Nexa switches. The weight cell bed sensor is connected to analog port through the instrumentation amplifier, and the rest is connected to normal digital GPIO ports.
During all the following steps, the bed sensor is checked every seconds to see if someone is in the bed. If there is no one in bed, it will pause the alarm. It will continue the alarm if someone goes back to bed again.
- Turn on the heater oven 1 hour before wakeup time
- Start playing chill music at low volume, this should only wake someone in very light sleep. Current choice : Gladiator Theme by Hanz Zimmer / Lisa Gerrard
- Turn on the lamps in the room
- Play another song at slightly higher volume. Current choice: Morgenstemning by Edward Grieg
- Roll up the roller blinds and let the sunlight in.
- Play a bit more energetic song. Current choice: Hoppípolla by Sigur Rós
- Play an even more energetic song. Current choice: Flutterby by Philter
- Play a metal song which is borderline annoying. Current choice: Get up by Korn / Skrillex
This wakeup system has proven to be very effective, especially in the parts of the year when the sun is actually up in the morning. It is possible to extend the system with some UV lamps, but normal lamps are pretty effective too. The urge to snooze it not all gone however, so hiding any off buttons or power cables out of reach is essential.
In general, the system provides a very comfortable way of waking up. Instead of being ripped away from sweet slumber by an awful alarm sound, one is carefully woken up by soothing music. Initial studies indicate that this system might reduce morning grumpiness by up to 90%.
Now we only need to create an automated coffee-maker to go with it.