Kabar Terkini

SENSOR GEMPA SEISMOGRAF - SENSOR SUHU DHT11- MICROBIT - OLED - MICROSOFT MAKECODE - Jurnalku by Fajar himawan

 


SENSOR GEMPA SEISMOGRAF 
SENSOR SUHU DHT11- BBC MICROBIT - OLED - 
MICROSOFT MAKECODE
Jurnalku by Fajar himawan




SENSOR GEMPA SEISMOGRAF - SENSOR SUHU DHT11- MICROBIT - OLED - MICROSOFT MAKECODE - Jurnalku by Fajar himawan







SENSOR SUHU DHT11- MICROBIT - OLED

https://makecode.microbit.org/S49404-89522-66079-51983


SENSOR GEMPA SEISMOGRAF - SENSOR SUHU DHT11- MICROBIT - OLED

https://makecode.microbit.org/S29172-99032-48895-34855






Bedah Kode: Membuat Seismograf Digital & Monitor Suhu dengan Micro:bit 

(Penjelasan Lengkap)


Apakah Anda pernah penasaran bagaimana cara kerja alat pendeteksi gempa sederhana? Atau Anda sedang mengerjakan proyek STEM menggunakan Micro:bit? Di artikel kali ini, kita akan melakukan "Deep Dive" (pembelajaran mendalam) ke dalam kode Python untuk proyek Seismograf Digital & Sensor Suhu.

Proyek ini menggabungkan dua fungsi utama:

  1. Sistem Peringatan Dini Gempa: Mengukur getaran dan membunyikan alarm jika melebihi batas aman.

  2. Monitor Lingkungan: Menampilkan suhu dan kelembaban saat kondisi aman.

Mari kita bedah kodenya bagian demi bagian!


1. Persiapan Variabel & Layar OLED

Di awal kode, kita melihat deretan variabel. Ini adalah "memori" tempat Micro:bit menyimpan data sementara.

Python
rawGetar = 0
srRealtime = 0
modeBahaya = False
# ... dan lain-lain
  • rawGetar: Nilai mentah dari sensor akselerometer Micro:bit.

  • srRealtime: Nilai getaran yang sudah dikonversi menjadi satuan simulasi Skala Richter (SR).

  • modeBahaya: Ini adalah "saklar" logika (True/False). Jika True, berarti gempa sedang terjadi.

  • OLED12864_I2C.init(60): Perintah wajib untuk menghidupkan layar OLED agar siap menampilkan teks.


2. Logika Utama: Aman vs Bahaya

Jantung dari program ini ada di dalam fungsi on_forever(). Logika utamanya menggunakan IF-ELSE (Jika-Maka).

Python
if modeBahaya:
# Lakukan aksi peringatan gempa
else:
# Lakukan monitoring suhu normal

Bayangkan ini sebagai satpam. Satpam akan mengecek: "Apakah status sekarang BAHAYA?" Jika ya, bunyikan sirine. Jika tidak, silakan duduk tenang dan catat suhu ruangan.


3. Rumus Matematika: Menghitung Skala Richter (Simulasi)

Bagaimana kita mengubah goyangan Micro:bit menjadi angka Skala Richter? Perhatikan blok kode di bagian else (Mode Normal):

Python
getaranSaatIni = input.acceleration(Dimension.STRENGTH)
selisih = abs(getaranSaatIni - 1023)
nilaiMentah = selisih / 60
srRealtime = Math.round(nilaiMentah * 100) / 100

Penjelasannya:

  1. input.acceleration: Sensor bawaan Micro:bit. Dalam keadaan diam, nilainya sekitar 1023 (karena gaya gravitasi bumi).

  2. abs(getaranSaatIni - 1023): Kita mengurangi nilai sensor dengan 1023. Jika Micro:bit diam, hasilnya 0. Jika diguncang, angkanya naik. Fungsi abs memastikan angkanya selalu positif.

  3. Pembagian / 60: Ini adalah angka kalibrasi (bisa diubah). Tujuannya untuk memperkecil nilai ribuan menjadi satuan kecil (misal 0 - 9) agar menyerupai Skala Richter.


4. Pemicu Alarm (Threshold)

Kapan alarm berbunyi? Kita menetapkan batas ambang (threshold).

Python
if srRealtime > 1.5:
richterBahaya = srRealtime
modeBahaya = True
music.play(...)
  • Jika getaran (srRealtime) melebihi angka 1.5, sistem langsung mengaktifkan modeBahaya = True.

  • Micro:bit akan menyimpan nilai guncangan terbesar ke variabel richterBahaya untuk ditampilkan di layar sebagai bukti.

  • Suara sirine dimainkan menggunakan music.play.


5. Tampilan Saat Bahaya (Evakuasi)

Jika modeBahaya aktif, kode akan menjalankan blok ini:

Python
OLED12864_I2C.show_string(0, 0, "!! BAHAYA !!", 1)
OLED12864_I2C.show_string(0, 3, "AYO EVAKUASI!", 1)

Layar OLED akan dipenuhi peringatan. Namun, alarm tidak boleh berbunyi selamanya. Ada fitur Reset Otomatis:

Python
if input.running_time() - waktuMulaiBahaya > 15000:
control.reset()

Kode ini menghitung waktu. Jika alarm sudah berbunyi lebih dari 15.000 milidetik (15 detik), Micro:bit akan merestart dirinya sendiri (control.reset()) kembali ke mode aman.


6. Mode Aman: Membaca Sensor Suhu dan Kelembaban Udara dengan DHT11

Saat tidak ada gempa, alat ini berfungsi sebagai stasiun cuaca mini.

Python
dht11_dht22.query_data(DHTtype.DHT11, DigitalPin.P1, ...)
if dht11_dht22.read_data_successful():
# Tampilkan Suhu dan Kelembaban
  • Kode ini memerintahkan Micro:bit untuk "bertanya" pada sensor DHT11 yang terpasang di Pin P1.

  • Jika berhasil membaca, suhu (TEMPERATURE) dan kelembaban (HUMIDITY) ditampilkan di baris 1 dan 2 OLED.

  • Di bagian bawah layar, kita tetap menampilkan nilai getaran realtime agar pengguna tahu seberapa sensitif alatnya.


7. Grafik Visual & Data Serial (Multitasking)

Anda mungkin melihat ada fungsi kedua bernama on_forever2(). Kenapa dipisah?

Python
def on_forever2():
rawGetar = input.acceleration(Dimension.STRENGTH)
led.plot_bar_graph(abs(rawGetar - 1023), 1023)
serial.write_value("GETARAN", rawGetar)

Ini berjalan secara paralel (bersamaan) dengan fungsi utama.

  1. led.plot_bar_graph: Mengubah lampu LED matrix 5x5 di wajah Micro:bit menjadi grafik batang yang naik turun sesuai getaran. Ini memberikan efek visual yang keren!

  2. serial.write_value: Mengirim data getaran ke komputer lewat kabel USB. Anda bisa melihat grafiknya di "Device Console" pada editor MakeCode.


Kesimpulan

Kode ini adalah contoh sempurna penerapan logika pemrograman:

  • Input: Sensor Getar (Internal) & Sensor Suhu (DHT11).

  • Proses: Menghitung matematika (konversi SR) dan Logika IF/ELSE (Aman vs Bahaya).

  • Output: Tampilan OLED, Suara Sirine, dan Grafik LED.

Semoga penjelasan ini membantu Anda memahami proyek Seismograf Micro:bit ini. Selamat mencoba dan jangan lupa bagikan hasilnya! 😊


Link Proyek: Lihat Dokumentasi Lengkap di Sini










SENSOR SUHU DHT11- MICROBIT - OLED

https://makecode.microbit.org/S49404-89522-66079-51983


SENSOR GEMPA SEISMOGRAF - SENSOR SUHU DHT11- MICROBIT - OLED

https://makecode.microbit.org/S29172-99032-48895-34855















































Tutorial langkah demi langkah untuk membuat kode blok Micro:bit berdasarkan gambar yang Anda lampirkan. Kode ini menggabungkan pembacaan data suhu dan kelembaban dari sensor DHT11 (atau sejenisnya) dan pembacaan nilai getaran/akselerasi internal Micro:bit, kemudian menampilkannya di layar OLED dan melalui port serial.

Berikut adalah tutorialnya:


🛠️ Tutorial Pembuatan Kode Blok Micro:bit

Kode ini membutuhkan ekstensi (extension) untuk sensor DHT11/sejenisnya dan untuk layar OLED, karena blok tersebut tidak tersedia secara default di Micro:bit.

1. Persiapan Awal (Menambahkan Ekstensi)

Anda perlu menambahkan ekstensi berikut ke editor Micro:bit Anda (misalnya MakeCode):

  1. Klik "Extensions" (Ekstensi).

  2. Cari dan tambahkan ekstensi untuk DHT11 (misalnya dht11 atau pxt-dht11).

  3. Cari dan tambahkan ekstensi untuk layar OLED (misalnya oled).

2. Blok on start (Inisialisasi)

Blok ini berjalan hanya sekali saat Micro:bit dinyalakan.

  1. Tarik blok on start dari kategori Basic (Dasar).

  2. Di dalamnya, tarik blok inisialisasi akselerasi:

    • Cari blok input.acceleration(Dimension.Strength) di kategori Input.

    • Catatan: Blok ini mungkin tidak selalu muncul, tetapi fungsi akselerasi sudah aktif secara default. Kita akan menggunakannya di blok forever.

  3. Tarik blok inisialisasi OLED:

    • Dari kategori ekstensi OLED, tarik blok init OLED with addr 60 (gunakan alamat yang sesuai dengan OLED Anda, 60 atau 62 adalah yang umum).

    • Masukkan angka 60 (atau sesuai kebutuhan) ke dalam kolom alamat.

Hasil Blok on start:

Cuplikan kode
on start
    // Inisialisasi OLED, pastikan alamat sesuai dengan modul Anda
    init OLED with addr 60
    // Blok input.acceleration(Dimension.Strength) di gambar tidak memiliki fungsi di sini, namun jika ada, letakkan di atas init OLED

3. Blok forever (Loop Utama - Kiri)

Blok ini berfungsi untuk membaca sensor DHT11 dan menampilkannya di layar OLED.

  1. Tarik blok forever dari kategori Basic.

  2. Di dalamnya, tarik blok Query DHT11:

    • Dari kategori ekstensi DHT, tarik blok Query DHT11 Data pin PB Pin pull up true Serial output true.

    • Sesuaikan parameter sesuai gambar: Data pin mungkin perlu disesuaikan dengan pin yang Anda gunakan (contoh: P0P1P2). Pin PB di gambar mungkin merujuk pada P8 atau pin lain tergantung ekstensi. Anggap saja Anda menggunakan P8 untuk tutorial ini.

    • Sesuaikan: Pin pull up ke trueSerial output ke true.

  3. Tarik blok jeda: wait 2 sec after query dan atur ke false.

  4. Tarik blok if:

    • Dari kategori Logic (Logika), tarik blok if.

    • Di kondisinya, masukkan blok Last query successful? dari kategori ekstensi DHT.

    • Tambahkan blok then untuk menampilkan data:

      • Suhu:

        • show string at x 0 y 0 text "Suhu:" color 1

        • show a Number at x 7 y 0 number Read temperature color 1 (Ganti Read temperature dari ekstensi DHT).

      • Kelembaban:

        • show string at x 0 y 1 text "Lembab:" color 1

        • show a Number at x 7 y 1 number Read humidity color 1 (Ganti Read humidity dari ekstensi DHT).

      • Getaran/Akselerasi (Ditampilkan di Blok Kiri):

        • show string at x 0 y 2 text "Getaran:" color 1

        • show a Number at x 0 y 3 number acceleration(mg) strength color 1 (Ganti acceleration(mg) strength dari kategori Input).

4. Blok forever (Loop Utama - Kanan)

Blok ini berfungsi untuk menampilkan akselerasi sebagai grafik batang dan mengirimkannya melalui serial.

  1. Tarik blok forever kedua dari kategori Basic.

  2. Di dalamnya, tarik blok grafik batang:

    • Dari kategori ekstensi OLED, tarik plot bar graph of acceleration(mg) strength up to 1023.

    • Masukkan blok acceleration(mg) strength dari kategori Input.

    • Atur nilai maksimum up to menjadi 1023 (nilai maksimum pembacaan akselerasi pada Micro:bit).

    • Atur posisi Y menjadi 8 (sesuai gambar, meskipun posisi Y di blok ini mungkin hanya mengontrol posisi grafiknya).

  3. Tarik blok penulisan serial:

    • Dari kategori Serial, tarik blok serial write value.

    • Untuk nama, masukkan string GETARAN.

    • Untuk nilai, masukkan blok acceleration(mg) strength dari kategori Input.


Hasil Akhir dan Penjelasan Fungsionalitas

Kode blok Anda akan memiliki tiga bagian utama:

BlokFungsi UtamaPenjelasan Tambahan
on startInisialisasiMenyiapkan layar OLED agar siap digunakan.
forever (Kiri)Pembacaan & Tampilan Sensor1. Meminta data DHT11 (suhu/kelembaban) setiap beberapa detik. 2. Jika sukses, tampilkan SuhuKelembaban, dan nilai Getaran/Akselerasi di layar OLED.
forever (Kanan)Tampilan Grafik & Serial1. Menampilkan nilai Getaran/Akselerasi sebagai grafik batang di OLED. 2. Mengirim data "GETARAN" beserta nilainya melalui koneksi serial ke komputer.

Catatan Penting Mengenai Pin:

Pastikan pin data (misalnya P0 untuk DHT11) dan alamat OLED (misalnya 60) sudah sesuai dengan perangkat keras yang Anda sambungkan ke Micro:bit.



JS Code:

/**
 * Variabel Status
 */
let rawGetar = 0
let srRealtime = 0
let nilaiMentah = 0
let selisih = 0
let getaranSaatIni = 0
let waktuMulaiBahaya = 0
let richterBahaya = 0
let modeBahaya = false
// Inisialisasi OLED
OLED12864_I2C.init(60)
OLED12864_I2C.clear()
basic.forever(function () {
    // === 1. JIKA SEDANG MODE BAHAYA (GEMPA) ===
    // === 2. JIKA MODE NORMAL (MONITORING) ===
    if (modeBahaya) {
        OLED12864_I2C.showString(
        0,
        0,
        "!! BAHAYA !!",
        1
        )
        // Tampilkan Max Getaran yang terekam saat alarm memicu
        OLED12864_I2C.showString(
        4,
        1,
        "GEMPA",
        1
        )
        OLED12864_I2C.showNumber(
        3,
        2,
        richterBahaya,
        1
        )
        OLED12864_I2C.showString(
        8,
        2,
        "SR",
        1
        )
        OLED12864_I2C.showString(
        0,
        3,
        "AYO EVAKUASI!",
        1
        )
        // Reset sistem setelah 15 detik
        if (input.runningTime() - waktuMulaiBahaya > 15000) {
            control.reset()
        }
    } else {
        getaranSaatIni = input.acceleration(Dimension.Strength)
        // --- LANGKAH 1: HITUNG DULU SKALA RICHTERNYA ---
        // Kita hitung di sini agar bisa dipakai untuk syarat IF
        selisih = Math.abs(getaranSaatIni - 1023)
        nilaiMentah = selisih / 60
        // Bulatkan 2 digit
        srRealtime = Math.round(nilaiMentah * 100) / 100
        // --- LANGKAH 2: GUNAKAN NILAI SR SEBAGAI SYARAT ALARM ---
        // Contoh: Alarm bunyi jika getaran > 1.50 SR
        // Silakan ganti angka 1.5 sesuai keinginanmu
        if (srRealtime > 1.5) {
            // Simpan nilai SR yang memicu alarm ini
            richterBahaya = srRealtime
            modeBahaya = true
            waktuMulaiBahaya = input.runningTime()
            music.play(music.createSoundExpression(WaveShape.Sine500002550500SoundExpressionEffect.NoneInterpolationCurve.Linear), music.PlaybackMode.LoopingInBackground)
            OLED12864_I2C.clear()
        } else {
            // --- JIKA AMAN (SR < 1.5), TAMPILKAN MONITORING ---
            // -- Baca Sensor Suhu & Lembab --
            dht11_dht22.queryData(
            DHTtype.DHT11,
            DigitalPin.P1,
            true,
            true,
            false
            )
            if (dht11_dht22.readDataSuccessful()) {
                // Tampilkan Suhu
                OLED12864_I2C.showString(
                0,
                0,
                "Suhu :",
                1
                )
                OLED12864_I2C.showNumber(
                7,
                0,
                dht11_dht22.readData(dataType.temperature),
                1
                )
                // Tampilkan Lembab
                OLED12864_I2C.showString(
                0,
                1,
                "Lembab :",
                1
                )
                OLED12864_I2C.showNumber(
                9,
                1,
                dht11_dht22.readData(dataType.humidity),
                1
                )
            }
            // -- Tampilkan Monitor Getaran Realtime --
            OLED12864_I2C.showString(
            0,
            2,
            "Getaran :",
            1
            )
            OLED12864_I2C.showNumber(
            5,
            3,
            srRealtime,
            1
            )
            OLED12864_I2C.showString(
            10,
            3,
            "SR",
            1
            )
        }
    }
})
// Loop Grafik & Serial
basic.forever(function () {
    rawGetar = input.acceleration(Dimension.Strength)
    led.plotBarGraph(
    Math.abs(rawGetar - 1023),
    1023
    )
    serial.writeValue("GETARAN", rawGetar)
})


py CODE:
"""

Variabel Status

"""
rawGetar = 0
srRealtime = 0
nilaiMentah = 0
selisih = 0
getaranSaatIni = 0
waktuMulaiBahaya = 0
richterBahaya = 0
modeBahaya = False
# Inisialisasi OLED
OLED12864_I2C.init(60)
OLED12864_I2C.clear()

def on_forever():
    global getaranSaatIni, selisih, nilaiMentah, srRealtime, richterBahaya, modeBahaya, waktuMulaiBahaya
    # === 1. JIKA SEDANG MODE BAHAYA (GEMPA) ===
    # === 2. JIKA MODE NORMAL (MONITORING) ===
    if modeBahaya:
        OLED12864_I2C.show_string(00"!! BAHAYA !!"1)
        # Tampilkan Max Getaran yang terekam saat alarm memicu
        OLED12864_I2C.show_string(41"GEMPA"1)
        OLED12864_I2C.show_number(32, richterBahaya, 1)
        OLED12864_I2C.show_string(82"SR"1)
        OLED12864_I2C.show_string(03"AYO EVAKUASI!"1)
        # Reset sistem setelah 15 detik
        if input.running_time() - waktuMulaiBahaya > 15000:
            control.reset()
    else:
        getaranSaatIni = input.acceleration(Dimension.STRENGTH)
        # --- LANGKAH 1: HITUNG DULU SKALA RICHTERNYA ---
        # Kita hitung di sini agar bisa dipakai untuk syarat IF
        selisih = abs(getaranSaatIni - 1023)
        nilaiMentah = selisih / 60
        # Bulatkan 2 digit
        srRealtime = Math.round(nilaiMentah * 100) / 100
        # --- LANGKAH 2: GUNAKAN NILAI SR SEBAGAI SYARAT ALARM ---
        # Contoh: Alarm bunyi jika getaran > 1.50 SR
        # Silakan ganti angka 1.5 sesuai keinginanmu
        if srRealtime > 1.5:
            # Simpan nilai SR yang memicu alarm ini
            richterBahaya = srRealtime
            modeBahaya = True
            waktuMulaiBahaya = input.running_time()
            music.play(music.create_sound_expression(WaveShape.SINE,
                    5000,
                    0,
                    255,
                    0,
                    500,
                    SoundExpressionEffect.NONE,
                    InterpolationCurve.LINEAR),
                music.PlaybackMode.LOOPING_IN_BACKGROUND)
            OLED12864_I2C.clear()
        else:
            # --- JIKA AMAN (SR < 1.5), TAMPILKAN MONITORING ---
            # -- Baca Sensor Suhu & Lembab --
            dht11_dht22.query_data(DHTtype.DHT11, DigitalPin.P1, TrueTrueFalse)
            if dht11_dht22.read_data_successful():
                # Tampilkan Suhu
                OLED12864_I2C.show_string(00"Suhu :"1)
                OLED12864_I2C.show_number(70, dht11_dht22.read_data(dataType.TEMPERATURE), 1)
                # Tampilkan Lembab
                OLED12864_I2C.show_string(01"Lembab :"1)
                OLED12864_I2C.show_number(91, dht11_dht22.read_data(dataType.HUMIDITY), 1)
            # -- Tampilkan Monitor Getaran Realtime --
            OLED12864_I2C.show_string(02"Getaran :"1)
            OLED12864_I2C.show_number(53, srRealtime, 1)
            OLED12864_I2C.show_string(103"SR"1)
basic.forever(on_forever)

# Loop Grafik & Serial

def on_forever2():
    global rawGetar
    rawGetar = input.acceleration(Dimension.STRENGTH)
    led.plot_bar_graph(abs(rawGetar - 1023), 1023)
    serial.write_value("GETARAN", rawGetar)
basic.forever(on_forever2)

No comments

Featured Post

SENSOR GEMPA SEISMOGRAF - SENSOR SUHU DHT11- MICROBIT - OLED - MICROSOFT MAKECODE - Jurnalku by Fajar himawan

  SENSOR GEMPA SEISMOGRAF  SENSOR SUHU DHT11- BBC MICROBIT - OLED -  MICROSOFT MAKECODE Jurnalku by Fajar himawan SENSOR GEMPA SEISMOGRAF - ...