Ep 4 : External Sensor

Bonaventura Bagas Sukarno
6 min readFeb 22, 2021

--

Blog kali ini akan dibahas external sensor, yaitu sensor tambahan yang tidak terpasang secara langsung pada board ESP32, setelah sebelumnya pada Ep 3 dilakukan project berkaitan sensor internal pada board ESP32. Jika belum membaca Ep 3, dapat dibaca disini.

Review singkat, sensor berguna untuk menerima spesifik input dan dikonversi mejadi output informasi yang bermanfaat bagi user.

Sensors are rapidly bringing us to a place where we can gather, synthesize, and understand enormous amounts of data very quickly.
— Brian Ream

Sebagian dari sensor eksternal memiliki fungsi yang tidak dimiliki sensor internal. Seperti mengukur tekanan, suhu, dan kelembapan lingkungan, mendeteksi vibrasi, mendeteksi suara, mendeteksi api, mengukur gravitasi, dan masih banyak lagi lainnya. Semua sensor ini memperkaya berbagai fitur teknologi yang kemudian diintegrasikan dengan board ESP32.

Sensor BME-280 dan Sensor MPU-6050

Pada bagian pertama project ini akan dirangkai board ESP32 beserta sensor BME-280 untuk mengukur tekanan, temperatur, perkiraan ketinggian(diatas permukaan laut) dan kelembaban di lingkungan sekitar. Tambahan, pada bagian kedua akan digunakan sensor MPU-6050 untuk melihat pengukuran terhadap temperatur, percepatan gravitasi dan kecepatan gerak (akselerometer dan giroskop) dilengkapi dengan tampilan bacaan sensor ke layar OLED.

ESP32 with BME-280

Pada bagian ini akan diintegrasikan board ESP32 dengan sensor BME-280 untuk mengukur pressure, temperature, dan humidity meggunakan I2C communication protocol.

Things used in this project

  1. ESP32 — DevKitC
  2. BreadBoard
  3. Kabel jumper male-to-male (4 pcs)
  4. Sensor BME-280
  5. Kabel USB micro-B
  6. Laptop

Note :

  • Disarankan untuk memilih warna kabel jumper yang berbeda-beda untuk mempermudah proses wiring 😉.

Installing Libraries

Agar program dapat dijalankan di ESP32 dan sensor BME-280, diperlukan konfigurasi serta install BME280 library dan Adafruit_Sensor library pada ArduinoIDE.

  1. Buka Arduino IDE.
  2. Pilih Sketch > Include Library > Manage Libraries.
  3. Cari “adafruit bme280 pada kolom pencarian lalu pilih Install.

4. Akan muncul windows baru untuk meng-install Adafruit Unified Sensor (Adafruit_Sensor library). Pilih Install all.

5. Setelah proses instalasi selesai, restart Arduino IDE 😃.

Schematic

Diagram Skema Projek Sensor BME-280

Jika semua komponen sudah tersedia dan library sudah ter-install, maka dapat dimulai merangkai komponen. Sensor BME dapat berkomunikasi menggunakan I2C communication protocol dan SPI communication protocol — project ini menggunakan I2C — . Rangkaian pada project ini bisa dibilang cukup simple, tetapi perlu diperhatikan wiring antara GPIO dengan pin sensor. Pada rangkaian diatas disambungkan sesuai default I2C communication protocol pada ESP32:

Wiring antara pin sensor dan GPIO | source : randomnerdtutorials.com

Program

Program diatas adalah program yang digunakan untuk menjalankan ESP32 dengan sensor BME menggunakan I2C — Program diatas merupakan modifikasi dari program randomnerdtutorials.com. Pada bagian awal diinisialisasi library yang digunakan, antara lain Wire untuk menggunakan I2C, Adafruit_Sensor, dan Adafruit_BME280 agar sensor BME-280 dapat terbaca.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Variabel SEALEVELPRESSURE_HPA menyimpan nilai tekanan permukaan laut (milibar) —digunakan untuk memperkirakan ketinggian (altitude).

#define SEALEVELPRESSURE_HPA (1013.25)

Pada setup() diinisialisasi paramater baudrate serta checking apakah sensor BME-280 sudah terbaca.

Serial.begin(9600);

Inisialisasi sensor dan checking dilakukan sesuai kode berikut

Serial.println(F("BME280 test"));   
bool status;
// Testing apakah sensor BME280 terdeteksi
status = bme.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check
wiring!");
while (1);
}
Serial.println("-- Default Test --");

Ketika terjadi permasalahan atau sensor BME-280 tidak dapat terbaca, akan ditampilkan pesan “Could not find a valid BME280 sensor, check wiring!” ke serial monitor.

Pada loop() terdapat prosedur printValues() untuk membaca nilai dari sensor BME-280, menampilkan nilai ke serial monitor.

// Membaca nilai sensor dan menampilkannya ke serial monitor  printValues();  
delay(delayTime);

Fungsi dari library Adafruit_BME280 yang digunakan untuk membaca nilai sensor, antara lain :

void printValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");

Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
}
  • bme.readTemperature() — membaca temperatur dalam Celcius.
  • bme.readPressure() — membaca tekanan udara dalam hPa.
  • bme.readAltitude(SEALEVELPRESSURE_HPA) — memperkirakan ketinggian dalam meter berdasarkan tekanan permukaan laut.
  • bme.readHumidity() — membaca kelempaban.

Setelah setiap pembacaan nilai sensor dilakukan, prosedur printValues() akan menampilkan Temperature(suhu), Pressure(tekanan), Approx. Altitude(perkiraan ketinggian), dan Humidity(kelembapan) ke serial monitor.

Result

Setelah kode program selesai di-upload, device berhasil berjalan sesuai dengan spesifikasi program yang diberikan.

Kondisi device saat program dijalankan
Tampilan Serial Monitor

Pada serial monitor ditampilkan informasi temperatur, tekanan, perkiraan ketinggian, dan kelembapan ruangan tiap detik. Selain itu, ketika sensor dipegang, nilai bacaan suhu akan meningkat perlahan — menyesuaikan suhu tubuh — .

ESP32 with MPU-6050 and OLED Display

Bagian kedua ini akan diintegrasikan board ESP32 dengan sensor MPU-6050, yaitu sensor akselerometer dan giroskop untuk mengukur percepatan gravitasi dan kecepatan gerak dan menampilkan nilai bacaan sensor ke OLED Display.

Things used in this project

  1. ESP32 — DevKitC
  2. BreadBoard
  3. Kabel jumper male-to-male (10 pcs)
  4. Sensor MPU-6050
  5. OLED Display Module 0.96 inch I2C
  6. Kabel USB micro-B
  7. Laptop

Note :

  • Disarankan untuk memilih warna kabel jumper yang berbeda-beda untuk mempermudah proses wiring 😉.

Installing Libraries

Agar program dapat dijalankan di ESP32, sensor MPU-6050, dan OLED Display, diperlukan konfigurasi serta instalasi Adafruit_MPU6050 library, Adafruit_Sensor library, Adafruit Bus IO, dan Adafruit SSD1306 pada ArduinoIDE.

  1. Buka Arduino IDE.
  2. Pilih Sketch > Include Library > Manage Libraries.
  3. Cari “adafruit mpu6050 pada kolom pencarian lalu pilih Install.

4. Akan muncul windows baru untuk meng-install Adafruit Unified Sensor (Adafruit_Sensor library) dan Adafruit Bus IO. Pilih Install all. Tunggu hingga proses instalasi selesai.

5. Cari “SSD1306 pada kolom pencarian lalu pilih Install.

6. Setelah proses instalasi selesai, restart Arduino IDE.

Schematic

Diagram Skema Projek Sensor MPU-6050 dan OLED Display

Rangkai semua komponen mengikuti petunjuk diagram skema diatas. Sensor MPU-6050 dan OLED Display sama-sama dapat menggunakan I2C communication protocol. Karena sensor MPU-6050 dan OLED Display menggunakan alamat I2C yang berbeda, maka dapat menggunakan GPIO I2C yang sama (dihubungkan secara paralel). Pada sensor MPU-6050 terdapat 4 pin sensor yang disambungkan ke GPIO ESP32, antara lain :

  • VCC — 3.3V
  • GND — GND
  • SCL — GPIO 22
  • SDA — GPIO 21

Untuk OLED Display cukup ikuti wiring sesuai diagram skema terlebih dulu karena modul Display baru akan dibahas pada next Ep 😉!

Program

Kode diatas merupakan kode yang diperoleh dari randomnerdtutorials.com.

Pada bagian awal program diinisialisasi library agar sensor MPU-6050 dapat terbaca dan OLED Display mampu untuk menampilkan display.

#include <Adafruit_MPU6050.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>

Pada setup() diinisialisasi paramater baudrate, sensor MPU-6050, dan OLED Display.

Serial.begin(115200);

Pada bagian kode berikut dilakukan inisialisasi sensor MPU-6050 sekaligus checking apakah sensor terdeteksi atau tidak.

if (!mpu.begin()) {
Serial.println("Sensor init failed");
while (1)
yield();
}

Bagian berikutnya adalah kode setting awal OLED Display.

// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.display();

Pada loop() digunakan untuk membaca nilai dari sensor MPU-6050 dan menampilkan nilai tersebut ke OLED Display.

Catatan : karena saya belum mempelajari modul display dan mendalami sensor MPU-6050, saya belum bisa menjelaskan kegunaan setiap baris kode dalam loop().

Result

Setelah kode program selesai di-upload, device berhasil berjalan sesuai dengan spesifikasi program yang diberikan 😃.

Kondisi device saat program dijalankan
Tampilan Serial Monitor

Pada serial monitor ditampilkan informasi percepatan gravitasi dan kecepatan gerak(akselerometer dan giroskop) dari state sensor MPU-6050. Selain itu, ketika sensor digerakkan, maka nilai yang ditampilkan di OLED Display juga ikut berubah.

Thanks for reading
See you on another ep! 😄

--

--