How can I sense when someone is sleeping with my Arduino?
I actually did something like this, using a PIR Motion sensor.

The motion sensor is good enough to detect a person turning in their sleep, and my simple algorithm just counts movements per minute and when its over a threshold (found by trial and error), it sounds the alarm to wake you up.



The image above represents my body movements during a night. The spikes represent a high movements/minute.


  Here we see after about 30 minutes body motion was minimal. This suggests I was in a deeper stage of sleep during that time.
  
  The spike at 250 minutes (around 4:30AM) is when I woke up only to
  realize I could sleep for couple of hours longer. I recall the time
  being 4:38 when I looked at my clock and I was already facing it. This
  means I turned around to face the clock but actually "woke up" 8
  minutes later to see the time, and then turned back around (indicated
  by the shorter spike at 265).
  
  The data suggests I was not able to sleep very well (compared to the
  time period between 30 and 240 minutes) after waking up once and
  finally got up at 400 minutes (7:00AM), when I shut everything down.


Here are a couple of posts from my blog that have a lot more information.


Body Movement During Sleep
Intelligent Alarm Clock Hardware