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.

Contact

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

Hank the HexaPod - Mega Bread Robotics Series # 7
Advanced
  • 182
  • 5

Work in progress

After a few months of gathering parts, reading about the new hardware, and ripping my hair out due to no support. I done did it Paw.

Punch Activated Arm Flamethrowers (Real Firebending)
Advanced
  • 43,726
  • 335

Shoot fireballs from your fists when you throw a punch with these arm mounted smart flamethrowers!

Get Nostalgic and Use Nokia 84x48 LCD with Arduino
Advanced
  • 3,183
  • 14

Protip

These 84 by 48 pixel LCDs are what you might have found in Nokia 3310. And what about using them in the Arduino projects?

GPS + WiFi Rover
Advanced
  • 1,486
  • 14

Full instructions

An outdoor rover, capable of autonomous navigation (using GPS and sonar sensors) or controlled over WiFi.

Smart Energy Monitor Based on Arduino
Advanced
  • 451
  • 3

Full instructions

Open source Smart energy monitor with some new features like "Terminal Commands " , "Readings Logger", "Data Plotting ".

Identifying Birds Using Machine Learning
Advanced
  • 500
  • 5

Full instructions

We use the Intel Edison to record bird vocalizations and pass them to a predictive model to identify four bird species from the recordings.

Sign up / LoginProjectsPlatformsTopicsContestsLiveAppsBetaFree StoreBlog