LA 2 MODUL 2 PRAKTIKUM UP UC
Percobaan 7
Led RGB, Buzzer, Soil Moisture, & Push Button
- Membuat rangkaian sesuai dengan percobaan 7.
- Buat program untuk STM32 di software STM32 CUBE ID.
- Setelah program selesai di buat, inputkan kode tersebut kedalam STM32 dengan stlink.
- Untuk simulasi, ketika Soil Moisture Sensor mendeteksi kelembaban pada tanah (kadar air banyak) maka LED RGB akan hidup dan buzzer berbunyi.
- Selesai.
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi Sebelum dirunning:
Prinsip Kerja :
Soil Moisture sebagai input yang mendeteksi apakah tanah memiliki kadar air yang cukup atau tidak (mendeteksi kelembaban tanah). ketika tanah memiliki kadar air yang cukup, maka logam dari sensor akan mudah mengaliri arus listrik sehingga sensor memberi sinyal kepada output (LED dan Buzzer) untuk menyalakan keduanya.
Sebaliknya, jika tanah tidak memiliki kelembaban yang cukup, maka resistansi antara kedua ujung logam akan menjadi tinggi sehingga arus tidak mengalir untuk menyalakan kedua output (LED dan Buzzer).
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]
Datasheet Push Button [Download]
Datasheet RGB LED [Download]
Datasheet Buzzer [Download]
Komentar
Posting Komentar