ESP32 and External Sensor

Kirana Shely Sefiana
6 min readFeb 24, 2022

--

Hello Readers! Welcome to the 4th Project:). Kali ini saya akan membahas tentang sensor eksternal pada ESP32. ESP32 merupakan mikrokontroler yang kegunaannya sangat banyak sekali. Ternyata ESP32 dapat dikolaborasikan dengan begitu banyak jenis sensor. Setiap sensor memiliki kegunaan dan cara kerja nya masing-masing. Pada artikel ini saya akan membahas penggunaan sensor temperatur & tekanan (Barometic Pressure Altitude Sensor) dan aplikasi sensor jarak (Ultrasonic Sensor).

Working with BMP280

Prerequisites

  1. ESP32
  2. Micro USB cable
  3. BMP280 Sensor
  4. Male-to-Male jumper
  5. Breadboard

Schematic Diagram

Untuk melakukan percobaan ini pertama anda harus merangkai rangkaian komponennya terlebih dahulu. Berikut skema rangkaian untuk sensor BMP280.

Skema rangkaian untuk sensor BMP280

Tempelkan BMP280 ke breadboard lalu sambungkan dengan kabel male-to-male sesuai dengan skema di atas. Dapat dilihat bahwa pin 3V3 disambungkan dengan VCC, lalu GND ke GND, kemudian pin 21 ke SDA, dan pin 22 ke SCL. Beginilah rangkaian komponen yang sudah terpasang.

Rangkaian komponen BMP280 yang sudah terpasang

Program Code

Setelah terpasang, sekarang bukalah Arduino IDE pada laptop/PC. Pertama-tama kita harus men-download library baru untuk sensor ini. Pada menu Tools>Manage libraries tulislah “adafruit BMP280” lalu install library ini. Kemudian bukalah menu File>Examples>Adafruit BMP280 Library>bmp280test setelah memilih menu ini, akan langsung keluar kode program yang bisa anda gunakan. Kemudian anda bisa langsung meng-upload kode ke ESP32 dan hasil pembacaan sensor akan muncul pada serial monitor. Namun, saat saya mulai meng-upload kode ini ke ESP32 pada serial monitor tidak muncul apapun. Di karenakan gagal, saya mencari pada sumber-sumber lain. Ternyata saya perlu mengubah sedikit kode program sebelumnya. Pada kode program diperlukan menambahkan variabel bmp yang diinisialisasi dari address 0x76. Berikut kode program untuk percobaan ini,

/***************************************************************************
This is a library for the BMP280 humidity, temperature & pressure sensor
Designed specifically to work with the Adafruit BMP280 Breakout
----> http://www.adafruit.com/products/2651
These sensors use I2C or SPI to communicate, 2 or 4 pins are required
to interface.
Adafruit invests time and resources providing this open source code,
please support Adafruit andopen-source hardware by purchasing products
from Adafruit!
Written by Limor Fried & Kevin Townsend for Adafruit Industries.
BSD license, all text above must be included in any redistribution
***************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
void setup() {
Serial.begin(9600);
while ( !Serial ) delay(100); // wait for native usb
Serial.println(F("BMP280 test"));

if (!bmp.begin(0x76)) { //apabila variabel bmp tidak diinisialisasi dari address 0x76 (address i2c yang didapat dari percobaan 1
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!")); //pesan error
while (1); //selama hasilnya 1 maka tidak melakukan apa-apa, ampe nilainya bukan 1 baru keluar dari loop while.
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}
void loop() {
Serial.print(F("Temperature = "));
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print(F("Approx altitude = "));
Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
Serial.println(" m");
Serial.println();
delay(2000);
}

Kemudian sambungkan ESP32 ke laptop/PC anda dengan micro USB cable. Setelah itu compile dan upload kode program dan jangan lupa untuk menekan tombol Boot pada ESP32. Jika sudah berhasil, bukalah serial monitor dengan memilih menu Tools>Serial Monitor. Pada serial monitor pilih baud 9600, jika sudah benar seharusnya muncul hasil pembacaan sensor seperti gambar di bawah ini.

Hasil pembacaan sensor BMP280

Jika belum, mungkin ada yang salah pada letak jumper atau mungkin komponen anda belum terpasang dengan benar. Berikut ini video hasil percobaan untuk sensor BMP280.

Application for Ultrasonic Sensor (HC-SR04)

Sensor HC-SR04 ini merupakan sensor yang menggunakan sonar untuk membaca jarak dari sensor ke suatu benda. Pada kesempatan ini saya akan membuat model sensor jarak yang akan memberi sinyal jika letak benda terlalu dekat. Sensor jarak seperti ini sering dipakai pada sensor mobil. Jika ada benda yang terlalu dekat dan berpotensi menabrak, sensor akan berbunyi.

Prerequisites

  1. ESP32
  2. Breadboard
  3. Micro USB cable
  4. Male-to-male jumper
  5. HC-SR04
  6. Buzzer
Sensor HC-SR04

Schematic Diagram

Sebelum memulai percobaan, komponen-komponen ini harus dirangkai dengan benar. Skema rangkaian untuk percobaan ini berbeda dengan project-project sebelumnya. Kali ini digunakan sisi sebelah kiri dari ESP32 karena untuk sensor ultrasonic ini membutuhkan sumber tegangan 5 volt yaitu pada pin VIN yang tersambung ke VCC pada HC-SR04. Lalu pin 12 dihubungkan dengan Trig pin, pin 13 dengan Echo pin, dan GND dengan pin GND. Kemudia buzzer saya hubungkan pada pin 25 serta jangan lupa kutub negatif nya dihubungkan ke GND. Beginilah gambaran skema rangkaian pada percobaan ini.

Skema rangkaian pada percobaan ini

Pasanglah komponen sesuai dengan skema di atas ini. Jika sudah seharusnya rangkaian anda terlihat seperti gambar di bawah ini. Selanjutnya kita akan membuat kode program agar komponen ini bisa berjalan sesuai dengan keinginan kita.

Rangkaian komponen pada project ini

Program Code

Pada sumber referensi, terdapat kode program yang menampilkan jarak dari sensor ke benda. Dari kode tersebut saya modifikasi sedikit karena pada rangkaian saya menambahkan komponen buzzer. Konsep untuk program ini,

  1. Saat benda terlalu jauh (>20cm) — Buzzer tidak berbunyi
  2. Saat benda ada (10cm-20cm) — Buzzer berbunyi 1.5 sekon sekali
  3. Saat benda cukup dekat (5cm-10cm) — Buzzer berbunyi 0.5 sekon sekali
  4. Saat benda dekat sekali (<5cm) — Buzzer berbunyi 0.1 sekon sekali

Kemudian beginilah kode program untuk aplikasi sensor ultrasonic ini.

const int trigPin = 12;
const int echoPin = 13;
//define sound speed in cm/uS
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701
long duration;
float distanceCm;
float distanceInch;
const int buzzer = 25;
const int threshold1 = 5;
const int threshold2 = 10;
const int threshold3 = 20;
void setup() {
Serial.begin(115200); // Starts the serial communication
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(buzzer, OUTPUT);
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculate the distance
distanceCm = duration * SOUND_SPEED/2;

// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;

// Prints the distance in the Serial Monitor
if(distanceCm <= threshold1){
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.println("object is very close");
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
delay(100);
} else if(distanceCm > threshold1 && distanceCm <= threshold2){
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.println("object is close");
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
delay(500);
} else if(distanceCm > threshold2 && distanceCm <= threshold3){
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.println("object detected");
digitalWrite(buzzer, LOW);
delay(500);
digitalWrite(buzzer, HIGH);
delay(1500);
} else if(distanceCm > threshold3){
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.println("object is too far");
}

delay(100);
}

Setelah menyelesaikan kode program, sambungkan ESP32 ke laptop/PC dengan micro USB cable. Lalu compile dan upload kode ke ESP32 dan jangan lupa untuk tekan tombol Boot. Bukalah serial monitor pada menu Tools>Serial Monitor. Pada serial monitor anda bisa melihat hasil pembacaan jarak benda dan status letak bendanya. Hasil pembacaan untuk percobaan ini dapat dilihat di bawah ini.

Hasil pembacaan sensor HC-SR04

Anda juga bisa mencoba mendekatkan benda ke sensor untuk mengetes apakah buzzer akan memberi sinyal jika benda berada terlalu dekat. Jika belum berhasil mungkin ada yang salah dengan rangkaian anda. Berikut ini video percobaan yang berhasil untuk model sensor jarak.

Sekian untuk sharing kali ini. Semoga bermanfaat dan semangat selalu!

References :

--

--

Kirana Shely Sefiana
0 Followers

Information System & Technology Student