TP 2 M2 UP&UC
- Rangkai semua komponen di wokwi
- Buat program dan masukkan pada web wokwi
- Jalankan program dan cobakan sesuai kondisi
Percobaan 5 menggunakan Raspberry Pi Pico sebagai pusat kendali yang terhubung dengan sensor DHT22, potensiometer, servo motor, dan buzzer. Potensiometer berfungsi sebagai input analog untuk mengatur sudut servo—semakin besar nilai ADC, servo akan berputar searah jarum jam sesuai posisi potensiometer melalui sinyal PWM dari Pico. Sensor DHT22 mendeteksi suhu dan kelembapan, dan Pico akan mengaktifkan buzzer jika suhu <35°C atau kelembapan >50%, masing-masing dengan pola suara berbeda. Sistem ini mengintegrasikan kontrol motor, pembacaan sensor digital dan analog, serta respons audio dalam satu rangkaian berbasis mikrokontroler.untuk mengatur suhu dan kelembabab pada rangkaian ditentukan oleh sensor DHT22 , dan pada transistor dapat mengendalikan servo dengan memutar transistor searah jarum jam atau sebaliknya
from machine import Pin, ADC, PWM
import time
import dht
# Inisialisasi potensiometer pada GPIO 26 (ADC0)
pot = ADC(26)
# Inisialisasi motor servo pada GPIO 15 (PWM)
servo = PWM(Pin(15))
servo.freq(50) # Frekuensi PWM untuk servo
# Inisialisasi sensor DHT22 pada GPIO 16
dht_sensor = dht.DHT22(Pin(16))
# Inisialisasi buzzer sebagai PWM pada GPIO 14
buzzer = PWM(Pin(14))
buzzer.duty_u16(0) # Tidak ada suara saat awal
# Fungsi mapping nilai
def map_value(value, in_min, in_max, out_min, out_max):
return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# Fungsi untuk membunyikan buzzer dengan nada tertentu
def play_buzzer_note(frequency, duration_ms):
buzzer.freq(frequency)
buzzer.duty_u16(32768) # Volume setengah
time.sleep_ms(duration_ms)
buzzer.duty_u16(0)
time.sleep_ms(50) # Jeda antar nada
# Fungsi melodi untuk suhu tinggi
def play_high_temp_melody():
play_buzzer_note(880, 200) # A5
play_buzzer_note(988, 200) # B5
play_buzzer_note(1047, 200) # C6
# Fungsi melodi untuk kelembapan tinggi
def play_high_humidity_melody():
play_buzzer_note(659, 200) # E5
play_buzzer_note(698, 200) # F5
play_buzzer_note(784, 200) # G5
# Fungsi melodi kombinasi suhu dan kelembapan tinggi
def play_combined_alert_melody():
play_buzzer_note(1047, 200) # C6
play_buzzer_note(1175, 200) # D6
play_buzzer_note(1319, 200) # E6
# Loop utama
while True:
# Baca potensiometer
pot_value = pot.read_u16()
servo_angle = map_value(pot_value, 0, 65535, 0, 180)
servo_duty = map_value(servo_angle, 0, 180, 1638, 8192)
servo.duty_u16(servo_duty)
# Baca suhu dan kelembapan dari DHT22
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
print(f"Suhu: {temperature}°C | Kelembapan: {humidity:.1f}%")
# Cek kondisi dan mainkan melodi sesuai kondisi
if temperature < 35 and humidity > 50:
print("🔥💧 Buzzer ON: Suhu & Kelembapan tinggi!")
play_combined_alert_melody()
elif temperature < 35:
print("🔥 Buzzer ON: Suhu tinggi!")
play_high_temp_melody()
elif humidity > 50:
print("💧 Buzzer ON: Kelembapan tinggi!")
play_high_humidity_melody()
else:
buzzer.duty_u16(0) # Matikan suara jika normal
except OSError:
print("⚠️ Gagal membaca sensor DHT22.")
time.sleep(0.5)
Komentar
Posting Komentar