AirCasting Particle Monitor Bill of Materials



Similar documents
Using Arduino Microcontrollers to Sense DC Motor Speed and Position

ARDUINO SEVERINO SERIAL SINGLE SIDED VERSION 3 S3v3 (REVISION 2) USER MANUAL

Electronic Brick of Current Sensor

Your Multimeter. The Arduino Uno 10/1/2012. Using Your Arduino, Breadboard and Multimeter. EAS 199A Fall Work in teams of two!

Arduino Lesson 13. DC Motors. Created by Simon Monk

Internet of Things with the Arduino Yún

Arduino Lesson 14. Servo Motors

DCDC-USB. 6-34V 10A, Intelligent DC-DC converter with USB interface. Quick Installation Guide Version 1.0c P/N DCDC-USB

Trinket Bluetooth Alarm System

DEPARTMENT OF ELECTRONICS ENGINEERING

Arduino ADK Back. For information on using the board with the Android OS, see Google's ADK documentation.

Introduction to Arduino

Ultrasonic Distance Measurement Module

STUDY OF CELLPHONE CHARGERS

UniPi technical documentation REV 1.1

USB / Data-Acquisition Module NOW LEAD-FREE

Arduino Motor Shield (L298) Manual

Getting started with the Super Brain Palm computer interface.

Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science Microprocessor Project Laboratory

Eric Mitchell April 2, 2012 Application Note: Control of a 180 Servo Motor with Arduino UNO Development Board

UPS PIco. to be used with. Raspberry Pi B+, A+, B, and A. HAT Compliant. Raspberry Pi is a trademark of the Raspberry Pi Foundation

IRON-HID: Create your own bad USB. Seunghun Han

Mobile Device Power Monitor Battery Connection Quick Start Guide

MCB3101 (Class I) WiRobot Serial Bluetooth Wireless Module User Manual

GMB HR84 GMM F346 TECHNICL MANUAL. grifo ITALIAN TECHNOLOGY. grifo Mini BLOCK Housing, 8 Opto Input, 4 Relay Outputs

INTRODUCTION TO SERIAL ARM

Bluetooth + USB 16 Servo Controller [RKI-1005 & RKI-1205]

Hardware Connections between Arduino and IMU Nori Wilkins Apr. 5, 2013

User s Manual of Board Microcontroller ET-MEGA2560-ADK ET-MEGA2560-ADK

Web Site: Forums: forums.parallax.com Sales: Technical:

Servo Motors (SensorDAQ only) Evaluation copy. Vernier Digital Control Unit (DCU) LabQuest or LabPro power supply

UPiS - Uninterruptible Power intelligent Supply

MOTION COORDINATOR MC206X Quick Connection Guide

Lab 6 Introduction to Serial and Wireless Communication

OPENUPS. 6-30V Intelligent Uninterruptible Power Supply. Installation Guide. Version 1.0f P/N OPENUPS-06

How To Control A Car With A Thermostat

Arduino Due Back. Warning: Unlike other Arduino boards, the Arduino Due board runs at 3.3V. The maximum. Overview

Strato Pi Hardware Guide

Arduino Microcontroller Guide W. Durfee, University of Minnesota ver. oct-2011 Available on-line at

Dual Port EmErgEncy charger

KEYCHAIN SYNC CHARGE CABLE

Arduino Lesson 9. Sensing Light

GM862 Arduino Shield

User Manual for CH-PFC76810

TDAS G5-DB Hardware User s Manual

Theory and Practice of Tangible User Interfaces. Thursday Week 2: Digital Input and Output. week. Digital Input and Output. RGB LEDs fade with PWM

The Android Breathalyzer is not a professional Breathalyzer and should be used for Amusement Purposes Only. Drive Safely!

Arduino Lesson 16. Stepper Motors

Innovative Electronics for a Changing World INDEX

BUILDING INSTRUCTIONS

Flight Controller. Mini Fun Fly

Using voltage regulator to convert 5-12V range to 3.3V. Huan Lin

USB to RS-422/485 Serial Adapter

PHYS 2P32 Project: MIDI for Arduino/ 8 Note Keyboard

Work with Arduino Hardware

FM4100 USER MANUAL V1.4

DS1307 Real Time Clock Breakout Board Kit

PCAN-MicroMod Universal I/O Module with CAN Interface. User Manual. Document version ( )

Quick start guide smart.power smart.power smart.power

How To Use A Watt Saver On A Microcontroller (Watt Saver) On A Cell Phone Or Mp3 Player

DIY Pocket LED Gamer - Tiny Tetris!

Summer Project Report. Fingerprint Based Attendance System

Omega ICD Intelligent Colour Display

Basic Pulse Width Modulation

SDI Multi Sensor Module with Charger Enclosure Station Support

MANUAL FOR RX700 LR and NR

Servo Info and Centering

Arduino Lesson 0. Getting Started

UM1724 User manual. STM32 Nucleo boards. Introduction

DKWF121 WF121-A B/G/N MODULE EVALUATION BOARD

Lecture 7: Programming for the Arduino

Evaluation copy. Build a Temperature Sensor. Project PROJECT DESIGN REQUIREMENTS

XPort Universal Demo Board User Guide

CanSat Program. Stensat Group LLC

EasyPIC4 User s Manual

Wireless Security Camera

Pmod peripheral modules are powered by the host via the interface s power and ground pins.

Options for ABB drives, converters and inverters. User s manual FDPI-02 diagnostics and panel interface

HP4000EX Hardware Manual

DK40 Datasheet & Hardware manual Version 2

Wireless Communication With Arduino

KTA-223 Arduino Compatible Relay Controller

Real Time Clock USB Evaluation Board V3.0

AP Series Autopilot System. AP-202 Data Sheet. March,2015. Chengdu Jouav Automation Tech Co.,L.t.d

PolyBot Board. User's Guide V1.11 9/20/08

XBee USB Adapter Board (#32400)

PROGRAMMABLE WIRELESS STAMP (PWS) USER MANUAL

Home Security System for Automatic Doors

Microcontroller Programming Beginning with Arduino. Charlie Mooney

NC-12 Modbus Application

Green House Monitoring and Controlling Using Android Mobile Application

PN532 NFC RFID Module User Guide

CW46S GPS Sensor P R O D U C T B R I E F. Description. Features. Applications. Block Diagram

U10 EVB User Guide U10. Quectel Cellular Engine. EVB User Guide U10_EVB_UGD_V1.0 U10_EVB_UGD_V

RN-52 Bluetooth Hookup Guide

Arduino Home Automation Projects

GPRS Shield. Introduction

PCAN-MicroMod Evaluation Test and Development Environment for the PCAN-MicroMod. User Manual. Document version ( )

Tire pressure monitoring

Transcription:

AirCasting Particle Monitor Bill of Materials Shinyei PPD42NS Seeed http://www.seeedstudio.com/depot/grove- dust- sensor- p- 1050.html?cPath=25_27 JY- MCU HC- 06 Bluetooth Wireless Serial Port Module FastTech http://www.fasttech.com/products/1005/10001791/1129201 DHT22/AM2302 Digital Temperature Humidity Sensor Ebay http://www.ebay.com/itm/new- DHT22- AM2302- Digital- Temperature- Humidity- Sensor- Replace- SHT11- SHT15- Logger- /271175728425?pt=LH_DefaultDomain_0&hash=item3f23553d29 Copal F16EA- 03LLC Arduino Uno R3 Rev3 Development Board Digi- Key FastTech http://www.digikey.com/product- search/en?x=10&y=18&lang=en&site=us&keywords=copal+f16ea- 03LLC http://www.fasttech.com/products/0/10000015/1001700- arduino- uno- r3- rev3- development- board Adjustable Voltage Booster Regulator JST Right- Angle Connector http://www.jayconsystems.com/adjustable- boost- regulator- 4-25v.html Jayconsystems Jayconsystems http://www.jayconsystems.com/jst- right- angle- connector.html Lipo Charger Basic (Micro- USB) Jayconsystems http://www.jayconsystems.com/micro- usb- lipo- charger- mcp73831.html http://www.jayconsystems.com/3-7- volt- rechargeable- lithium- battery- 2000- Li- on Battery 2000 mah Jayconsystems mah.html SPDT Slide Switch Sparkfun https://www.sparkfun.com/products/9609 Mini- Breadboard Sparkfun https://www.sparkfun.com/products/11658 Resistors Sparkfun https://www.sparkfun.com/products/11508 http://www.amazon.com/breadboard- jumper- wire- 75pcs- pack/dp/b0040dei9m/ref=sr_1_1?s=electronics&ie=utf8&qid=1380996915&sr=1- Jumper Cables Amazon 1&keywords=jumper+cables+electronics

- + 3.7 Polymer Lithium Ion Battery 2000mAh Micro Fan Iem Heng and Raymond Yap Electrical/Computer Engineering Department Manhattan College Riverdale, NY 5V Booster Regulator (DC to DC) Vin GND Vout Bluetooth Mate Silver DHT22 Digital Humidity/ Temperature Sensor 3V3 5V Vin D13 D13 Power RST D12 AREF IO REF NC Arduino Uno D11 D10 D9 PWM PWM PWM CTS Vcc GND Tx Rx RTS This extra pin is not connected to anything. A0 A1 Digital Input/Output D8 D7 D6 D5 D4 D3 PWM PWM PWM 10K Ohm Brown Black Orange A2 A3 A4 Analog Input D2 D1 D0 Tx Rx A5 SCL Vcc GND Sig GND SDA Seeed Grove Dust Sensor - Shinyei Model PPD42NS

//AirCasting Particle Monitor Code, by Iem Heng & Raymond Yap #include <SoftwareSerial.h> #include <FlexiTimer2.h> #include <DHT.h> SoftwareSerial myserial(2, 3); #define DHTPIN 9 #define DHTTYPE DHT22 DHT dht(dhtpin, DHTTYPE); int pin = 8; int humi, cel, fah; //kelv; volatile double rawparticalcount; volatile double totalparticles = 0; volatile double particlecounttodisplay = 0; volatile double ratio = 0; volatile uint16_t timecounter = 0; #define numberofpeaksrecording 5 volatile uint32_t previouspeaks[numberofpeaksrecording]; volatile uint32_t sumofpreviouspeaks = 0; volatile uint32_t instantgoal = 0; volatile int32_t delta = 0; volatile uint32_t slowmovingaverage = 0; volatile boolean readytosenddata = false; void setup() { Serial.begin(115200); myserial.begin(115200); pinmode(8,input); FlexiTimer2::set(1,1.0/10000,readPin); FlexiTimer2::start(); } void loop() { humi = dht.readhumidity(); cel = dht.readtemperature();

//kelv = cel + 273.15; fah = ((cel * 9)/5) + 32; delay(1); if(readytosenddata){ Serial.print(fah); Serial.print("F "); Serial.print(cel); Serial.print("C "); //Serial.print(kelv); //Serial.print("K "); Serial.print(humi); Serial.print("RH "); Serial.print(rawParticalCount, DEC); Serial.print(" Raw Particle Count (0-10000) "); Serial.print(ratio, DEC); Serial.print(" Ratio (0-100%) "); Serial.print(particleCountToDisplay, DEC); Serial.print(" Particle Count"); Serial.println(""); myserial.print(particlecounttodisplay, DEC); myserial.print(";insertsensorpackagename;ppd42ns;particulate Matter;PM;hundreds of particles per cubic foot;hppcf;0;4000;8000;1200;16000"); myserial.print("\n"); myserial.print(fah); myserial.print(";insertsensorpackagename;dht22- F;Temperature;F;degrees Fahrenheit;F;0;25;50;75;100"); myserial.print("\n"); myserial.print(cel); myserial.print(";insertsensorpackagename;dht22- C;Temperature;C;degrees Celsius;C;0;10;20;30;40"); myserial.print("\n"); //myserial.print(kelv); //myserial.print(";insertsensorpackagename;dht22- K;Temperature;K;kelvin;K;273;300;400;500;600"); //myserial.print("\n"); myserial.print(humi); myserial.print(";insertsensorpackagename;dht22- RH;Relative Humidity;RH;percent;%;0;25;50;75;100"); myserial.print("\n");

} readytosenddata = false; } void readpin(){ if(digitalread(pin) == LOW){ rawparticalcount++; } timecounter++; if (timecounter == 10000) { timecounter=0; //Changes are made here based on Chris Nafis's code: http://www.howmuchsnow.com/arduino/airquality/grovedust/ ratio = rawparticalcount/100.0; //Convert to percentage, the shinyei reads 10milliseconds to 90milliseconds duration for particles. Basing on 10milliseconds, smallest particle assumingly from specification sheet. //FlexiTimer2, reads 10,000 readings per second, which would be 1 reading per 100 microseconds. 100 readings would be 10 milliseconds. Since Shinyei runs at minimal 10 millisecond range. I divided 10,000 readings by 100 to get 100. //Good example would be rawparticalcount is 5000 half of the 10,000 readings were active. 5000/100 would be 50 which translate to 50% low pulse occupancy. totalparticles = (1.1*pow(ratio,3)- 3.8*pow(ratio,2)+520*ratio+0.62); rawparticalcount = 0; // shift counters over, code adapted from template provided by Mike Taylor and Joshua Schapiro from Carnegie Mellon University's CREATE Lab for (uint8_t i = 0; i < (numberofpeaksrecording- 1); i++) { previouspeaks[i] = previouspeaks[i+1]; } previouspeaks[numberofpeaksrecording - 1] = totalparticles; sumofpreviouspeaks = 0; for (uint8_t i = 0; i < numberofpeaksrecording; i++) { sumofpreviouspeaks += previouspeaks[i]; }

instantgoal = 2*sumOfPreviousPeaks; delta = instantgoal - slowmovingaverage; if (delta < - 5000){ slowmovingaverage = slowmovingaverage - 250; } else if (delta < - 2500){ slowmovingaverage = slowmovingaverage - 120; } else if(delta < - 1200){ slowmovingaverage = slowmovingaverage - 60; } else if(delta < - 500){ slowmovingaverage = slowmovingaverage - 25; } else if(delta < - 5){ slowmovingaverage = slowmovingaverage - 5; } else if(delta < - 1){ slowmovingaverage = slowmovingaverage - 1; } else if(delta > 5000) { slowmovingaverage = slowmovingaverage + 500; } else if(delta > 2500){ slowmovingaverage = slowmovingaverage + 250; } else if(delta > 1200){ slowmovingaverage = slowmovingaverage + 120; } else if(delta > 500){ slowmovingaverage = slowmovingaverage + 50; } else if(delta > 5){ slowmovingaverage = slowmovingaverage + 5; } else if(delta > 1){ slowmovingaverage = slowmovingaverage + 1; } particlecounttodisplay = slowmovingaverage; readytosenddata = true; } }