Things used in this project

Hardware components:
Photon new
Particle Photon
12002 04
Breadboard (generic)
MikroElektronika Alcohol Click
Software apps and online services:
Zpm toolbar 1
Zerynth Studio
Zerynth lamp app
Zerynth App


Alcohol tester code - Zerynth App - TemplateHTML (Ruby)

  <meta name="viewport" content="width=device-width, initial-scale=1">

  <div data-role="page">
    <div data-role="header">
      <h1>IoT Alcohol Tester</h1></div>
    <div role="main" class="ui-content" style="text-align:center">
          <div class="demo-gauge" style="position: relative; height: 380px;">
        <div id='gauge' style="position: relative; margin: auto;">
    <p id="label" style="color:#468c8c; font-size:36px;" >Blooooooooow!</p>
    <div data-role="footer">Powered by Zerynth</div>
 $(document).ready(function () {
                 ranges: [{ startValue: 0, endValue: 60, style: { fill: '#4cb848', stroke: '#4cb848' }, startDistance: 0, endDistance: 0 },
                         { startValue: 60, endValue: 80, style: { fill: '#fad00b', stroke: '#fad00b' }, startDistance: 0, endDistance: 0 },
                         { startValue: 80, endValue: 100, style: { fill: '#e53d37', stroke: '#e53d37' }, startDistance: 0, endDistance: 0}],
                cap: { size: '5%', style: { fill: '#2e79bb', stroke: '#2e79bb'} },
                border: { style: { fill: '#8e9495', stroke: '#7b8384', 'stroke-width': 1 }, visible: false},
                ticksMinor: { interval: 5, size: '5%' },
                ticksMajor: { interval: 20, size: '10%' },       
                labels: { position: 'outside', interval: 20 },
                pointer: { style: { fill: '#2e79bb' }, width: 5 }, 
                value: 0,
                max: 100,
                animationDuration: 1000
            msg_ok = "Keep Calm and Drink Beer!";
            msg_no = "You're drunk, go home! (Don't Drive!)";
            function update_graph(x){
            $("#gauge").jqxGauge('setValue', x)
            function update_label(msg){
            if (msg == 0){
            } else if (msg == 1) {
Alcohol tester code - Zerynth StudioPython
# IoT Alcohol Tester

# import everything needed
import streams
from wireless import wifi
from broadcom.bcm43362 import bcm43362 as wifi_driver
from zerynthapp import zerynthapp
import adc


# save the template.html in the board flash with new_resource

# init the wifi driver!
# The driver automatically registers itself to the wifi interface
# with the correct configuration for the selected board

# connect to a wifi network
    # use the wifi interface to link to the Access Point
    # change network name, security and password as needed
    print("Establishing Link...")"wifi-name", wifi.WIFI_WPA2, "wifi-password")
except Exception as e:

def map_range(x, in_min, in_max, out_min, out_max):
    if x < in_min:
        x = in_min
    elif x > in_max:
        x = in_max
    return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

# Configure and run the Zerynth App instance

zp = zerynthapp.ZerynthApp("IoT Alcohol Tester", "Yeah, an IoT breathalyzer", "resource://template.html", logging=True)

msgs = ["Keep Calm and Drink Beer!", "You're drunk, go home! (Don't Drive!)"]
x =
max_in = 1100  # set the potentiometer to low and check the max value
range = 100
threshold = 80
x_old = map_range(x, 0, max_in, 0, range)

while True:
    # read from adc
    x =
    x = map_range(x, 0, max_in, 0, range)
    # send the value to the mobile app via a notification event called "adc"
    # the notification is sent only after the mobile app to zerynth script link is established ;)
    zp.notify("adc", x)
    if x <= threshold and x_old >= threshold:
        zp.notify("show_msg", 0)
    elif x > threshold and x_old < threshold:
        zp.notify("show_msg", 1)
    x_old = x
IoT Alcohol Tester

Yeah, an IoT breathalyzer



Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback


Similar projects you might like

Direct Photon to TP-Link Device Control
  • 276
  • 7

Full instructions

Add this small file to your project to control TP-Link bulbs and plugs directly with simple subroutine calls.

Poor Man's CAN Bus
  • 154
  • 4


Learn how to connect microcontrollers together using the CAN bus by using a simple AND gate

Hackster Live April 2017 Workshop - Optional - Easy Add-on
  • 113
  • 2

Full instructions

Adapt your home automation project from our March 2017 workshop to be controlled through BLE using the Blynk app on your phone.

Internet Connected Bubble Machine
  • 32
  • 2

Full instructions

Make it possible to activate a bubble machine from anywhere using a Particle Photon

MyPIR-Sensor activate analog RGB Stripe controlled by Photon
  • 85
  • 2

Full instructions

At my age you have to get up at night and get tired on the way to the bathroom. Using a PIR-Sensor to trigger light on!

Weather Box
  • 2,183
  • 11

Full instructions

Small weather station that uploads to Weather Underground with a NeoPixel ring for visualization.

ProjectsCommunitiesContestsLiveAppsBetaFree StoreBlogAdd projectSign up / Login
Respect project