Things used in this project

Hardware components:
Intel Edison
Grove 20starter 20kit 20plus 20  20intel c2 ae 20iot2 01
SeeedStudio Grove starter kit plus for Intel Edison
Intel Grove GPS
09590 01
LED (generic)
We use the Green LED to display system health. Every 5 secs it flashes to show that system is working. We use Red LED to show that the Web service call is successfully made and there by indicating the acknowledgement of the emergency by the system. In our system user is required to press and hold the push button till the user sees the Red light. Once the user sees the red light he can release the button
Software apps and online services:
Wordmark red
Twilio SMS Messaging API
We use Twilio to send SMS.
Google Cloud Platform
We use Google Cloud Platform for the backend Web service. In the backend we make Twilio API calls to send SMS.


Node JS code JavaScript
Once the push button is pressed and held for 5 sec, the system detects the event, retrieves the GPS coordinates and invokes a Web service with the details.
/* This program captures the push button press and retrieves the GPS location and invokes a webservice to log the button press event.
    Copyright (C) 2016 Jayashree Ravi and Pramoda Ravi

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <>.

/*jslint node:true, vars:true, bitwise:true, unparam:true */
/*jshint unused:true */
// Leave the above lines for propper jshinting
//Type Node.js Here :)

console.log("Distress System for Elderly  Copyright (C) 2016  Jayashree Ravi and Pramoda Ravi");

var pushButtonSensor = require('jsupm_grove');

var mraa = require('mraa'); //require mraa

var gpsSensor = require('jsupm_ublox6');

// Create the button object using GPIO pin 4
var button = new pushButtonSensor.GroveButton(4);

// Instantiate a Ublox6 GPS device on uart 0.
var myGPSSensor = new gpsSensor.Ublox6(0);

// Green LED on Digital pin 6
var greenLed = new mraa.Gpio(6);

//Red LED on Digital pin 8
var redLed = new mraa.Gpio(8);

if (!myGPSSensor.setupTty(gpsSensor.int_B9600))
    console.log("Failed to setup tty port parameters");

// Read the input and print, waiting 5 seconds between readings
function readButtonValue() {
    // Turn the green LED on
    console.log( + " value is " + button.value());
    if(button.value()==1) {
        var gpsStr = encodeURIComponent(getGPSInfo());
        const http = require('http');
        // Turn the red LED on
        http.get(''+gpsStr, function(res) {
            console.log('statusCode: ', res.statusCode);
            console.log('headers: ', res.headers);

            res.on('data', function(d) {
                console.log("data received");

        }).on('error', function(e) {

function getGPSInfo()

    var bufferLength = 256;
    var nmeaBuffer  = new gpsSensor.charArray(bufferLength);
    var latlon;
    // we don't want the read to block in this example, so
    // check to see if data is available first.

        var rv = myGPSSensor.readData(nmeaBuffer, bufferLength);

        var GPSData, dataCharCode, isNewLine, lastNewLine;
        var numlines= 0;
        if (rv > 0)
            GPSData = "";
            // read only the number of characters
            // specified by myGPSSensor.readData
            for (var x = 0; x < rv; x++)
                GPSData += nmeaBuffer.getitem(x);

            var gpsArray = GPSData.toString().split('\n');
            for(var i=0; i<gpsArray.length; i++){
                if(gpsArray[i].indexOf('GPGGA') !== -1){
                    var gpsparts = gpsArray[i].split(',');
                    var lat = gpsparts[2];
                    var lon = gpsparts[4];
                    if(lat && lon){
                        console.log("GPGGA reading:" + gpsArray[i]);
                        return (convertToDecimal(lat)+",-"+convertToDecimal(lon));
                    }else {

                if(gpsArray[i].indexOf('GPRMC') !== -1){
                    var gpsparts2 = gpsArray[i].split(',');
                    var lat2 = gpsparts[3];
                    var lon2 = gpsparts[5];
                    if(lat2 && lon2){
                        return (convertToDecimal(lat2)+",-"+convertToDecimal(lon2));
                    } else {

        if (rv < 0) // some sort of read error occured
            console.log("Port read error.");

function convertToDecimal(lat){
    var firstpart = +(lat.substring(0,lat.length-7));
    var secondpart = +(lat.substring(lat.length-7));
    var latdecimal = firstpart+(secondpart/60);
    return latdecimal;
setInterval(readButtonValue, 5000);


13466539 10154298772777238 1411769646677120225 n
Pramoda Ravi

I enjoy the art of making cars go fast by using the technology our day and age are able to provide us.


Did you replicate this project? Share it!

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

Give feedback


Similar projects you might like

Amazon Echo – Read Temperature and Humidity from Sensor
  • 323
  • 12

Full instructions

I am going to show how to use Amazon Echo to read temperature and humidity from sensor.

Arduino101 Bluetooth Interfacing
  • 191
  • 3

Full instructions

Use the Arduino101 Bluetooth wireless interface with the Blynk GUI Library for control of things directly from your phone or tablet !

Intel Curie TinyTILE Dress: Accelerometer + Optical Fibers
  • 395
  • 10

Full instructions

A dress using Intel Curie accelerometer on TinyTILE and its small form factor to control colors of the optical fibers with arm movements.

  • 994
  • 4

Makerball is a DIY pinball machine kit that can be upgraded digitally with the Arduino Genuino 101. Here we show you the electronical part.



Voice Controled Click Lamps
  • 110
  • 2

Work in progress

We have a couple of floor lamps from Ikea. They have two lights in each, and a switch for each light. Let's control them remotely.

Control RGB LED by Dragging – Arduino 101 & App Inventor
  • 422
  • 4

Full instructions

This topic will teach you how to control a RGB LED on an Arduino 101 board with an Android device (MIT App Inventor).

ProjectsCommunitiesTopicsContestsLiveAppsBetaFree StoreBlogAdd projectSign up / Login