#4 ESP32 Sensor: External Sensor [Sistem Embedded]
oke,, kembali lagi ke project selanjutnya yaitu project ke-empat dari mata kuliah sistem embedded ini 😊
Karena sebelumnya kita udah coba sensor tapi pakai sensor internal dari ESP32 nya, sekarang kita coba pake external sensor 🤩
Sensor yang aku pakai kali ini yaitu sensor BMP280 yang fungsi utamanya adalah sensor tekanan. Karena tekanan berbanding terbalik dengan ketinggian (semakin tinggi suatu tempat dari permukaan laut maka semakin rendah tekanan udaranya). Selain itu, tekanan juga dipengaruhi oleh suhu, semakin tinggi suhu maka molekul udara akan mengembang dan volume udara akan semakin besar. Jadi nanti saat memperkirakan tekanan, sensor ini juga dapat mengembalikan suhu dan perkiraan ketinggian suatu tempat.
Sebelum mulai ke percobaan, ini komponen-komponen yang dibutuhkan untuk project 4 kali ini.
~Komponen
- Sensor BMP280
- ESP32
- Breadboard
- Kable jumper
- Kabel USB
oke,, sekarang lanjut ke step percobaannya.
~Langkah Pengerjaan
Buatlah rangkaian seperti gambar di bawah ini.
Kode program
Sebelumnya, perlu install terlebih dahulu library Adafruit BMP280 library yang bisa di download di tools > Manage libraries. Lalu, search saja librarynya. Klik install kemudian install all. Udah deh tinggal tunggu aja abistu selesaii~
Kode program yang digunakan di percobaan kali ini yaitu sebagai berikut.
/* Interfacing Arduino with BMP280 temperature and pressure sensor.
* Temperature and pressure values are displayed on 16x2 LCD.
* This is a free software with NO WARRANTY.
* https://simple-circuit.com/
*/
// ESP32 SDA to D21 SCL to D22
// ESP8266 SDA to D2 SCL to D1
#include <Wire.h> // include Wire library, required for I2C devices
#include <Adafruit_Sensor.h> // include Adafruit sensor library
#include <Adafruit_BMP280.h> // include adafruit library for BMP280 sensor
// define device I2C address: 0x76 or 0x77 (0x77 is library default address)
#define BMP280_I2C_ADDRESS 0x76
Adafruit_BMP280 bmp280;
void setup() {
Serial.begin(115200);
Serial.println(F("Arduino + BMP280"));
if (!bmp280.begin(BMP280_I2C_ADDRESS))
{
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
Serial.println("Found BMP280 sensor!");
}
void loop() {
// get temperature, pressure and altitude from library
float temperature = bmp280.readTemperature(); // get temperature
float pressure = bmp280.readPressure(); // get pressure
float altitude_ = bmp280.readAltitude(1013.25); // get altitude (this should be adjusted to your local forecast)
// print data on the serial monitor software
// 1: print temperature
Serial.print("Temperature = ");
Serial.print(temperature);
Serial.println(" °C");
// 2: print pressure
Serial.print("Pressure = ");
Serial.print(pressure/100);
Serial.println(" hPa");
// 3: print altitude
Serial.print("Approx Altitude = ");
Serial.print(altitude_);
Serial.println(" m");
Serial.println(); // start a new line
delay(2000); // wait 2 seconds
}
Setelah melakukan upload, bisa buka serial monitor yang ada pada pojok kanan aplikasi. Pastikan kecepatan uploadnya 115200 baud.
~Hasil dan Analisis
Dari percobaan ini, dapat dilihat bahwa sensor BMP280 ini mendeteksi temperature dan juga tekanan. Saat digenggam, terjadi kenaikan temperature (perhatikan output yang muncul pada serial monitor).
~Inovasi Tambahan
Inovasi tambahan yang aku gunakan di sini yaitu dengan menambahkan 1 lampu LED. Yang dimana di programnya aku buat jika temperature ≥ 29 C maka lampu akan menyala, sedangkan jika selainnya maka lampu akan mati.
Berikut kode program yang aku gunakan untuk inovasi tambahan ini.
/* Interfacing Arduino with BMP280 temperature and pressure sensor.
* Temperature and pressure values are displayed on 16x2 LCD.
* This is a free software with NO WARRANTY.
* https://simple-circuit.com/
*/
// ESP32 SDA to D21 SCL to D22
// ESP8266 SDA to D2 SCL to D1
#include <Wire.h> // include Wire library, required for I2C devices
#include <Adafruit_Sensor.h> // include Adafruit sensor library
#include <Adafruit_BMP280.h> // include adafruit library for BMP280 sensor
// define device I2C address: 0x76 or 0x77 (0x77 is library default address)
#define BMP280_I2C_ADDRESS 0x76
Adafruit_BMP280 bmp280;
const int ledred = 5;
void setup() {
Serial.begin(115200);
Serial.println(F("Arduino + BMP280"));
if (!bmp280.begin(BMP280_I2C_ADDRESS))
{
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
Serial.println("Found BMP280 sensor!");
}
void loop() {
// get temperature, pressure and altitude from library
float temperature = bmp280.readTemperature(); // get temperature
float pressure = bmp280.readPressure(); // get pressure
float altitude_ = bmp280.readAltitude(1013.25); // get altitude (this should be adjusted to your local forecast)
pinMode(temperature, INPUT);
pinMode(ledred, OUTPUT);
if (temperature >= 29){
digitalWrite(ledred, HIGH);
}else{
digitalWrite(ledred, LOW);
}
// print data on the serial monitor software
// 1: print temperature
Serial.print("Temperature = ");
Serial.print(temperature);
Serial.println(" °C");
// 2: print pressure
Serial.print("Pressure = ");
Serial.print(pressure/100);
Serial.println(" hPa");
// 3: print altitude
Serial.print("Approx Altitude = ");
Serial.print(altitude_);
Serial.println(" m");
Serial.println(); // start a new line
delay(2000); // wait 2 seconds
}
~Hasil dari Inovasi Tambahan
Jika sensor diberi sentuhan maka temperature akan meningkat. Ketika temperature meningkat dan nilainya ≥ 29 maka akan membuat lampu LED menjadi hidup.