You are on page 1of 2

Project Documentation: Baby Monitor Designer: William Twomey Status: Proof of Concept Project Motivation Listening to a baby breathing

at night can be pretty scary. At times it can be very loud and irregular and other times almost silent. With my first child I stayed up many nights stressing over this, so my motivation for this project was to let me sleep in peace knowing my soon to be delivered (at the time) 2nd child was being carefully monitored. As it turned out, the stress went away with my second child and I am able to sleep like a baby (while the baby is sleeping) even without the monitor. This is good as the Baby Monitor project wasn't a complete success (as described below). In any case, I think it makes for a good proof of concept and wanted to share the results. Project Overview This project uses the Texas Instruments eZ430-Chronos development kit watch that features, among other things, an RF transceiver and USB access point to allow the watch to wirelessly communicate with a computer, a low cost 3-axis accelerometer and a temperature sensor. The idea for this project was simply to modify the watch's software and write a Python based computer application to wirelessly monitor a baby's orientation (to make sure it is sleeping on it's back for SIDS prevention), temperature, and movement (from breathing) as the baby sleeps, and report alarms if the baby is to roll over onto its belly, stop breathing, or get too hot or too cold. The watch's arm bands were cut off and the watch head was placed in a small pouch with a hook and loop seal made from a fabric patch repair kit. Some hook tape was placed on the pouch to allow it to stick to a baby's swaddling blanket on the baby's belly as he sleeps. The purpose of the pouch is to seal up the watch head in a container too large to fit in a baby's mouth. The watch's software was modified to use its acc (accelerometer broadcast) mode. In this mode, the watch typically broadcasts the accelerometer readings for each (x, y, z) axis 33 times a second. The modifications reduced the broadcast time to once a second to save battery life. Instead of sending acceleration data for each axis, the modified broadcast contains: 1) The temperature reading 2) The maximum change in the filtered x and y axes accelerometer readings over the last 1.5 seconds (breathing / movement detection) 3) The z axis acceleration reading (for baby orientation belly/back) The Python script running on a computer monitors this communication packet. If communication is lost due to a dead battery, software glitch, the unit falling out of range, etc., an audible alarm is sounded. Likewise, if the baby is to roll onto its stomach, get too hot or too cold, or experience no breathing movement for a set period of time, a unique audible alarm is sounded (the audible alarms were all created with some incredibly cheesy text to voice freeware).

Success / Failure of Movement Detection, and Future Improvement: There is certainly very little acceleration on the monitor due to a human's stomach and chest rising and falling with each breath. There can be a small amount of angle change, however, on the sensor as it rides the belly up with each inhale and down with each exhale. This angle change (relative to gravity) is what the accelerometer is really looking at on the x / y axes to detect breathing (as opposed to the actual acceleration of the belly). The software was initially developed and tested on (and successfully worked on) myself (a full grown human). But I've found it to only work intermittently on my son due to the fact that the much smaller volume of air he inhales leads to smaller angle changes. When he is breathing lightly, therefore, there can be some false alarms. The problem I believe I'm having is not so much with the concept (it did work on myself), but with the course resolution and high noise levels of the accelerometer. The 3-axis accelerometer used in the watch is a very low cost unit that has extremely course resolution of 56 counts per G. 1/56 Gs or 0.0178571429 Gs equates to only approximately 1 degree of resolution (when the angle is close to 0). tilt_angle = arcsin( acceleration_reading / 1 G) In an attempt to get greater resolution I used a moving average of 10 consecutive samples. The maximum noise level of this average ended up being around 0.7 counts when the monitor is motionless. This forced me to use a movement threshold of 0.8 averaged counts, which is too small to consistently detect my son's breathing (I was getting a lot of false alarms). The poor quality of the accelerometer (for this application) forced me to make a tradeoff between false alarms or missed alarms (the inability to detect no motion). I believe with a better quality 3-axis accelerometer that has higher resolution and lower noise, the concept could be implemented more successfully. Limitations of Movement Detection: There are some obvious limitations to this method of movement detection. If the baby is placed in a swing or bouncer, for example, the movement from the bouncer or swing will easily trigger the motion limit regardless of any motion from the baby. Software Design Notes: Changes to the TI Chronos watch firmware changes can be found in the main.c and rfsimpliciti.c files, as well as the addition of the baby_monitor.c and baby_monitor.h files. I attempted to precede firmware changes with a // Baby Monitor comment, but may have not been 100% consistent in doing this. The firmware and Python code was thrown together pretty quickly so don't be too judgmental of its quality or expect safety critical quality code. I make no guarantees regarding the quality of this project and as pointed out before, it is just a proof on concept that was not totally successful.

You might also like