Laporan Akhir 1 M2

 




Percobaan 7
Led RGB, Buzzer, Soil Moisture, & Push Button

1. Prosedur 
[Kembali]

  1. Membuat rangkaian sesuai dengan percobaan 7.
  2. Buat program untuk STM32 di software STM32 CUBE ID.
  3. Setelah program selesai di buat, inputkan kode tersebut kedalam STM32 dengan stlink.
  4. Untuk simulasi, ketika Soil Moisture Sensor mendeteksi kelembaban pada tanah (kadar air banyak) maka LED RGB akan hidup dan buzzer berbunyi.
  5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. STM32F103C8



2. Resistor

3. Push Button

push button 4 kaki di Sabara Mikro | Tokopedia

4. Breadboard
BREADBOARD / PROJECTBOARD / PROTOBOARD 400 HOLES di M-kontrol | Tokopedia
 
5. RGB LED
Jual LED RGB 4 PIN WARNA MERAH HIJAU BIRU 5mm ( ARDUINO ) - Common Cathode  - Jakarta Barat - Ardushop-id | Tokopedia
 
6. Buzzer
Buzzer
7. Soil Moisture Sensor



Diagram Blok  :


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi 



Prinsip Kerja 
    

    Rangkaian ini berfungsi untuk memantau kelembaban tanah secara otomatis dengan memanfaatkan sensor kelembaban tanah, mikrokontroler STM32F103C8, LED RGB, buzzer, dan push button sebagai komponen utamanya. Sistem bekerja dengan prinsip utama membaca kadar kelembaban tanah dan meresponsnya melalui indikator visual dan suara.

    Pertama, sensor kelembaban tanah yang terhubung ke pin analog mikrokontroler membaca kadar air dalam tanah. Sensor ini bekerja berdasarkan resistansi antara dua elektroda; ketika tanah basah, resistansi rendah sehingga menghasilkan sinyal analog dengan nilai tinggi, dan ketika tanah kering, resistansinya meningkat sehingga sinyal yang dikirimkan lebih rendah. Nilai analog dari sensor ini kemudian dikonversi menjadi sinyal digital oleh ADC (Analog-to-Digital Converter) pada pin A0 mikrokontroler STM32F103C8.

    Berdasarkan nilai kelembaban yang diperoleh, mikrokontroler akan mengaktifkan LED RGB dengan warna yang sesuai. Warna merah digunakan sebagai indikator tanah kering atau kelembaban rendah, warna hijau menandakan tanah dalam kondisi lembab atau cukup air, sedangkan warna biru bisa digunakan untuk menunjukkan status normal atau ambang batas tertentu yang telah ditentukan dalam sistem. Masing-masing pin warna pada LED RGB dihubungkan ke pin I/O mikrokontroler dan diberikan resistor untuk mengatur arus agar LED tidak rusak.

    Selain LED RGB, sistem juga mengendalikan buzzer sebagai indikator tambahan. Apabila tanah terdeteksi sangat basah—melebihi ambang kelembaban tertentu—maka buzzer akan aktif dan memberikan peringatan suara. Fungsi ini memungkinkan sistem tidak hanya memberikan informasi visual, tetapi juga peringatan auditif ketika kelembaban tanah terlalu tinggi.

    Push button dalam rangkaian ini berperan sebagai input manual untuk mengubah status sistem. Push button dihubungkan ke pin PB0 pada mikrokontroler dan berfungsi sebagai saklar yang memungkinkan pengguna untuk mengaktifkan atau menonaktifkan fungsi tertentu seperti buzzer. Mekanisme ini biasanya diterapkan menggunakan interrupt agar sistem dapat merespons secara langsung saat tombol ditekan tanpa perlu menunggu siklus program utama selesai. Dengan demikian, sistem ini mampu bekerja secara otomatis maupun manual untuk memantau dan merespons kondisi kelembaban tanah secara efektif.

4. Flowchart dan Listing Program [Kembali]

Flowchart :


Listing Program :

from machine import Pin, PWM, ADC
import utime


# Pin Setup
ldr = ADC(28)         # Pin AO dari LDR ke GP28
ldr_digital = Pin(0, Pin.IN)  # Pin DO dari LDR ke GP0
led = Pin(27, Pin.OUT)  # LED di GP6
buzzer = PWM(Pin(15))  # Buzzer di GP15 dengan PWM


# Konfigurasi PWM Buzzer
buzzer.freq(1000)      # Frekuensi awal buzzer (1kHz)
buzzer.duty_u16(0)     # Mulai dengan buzzer mati


# Fungsi untuk mengonversi nilai ADC ke lux  
def adc_to_lux(adc_value):
    return (adc_value / 65535) * 900 + 10  # Rentang 10 - 1000 lux


# Variabel untuk menyimpan kondisi normal awal
lux_normal = 0


# Variabel untuk kedip LED
last_blink_time = utime.ticks_ms()
led_state = False
led_should_blink = False  # hanya True saat mendeteksi perubahan cahaya


# Loop utama
while True:
    analog_value = ldr.read_u16()
    lux = adc_to_lux(analog_value)


    if lux_normal == 0:
        lux_normal = lux
        print(f"Lux Normal: {lux_normal}")


    print(f"LDR Value: {analog_value} | Lux: {lux}")


    if lux > lux_normal + 200:
        led_should_blink = True         # Nyalakan mode kedip
        buzzer.duty_u16(int(65535 * 0.45))  # Duty Cycle 45%


        start_time = utime.ticks_ms()


        # LED berkedip selama 4 detik
        while utime.ticks_diff(utime.ticks_ms(), start_time) <= 4000:     # Kedip selama 4 detik
           
            for i in range(500, 1000, 100):  # Variasi frekuensi buzzer agar suara tidak monoton
                buzzer.freq(i)
                utime.sleep(0.1)  # Memberi waktu untuk setiap frekuensi, sementara LED tetap berkedip


        #Kedip LED setiap 0.5 detik        
            current_time = utime.ticks_ms()
            if utime.ticks_diff(current_time, last_blink_time) >= 500:  # 0.5 detik kedip
                led_state = not led_state
                led.value(led_state)    #Membuat LED menyala dan mati selang 0,5 detik (kedip)
                last_blink_time = current_time
            utime.sleep(0.05)  # Delay kecil supaya tidak terlalu berat CPU


    # Setelah 4 detik, matikan LED dan buzzer
        led.off()
        buzzer.duty_u16(0)


    else:
        led_should_blink = False
        led.off()
        buzzer.duty_u16(0)


    utime.sleep(0.1)  # Delay antar pembacaan sensor

5. Video Demo [Kembali]


6. Analisa [Kembali]



7. Download File [Kembali]

Download HTML [Download]
Download Video Demo [Download]
Datasheet STM32 [Download]
Datasheet Push Button [Download]
Datasheet RGB LED [Download]
Datasheet Buzzer [Download]

Komentar

Postingan populer dari blog ini