Things used in this project

Hardware components:
Ardgen 101
Arduino 101 & Genuino 101
×1
13844 action
SparkFun Inventor's Kit for Arduino 101
×1
475267 240424 01 front zoom kankcmvqdh
Raspberry Pi Zero Wireless
×1
10167 01
DHT22 Temperature Sensor
×1
Grove 20starter 20kit 20plus 20  20intel c2 ae 20iot2 01
SeeedStudio Grove starter kit plus for Intel Edison
×1
11026 02
Jumper wires (generic)
×1
51gzz5eu9pl. sx425
Ultrasonic Sensor - HC-SR04 (Generic)
×1
13637 01
SparkFun Soil Moisture Sensor (with Screw Terminals)
×1
12002 04
Breadboard (generic)
×1
Adafruit industries ada258 image 75px
Li-Ion Battery 1000mAh
×1
Adafruit industries ada62 image 75px
USB-A to B Cable
×1
Adafruit industries ada592 image 75px
USB-A to Micro-USB Cable
×1
Software apps and online services:
Blynk logo avatars
Blynk
Ide web
Arduino IDE
Hand tools and fabrication machines:
Hy gluegun
Hot glue gun (generic)

Schematics

Example
Asa 6ypbaygxrw

Code

Main code arduinoArduino
/*Made by Alexis Santiago Allende Last Update 17/07/17*/
#include <CurieBLE.h>
#include "CurieIMU.h"
#include <Wire.h>
#include "rgb_lcd.h"
#include <CurieTime.h>

BLEPeripheral blePeripheral;//BLE Peripheral Device (Arduino Device)
BLEService demo111("19b10000-e8f2-537e4f6c-d104768a1214"); // BLE demo111 Service
// BLE sensor rate Characteristic"
BLEUnsignedIntCharacteristic sensor1("19b10001-e8f2-537e4f6c-d104768a1214", BLERead | BLENotify);
// BLE sensor rate Characteristic"
BLEUnsignedIntCharacteristic sensor2("19b10002-e8f2-537e4f6c-d104768a1214", BLERead | BLENotify);
// BLE sensor rate Characteristic"
BLEUnsignedIntCharacteristic sensor3("19b10003-e8f2-537e4f6c-d104768a1214", BLERead | BLENotify);
// BLE sensor rate Characteristic"
BLEUnsignedIntCharacteristic sensor4("19b10004-e8f2-537e4f6c-d104768a1214", BLERead | BLENotify);
//Ble palabra sensor Characteristic
BLECharacteristic palabra("19b10005-e8f2-537e4f6c-d104768a1214", BLERead | BLENotify,10); 
// BLE demo111 buttons Characteristic - custom 128-bit UUID, read and writable by central
BLEUnsignedCharCharacteristic buttons("19b10006-e8f2-537e4f6c-d104768a1214", BLERead | BLEWrite);
rgb_lcd lcd;
const int colorR = 198;
const int colorG = 78;
const int colorB = 25;
int lastOrientation = - 1; // previous orientation (for comparison)
long previousMillis = 0;  // last time the sensor was checked, in ms
const int green = 13; // pin to use for the green light
const int red = 11;// pin to use for the red light
boolean a = LOW, b = LOW; //Control variables
int temp=0;
long distancia;
long tiempo;
int orientation;
int valor=0,nivel=0,ndistancia;

void setup() {
  Serial.begin(9600);
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);
  // Print a message to the LCD.
  setTime(16, 56, 24, 3, 07, 2017);
  lcd.print("Have a nice day!");
  lcd.setCursor(12, 1);
  lcd.print("Off");
  pinMode(green, OUTPUT); // use the LED on pin 13 as an output
  pinMode(red, OUTPUT); 
  pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
  pinMode(8, INPUT);
  CurieIMU.begin();
  CurieIMU.setAccelerometerRange(2);
  // set the local name peripheral advertises
  blePeripheral.setLocalName("Demo111");
  // set the UUID for the service this peripheral advertises
  blePeripheral.setAdvertisedServiceUuid(demo111.uuid());

  // add service and characteristic
  blePeripheral.addAttribute(demo111);
  blePeripheral.addAttribute(buttons);
  blePeripheral.addAttribute(sensor1);
  blePeripheral.addAttribute(sensor2);
  blePeripheral.addAttribute(sensor3);
  blePeripheral.addAttribute(sensor4);
  blePeripheral.addAttribute(palabra);

  // assign event handlers for connected, disconnected to peripheral
  blePeripheral.setEventHandler(BLEConnected, blePeripheralConnectHandler);
  blePeripheral.setEventHandler(BLEDisconnected, blePeripheralDisconnectHandler);

  // assign event handlers for characteristic
  buttons.setEventHandler(BLEWritten, switchCharacteristicWritten);
  
 // sensors.setEventHandler(BLEWritten, switchCharacteristicWritten);
// set an initial value for the characteristic
  buttons.setValue(0); 
  sensor1.setValue(0);
  sensor2.setValue(0);
  sensor3.setValue(0);
  sensor4.setValue(0);
  // advertise the service
  blePeripheral.begin();
  Serial.println(("Bluetooth device active, waiting for connections..."));
}

void loop() {
  // poll peripheral
  blePeripheral.poll();
  digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);
  digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);
  tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
  deja de hacerlo, LOW, la longitud del pulso entrante*/
  distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
  
    char clockTime[8];
  //use sprintf to create a time string of the hour, minte and seconds
  sprintf(clockTime, "%02d:%02d:%02d", hour(), minute(), second());
  //set cursor to column 0, row 0
 lcd.setCursor(2, 1);
 //print the date string over lcd
 lcd.print(clockTime);
 
  long currentMillis = millis();
      // if 1s have passed, check the sensor:
      if (currentMillis - previousMillis >= 1000) {
        previousMillis = currentMillis;
        updateSensor();
      }

  orientation = - 1;   // the board's orientation
  String orientationString; // string for printing description of orientation

  // read accelerometer:
  int x = CurieIMU.readAccelerometer(X_AXIS);
  int y = CurieIMU.readAccelerometer(Y_AXIS);
  int z = CurieIMU.readAccelerometer(Z_AXIS);

  // calculate the absolute values, to determine the largest
  int absX = abs(x);
  int absY = abs(y);
  int absZ = abs(z);

  if ( (absZ > absX) && (absZ > absY)) {
    // base orientation on Z
    if (z > 0) {
      orientationString = "up";
      orientation = 0;  
    } else {
      orientationString = "down";
      orientation = 1;
    }
  } else if ( (absY > absX) && (absY > absZ)) {
    // base orientation on Y
    if (y > 0) {
      orientationString = "digital pins up";
      orientation = 2;
    } else {
      orientationString = "analog pins up";
      orientation = 3;
    }
  } else {
    // base orientation on X
    if (x < 0) {
      orientationString = "connector up";
      orientation = 4;
    } else {
      orientationString = "connector down";
      orientation = 5;
    }
  }

  // if the orientation has changed, print out a description:
  if (orientation != lastOrientation) {
    Serial.println(orientationString);
    lastOrientation = orientation;
  }


}

void blePeripheralConnectHandler(BLECentral& central) {
  // central connected event handler
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Have a nice day!");
  Serial.print("Connected event, central: ");
  Serial.println(central.address());
  lcd.setCursor(12, 1);
  lcd.print("On");
}

void blePeripheralDisconnectHandler(BLECentral& central) {
  // central disconnected event handler
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Have a nice day!");
  Serial.print("Disconnected event, central: ");
  Serial.println(central.address());
  lcd.setCursor(12, 1);
  lcd.print("Off");
}

void switchCharacteristicWritten(BLECentral& central, BLECharacteristic& characteristic) {
  // central wrote new value to characteristic, update LED
  Serial.print("Characteristic event, written: ");
  Serial.print(buttons.value());
  if (buttons.value() == 1 && a == LOW) { // 1 in ASCII
          
          Serial.print("LED on");
          digitalWrite(green, HIGH);         // will turn the LED on
          a = HIGH;
        } else if (buttons.value() == 1 && a == HIGH)  {  //when 1 was read again (second time)          

          Serial.println("LED off");
          digitalWrite(green, LOW);          // will turn the LED off
          a = LOW;
        }
        else if (buttons.value() == 2 && b == LOW) { // 1 in ASCII
          
          Serial.print("LED on");
          digitalWrite(red, HIGH);         // will turn the LED on
          b = HIGH;
        } else if (buttons.value() == 2 && b == HIGH)  {  //when 1 was read again (second time)          

          Serial.println("LED off");
          digitalWrite(red, LOW);          // will turn the LED off
          b = LOW;
        }
        
}




void updateSensor() {
  temp=analogRead(A0);//dht.readTemperature();//read temperature 
  valor=analogRead(A1);
  nivel = map(valor, 0, 1023, 100, 0);
  ndistancia = map(distancia, 38, 2, 0, 100);
  float sensorLevel = temp*(3.3/1023);
  int temp1=(sensorLevel-0.5)*100;
  sensor1.setValue(temp1);//send temperature value
  sensor2.setValue(distancia);//send distance value
  sensor3.setValue(orientation);//send orientation value
  sensor4.setValue(nivel);//send percentage of hummidity value
  Serial.println(temp1);
  Serial.println(distancia);
  Serial.println(orientation);
  Serial.println(nivel);
 
}
Main code Node JSJavaScript
//Blynk
var Blynk = require('blynk-library');

var AUTH = 'adea86da8f774157b6a4997a6ed18a08';

var blynk = new Blynk.Blynk(AUTH);

var v1 = new blynk.VirtualPin(1);
var v9 = new blynk.VirtualPin(9);
var v8 = new blynk.VirtualPin(8);
var v7 = new blynk.VirtualPin(7);
var v6 = new blynk.VirtualPin(6);
var v5 = new blynk.VirtualPin(5);
var v4 = new blynk.VirtualPin(4);
var v3 = new blynk.VirtualPin(3);

//Bluetooth low energy
var noble = require('noble');

// Search only for the Service UUID of the device (remove dashes)
var serviceUuids = ['19b10000e8f2537e4f6cd104768a1214'];

// Search only for the led charateristic
var characteristicUuids = ['19b10001e8f2537e4f6cd104768a1214','19b10002e8f2537e4f6cd104768a1214','19b10003e8f2537e4f6cd104768a1214','19b10004e8f2537e4f6cd104768a1214','19b10005e8f2537e4f6cd104768a1214','19b10006e8f2537e4f6cd104768a1214'];

var sensor1=0;
var sensor2=0;
var sensor3=0;
var sensor4=0;
var temperatura=0;
var humedad=0;
var boton=0;
var contador1=0,contador2=0,contador3=0,contador4=0;

//Twilio
const twilio = require('twilio')
var accountSid = 'AC4c3a664e0475a08a4e0fdbd016555a70'; 
var authToken = '22ee6e5fe596967997a2d1a57d6d73eb'; 
 
const phone = new twilio(accountSid, authToken);
 
const sendMessage = () => {
  phone.messages.create({
    to: "+526462378678",
    from: "+12818266123 ",
    body: 'WARNING!!!!!! take care, please review your Blynk app now!!!!!', 
  }) 
}
//Reading DHT22
var sensor = require('node-dht-sensor');


//Final
v1.on('write', function(param) {
  boton=param[0];
  
});

v9.on('read', function() {
  v9.write(new Date().getSeconds());
});

v8.on('read', function() {
  v8.write(sensor1);
});

v7.on('read', function() {
  v7.write(humedad);
});

v6.on('read', function() {
  v6.write(temperatura);
});

v5.on('read', function() {
  v5.write(sensor2);
});

v4.on('read', function() {
  v4.write(sensor3);
});

v4.on('read', function() {
  v4.write(sensor4);
});

// start scanning when bluetooth is powered on
noble.on('stateChange', function(state) {
  if (state === 'poweredOn') {
    noble.startScanning(serviceUuids);
  } else {
    noble.stopScanning();
  }
});

//Reading sensor
setInterval(function() {
sensor.read(22, 21, function(err, temperature, humidity) {
    if (!err) {
         temperatura=temperature.toFixed(1);
         humedad= humidity.toFixed(1);
        
    }
    });
        }, 1000);


// Search for BLE peripherals
noble.on('discover', function(peripheral) {
  peripheral.connect(function(error) {
    console.log('connected to peripheral: ' + peripheral.uuid);
    // Only discover the service we specified above
    peripheral.discoverServices(serviceUuids, function(error, services) {
      var service = services[0];
      console.log('discovered service');

      service.discoverCharacteristics(characteristicUuids, function(error, characteristics) {
        console.log('discovered characteristics');
        // Assign Characteristic
        var sensor1Characteristic = characteristics[1];
        var sensor2Characteristic = characteristics[2];
        var sensor3Characteristic = characteristics[3];
        var sensor4Characteristic = characteristics[4];
       //var botonCharacteristic = characteristics[4];
        
        setInterval(function() {
           
            sensor1Characteristic.read(function(error, data) {
            // data is a buffer
            console.log('Temperature is: ' + data.readUInt8(0));
            sensor1=data.readUInt8(0);
            if (data.readUInt8(0)>=32 && contador1===0) {
                    sendMessage();
                    contador1=1;
                  }
            else if(data.readUInt8(0)<=30 && contador1==1){
                      contador1=0;
                  
                   }
            
            });

             sensor2Characteristic.read(function(error, data) {
            // data is a buffer
            console.log('Trash percent is: ' + data.readUInt8(0));
            sensor2=data.readUInt8(0);
            if (data.readUInt8(0)<=4 && contador2===0) {
                    sendMessage();
                    contador2=1;
                  }
            else if(data.readUInt8(0)>=30 && contador2==1){
                      contador2=0;
                  
                   }
            });


             sensor3Characteristic.read(function(error, data) {
            // data is a buffer
            console.log('Orientation: ' + data.readUInt8(0));
            sensor3=data.readUInt8(0);
            if (data.readUInt8(0)!=2 && contador3===0) {
                    sendMessage();
                    contador3=1;
                  }
            else if(data.readUInt8(0)==2 && contador3==1){
                      contador3=0;
                  
                   }
            });

            sensor4Characteristic.read(function(error, data) {
            // data is a buffer
            console.log('Humidity: ' + data.readUInt8(0));
            sensor4=data.readUInt8(0);
            if (data.readUInt8(0)>=90 && contador4===0) {
                    sendMessage();
                    contador4=1;
                  }
            else if(data.readUInt8(0)<=30 && contador4==1){
                      contador4=0;
                  
                   }
            });
            
        }, 1000);

             //  var bufferToSend = new Buffer(1);
               // bufferToSend.writeUInt8(boton);
               // console.log(bufferToSend);
               // botonCharacteristic.write(bufferToSend, false);
           // setInterval(function() {
           //bufferToSend.writeUInt8(1); // you can pass this any integer, we just do this to alternate 0/1
         //  botonCharacteristic.write(bufferToSend, false);
       // }, 1000);
      }); 
    });
  });
});

Credits

Soka cdsdtvc7fp
Alexis Santiago Allende

Im a person who since young feel a passion for electronics, I also like to cook pizza and travel. Now Im working on the internet of things

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

Horus: The Weather Station
Intermediate
  • 48
  • 4

Full instructions

A Raspberry Pi-based weather station that measures temperature, humidity and pressure using the Astro Pi Sense HAT and uploads the data.

How To Configure Moonlight For Steam Using JustBoom
Intermediate
  • 6
  • 2

Full instructions

This guide will show you how to install Moonlight for Raspbian and configure it for your JustBoom to stream games from your PC.

Arduino Like Function on Kinetis K82 Freedom Stupid Board
Intermediate
  • 68
  • 4

Protip

1000 of K82 Freedom Boards are collecting dust because of the hobbyist unfriendly IDE, pump up the duds with easy Arduino-like functions.

Reducing Arduino Power Consumption
Intermediate
  • 156
  • 5

Full instructions

One the most important feature of portable electronics should be long battery life. We can reduce the current drawn by several ways.

Arduinomated Car Parking with Voice Assistance in Smartphone
Intermediate
  • 498
  • 11

Full instructions

Make an assistant which tells you about how much to drive backwards without any collision through your smartphone by Arduino and 1Sheeld.

Raspberry Pi Motion Tracking Gun Turret
Intermediate
  • 2,989
  • 15

Full instructions

A motion tracking airsoft or Nerf gun turret with autonomous and manual operation modes, controlled by a Raspberry Pi.

Sign up / LoginProjectsPlatformsTopicsContestsLiveAppsBetaFree StoreBlog