from machine import Pin, PWM
from hcsr04 import HCSR04
from hx711 import HX711
import utime
# ---------------------------
# PIN DEFINISI
# ---------------------------
# Sensor Ultrasonik HC-SR04
TRIG_PIN = 3 # GP3
ECHO_PIN = 2 # GP2
# HX711 (Load Cell)
HX_DT = 26 # GP18
HX_SCK = 27 # GP19
# Servo Motor
SERVO_PIN = 15 # GP15
# ---------------------------
# INISIALISASI PERANGKAT
# ---------------------------
# Ultrasonik
ultrasonik = HCSR04(trigger_pin=TRIG_PIN, echo_pin=ECHO_PIN)
# Load Cell (HX711)
hx = HX711(dout=HX_DT, pd_sck=HX_SCK)
hx.tare()
# Kalibrasi HX711: ubah sesuai eksperimen
KONVERSI_HX711 = 400
def get_berat_kg():
return hx.read() / KONVERSI_HX711
# Servo
servo = PWM(Pin(SERVO_PIN))
servo.freq(50)
def set_servo_angle(angle):
duty = int(1638 + (angle / 180) * (8192 - 1638))
servo.duty_u16(duty)
# ---------------------------
# LOOP UTAMA
# ---------------------------
while True:
try:
# Baca data sensor
tinggi_air = ultrasonik.distance_cm()
berat = get_berat_kg()
# Kontrol servo berdasarkan tinggi air saja
if tinggi_air < 20:
print("Tinggi Air: {:.1f} cm -> Tembok Laut Naik".format(tinggi_air))
set_servo_angle(90)
else:
print("Tinggi Air: {:.1f} cm -> Tembok Turun".format(tinggi_air))
set_servo_angle(0)
# Status berdasarkan berat dari Load Cell
if berat <= 0:
status = "AMAN"
elif berat < 3:
status = "WASPADA"
else:
status = "BAHAYA"
# Tampilkan semua data
print("Tekanan Gelombang: {:.2f} kg | Status: {}".format(berat, status))
print("----------------------------------------------------")
utime.sleep(1)
except Exception as e:
print("Error:", e)
utime.sleep(2)