M4 Sistem Feeder Ikan Cerdas untuk Budidaya Air Tawar

 




Modul 4

Sistem Feeder Ikan Cerdas untuk Budidaya Air Tawar

1. Pendahuluan [Kembali]

Sektor perikanan, khususnya budidaya ikan air tawar, memiliki peranan strategis dalam mendukung ketahanan pangan nasional, menciptakan lapangan kerja, serta meningkatkan kesejahteraan masyarakat. Di tengah meningkatnya permintaan akan hasil perikanan, efisiensi dalam proses budidaya menjadi hal yang sangat krusial, terutama dalam hal manajemen pakan. Pakan merupakan komponen biaya operasional terbesar dalam budidaya ikan, sehingga ketepatan waktu dan jumlah pemberian pakan sangat menentukan keberhasilan usaha.

Namun, di lapangan, pembudidaya ikan skala kecil dan menengah masih banyak yang melakukan proses pemberian pakan secara manual. Metode ini tidak hanya memakan waktu dan tenaga, tetapi juga rentan terhadap ketidaktepatan takaran serta waktu pemberian yang tidak konsisten. Akibatnya, sering terjadi pemborosan pakan, pencemaran kualitas air kolam, serta pertumbuhan ikan yang tidak merata.

Solusi berbasis teknologi seperti feeder otomatis berbasis Internet of Things (IoT) memang telah tersedia di pasaran, namun umumnya masih mahal dan membutuhkan koneksi internet yang stabil. Hal ini menjadi kendala tersendiri bagi pembudidaya di daerah dengan keterbatasan infrastruktur digital.

Untuk menjawab tantangan tersebut, diperlukan suatu inovasi teknologi tepat guna yang efisien, ekonomis, serta mudah dioperasikan oleh petani ikan. Oleh karena itu, dalam proposal ini diusulkan perancangan dan implementasi Sistem Feeder Ikan Cerdas untuk Budidaya Air Tawar berbasis Raspberry Pi Pico. Sistem ini dirancang untuk memberikan pakan secara otomatis dengan mempertimbangkan faktor-faktor seperti suhu lingkungan, jenis dan jumlah ikan, serta waktu pemberian pakan yang terprogram.

Sebagai pelengkap, alat ini juga dilengkapi fitur keamanan akses menggunakan RFID, pemantauan sisa pakan melalui sensor load cell, serta mekanisme penyemburan pakan menggunakan motor dan blower. Dengan desain modular dan biaya yang terjangkau, sistem ini diharapkan menjadi solusi praktis yang mendukung produktivitas dan efisiensi budidaya ikan air tawar, khususnya bagi pembudidaya skala kecil hingga menengah.

2. Tujuan [Kembali]

  1. Memahami dan mengaplikasikan penggunaan mikrokontroler dan mikroprosesor, khususnya Raspberry Pi Pico, dalam merancang sistem otomatis untuk bidang perikanan.
  2. Menciptakan prototipe alat pemberi pakan ikan otomatis yang dapat bekerja secara cerdas dengan mempertimbangkan parameter-parameter penting seperti waktu, suhu lingkungan, jenis ikan, dan jumlah ikan.
  3. Mengintegrasikan berbagai komponen sensor dan aktuator, seperti sensor suhu, load cell, RFID, motor, dan blower, dalam satu sistem terpadu yang bekerja secara otomatis.

3. Alat dan Bahan [Kembali]

Raspberry Pi Pico

Sensor DHT22

Load Cell 


RFID

Push Button

Motor Servo

Motor DC (untuk blower)


LCD 16x2 

LED 5mm 

Buzzer

Relay

Power Supply

PCB

RTC module


4. Dasar Teori [Kembali]

Komunikasi

1.1 Universal Asynchronous Receiver Transmitter (UART)

UART (Universal Asynchronous Receiver-Transmitter) adalah bagian perangkat keras komputer yang menerjemahkan antara bit-bit paralel data dan bit-bit serial. UART biasanya berupa sirkuit terintegrasi yang digunakan untuk komunikasi serial pada komputer atau port serial perangkat periperal.

Cara Kerja Komunikasi UART

Data dikirimkan secara paralel dari data bus ke UART1. Pada UART1 ditambahkan start bit, parity bit, dan stop bit kemudian dimuat dalam satu paket data. Paket data ditransmisikan secara serial dari Tx UART1 ke Rx UART2. UART2 mengkonversikan data dan menghapus bit tambahan, kemudia di transfer secara parallel ke data bus penerima.

1.2 Serial Peripheral Interface (SPI)

Serial Peripheral Interface (SPI) merupakan salah satu mode komunikasi serial synchrounous kecepatan tinggi yang dimiliki oleh ATmega 328. Komunikasi SPI membutuhkan 3 jalur yaitu MOSI, MISO, dan SCK. Melalui komunikasi ini data dapat saling dikirimkan baik antara mikrokontroler maupun antara mikrokontroler dengan peripheral lain di luar mikrokontroler.

  • MOSI : Master Output Slave Input artinya jika dikonfigurasi sebagai master maka pin MOSI sebagai output tetapi jika dikonfigurasi sebagai slave maka pin MOSI sebagai input.
  • MISO : Master Input Slave Output artinya jika dikonfigurasi sebagai master maka pin MISO sebagai input tetapi jika dikonfigurasi sebagai slave maka pin MISO sebagai output.
  • SCLK : Clock jika dikonfigurasi sebagai master maka pin CLK berlaku sebagai output tetapi jika dikonfigurasi sebagai slave maka pin CLK berlaku sebagai input.
  • SS/CS : Slave Select / Chip Select adalah jalur master memilih slave mana yang akan dikirimkan data.

Cara Kerja Komunikasi SPI :

Sinyal clock dialirkan dari master ke slave yang berfungsi untuk sinkronisasi. Master dapat memilih slave mana yang akan dikirimkan data melalui slave select, kemudian data dikirimkan dari master ke slave melalui MOSI. Jika master butuh respon data maka slave akan mentransfer data ke master melalui MISO.

1.3 Inter Integrated Circuit (I2C)

Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya.
 

Cara Kerja Komunikasi I2C :

Pada I2C, data ditransfer dalam bentuk message yang terdiri dari kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2, dan kondisi Stop.

  • Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL.
  • Kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL.
  • R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 = mengirim data ke slave, logika 1 = meminta data dari slave)
  • ACK/NACK bit berfungsi sebagai pemberi kabar jika data frame ataupun address frame telah diterima receiver.  

 2. ADC (Analog to Digital Converter)

ADC atau Analog to Digital Converter merupakan salah satu perangkat elektronika yang digunakan sebagai penghubung dalam pemrosesan sinyal analog oleh sistem digital. Fungsi utama dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk sinyal analog menjadi sinyal digital dengan bentuk kode-kode digital. Ada 2 faktor yang perlu diperhatikan pada proses kerja ADC yaitu kecepatan sampling dan resolusi. 

Kecepatan sampling menyatakan seberapa sering perangkat mampu mengkonversi sinyal analog ke dalam bentuk sinyal digital dalam selang waktu yang tertentu. Biasa dinyatakan dalam sample per second (SPS). Sementara Resolusi menyatakan tingkat ketelitian yang dimilliki. Pada Arduino, resolusi yang dimiliki adalah 10 bit atau rentang nilai digital antara 0 - 1023. Dan pada Arduino tegangan referensi yang digunakan adalah 5 volt, hal ini berarti ADC pada Arduino mampu menangani sinyal analog dengan tegangan 0 - 5 volt. Pada Arduino, menggunakan pin analog input yang diawali dengan kode A (A0- A5 pada Arduino Uno). Fungsi untuk mengambil data sinyal input analog menggunakan analogRead(pin).

        3. Pulse Width Modulation (PWM)

    PWM (Pulse Width Modulation) adalah teknik modulasi yang mengubah lebar pulsa (duty cycle) sementara amplitudo dan frekuensi tetap konstan. Satu siklus pulsa terdiri dari kondisi high dan transisi ke kondisi low. Lebar pulsa PWM sebanding dengan amplitudo sinyal asli yang belum dimodulasi. Duty cycle adalah rasio antara waktu ON (lebar pulsa High) dan periode total, biasanya dinyatakan dalam persentase (%).

duty cycle pwm

Keterangan :

t_ON   = waktu ON atau waktu dimana tegangan keluaran berada pada posisi tinggi (high atau 1)

t_OFF  = waktu OFF atau waktu dimana tegangan keluaran berada pada posisi rendah (low atau 0)

t_total  = waktu satu siklus atau penjumlahan antara t_ON dengan t_OFF atau disebut juga dengan “periode satu gelombang”

Pada board Arduino Uno, pin yang dapat digunakan untuk PWM adalah pin yang ditandai dengan tanda tilde (~), yaitu pin 3, 5, 6, 9, 10, dan 11. Pin-pin ini dapat berfungsi sebagai input atau output analog. Untuk menggunakan PWM pada pin tersebut, gunakan perintah analogWrite().

PWM pada Arduino beroperasi pada frekuensi 500Hz, yang berarti ada 500 siklus per detik. Setiap siklus dapat diberi nilai antara 0 hingga 255. Jika nilai 0 diberikan, pin tersebut akan selalu berada pada 0 volt. Jika nilai 255 diberikan, pin akan selalu berada pada 5 volt. Memberikan nilai 127 (setengah dari 255 atau 50%) akan membuat pin berada pada 5 volt selama setengah siklus dan 0 volt selama setengah siklus lainnya. Memberikan nilai 64 (25% dari 255) akan membuat pin berada pada 5 volt selama 1/4 siklus dan 0 volt selama 3/4 siklus, dan ini terjadi 500 kali dalam satu detik.

Raspberry Pi Pico

Sensor DHT22

Grafik Respon sensor DHT22:

Spesifikasi sensor suhu kelembaban DHT22 :

  • Tegangan input : 3,3 – 6 VDC
  • Sistem komunikasi : Serial (single – Wire Two way)
  • Range suhu : -400C – 800C
  • Range kelembaban : 0% – 100% RH
  • Akurasi : ±20C (temperature) ±5% RH (humidity)

    Untuk urusan kaki/pin, sensor suhu dan kelembaban DHT22 terdiri dari 4 kaki/pin, sama dengan DHT11, tetapi yang dipakai hanya 3 pin saja. Biasanya kalau kita membeli dalam bentuk modul jumlah pin-nya menjadi 3 :

  • VCC(+) : tegangan input (5V)
  • GND(-) : Ground
  • Data : Data output serial

Load Cell 

Grafik respon sensor Load Cell : 

RFID

    Radio Frequency Identification (RFID) merupakan teknologi yang berguna untuk mengidentifikasi atau melakukan penelusuran jejak pada sebuah benda dengan memanfaatkan gelombang elektromagnetik. RFID berbentuk chip yang dimasukkan dalam sebuah benda mati ataupun hidup. 

Spesifikasi dari sensor RFID:

  • Fungsi Dasar: Membaca dan mengidentifikasi kartu RFID
  • Tegangan Operasi: 5V.
  • Keluaran: Output SPI (Serial Peripheral Interface)
  • Sensitivitas dan Durasi Baca: Dapat disesuaikan untuk kebutuhan aplikasi tertentu.
  • Jarak Baca: Bergantung pada kondisi lingkungan dan jenis kartu RFID, namun umumnya dapat mencapai beberapa sentimeter hingga beberapa puluh sentimeter
  • Waktu Inisialisasi: Tergantung pada sistem yang digunakan, biasanya butuh waktu kurang dari satu detik untuk inisialisasi
  • Ukuran dan Berat: Ukuran dan berat yang mungkin bervariasi tergantung pada model atau produsen, namun umumnya cukup kecil dan ringan untuk integrasi dalam berbagai aplikasi.
Sensor RFID RC522 biasanya digunakan dalam sistem keamanan, kontrol akses, otomatisasi, dan berbagai aplikasi lain di mana identifikasi dan otentikasi menggunakan kartu RFID diperlukan. 

Pinout dari sensor RFID:

Grafik Respon sensor RFID:

Push Button

Motor Servo

    Motor servo adalah sebuah perangkat atau aktuator putar (motor) yang dirancang dengan sistem kontrol umpan balik loop tertutup (servo), sehingga dapat di set-up atau di atur untuk menentukan dan memastikan posisi sudut dari poros output motor. motor servo merupakan perangkat yang terdiri dari motor DC, serangkaian gear, rangkaian kontrol dan potensiometer. Serangkaian gear yang melekat pada poros motor DC akan memperlambat putaran poros dan meningkatkan torsi motor servo, sedangkan potensiometer dengan perubahan resistansinya saat motor berputar berfungsi sebagai penentu batas posisi putaran poros motor servo.

    Prinsip kerja motor servo yaitu motor servo dikendalikan dengan memberikan sinyal modulasi lebar pulsa (Pulse Wide Modulation / PWM) melalui kabel kontrol. Lebar pulsa sinyal kontrol yang diberikan akan menentukan posisi sudut putaran dari poros motor servo. Sebagai contoh, lebar pulsa dengan waktu 1,5 ms (mili detik) akan memutar poros motor servo ke posisi sudut 90⁰. Bila pulsa lebih pendek dari 1,5 ms maka akan berputar ke arah posisi 0⁰ atau ke kiri (berlawanan dengan arah jarum jam), sedangkan bila pulsa yang diberikan lebih lama dari 1,5 ms maka poros motor servo akan berputar ke arah posisi 180⁰ atau ke kanan (searah jarum jam). Lebih jelasnya perhatikan gambar dibawah ini.

    Lebar pulsa kendali telah diberikan, maka poros motor servo akan bergerak atau berputar ke posisi yang telah diperintahkan, dan berhenti pada posisi tersebut dan akan tetap bertahan pada posisi tersebut. Jika ada kekuatan eksternal yang mencoba memutar atau mengubah posisi tersebut, maka motor servo akan mencoba menahan atau melawan dengan besarnya kekuatan torsi yang dimilikinya (rating torsi servo). Namun motor servo tidak akan mempertahankan posisinya untuk selamanya, sinyal lebar pulsa kendali harus diulang setiap 20 ms (mili detik) untuk menginstruksikan agar posisi poros motor servo tetap bertahan pada posisinya.

Motor DC (untuk blower)

    Terdapat dua bagian utama pada sebuah Motor Listrik DC, yaitu Stator dan Rotor. Stator adalah bagian motor yang tidak berputar, bagian yang statis ini terdiri dari rangka dan kumparan medan. Sedangkan Rotor adalah bagian yang berputar, bagian Rotor ini terdiri dari kumparan Jangkar. Dua bagian utama ini dapat dibagi lagi menjadi beberapa komponen penting yaitu diantaranya adalah Yoke (kerangka magnet), Poles (kutub motor), Field winding (kumparan medan magnet), ArmatureWinding (Kumparan Jangkar), Commutator (Komutator)dan Brushes (kuas/sikat arang).

    Pada prinsipnya motor listrik DC menggunakan fenomena elektromagnet untuk bergerak, ketika arus listrik diberikan ke kumparan, permukaan kumparan yang bersifat utara akan bergerak menghadap ke magnet yang berkutub selatan dan kumparan yang bersifat selatan akan bergerak menghadap ke utara magnet. Saat ini, karena kutub utara kumparan bertemu dengan kutub selatan magnet ataupun kutub selatan kumparan bertemu dengan kutub utara magnet maka akan terjadi saling tarik menarik yang menyebabkan pergerakan kumparan berhenti.

    Untuk menggerakannya lagi, tepat pada saat kutub kumparan berhadapan dengan kutub magnet, arah arus pada kumparan dibalik. Dengan demikian, kutub utara kumparan akan berubah menjadi kutub selatan dan kutub selatannya akan berubah menjadi kutub utara. Pada saat perubahan kutub tersebut terjadi, kutub selatan kumparan akan berhadap dengan kutub selatan magnet dan kutub utara kumparan akan berhadapan dengan kutub utara magnet. Karena kutubnya sama, maka akan terjadi tolak menolak sehingga kumparan bergerak memutar hingga utara kumparan berhadapan dengan selatan magnet dan selatan kumparan berhadapan dengan utara magnet. Pada saat ini, arus yang mengalir ke kumparan dibalik lagi dan kumparan akan berputar lagi karena adanya perubahan kutub. Siklus ini akan berulang-ulang hingga arus listrik pada kumparan diputuskan.

Grafik respon motor DC :


LCD 16x2 

    LCD atau Liquid Crystal Display adalah suatu jenis media display (tampilan) yang menggunakan kristal cair (liquid crystal) untuk menghasilkan gambar yang terlihat. Teknologi Liquid Crystal Display (LCD) atau Penampil Kristal Cair sudah banyak digunakan pada produk-produk seperti layar Laptop, layar Ponsel, layar Kalkulator, layar Jam Digital, layar Multimeter, Monitor Komputer, Televisi, layar Game portabel, layar Thermometer Digital dan produk-produk elektronik lainnya.

    Teknologi Display LCD ini memungkinkan produk-produk elektronik dibuat menjadi jauh lebih tipis jika dibanding dengan teknologi Tabung Sinar Katoda (Cathode Ray Tube atau CRT). Jika dibandingkan dengan teknologi CRT, LCD juga jauh lebih hemat dalam mengkonsumsi daya karena LCD bekerja berdasarkan prinsip pemblokiran cahaya sedangkan CRT berdasarkan prinsip pemancaran cahaya. Namun LCD membutuhkan lampu backlight (cahaya latar belakang) sebagai cahaya pendukung karena LCD sendiri tidak memancarkan cahaya. Beberapa jenis backlight yang umum digunakan untuk LCD diantaranya adalah backlight CCFL (Cold cathode fluorescent lamps) dan backlight LED (Light-emitting diodes).

    LCD atau Liquid Crystal Display pada dasarnya terdiri dari dua bagian utama yaitu bagian Backlight (Lampu Latar Belakang) dan bagian Liquid Crystal (Kristal Cair). Seperti yang disebutkan sebelumnya, LCD tidak memancarkan pencahayaan apapun, LCD hanya merefleksikan dan mentransmisikan cahaya yang melewatinya. Oleh karena itu, LCD memerlukan Backlight atau Cahaya latar belakang untuk sumber cahayanya. Cahaya Backlight tersebut pada umumnya adalah berwarna putih. Sedangkan Kristal Cair (Liquid Crystal) sendiri adalah cairan organik yang berada diantara dua lembar kaca yang memiliki permukaan transparan yang konduktif.

    Bagian-bagian LCD atau Liquid Crystal Display diantaranya adalah:

    • Lapisan Terpolarisasi 1 (Polarizing Film 1)
    • Elektroda Positif (Positive Electrode)
    • Lapisan Kristal Cair (Liquid Cristal Layer)
    • Elektroda Negatif (Negative Electrode)
    • Lapisan Terpolarisasi 2 (Polarizing film 2)
    • Backlight atau Cermin (Backlight or Mirror)

Dibawah ini adalah gambar struktur dasar sebuah LCD:

    LCD yang digunakan pada Kalkulator dan Jam Tangan digital pada umumnya menggunakan Cermin untuk memantulkan cahaya alami agar dapat menghasilkan digit yang terlihat di layar. Sedangkan LCD yang lebih modern dan berkekuatan tinggi seperti TV, Laptop dan Ponsel Pintar menggunakan lampu Backlight (Lampu Latar Belakang) untuk menerangi piksel kristal cair. Lampu Backlight tersebut pada umumnya berbentuk persegi panjang atau strip lampu Flourescent atau Light Emitting Diode (LED). Cahaya putih adalah cahaya terdiri dari ratusan cahaya warna yang berbeda. Ratusan warna cahaya tersebut akan terlihat apabila cahaya putih mengalami refleksi atau perubahan arah sinar. Artinya, jika beda sudut refleksi maka berbeda pula warna cahaya yang dihasilkan.

    Backlight LCD yang berwarna putih akan memberikan pencahayaan pada Kristal Cair atau Liquid Crystal. Kristal cair tersebut akan menyaring backlight yang diterimanya dan merefleksikannya sesuai dengan sudut yang diinginkan sehingga menghasilkan warna yang dibutuhkan. Sudut Kristal Cair akan berubah apabila diberikan tegangan dengan nilai tertentu. Karena dengan perubahan sudut dan penyaringan cahaya backlight pada kristal cair tersebut, cahaya backlight yang sebelumnya adalah berwarna putih dapat berubah menjadi berbagai warna.

    Jika ingin menghasilkan warna putih, maka kristal cair akan dibuka selebar-lebarnya sehingga cahaya backlight yang berwarna putih dapat ditampilkan sepenuhnya. Sebaliknya, apabila ingin menampilkan warna hitam, maka kristal cair harus ditutup serapat-rapatnya sehingga tidak adalah cahaya backlight yang dapat menembus. Dan apabila menginginkan warna lainnya, maka diperlukan pengaturan sudut refleksi kristal cair yang bersangkutan

LED 5mm 

Spesifikasi : 

Buzzer

   Buzzer adalah sebuah komponen elektronika yang berfungsi untuk mengubah getaran listrik menjadi getaran suara. Pada dasarnya prinsip kerja buzzer hampir sama dengan loud speaker, jadi buzzer juga terdiri dari kumparan yang terpasang pada diafragma dan kemudian kumparan tersebut dialiri arus sehingga menjadi elektromagnet, kumparan tadi akan tertarik ke dalam atau keluar, tergantung dari arah arus dan polaritas magnetnya, karena kumparan dipasang pada diafragma maka setiap gerakan kumparan akan menggerakkan diafragma secara bolak-balik sehingga membuat udara bergetar yang akan menghasilkan suara.

Relay

Single-Channel Relay Module Specifications

  • Supply voltage – 3.75V to 6V
  • Quiescent current: 2mA
  • Current when the relay is active: ~70mA
  • Relay maximum contact voltage – 250VAC or 30VDC
  • Relay maximum current – 10A

Power Supply

Specifications:
  • Input Voltage: 100 – 220VAC   50/60Hz
  • Output Type – DC
  • Output Voltage: 12VDC
  • Output Current: 5A
  • Total Power: 60 W
  • Protections: Overload / Over Voltage / Short Circuit
  • Auto-Recovery After Protection
  • Universal AC input / Full range
  • Cooling by Free Air Convection
  • LED power supply with a metal body for hidden installation for LED lighting
  • Compact Size Light Weight.
  • High Efficiency, Reliability & low energy consumption
  • Shell Material: Metal Case / Aluminum Base
  • Color: Silver
  • Dimensions: 130mm x 98mm x 40mm

PCB

RTC module

DS3231 RTC MODULE Specifications

  • Operating  voltage of  DS3231 MODULE: 2.3V – 5.5V
  • Can operate on LOW voltages
  • Consumes 500nA on battery backup
  • Maximum voltage at SDA , SCL : VCC + 0.3V
  • Operating temperature: -45ºC to +80ºC

5. Percobaan [Kembali]

Flowchart dan Listing Program

Pi Pico 1

from machine import Pin, I2C
from time import sleep
import dht
from pico_i2c_lcd import I2cLcd
from hx711 import HX711

# Inisialisasi I2C dan LCD
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
devices = i2c.scan()
if len(devices) == 0:
    I2C_ADDR = 0x27  # fallback jika gagal scan
else:
    I2C_ADDR = devices[0]

lcd = I2cLcd(i2c, I2C_ADDR, 4, 20)
sleep(0.5)
lcd.clear()
lcd.putstr("LCD Tes OK")
sleep(2)

# Inisialisasi komponen lainnya
dht_sensor = dht.DHT22(Pin(15))
hx = HX711(dout=Pin(2), pd_sck=Pin(3))
buzzer = Pin(14, Pin.OUT)
pir = Pin(28, Pin.IN)

# Tombol
btn_up = Pin(4, Pin.IN, Pin.PULL_UP)
btn_down = Pin(5, Pin.IN, Pin.PULL_UP)
btn_ok = Pin(6, Pin.IN, Pin.PULL_UP)
btn_back = Pin(7, Pin.IN, Pin.PULL_UP)

# Variabel global
jadwal = []
frekuensi = 2
ikan_terpilih = None
jumlah_ikan = 0

# Class & Data
class Ikan:
    def __init__(self, nama, aturan_pakan):
        self.nama = nama
        self.aturan_pakan = aturan_pakan

    def hitung_pakan_per_ekor(self, suhu):
        if suhu < 20:
            return self.aturan_pakan["dingin"]
        elif 20 <= suhu <= 28:
            return self.aturan_pakan["normal"]
        else:
            return self.aturan_pakan["panas"]

    def hitung_total_pakan(self, suhu, jumlah_ikan):
        return self.hitung_pakan_per_ekor(suhu) * jumlah_ikan

data_ikan = {
    "lele": Ikan("Lele", {"dingin": 1.5, "normal": 4.5, "panas": 7.5}),
    "nila": Ikan("Nila", {"dingin": 5, "normal": 7.5, "panas": 12.5}),
    "gurame": Ikan("Gurame", {"dingin": 2, "normal": 4, "panas": 8}),
    "mas": Ikan("Mas", {"dingin": 4.5, "normal": 6, "panas": 12}),
}

# Login (gunakan PIR sensor sebagai pengganti RFID)
def login():
    lcd.clear()
    lcd.putstr("Tempelkan RFID\natau Dekati PIR")
    while True:
        if pir.value() == 1:
            lcd.clear()
            lcd.putstr("Login Berhasil")
            sleep(2)
            return
        else:
            lcd.clear()
            lcd.putstr("Akses Ditolak")
            sleep(2)
            lcd.clear()
            lcd.putstr("Tempelkan RFID")
            sleep(1)

# Input jumlah ikan
def input_jumlah_ikan():
    global jumlah_ikan
    jumlah = 10
    while True:
        lcd.clear()
        lcd.putstr("Jumlah Ikan:\n{}".format(jumlah))
        sleep(0.2)
        if not btn_up.value():
            jumlah = min(jumlah + 10, 100)
        elif not btn_down.value():
            jumlah = max(jumlah - 10, 10)
        elif not btn_ok.value():
            jumlah_ikan = jumlah
            return
        elif not btn_back.value():
            return

# Pilih frekuensi makan
def pilih_frekuensi_makan():
    global frekuensi, jadwal
    pilihan = [2, 3]
    idx = 0
    while True:
        lcd.clear()
        lcd.putstr("Frekuensi: {}x".format(pilihan[idx]))
        sleep(0.2)
        if not btn_up.value():
            idx = (idx - 1) % len(pilihan)
        elif not btn_down.value():
            idx = (idx + 1) % len(pilihan)
        elif not btn_ok.value():
            frekuensi = pilihan[idx]
            set_jadwal_makan()
            return
        elif not btn_back.value():
            return

# Jadwal makan otomatis
def set_jadwal_makan():
    global jadwal, frekuensi
    jadwal = []
    jam_awal = 7
    interval = 12 // (frekuensi - 1) if frekuensi > 1 else 12
    for i in range(frekuensi):
        jam = jam_awal + i * interval
        jadwal.append((jam, 0))  # jam, menit

# Pilih jenis ikan
def pilih_ikan():
    global ikan_terpilih
    jenis = list(data_ikan.keys())
    idx = 0
    while True:
        lcd.clear()
        lcd.putstr("Ikan: " + data_ikan[jenis[idx]].nama)
        sleep(0.2)
        if not btn_up.value():
            idx = (idx - 1) % len(jenis)
        elif not btn_down.value():
            idx = (idx + 1) % len(jenis)
        elif not btn_ok.value():
            ikan_terpilih = data_ikan[jenis[idx]]
            input_jumlah_ikan()
            pilih_frekuensi_makan()
            return
        elif not btn_back.value():
            return

# Menu utama
def menu():
    options = ["Pilih Ikan", "Cek Sisa", "Cek Suhu", "Test Alat"]
    index = 0
    while True:
        lcd.clear()
        lcd.putstr("> " + options[index])
        sleep(0.2)
        if not btn_up.value():
            index = (index - 1) % len(options)
        elif not btn_down.value():
            index = (index + 1) % len(options)
        elif not btn_ok.value():
            handle_selection(options[index])
        elif not btn_back.value():
            return

def handle_selection(option):
    if option == "Cek Suhu":
        dht_sensor.measure()
        suhu = dht_sensor.temperature()
        lcd.clear()
        lcd.putstr("Suhu: {:.1f}C".format(suhu))
        sleep(3)
    elif option == "Cek Sisa":
        berat = hx.get_units(5)
        lcd.clear()
        lcd.putstr("Sisa: {:.2f}g".format(berat))
        sleep(3)
    elif option == "Pilih Ikan":
        pilih_ikan()
    elif option == "Test Alat":
        test_alat()

# Tes alat
def test_alat():
    lcd.clear()
    lcd.putstr("Testing alat...\nKeluar 10g")
    # Simulasi buzzer
    buzzer.value(1)
    sleep(0.5)
    buzzer.value(0)
    sleep(1)
    lcd.clear()
    lcd.putstr("Test selesai")
    sleep(2)

# Main loop
login()
while True:
    menu()

Pi Pico 2

from machine import Pin, PWM
import time

buzzer = Pin(14, Pin.OUT)
relay = Pin(13, Pin.OUT)
relay.value(1)
servo_vertikal = PWM(Pin(15))
servo_vertikal.freq(50)
servo_horisontal = PWM(Pin(16))
servo_horisontal.freq(50)
servo_pakan = PWM(Pin(17))
servo_pakan.freq(50)

def servo_set_angle(servo, angle):
    min_duty = 1000
    max_duty = 9000
    duty = int(min_duty + (angle / 180) * (max_duty - min_duty))
    servo.duty_u16(duty)

def aktifkan_pakan(jumlah_gram):
    durasi = 2 * (jumlah_gram / 10)
    servo_set_angle(servo_pakan, 90)
    time.sleep(durasi)
    servo_set_angle(servo_pakan, 0)
    relay.value(1)
    time.sleep(3)
    relay.value(0)

def arahkan_servo():
    servo_set_angle(servo_horisontal, 90)
    servo_set_angle(servo_vertikal, 90)

def bunyikan_buzzer():
    buzzer.value(1)
    time.sleep(0.5)
    buzzer.value(0)

# Uji coba manual
try:
    bunyikan_buzzer()
    arahkan_servo()
    aktifkan_pakan(20)  # <- Ganti dengan gram sesuai tes
except Exception as e:
    print("Error:", e)

Rangkaian Simulasi






Prosedur Kerja

  1. Di LCD akan tampil tulisan silahkan tempelkan ID Card
  2. Login Menggunakan Id card yang akan ditempelkan ke RFID.
  3. Ketika login tidak berhasil maka kembali ke menu login.
  4. Ketika Login berhasil, maka akan masuk ke menu Pilihan "Pilih Ikan", "Cek sisa", "Cek Suhu", "Tes Alat".
  • Menu Pilih Ikan , Ketika ditekan maka akan menampilkan pilihan ikan yaitu Nila, Gurame, Mas dan Lele. Ketika jenis ikan telah dipilih maka akan muncul Pilihan jumlah ikan dari 10 hingga 100. Setelah dipilih maka akan muncul Frekuensi makan yaitu 2 atau 3 kali tergantung suhu yang telah ditetapkan di program. Maka nanti Ketika jam nya tiba motor servo akan melepaskan pelet ikan sesuai dengan jumlah ikan dan jenis ikan yang telah diatur di program, setelah itu akan ditembakkan oleh blower ke kolam ikan, yang mana arah tembakan diatur oleh 2 servo horizontal dan vertikal dibawah blower. Setelah itu akan terbentuk jadwal otomatis.
  • Menu Cek sisa , ketika ditekan maka LCD akan menampilkan pakan yang ada, yang dibaca oleh load cell.
  • Menu Cek suhu, ketika ditekan maka akan menampilkan suhu saat ini yang dibaca oleh dht22 yang akan ditampilkan di LCD.
  • Menu Test Alat, Ketika ditekan maka motor servo pakan akan melepaskan pakan 10g dan buzzer akan berbunyi yang menandakan bahwa alat berfungsi dengan baik.
Untuk set waktu,  sebelumnya jam diatur di RTC modul, sehingga jam akan tersimpan di modul RTC, yang mana nanti semua jadwal akan menyesuaikan dari jam yang diatur di RTC.

Selanjutnya untuk Servo itu akan dihubungkan ke PSUdan dikontrol dengan pico yang kedua. Dimana nanti untuk servo ini ditambah suplai tambahan dari PSU yang akan terhubung ke Buck converter kemudian dihubungkan ke vcc servo vertikal dan horizontal. Yang mana untuk pengontrolan servo ini diatur di codingan pico yang ke 2 sesuai dengan sudut yang diinginkan.

Kemudian untuk Blowe itu dihubungkan dengan sumber 3 phasa yang terhubung ke relay untuk pegontrola blower.

Video Simulasi


Video Simulasi [klik disini]
Datasheet Raspberry [klik disini]
Datasheet RTC [klik disini]
Datasheet LCD [klik disini]
Datasheet Power Supply [klik disini]
Datasheet Relay [klik disini]
Datasheet Buzzer [klik disini]
Datasheet Push Button [klik disini]
Datasheet RFID [klik disini]
Datasheet DC Motor [klik disini]
Datasheet Load Cell [klik disini]

Komentar

Postingan populer dari blog ini

MODUL 1

Modul 2