Prajay Basu
Published © CC0

Arduino Environmental Monitoring

Inexpensive hack to monitor the temperature, humidity, barometric pressure and other factors using Windows 10 and Azure.

AdvancedShowcase (no instructions)Over 2 days17,982
Arduino Environmental Monitoring

Things used in this project

Hardware components

Arduino Mega 2560 & Genuino Mega 2560
Arduino Mega 2560 & Genuino Mega 2560
Can Replace Mega/CC3000 with this and a dedicated ADC. Plus Secure SSL !
×1
Pressure/Altitude/Temperature Sensor
Adafruit Pressure/Altitude/Temperature Sensor
Output : Pa
×1
Various Gas Sensors (HANWEI)
Output : 0-1024 ADC values. Only using for danger thresholds, not accurate values.
×1
Humidity and Temperature Sensor
Adafruit Humidity and Temperature Sensor
Output : °C and RH (%)
×1
AMS-TAOS TSL2561 Luminosity Sensor
Output : lux (lm/m²)
×1
SparkFun (Texas Instruments, SFE) CC3000 WiFi Breakout
Better than using another Serial Channel and buffers and all that jazz, I guess.
×1
Sharp GP2Y1010AU0F Dust Sensor
Output : µg/m³
×1
Samyoung DSM501A Dust Sensor
Output : µg/m³
×1
Lapis Semiconductor ML8511 UV-B Sensor
Output : mW/cm²
×1

Software apps and online services

Microsoft Azure
Microsoft Azure
Free Developer Benefits subscription ($25/mo).
Visual Studio 2015
Microsoft Visual Studio 2015
Unity, Unreal, Arduino (Visual Micro), WPF, WinForms, WHATEVER, I'll always be using it. And it's free!
Arduino IDE
Arduino IDE
Works good when you want to edit a single line and don't want to load Visual Studio
Fritzing
Gonna replace with Upverter
Syncfusion Controls
Free unlike Telerik Controls, works good enough (a little slow though, but it's free.)
Xamarin
Courtesy of DreamSpark. Not actually using it, but planning to. C# FTW.
Upverter
Upverter
better than Fritzing, I realized halfway through the project.

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
No need to explain this :P
Hot glue gun (generic)
Hot glue gun (generic)
Prevents wobbly capacitors, I guess ?

Story

Read more

Schematics

Old Schematic

This is a rough schematic of how things are connected. View the Upverter schematic for latest schematic - it's easier to make new parts there than Fritzing. I WILL NOT UPDATE FRITZING REPO ANYMORE. Note : Only view schematic view; breadboard view and PCB view are a rat's nest !

Fritzing OLD Schematic

Exported as .png
To view with more detail, download the .fzz file from the fritzing project and view it in Fritzing (fritzing.org) - it's free !
I WILL NOT UPDATE FRITZING SCHEMATICS ANYMORE - MAKING NEW PARTS IS EASIER ON UPVERTER.

Latest Schematic

WORK IN PROGRESS : Latest schematic - it's easier to make schematics on Upverter than Fritzing. This project is not really viable on Fritzing's breadboard view or any PCB.

Code

Arduino code flowchart

Plain text
This is my visio flowchart - I am pretty new to flowcharts and visio- forgive me.
No preview (download only).

Server code

JavaScript
WeatherDataItem.js
var table = module.exports = require('azure-mobile-apps').table();
table.columns =
{
	"err": "string",
	"mq2_max": "number", "mq2_min": "number", "mq2_avg": "number",
	"mq3_max": "number", "mq3_min": "number", "mq3_avg": "number",
	"mq4_max": "number", "mq4_min": "number", "mq4_avg": "number",
	"mq5_max": "number", "mq5_min": "number", "mq5_avg": "number",
	"mq6_max": "number", "mq6_min": "number", "mq6_avg": "number",
	"mq7_max": "number", "mq7_min": "number", "mq7_avg": "number",
	"mq8_max": "number", "mq8_min": "number", "mq8_avg": "number",
	"mq9_max": "number", "mq9_min": "number", "mq9_avg": "number",
	"mq135_max": "number", "mq135_min": "number", "mq135_avg": "number",
	"temperature_max": "number", "temperature_min": "number", "temperature_avg": "number",
	"humidity_max": "number", "humidity_min": "number", "humidity_avg": "number",
	"pressure_max": "number", "pressure_min": "number", "pressure_avg": "number",
	"uvb_max": "number", "uvb_min": "number", "uvb_avg": "number",
	"dust1_max": "number", "dust1_min": "number", "dust1_avg": "number",
	"dust_max": "number", "dust_min": "number", "dust_avg": "number",
	"dust25_max": "number", "dust25_min": "number", "dust25_avg": "number",
	"lux_avg": "number", "lux_max": "number", "lux_min": "number", "deviceId": "number"
}
table.dynamicSchema = true;

Main Repository

GitHub main repository, where I commit all of my code. You'll need a Xamarin sub for ArduinoEM.Android, though.

Credits

Prajay Basu

Prajay Basu

2 projects • 6 followers
I'm currently a high school student (almost 16), and aspiring electronics engineer. I am also a .NET and Unity Engine developer.

Comments