Things used in this project

Hardware components:
peristaltic pump
×1
Fairchild semiconductor pn2222abu. image
General Purpose Transistor NPN
×1
Fairchild semiconductor 1n4004. image
1N4007 – High Voltage, High Current Rated Diode
×1
phenolphtaleine
×1
Intel.web.720.405
Intel Edison
×1
13036 01
SparkFun Block for Intel® Edison - Arduino
×1
Camera (generic)
×1
Tens70
9V battery (generic)
×2
Software apps and online services:
Q8wtlimqnp04fzhtr9v5
IFTTT Maker service
73318 301258139977848 644841747 n
OpenCV
Hand tools and fabrication machines:
Form Labs 3D printer

Custom parts and enclosures

CAD files for microfluidic prototype
Print on Form2 with translucent resin
F7Eg4UfPx8GbMVHUbHfS.3dm

Schematics

Render of millifluidic device
plug it in
5aalg8poqe44qugc668i

Code

DNA detectorPython
This script runs the pump, camera, processes images with openCV and sends a text message with results via IFTTT
#!/usr/bin/env python

import mraa
import time
import numpy as np 
import cv2
import os


button = mraa.Gpio(6)
button.dir(mraa.DIR_IN)

pump = mraa.Gpio(11)
pump.dir(mraa.DIR_OUT)
pump.write(0)

led = mraa.Gpio(12)
led.dir(mraa.DIR_OUT)
led.write(0)

buzzer = mraa.Gpio(4)
buzzer.dir(mraa.DIR_OUT)
buzzer.write(0)

cap = cv2.VideoCapture(0)
ret, frame = cap.read()

# delays
pumpDelay = 45
soakDelay = 15

# iteration = 0


# define range of pink color in HSV
lower_pink = np.array([110,50,50])
upper_pink = np.array([130,255,255])


def captureImage():
        # Take each frame
        ret, frame = cap.read()
        print "read ret: " + str(ret)

        # Convert BGR to HSV
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        return hsv

def readImage(imgname):
        print "read image" + imgname
        img = cv2.imread(imgname,0)
        # Convert BGR to HSV
        hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
        return hsv


def calculatePinkPixels(image):
        mask = cv2.inRange(image, lower_pink, upper_pink)
        return cv2.countNonZero(mask)



def getButtonPress():
        while True:
                if (button.read() == 1):
			print "Button Pressed %f" % (time.time())
                        return
                else:
                        time.sleep(0.05)

def sendCurl(message):
        command = "curl -X POST -H \"Content-Type: application/json\" -d '{\"value1\":\"%s\"}' https://maker.ifttt.com/trigger/dnaDetected/with/key/cTs_Jqc-oa-NLl-jo6dKL1" % (message)
        os.system(command)

def chirpBuzz():
	buzzer.write(1)
	time.sleep(0.05)
        buzzer.write(0)

def takeMeasurement(iteration):
        print "...cap img 1"
        img1 = captureImage()
        # img1 = readImage("test_img#1.jpg")
        cv2.imwrite('/home/root/programs/it%d-img1.jpg' % (iteration), img1, [cv2.IMWRITE_JPEG_QUALITY, 90])
        
        print "...pump 1"
        pump.write(1)
        time.sleep(pumpDelay)

        print "...pump 0"
        pump.write(0)

        time.sleep(soakDelay)
        
        print "...cap img 2"
        img2 = captureImage()
        # img1 = readImage("test_img#2.jpg")
        cv2.imwrite('/home/root/programs/it%d-img2.jpg' % (iteration), img2, [cv2.IMWRITE_JPEG_QUALITY, 90])

        print "...calc pixels"
        diffPinkPixels = calculatePinkPixels(img2) - calculatePinkPixels(img1)
        print "...diff pink pixels %d" % (diffPinkPixels)

        if diffPinkPixels > 100:
                message = "DETECTED"
        else:
                message = "UNDETECTED"

        print "...send curl"
        sendCurl(message)

def run():
        iteration = 0
        while True:
                getButtonPress()

                print "buttonPressed"
                led.write(1)
                print "led on"
                print "start measurement"
                takeMeasurement(iteration)
                print "end measurement"
                led.write(0)
                iteration = iteration + 1



def end():
        print "releasing camera"
        cap.release()        
        

try:
        run()
finally:
        end()

Credits

Vexogkqjv6a2idbkyj8a
Léonard Roussel

Acoustic engineer, sound designer. Grew up in Europe, live in NYC, want to do more sound art by adding behavior to physical or artificial objects.

Replications

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

Comments

Similar projects you might like

Flying Manatee
Advanced
  • 203
  • 5

The Flying Manatee flaps its wings in reaction to motion. It's a great project to get you started with simple DIY maker projects.

DIY Nespresso Capsule Detector
Advanced
  • 1,397
  • 8

Full instructions

If there’s one thing that we geeks love, it’s coffee.

Smart City Tree Management
Advanced
  • 232
  • 5

Protip

Smart City Tree Management uses sensors to monitor wellness of the trees to combat air pollution as well as sound pollution.

Office Neighbor Shield with Arduino
Advanced
  • 608
  • 4

In the following project, we'll show you how to make an Arduino-controlled office neighbor shield.

Ball Tracking
Advanced
  • 1,455
  • 6

Full instructions

Colored ball object tracking.

GuardSight
Advanced
  • 186
  • 3

We help people save, time, money and lives using intelligent data analytics through IoT devices in residential and commercial properties!

GuardSight

Team GuardSight

ProjectsCommunitiesContestsLiveJobsFree StoreBlogAdd projectSign up / Login
Respect project