Mengambil Dan Menganalisa Data – Data Kondisi Lingkungan Dengan Arduino IoT Cloud

Tentang proyek ini

Latar belakang

Dengan mengikuti proyek ini, anda diharapkan mampu membaca data dari berbagai jenis sensor yang tersedia pada shield ENV, diharapkan anda juga mampu membuat visualisasi dari data yang dikirimkan oleh sensor dengan menggunakan platform Arduino IoT Cloud.

Apa saja yang dibutuhkan

Proyek ini membutuhkan Arduino MKR WiFi 1010, shield MKR ENV, baterai (bisa juga menggunakan sumber tenaga listrik lainnya) dan akun pada platform Arduino Cloud.

  • Inti dari proyek ini adalah (penggunaan) Arduino MKR WiFi 1010. Board ini yang melakukan komputasi sekaligus berfungsi untuk mengirimkan data. Kemampuan komputasi dan komunikasi ini disokong oleh mikrokontroller SAMD21 dan modul on-board NINA-W10, yang mendukung komunikasi via WiFi dan BLE (bluetooth low energy)
  • Baterai yang terhubungkan ke board MKR WiFi 1010 digunakan sebagai sumber tenaga / daya listrik, namun bisa juga menggunakan sumber tenaga alternatif apabila tersedia.
  • Shield MKR ENV adalah shield yang akan digunakan oleh board Arduino MKR, yang mampu memonitor data – data terkait kondisi lingkungan seperti temperatur, kelembaban udara, tekanan udara, intensitas cahaya dan radiasi UV.
  • Untuk terhubungkan dengan jaringan WiFi, dibutuhkan kredential yaitu SSID dan password.

Konfigurasi perangkat keras boleh dikatakan sederhana, yaitu hanya membutuhkan board MKR WiFi 1010, shield MKR ENV dan baterai.

Board MKR WiFi 1010, shield MKR ENV dan baterai

Pasang board MKR WiFi 1010 dan shield ENV, pastikan posisi dudukan pin yang sudah diberi keterangan sudah benar.

Posisi dudukan pin yang benar

Pasangkan baterai pada board MKR WiFi 1010 sesuai dengan konektor yang tersedia:

Pasangkan baterai pada board MKR WiFi 1010

Struktur Kode Program

Terdapat 2 bagian penting di kode program, yang dibutuhkan dalam proyek ini, yaitu: kerangka template yang dibuat oleh platform Arduino IoT Cloud, yang akan digunakan untuk menerima data dari board MKR WiFi dan shield MKR ENV, yang dibaca dari masing – masing sensor yang tersedia:

  • Ada 6 data / parameter yang akan dibaca dan dianalisa, yang dikirimkan oleh MKR WiFi 1010 melalui koneksi jaringan yang aman
  • Sketch Arduino pertama – tama akan dibuat / generate dari platform IoT Cloud, sketch ini berisikan langkah – langkah mulai dari menghubungkan board MKR WiFi 1010 ke internet, sampai mengirimkan data (6 data) dari sensor – sensor yang ada di shield MKR ENV ke board MKR WiFi 1010 hingga ke platform IoT Cloud.

Sketch

Bagian awal pada kode berisikan library apa saja yang dibutuhkan oleh aplikasi yang akan kita bangun.

File library thingProperties.h berisikan semua hal yang diperlukan untuk dapat terhubungkan ke internet (melalui WiFi), sampai ke manajemen koneksi ke platform. Pengguna harus mengisikan kredential (SSID dan password) untuk terhubungkan ke suatu jaringan WiFi untuk dapat mengirimkan data ke internet.

Platform Arduino IoT Cloud melakukan autentikasi terhadap perangkat yang akan terhubungkan ke platform melalui suatu informasi kunci yang disimpan di crypto-chip yang ada pada board MKR WiFi 1010. Untuk mengetahui lebih detail proses transmisi data yang dilakukan di atas kanal / jaringan yang telah diamankan, dapat melihat pada panduan berikut.

Library Arduino MKR ENV berisikan segalanya uang dibutuhkan untuk membaca data dari tiap – tiap sensor yang ada pada shield.

#include "thingProperties.h"
#include <Arduino_MKRENV.h>

Seperti biasa, bagian setup berisikan inisialiasi obyek – obyek yang akan digunakan di dalam sketch, termasuk di dalamnya yang dibutuhkan untuk mengakses platform Arduino IoT cloud.
ArduinoCloud.begin() memastikan board sudah siap untuk terhubung dan mengirimkan data ke platform, yang data – data nya dapat kita lihat pada dashboard platform.

void setup() {
 // Initialize Serial and wait for port to open:
 Serial.begin(9600);
 // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
 delay(1500);
 // Defined in thingProperties.h
 initProperties();
 // Connect to Arduino IoT Cloud
 ArduinoCloud.begin(ArduinoIoTPreferredConnection);
 /*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
 setDebugMessageLevel(2);
 ArduinoCloud.printDebugInfo();
 if (!ENV.begin()) {
  Serial.println("Failed to initialize MKR ENV shield!");
  while(1);
 }
}

Bagian akhir dari kode program adalah bagian loop, dimana kita akan mengambil data dari masing – masing sensor yang terdapat pada shield MKR ENV. Data – data tersebut akan kemudian dikirimkan ke platform. Yang bertanggungjawab untuk mengirimkan data ini ada pada fungsi ArduinoCloud.update()

void loop() {
 ArduinoCloud.update();
 // Your code here 
 humidity = int(ENV.readHumidity());
 lux = int(ENV.readIlluminance());
 pressure = int(ENV.readPressure());
 temperature = int(ENV.readTemperature());
 uva = int(ENV.readUVA());
 uvb = int(ENV.readUVB());
 uvi = int(ENV.readUVIndex());
 delay(1000);
}

Setting dan konfigurasi

Setelah memasangkan shield dan baterai pada board MKR WiFi 1010, hubungkan board MKR WiFi 1010 ke komputer dan login ke platform dengan menggunakan akun yang sudah didaftarkan sebelumnya.

Ikuti langkah – langkah yang tertera pada panduan Arduino Cloud Getting Started dan buat beberapa properti yang tertera pada tabel di bawah. Harap perhatikan nama properti sifatnya case sensitif.

Tabel berikut berisikan data – data yang akan dimonitor dan ditampilkan pada widget di dashboard platform

Tiap kali akan ditambahkan widget baru pada dashboard, anda diharuskan mengisikan form seperti berikut.

Form ini harus diisikan data – data secara detail

Apabila masing – masing properti telah diisikan dengan benar, maka akan ditampilkan sebagai berikut:

Widget yang akan ditampilkan pada dashboard

Setelah selesai mengisikan data properti, lanjutkan dengan menekan tombol edit code. Setelah menekan tombol, anda akan diarahkan ke halaman Arduino Create Web Editor, dimana anda dapat mengganti sketch yang awal dengan kode berikut:

/* 
 Sketch generated by the Arduino IoT Cloud Thing "env_shield"
 https://create.arduino.cc/cloud/things/829941ed-efdd-4572-91c0-e93a732192ec 
 Arduino IoT Cloud Properties description
 The following variables are automatically generated and updated when changes are made to the Thing properties
 int humidity;
 int lux;
 int pressure;
 int temperature;
 int uva;
 int uvb;
 int uvi;
 Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
 which are called when their values are changed from the Dashboard.
 These functions are generated with the Thing and added at the end of this sketch.
*/
#include "thingProperties.h"
#include <Arduino_MKRENV.h>
void setup() {
 // Initialize serial and wait for port to open:
 Serial.begin(9600);
 // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
 delay(1500); 
 // Defined in thingProperties.h
 initProperties();
 // Connect to Arduino IoT Cloud
 ArduinoCloud.begin(ArduinoIoTPreferredConnection);
 /*
    The following function allows you to obtain more information
    related to the state of network and IoT Cloud connection and errors
    the higher number the more granular information you’ll get.
    The default is 0 (only errors).
    Maximum is 4
*/
 setDebugMessageLevel(4);
 ArduinoCloud.printDebugInfo();
 if (!ENV.begin()) {
   Serial.println("Failed to initialize MKR ENV shield!");
   while(1);
 }
}
void loop() {
 ArduinoCloud.update();
 // Your code here 
 humidity = int(ENV.readHumidity());
 lux = int(ENV.readIlluminance());
 pressure = int(ENV.readPressure());
 temperature = int(ENV.readTemperature());
 uva = int(ENV.readUVA());
 uvb = int(ENV.readUVB());
 uvi = int(ENV.readUVIndex());
 delay(1000);
}
void onHumidityChange() {
 // Do something
}
void onLuxChange() {
 // Do something
}
void onPressureChange() {
 // Do something
}
void onTemperatureChange() {
 // Do something
}
void onUvaChange() {
 // Do something
}
void onUvbChange() {
 // Do something
}
void onUviChange() {
 // Do something
}

Upload sketch ke board, dan setelah board berhasil terhubungkan ke WiFi, board MKR WiFi 1010 akan langsung melakukan sinkronisasi data yang diperoleh dari shield MKR ENV dengan properti yang telah kita buat di atas. Selanjutnya data akan ditampilkan di dashboard.

Dashboard yang akan menampilkan data yang dikirimkan oleh board MKR WiFi 1010

Sketch lengkap pada Arduino Create dapat dilihat pada bagian bawah artikel ini.

Kami harap anda menikmati proses yang sangat sederhana ini, baik untuk mengambil dan mengirimkan data dari rumah dan kebun/taman, dengan menggunakan board MKR WiFi 1010, shield MKR ENV dan tentunya platform Arduino IoT Cloud.

Salam,

Tim Arduino

Kode lengkap program

env_shield_mar08a.ino
/* 
  Sketch generated by the Arduino IoT Cloud Thing "env_shield"
  https://create.arduino.cc/cloud/things/829941ed-efdd-4572-91c0-e93a732192ec 

  Arduino IoT Cloud Properties description

  The following variables are automatically generated and updated when changes are made to the Thing properties

  int humidity;
  int lux;
  int pressure;
  int temperature;
  int uva;
  int uvb;
  int uvi;

  Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/

#include "thingProperties.h"
#include <Arduino_MKRENV.h>

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500); 
  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  if (!ENV.begin()) {
    Serial.println("Failed to initialize MKR ENV shield!");
    while(1);
  }
}

void loop() {
  ArduinoCloud.update();
  // Your code here 
  humidity = int(ENV.readHumidity());
  lux = int(ENV.readIlluminance());
  pressure = int(ENV.readPressure());
  temperature = int(ENV.readTemperature());
  uva = int(ENV.readUVA());
  uvb = int(ENV.readUVB());
  uvi = int(ENV.readUVIndex());
  delay(1000);
}


void onHumidityChange() {
  // Do something
}


void onLuxChange() {
  // Do something
}


void onPressureChange() {
  // Do something
}


void onTemperatureChange() {
  // Do something
}


void onUvaChange() {
  // Do something
}


void onUvbChange() {
  // Do something
}


void onUviChange() {
  // Do something
}
readme.doc
:Author: Arduino_Genuino
:Email:
:Date: 08/03/2019
:Revision: version#
:License: Public Domain

= Project: {Project}

Describe your project

== Step 1: Installation
Please describe the steps to install this project.

For example:

1. Open this file
2. Edit as you like
3. Release to the World!

== Step 2: Assemble the circuit

Assemble the circuit following the diagram layout.png attached to the sketch

== Step 3: Load the code

Upload the code contained in this sketch on to your board

=== Folder structure

....
 sketch123                => Arduino sketch folder
  ├── sketch123.ino       => main Arduino file
  ├── schematics.png      => (optional) an image of the required schematics
  ├── layout.png          => (optional) an image of the layout
  └── ReadMe.adoc         => this file
....

=== License
This project is released under a {License} License.

=== Contributing
To contribute to this project please contact: 

=== BOM
Add the bill of the materials you need for this project.

|===
| ID | Part name      | Part number | Quantity
| R1 | 10k Resistor   | 1234-abcd   | 10       
| L1 | Red LED        | 2345-asdf   | 5        
| A1 | Arduino Zero   | ABX00066    | 1        
|===


=== Help
This document is written in the _AsciiDoc_ format, a markup language to describe documents. 
If you need help you can search the http://www.methods.co.nz/asciidoc[AsciiDoc homepage]
or consult the http://powerman.name/doc/asciidoc[AsciiDoc cheatsheet]
thingProperties.h
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>

const char THING_ID[]      = "829941ed-efdd-4572-91c0-e93a732192ec";

const char SSID[]     = SECRET_SSID;    // Network SSID (name)
const char PASS[]     = SECRET_PASS;    // Network password (use for WPA, or use as key for WEP)

int humidity;
int lux;
int pressure;
int temperature;
int uva;
int uvb;
int uvi;

void initProperties(){
  ArduinoCloud.setThingId(THING_ID);
  ArduinoCloud.addProperty(humidity, READ, ON_CHANGE, NULL);
  ArduinoCloud.addProperty(lux, READ, ON_CHANGE, NULL, 1.000000);
  ArduinoCloud.addProperty(pressure, READ, ON_CHANGE, NULL, 1.000000);
  ArduinoCloud.addProperty(temperature, READ, ON_CHANGE, NULL, 1.000000);
  ArduinoCloud.addProperty(uva, READ, ON_CHANGE, NULL, 1.000000);
  ArduinoCloud.addProperty(uvb, READ, ON_CHANGE, NULL, 1.000000);
  ArduinoCloud.addProperty(uvi, READ, ON_CHANGE, NULL, 1.000000);
}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);


Sumber:
Your Environmental Data on Arduino IoT Cloud

Leave a Reply

Your email address will not be published. Required fields are marked *