Results Compromises Usability Safety Standards and Originality


High Level Design

Program/Hardware Design


(Or: We’re pretty sure that we performed extensive testing of the alcohol sensor, but, for some reason, we just can’t remember)

As we have already mentioned several times in this report, the pressure sensor stopped working early on, which was a serious setback. We thought at first that its response became unpredictable, but after reversing the vacuum and pressure sides of the sensor (turning it around so that the side that was initially inside the balloon was instead outside and vice versa), we found that the response was mildly consistent. Using a set of simple heuristics which detect when the pressure response rises by a certain voltage, instead of detecting when it goes above a preset voltage, we were able to detect breathing most of the time. Because it isn’t always possible to initiate sample acquisition by breathing, we allow the user to press the Blue Button to force sample acquisition.

Testing of the ETOH sensor was performed by sippin’ on gin and juice, and then huffing and puffing like the big bad wolf into the mouthpiece. We compared our results to charts from (see the appendix), and adjusted the sensor’s fundamental constant (R0) accordingly. We were determined to test the Breath-o-Matic to the limit of its abilities, and we soon found ourselves lying naked on the Arts Quad, covered in multicolored body paint, with no memory of the last 32 hours’ events*. Unfortunately, this calibration method is unlikely to be very precise, so we're not entirely sure how accurate the Breath-o-Matic is. Assuming that our equations to convert from PPM to BAC are correct, and the ETOH sensor performs as advertised, we figure that the Breath-o-Matic is probably accurate to about 0.02 up to a BAC of 0.3 or so. After that point, we are limited by the resolution of the ADC and the quality of the sample.


We set the upper limit on the six LEDs at a BAC of 0.13, which is relatively conservative (approximately four drinks for a 140 pound male). We set this limit to be low, because we knew that a higher limit would encourage some harebrained frat boy to attempt to achieve it, regardless of what the limit actually was, be it a BAC of 0.35 (unconsciousness) or 0.5 (death). We feel that giving no relevant feedback beyond a BAC of 0.13 discourages this sort of irresponsible (and, presumably, puketastic) behavior. Our high score list is also limited to a BAC of 0.20.

Our high score list was tested by infusing the Breath-o-Matic with different quantities of alcohol, and seeing whether a higher BAC beat a lower one. After remembering that to convert from PPM to BAC we needed to divide by a million somewhere along the lines, the results started making sense, and the high score list proved its worth quite admirably.

We noted that the TGS 2620 takes a very long time to settle after each sample (on the order of five minutes), and it only does settle if it is well ventilated. Therefore, we flash a message on the LCD if the sensor has not yet settled (though we still allow a sample to be taken), and we have to manually ventilate the sensor after each reading (either by removing it from the pressure chamber, or by pumping air into the pressure chamber).


Overall, we think that the Breath-o-Matic works well. We had initially planned on measuring temperature and humidity at the alcohol sensor, because the TGS 2620's response depends on these factors. However, we decided that the parts were too expensive, and everybody's breath is about the same temperature and humidity.

We also ditched the spec’d power button in favor of a switch. Originally, we were going to have the button put the MCU to sleep and turn off all of the external circuitry; however, this idea was fraught with problems, including weird coding bugs and the external circuit not fully shutting down. So, like any good designer, we gave up. In the same vein, we eliminated the option of saving high scores to EEPROM, because we were unable to get the the scores to save correctly. So high scores are saved in SRAM.

In addition, we used a different sensor than what we had originally planned on (we’d planned on using a fuel cell, which by itself, would have exceeded our budget). Our choice of sensor, the TGS 2620, sells for only $5 in quantity, and we got a free sample.

Finally, we had originally implemented a Warming Up state for the Breath-o-Matic's Main State Machine. Because the TGS 2620's resistance spikes initially after it is charged (after the Breath-o-Matic is turned on), we originally used this state to halt operation until the voltage had settled. However, because the TGS 2620's resistance also settled so slowly after each sample, the Warming Up state was being entered erroneously. Instead, we now just have a warning when the TGS 2620's resistance is below its zero-PPM value.

We’re satisfied by the final Breath-o-Matic, but, of course, given more time, money, mechanical competence, and force of will, we certainly could have made it even more awesome. See the “In Retrospect…” section for details.

(Or: LimBAC(usability)=0)

Using the Breath-o-Matic is, in principle, quite simple: drink your fill, wait 15 minutes (so that alcohol in the mouth is not erroneously detected), take a deep breath and blow into the mouthpiece for five seconds. On the (not so) rare occasion that sample acquisition does not begin automatically, press the Blue Button as you start blowing to force a sample to be taken. All other actions are accomplished by pressing one of two hardware buttons, except for entering a name for the high score list, which uses only the alphanumeric characters, including space and Enter on a computer keyboard.

Menus on the Breath-o-Matic are clear and uncluttered, and the two non-keyboard buttons that we use are large and differently-colored (Blue and Green). Sample acquisition has audible and visual feedback to assure the user that the Breath-o-Matic is performing an action; while taking and analyzing a sample, the Breath-o-Matic beeps and blinks the red LED. Additionally, when the BAC is calculated, the Breath-o-Matic plays tunes and lights LEDs in a jovial fashion to indicate the user’s BAC range.

High score list entry is simple; when prompted to enter their name, the user simply types their name on the keyboard, up to 12 characters. If they make a mistake, the user can use the backspace key, and when they are finished, the Enter key saves the name. The advantage of a computer keyboard is that it has all of the letters right on it, so we don’t have to deal with horrible interfaces where you have to select each individual letter from a list. Also, everyone has a computer keyboard; if you need one, you can just hop over to your computer and use your own. The disadvantage is that you have to lug a freakin’ keyboard around, which could be a problem on festive outdoor events, such as Slope Day. Fortunately, the user can elect to skip name entry by pressing the Green Button, so the keyboard (and, by extension, high score entry) is not a required feature.

Some factors, such as inebriation, may reduce the usability of our interface. Though it’s difficult to compensate for such an effect, our large buttons and simple menus will probably make it through the vodka-thickened skulls of most users. If not, they may at least be amused by our spirited sounds and blinky lights. And honestly, if the Breath-o-Matic elicits even one drooling, unfocused grin from a satisfied user, then truly, we have succeeded.

(Or: We make no guarantees as to the stability of the user's life insurance policy premiums during or after the use of this device)

There are two main safety considerations regarding the Breath-o-Matic, which we will address in ascending order, where ascending is defined as “the order in which we will list these safety considerations.”

The first concern is perhaps the most obvious: the Breath-o-Matic may inspire the users to attempt to achieve the “ultimate high score,” which is probably better known as “an ambulance ride.” One of us (Dan) is a volunteer firefighter, who often must go on EMS calls at 2:30am where some goon has had four shots of whiskey, four shots of vodka, four shots of mouthwash, and four shots of NyQuil and is feeling very confused indeed, and must to be taken to the hospital. The annoyance level of this sort of call cannot be summarized in words that are fit to print. For this reason and others (“morality”, for example), we do not wish that the Breath-o-Matic be used as a vehicle or excuse for excessive drinking. Thus, no additional LEDs light beyond a BAC of 0.13, and our high score list is capped at a BAC of 0.2. Neither level is dangerous.

The second concern is one of hygiene, in the form of the saliva deposits on and in the Breath-o-Matic. Saliva can transmit a very large variety of diseases, from the innocuous (common cold) to the life-threatening (Hepatitis B). To combat saliva sharing, we recommend different mouthpieces and filters for each person. Thus, saliva ceases to be a concern unless the user accidentally inhales instead of exhales, which we don’t think is very likely.

Standards and Originality

We use a standard 104-key PS/2 keyboard for high score entry, which conforms to the IBM PS/2 standard. Serial communication through a PS/2 keyboard works as follows: when a key is pressed on the keyboard, the keyboard sends the scancode for the key; if the key is held down, the scancode is sent repeatedly. The keyboard's internal clock is only running when the keyboard is sending data. When the key is released, the scancode "F0" is sent, followed by the key's original scancode. This sort of communication is easy to read with the Mega32's USART, but it's a downright pain in our gluteal muscles that the scancodes don't correspond to ACSII. So we have to parse them.

The design of the Breath-o-Matic was completely original, and thus does not infringe on any existing copyrights, patents, trademarks, watermarks, birthmarks, skidmarks, signatures, likenesses, territorial urinations or acts of congress. To our knowledge.