M4

[menuju akhir]

SISTEM PENYIMPANAN JAGUNG PASCA PANEN 


1. Tujuan[Kembali]

1.     Merancang dan mengimplementasikan sistem otomatis berbasis Raspberry Pi Pico untuk memantau kondisi lingkungan penyimpanan jagung (suhu, kelembapan,dan  intensitas cahaya) secara real-time menggunakan sensor DHT22, BH1750, dan IR Obstacle Sensor.

2.     Mengembangkan mekanisme pengendalian otomatis yang dapat mengaktifkan aktuator (kipas, lampu pijar pemanas) berdasarkan ambang batas lingkungan yang ditentukan, guna menjaga kondisi optimal untuk penyimpanan jagung pasca panen.

3.     Mengintegrasikan sistem keamanan (IR Obstacle Sensor) untuk mendeteksi keberadaan manusia dan menonaktifkan aktuator sementara demi keselamatan.

4.     Menampilkan informasi kondisi lingkungan dan status aktuator secara real-time melalui LCD Display


2. Daftar Alat dan Komponen[Kembali]

a.      Sensor Suhu dan Kelembapan DHT22

Modul DHT22 Digital Temperature and Humidity Sensor AM2302

·       Fungsi: Mengukur suhu dan kelembapan udara dalam ruangan penyimpanan.

·       Spesifikasi:

Tegangan Catu Daya         : 3.3 – 6 V DC
Rentang Suhu
            : -40 hingga +80 ℃
Rentang Kelembapan
           : 0 – 100 %RH
Akurasi Suhu
                : ±0.5 ℃ (pada 25 ℃)
Akurasi Kelembapan
           : ±2 %RH (pada 25 ℃)
Resolusi
                   : 0.1 ℃ / 0.1 %RH
Waktu Respon
              : ≤ 5 detik
Periode Sampling
              : ≥ 2 detik
Antarmuka
                 : Digital 1-wire
Ukuran Modul
                : ±15.1 x 25 x 7.7 mm

 

b.     Sensor Cahaya BH1750

Sensor Intensitas Cahaya

·       Fungsi: Mengukur intensitas cahaya matahari yang masuk ke ruangan.

·       Spesifikasi:

 

Tegangan Catu Daya     : 3.0 – 5.0 V DC
Kisaran Pengukuran      : 1 – 65.535 lux
Akurasi        : ±20%
Resolusi       : 1 lux
Antarmuka      : I2C (alamat default 0x23 atau 0x5C)
Waktu Konversi    : 16 ms (low res), 120 ms (high res)
Jenis Output       : Digital
Konsumsi Arus     : 0.12 mA (mode aktif), 0.01 µA (mode power-down)
Ukuran Modul      : ±18 x 15 mm

 

c.      Sensor Infrared (IR Obstacle Sensor)

 

Lesson – IR Obstacle Avoidance Module « osoyoo.com

·       Fungsi: Deteksi keberadaan manusia atau tumpukan jagung.

·       Spesifikasi

Tegangan Catu Daya           : 3.3 – 5.0 V DC
Jarak Deteksi           : 2 – 30 cm (tergantung permukaan objek)
Tipe Output                 : Digital (0 dan 1)
Waktu Respon             : Cepat (< 2 ms)
Sudut Deteksi          : ±35°
Penyesuaian Jarak             : Potensiometer (trimpot)
Antarmuka            : 3 pin (VCC, GND, OUT)
Konsumsi Arus           : ~20 mA
Panjang Gelombang IR       : ±940 nm
Ukuran Modul            : ±48 x 14 x 8 mm

 

d.     Lampu Pijar Pemanas

 

·        Fungsi: Pemanas tambahan saat suhu tidak mencukupi

 

 

e.      LCD Display (I2C 16x2 atau OLED 128x64)

Promo LCD OLED BLUE 0.96” I2C 128X64 DISPLAY MODULE BIRU - Kota Surabaya -  Galeri Electronic Shop | Tokopedia

·       Fungsi: Menampilkan informasi kondisi ruangan.

·       Spesifikasi:

Blue backlight            : I2C

Display Format           : 16 Characters x 4 lines

Supply voltage            : 5V

Backlit                        : Blue with White char color

Supply voltage            : 5V

Pcb Size                      : 60mmx99mm

Contrast Adjust           : Potentiometer

Backlight Adjust                     : Jumper

Menampilkan sebanyak 32 karakter yang terdiri dari 2 baris dan tiap baris dapat menampilkan 16 karakter.

 

f.      Raspberry Pi Pico

Raspberry Pi Pico Mikrokontroler | E-Katalog 5.0

g.     Kipas

Fengheng 25*25*10Mm 2510 1 Inch 2-Pin Mikro 5V 12V 24 Volt

 

h.     Breadboard

HOOGWAARDIG BREADBOARD - 400 INSTEEKPUNTEN - Whadda

i.       Resistor

Resistor - Wikipedia

j.       Kabel Jumper

Pengertian, Jenis dan Cara Kerja Kabel Jumper Arduino - Arduino Indonesia |  Tutorial Lengkap Arduino Bahasa Indonesia


3. Landasan Teori[Kembali]

    1.        Mikrokontroller

Mikrokontroler adalah sebuah system microprocessor Dimana didalamnya sudah terdapat CPU, ROM, RAM, I/O, Clock dan peralatan internal lainnya yang sudah saling terhubung dan terorganisasi (teralamati), dikemas dalam satu chip yang siap pakai. Seperti umumnya komputer, mikrokontroler sebagai alat yang mengerjakan perintah-perintah yang diberikan kepadanya.

Pada mikrokontroller seorang programmer dapat memasukkan program ke dalam mikrokontroler sehingga berfungsi sesuai dengan yang diinginkan oleh pengguna. Artinya, bagian terpenting dan utama dari suatu sistem komputerisasi adalah program itu sendiri yang dibuat oleh seorang programmer. Program ini memerintahkan komputer untuk melakukan jalinan yang panjang dari aksi-aksi sederhana untuk melakukan tugas yang lebih kompleks yang diinginkan oleh programmer. Salah satu kelebihan mikrokontroler adalah kesederhanaan dan ukurannya yang relatif kecil. 

Gambar 26. Prinsip kerja mikrokontroller

 

Gambar 27. Struktur dan diagram blok Mikrokontroler

 

 

Berikut ini merupakan struktur dan diagram blok mikrokontroler beserta penjelasan tentang bagian-bagian utamanya:

a.       CPU

CPU merupakan otak dari mikrokontroler. CPU bertanggung jawab untuk mengolah data dan eksekusi perintah yang masuk.

b.     Serial Port (Port Serial)

Serial port menyediakan berbagai antarmuka serial antara mikrokontroler dan periferal lain seperti port paralel.

 

c.      Memori (Penyimpanan)

Memori ini bertugas untuk menyimpan data. Data tersebut merupakan data yang sudah diolah (output) atau data yang belum diolah (input). memori yang umum dipakai adalah Random Access Memory (RAM) dan Read Only Mmemory (ROM).Penyimpanan ini berupa RAM dan ROM. ROM digunakan untuk menyimpan data dalam jangka waktu yang lama. Sedangkan RAM digunakan untuk menyimpan data sementara selama program berjalan sampai akhirnya dipindahkan ke ROM.

 

d.     Port Input/Output Paralel

Port input/output paralel digunakan untuk mendorong atau menghubungkan berbagai perangkat. Kegunaan komponen ini adalah menerima input dari perangkat eksternal dan mengirimkannya ke perangkat pemroses. Nantinya hasil pengolahan data akan dikirimkan output ke perangkat eksternal.

 

e.      DAC (Digital to Analog Converter)

DAC (Digital to Analog Converter) melakukan operasi pembalikan konversi ADC (Analog to Digital Converter). DAC mengubah sinyal digital menjadi format analog. DAC ini biasanya digunakan untuk mengendalikan perangkat analog seperti motor DC dan lain sebagainya.

 

f.      Interrupt Control (Kontrol Interupsi)

Interrupt Control (Kontrol Interupsi) bertugas untuk mengendalikan penundaan terhadap pemrograman mikrokontroler. Bagianinterrupt control (kontrol interupsi) ini dapat dioperasikan secara internal ataupun eksternal.

 

g.     Special Functioning Block (Blok Fungsi Khusus)

Special functioning block merupakan bagian tambahan yang dibuat mempunyai fungsi khusus. Biasanya blok ini ditemukan pada arsitektur mikrokontroler di mesin robotika. Tidak semua perangkat menggunakan bagian ini.

 

h.     Timer and Counter (Pengatur Waktu dan Penghitung)

Timer/counter ini digunakan untuk mengukur waktu dan alat penghitungan. RTC memiliki tugas untuk menyimpan waktu dan tanggal saat proses dilakukan.

 

2.     Analog to Digital Converter (ADC)

ADC adalah suatu metode untuk konversi sinyal analog menjadi sinyal digital. Biasanya sinyal analog yang dikonversi berupa tegangan (Volt) dan dirubah menjadi sinyal digital seperti kode biner 0 dan 1.

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. 

Rangkaian ADC memiliki dua karakter prinsip, yaitu kecepatan sampling dan resolusi. Kecepatan sampling suatu ADC menyatakan seberapa sering sinyal analog dikonversikan ke bentuk sinyal digital pada selang waktu tertentu yang dinyatakan dalam sample per second (SPS). Sedangkan resolusi suatu ADC menentukan ketelitian nilai hasil konversi yang berhubungan dengan jumlah bit yang dimilikinya. Sehingga semakin besar jumlah bit suatu ADC makan akan memberikan ketelitian nilai hasil konversi yang lebih baik. Pada Arduino, resolusi yang dimiliki adalah 10bit atau rentang nilai digital antara 0 - 1023. Pada Arduino tegangan referensi yang digunakan adalah 5 volt, hal ini berarti ADC pada Arduino mampu menangani sinyal analog dengan tegangan 0 - 5 volt. Arduino Uno mempunyai 6 pin input analog yang berlabel A0 sampai A5 dimana masingmasing pin tersebut memberikan 10bit resolusi.

 

            3.        PWM, ADC, INTERRUPT, & MILLIS

a.      PWM

Pulse Width Modulation (PWM) secara umum adalah sebuah cara memanipulasi lebar sinyal yang dinyatakan dengan pulsa dalam suatu perioda, untuk mendapatkan tegangan rata-rata yang berbeda. Satu siklus pulsa merupakan kondisi high kemudian berada di zona transisi ke kondisi low. Lebar pulsa PWM berbanding lurus dengan amplitudo sinyal asli yang belum termodulasi. Duty Cycle adalah perbandingan antara waktu ON (lebar pulsa High) dengan perioda. Duty Cycle biasanya dinyatakan dalam bentuk persen (%).

 

Gambar 22. Duty Cycle

Duty Cycle = š‘”š‘‚š‘

š‘”š‘”š‘œš‘”š‘Žš‘™

         

§  š‘”š‘œš‘› = Waktu ON atau Waktu dimana tegangan keluaran berada pada posisi tinggi (highatau 1)

§  š‘”š‘œš‘“š‘“ = Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah(low atau 0)

§  š‘”š‘”š‘œš‘”š‘Žš‘™= Waktu satu siklus atau penjumlahan antara tON dengan tOFF atau disebut juga dengan periode satu gelombang.

 

Pada Raspberry Pi Pico, terdapat blok PWM yang terdiri dari 8 unit (slice), dan masing-masing slice dapat mengendalikan dua sinyal PWM atau mengukur frekuensi serta duty cycle dari sinyal input. Dengan total 16 output PWM yang dapat dikontrol, semua 30 pin GPIO bisa digunakan untuk PWM. Setiap slice memiliki fitur utama seperti penghitung 16-bit, pembagi clock presisi, dua output independen dengan duty cycle 0–100%, serta mode pengukuran frekuensi dan duty cycle. PWM pada Raspberry Pi Pico juga mendukung pengaturan fase secara presisi serta dapat diaktifkan atau dinonaktifkan secara bersamaan melalui satu register kontrol global, sehingga memungkinkan sinkronisasi beberapa output untuk aplikasi yang lebih kompleks.

b.     ADC

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.

Raspberry Pi Pico memiliki empat ADC (Analog-to-Digital Converter) 12-bit dengan metode SAR, tetapi hanya tiga kanal yang dapat digunakan secara eksternal, yaitu ADC0, ADC1, dan ADC2, yang terhubung ke pin GP26, GP27, dan GP28. Kanal keempat (ADC4) digunakan secara internal untuk membaca suhu dari sensor suhu bawaan. Konversi ADC dapat dilakukan dalam tiga mode: polling, interrupt, dan FIFO dengan DMA. Kecepatan konversi ADC adalah 2μs per sampel atau 500 ribu sampel per detik (500kS/s). Mikrocontroller RP2040 berjalan pada frekuensi 48MHz yang berasal dari USB PLL, dan setiap konversi ADC membutuhkan 96 siklus CPU, sehingga waktu samplingnya adalah 2μs per sampel 

c.      Millis

Raspberry Pi Pico yang sering diprogram menggunakan MicroPython, fungsi utime.ticks_ms() menyediakan fungsionalitas yang sepadan. Fungsi ini mengembalikan nilai penghitung milidetik yang bersifat monotonik (terus bertambah) sejak sistem dimulai atau modul utime dimuat. Sama seperti millis() dan HAL_GetTick(), nilai ticks_ms() juga akan mengalami wrap-around (kembali ke nol) setelah mencapai batasnya, sehingga penggunaan fungsi utime.ticks_diff() menjadi penting untuk perhitungan selisih waktu yang akurat dan aman terhadap overflow. Dengan demikian, utime.ticks_ms() memungkinkan implementasi pola penjadwalan dan delay non-blocking yang serupa untuk menciptakan aplikasi yang responsif di lingkungan MicroPython. 

             4.        Communication

a.      UART

Pada project yang kami buat, kami menggunakan komunikasi UART untuk 2 arduino. Komunikasi UART 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:

 

Gambar 24. 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.

 

b.     I2C (Inter-Integrated Circuit)

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:

 

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.


4. Flowchart sistem [Kembali]


5. Listing Program[Kembali]

Input

import machine
import utime
import dht
import ustruct

# === Sensor Setup ===
dht_pin = machine.Pin(15)
dht_sensor = dht.DHT22(dht_pin)

pir = machine.Pin(16, machine.Pin.IN)
light_adc = machine.ADC(26)  # AO pin ke GP26 (ADC0)

# === SPI Setup (Transmitter) ===
spi = machine.SPI(0, baudrate=1000000, polarity=0, phase=0)
cs = machine.Pin(17, machine.Pin.OUT)
cs.value(1)

def read_sensors():
    dht_sensor.measure()
    suhu = dht_sensor.temperature()
    rh = dht_sensor.humidity()
    light_raw = light_adc.read_u16()  # 0–65535
    lux_percent = (light_raw / 65535) * 100
    gerak = pir.value()
    return suhu, rh, lux_percent, gerak

while True:
    suhu, rh, lux, gerak = read_sensors()

    # Kirim sebagai 4 float (4x4 byte = 16 byte)
    data = ustruct.pack('ffff', suhu, rh, lux, float(gerak))
    cs.value(0)
    spi.write(data)
    cs.value(1)

    print("TX -> Suhu: {:.1f} C | RH: {:.1f}% | Lux: {:.1f} | Gerak: {}".format(
        suhu, rh, lux, "Ya" if gerak else "Tidak"))
    utime.sleep(2)

Output

import machine
import utime
import ustruct
from ssd1306 import SSD1306_I2C

# === OLED Display ===
i2c = machine.I2C(0, scl=machine.Pin(1), sda=machine.Pin(0))
oled = SSD1306_I2C(128, 64, i2c)

# === SPI Setup (Receiver) ===
spi = machine.SPI(0, baudrate=1000000, polarity=0, phase=0)
cs = machine.Pin(17, machine.Pin.OUT)
cs.value(1)

# === Aktuator ===
relay = machine.Pin(18, machine.Pin.OUT)
led = machine.Pin(19, machine.Pin.OUT)

def update_display(suhu, rh, lux, gerak):
    oled.fill(0)
    oled.text("Suhu: {:.1f} C".format(suhu), 0, 0)
    oled.text("RH: {:.1f}%".format(rh), 0, 10)
    oled.text("Lux: {:.1f}".format(lux), 0, 20)
    oled.text("Gerak: {}".format("Ada" if gerak else "Tidak"), 0, 30)
    oled.show()

while True:
    cs.value(0)
    data = spi.read(16)  # 4 float (16 bytes)
    cs.value(1)

    if data:
        suhu, rh, lux, gerak = ustruct.unpack('ffff', data)

        update_display(suhu, rh, lux, gerak)
        led.value(1 if gerak else 0)

        # === Logika kontrol aktuator ===
        if suhu < 26 and rh > 90:
            relay.value(1)  # Nyalakan pemanas
        elif suhu > 30 and rh < 75:
            relay.value(0)  # Matikan (anggap kipas otomatis)
        elif lux < 50 and suhu < 30:
            relay.value(1)  # Tambahan pemanas saat gelap
        else:
            relay.value(0)

        print("RX -> Suhu: {:.1f} | RH: {:.1f} | Lux: {:.1f} | Gerak: {}".format(
            suhu, rh, lux, "Ada" if gerak else "Tidak"))

    utime.sleep(2)

6. Rangkaian SImulasi[Kembali]






7. Video[Kembali]

8. Download File[Kembali]


[menuju awal]

Komentar

Postingan populer dari blog ini

Modul 1 Pratikum Mikro

Modul 1 Pratikum Sistem Digital

Modul 2 Pratikum SISDIG