Senin, 30 Juni 2025

LAPORAN AKHIR DEMO PROJECT PRAKTIKUM Up & Uc



SMART EGG INCUBATOR

Sistem Kontrol dan Monitoring Mesin

Tetas Telur Ayam Close House


1. Pendahuluan[Kembali]

   
  1. Latar Belakang

Proses pengeraman telur oleh induk ayam secara alami memang telah berlangsung sejak lama, namun metode ini memiliki berbagai keterbatasan yang menyebabkan efisiensi penetasan telur menjadi rendah. Salah satu permasalahan utama adalah ketergantungan terhadap kondisi lingkungan yang tidak selalu stabil. Suhu dan kelembaban yang dibutuhkan untuk mendukung perkembangan embrio telur sering kali tidak dapat dijaga secara konstan oleh induk ayam, terutama ketika terjadi perubahan cuaca ekstrem atau gangguan dari lingkungan sekitar.

Selain itu, induk ayam hanya mampu mengerami dalam jumlah terbatas, dan sangat rentan terhadap stres yang dapat mengganggu proses pengeraman. Ketika induk terganggu oleh suara bising, predator, atau aktivitas manusia, ia cenderung meninggalkan sarangnya dan menghentikan pengeraman, yang pada akhirnya berdampak pada kegagalan penetasan. Pengeraman alami juga tidak memungkinkan proses pemantauan secara menyeluruh terhadap kondisi telur, seperti suhu optimal, kelembaban udara, atau potensi kegagalan akibat kerusakan fisik pada telur.

Berdasarkan permasalahan tersebut, diperlukan suatu inovasi teknologi untuk menciptakan sistem penetasan telur yang efisien, stabil, dan dapat di monitor secara real-time. Oleh karena itu, penulis mencetuskan ide alat "Smart Egg Incubator", sebuah mesin tetas telur berbasis close house yang dirancang dengan sistem kontrol otomatis dan pemantauan cerdas menggunakan berbagai sensor serta mikrokontroler.

Gambar 1. Inkubator Telur Ayam

Alat ini akan menggunakan dua buah Raspberry Pi Pico yang saling berkomunikasi untuk membagi tugas pengolahan dan kontrol, sehingga proses dapat berjalan secara paralel dan efisien. Sensor DHT22 digunakan untuk mengukur dan menjaga kestabilan suhu serta kelembaban dalam inkubator. Gas sensor MQ-2 berperan penting dalam mendeteksi keberadaan gas berbahaya seperti asap atau amonia, yang dapat membahayakan embrio. Sementara itu, sensor LDR (photoresistor) digunakan untuk memantau intensitas cahaya di dalam inkubator, yang akan dikendalikan oleh LED sebagai pengatur pencahayaan agar menyerupai kondisi alami.

Untuk mendeteksi perubahan massa telur, terutama saat proses penetasan atau potensi kerusakan, digunakan sensor load cell HX711, yang akan memberikan sinyal ke sistem apabila terjadi perubahan signifikan pada berat telur. Semua data dari sensor akan ditampilkan secara real-time melalui LCD I2C, sehingga pengguna dapat memantau kondisi inkubator dengan mudah. Sebagai kontrol otomatis, sistem ini dilengkapi motor servo yang akan membuka atau menutup katup ventilasi udara, buzzer sebagai alarm peringatan bila terjadi anomali, serta LED untuk penyesuaian intensitas cahaya di dalam ruang inkubasi.

Dengan integrasi sistem ini, Smart Egg Incubator diharapkan dapat meningkatkan tingkat keberhasilan penetasan telur secara signifikan, mengurangi ketergantungan pada induk ayam, serta memberikan kemudahan dan efisiensi dalam pemantauan dan pengendalian lingkungan inkubasi secara otomatis dan presisi.


  1. Rumusan Masalah 

Rumusan masalah dalam proyek ini adalah sebagai berikut:

  1. Bagaimana merancang dan membangun sistem inkubator telur otomatis berbasis Raspberry Pi Pico dengan pemantauan dan pengendalian kondisi lingkungan secara real-time?

  2. Bagaimana mengintegrasikan berbagai sensor (DHT22, MQ-2, LDR) untuk mendeteksi dan menjaga kestabilan suhu, kelembapan, gas berbahaya, pencahayaan, dan berat telur?

  3. Bagaimana memanfaatkan aktuator (motor servo, buzzer, LED) sebagai sistem kontrol otomatis terhadap ventilasi, alarm, dan pencahayaan di dalam inkubator?

  4. Bagaimana merancang komunikasi antar dua Raspberry Pi Pico untuk membagi fungsi monitoring dan kontrol secara efisien?


  1. Tujuan Project

Tujuan dari proyek Smart Egg Incubator ini adalah:

  1. Merancang dan mengembangkan sistem inkubator telur ayam otomatis berbasis Raspberry Pi Pico dengan konsep close house.

  2. Membangun sistem pemantauan lingkungan inkubator menggunakan sensor DHT22, MQ-2, dan LDR secara real-time.

  3. Menerapkan sistem kontrol otomatis terhadap ventilasi, alarm, dan pencahayaan dengan menggunakan motor servo, buzzer, dan LED.

  4. Mengimplementasikan komunikasi antar mikrokontroler (Raspberry Pi Pico) untuk membagi tugas antara sistem monitoring dan sistem kontrol secara efektif.

  5. Menampilkan informasi kondisi inkubator secara langsung melalui OLED 1306 agar pengguna dapat melakukan pemantauan dengan mudah.


  1. Manfaat Project

Adapun manfaat yang diharapkan dari pengembangan proyek ini meliputi:

  1. Meningkatkan efisiensi dan keberhasilan penetasan telur dengan menciptakan lingkungan inkubasi yang stabil dan terkendali.

  2. Mengurangi ketergantungan terhadap induk ayam dalam proses pengeraman, sehingga dapat meningkatkan kapasitas produksi.

  3. Memberikan solusi otomatisasi yang cerdas dan terjangkau bagi peternak kecil hingga menengah dalam mengembangkan sistem penetasan mandiri.

  4. Menjadi sarana pembelajaran teknologi embedded system dan Internet of Things (IoT) dalam dunia peternakan modern.

Mendeteksi secara dini kondisi abnormal, seperti kenaikan suhu ekstrem, keberadaan gas berbahaya, atau kerusakan telur, melalui sistem alarm dan pemantauan real-time.

2. Tujuan[Kembali]

Tujuan dari proyek Smart Egg Incubator ini adalah:

  1. Merancang dan mengembangkan sistem inkubator telur ayam otomatis berbasis Raspberry Pi Pico dengan konsep close house.

  2. Membangun sistem pemantauan lingkungan inkubator menggunakan sensor DHT22, MQ-2 dan LDR, secara real-time.

  3. Menerapkan sistem kontrol otomatis terhadap ventilasi, alarm, dan pencahayaan dengan menggunakan motor servo, buzzer, dan LED.

  4. Mengimplementasikan komunikasi antar mikrokontroler (Raspberry Pi Pico) untuk membagi tugas antara sistem monitoring dan sistem kontrol secara efektif.

  5. Menampilkan informasi kondisi inkubator secara langsung melalui OLED 1306 agar pengguna dapat melakukan pemantauan dengan mudah.


3. Alat dan Komponen[Kembali]


1. Mikrokontroler Raspberry Pi Pico

Gambar 2. Pin Raspberry Pi Pico

Raspberry Pi Pico adalah papan mikrokontroler berbiaya rendah dan berkinerja tinggi dengan antarmuka digital yang fleksibel. Fitur-fitur utamanya meliputi:

  • Chip mikrokontroler RP2040 yang dirancang oleh Raspberry Pi di Inggris Raya

  • Prosesor Arm Cortex M0+ dual-core, clock fleksibel hingga 133 MHz

  • 264KB SRAM, dan 2MB memori flash on-board

  • USB 1.1 dengan dukungan perangkat dan host

  • Mode tidur dan dorman berdaya rendah

  • Pemrograman drag-and-drop menggunakan penyimpanan massal melalui USB

  • 26 × pin GPIO multifungsi

  • 2 × SPI, 2 × I2C, 2 × UART, 3 × ADC 12-bit, 16 × saluran PWM yang dapat dikontrol

  • Jam dan pengatur waktu yang akurat pada chip

  • Sensor suhu

  • Pustaka floating-point yang dipercepat pada chip

  • 8 × Mesin status I/O yang dapat diprogram (PIO) untuk dukungan periferal khusus

Raspberry Pi Pico hadir sebagai modul berbenteng yang memungkinkan penyolderan langsung ke papan pembawa

2. Mikrokontroller STM32F103C8T6

Gambar 3. Mikrokontroler STM32F103C8T6


STM32F103C8T6 adalah sebuah mikrokontroler 32-bit berbasis ARM Cortex-M3 buatan STMicroelectronics,  termasuk dalam seri STM32F1 yang dikenal sebagai mainstream line. Mikrokontroler ini banyak digunakan dalam sistem tertanam (embedded system), IoT, robotika, dan pengontrol industri karena harganya yang murah, performa baik, serta ekosistem pengembangan yang luas.

Prinsip kerjanya secara garis besar adalah:

a). Power-up dan Reset

Saat diberi tegangan (biasanya 3.3V), chip akan di-reset dan memulai booting dari alamat awal Flash.

b). Eksekusi Program

Program yang sudah ditanam di Flash memory dijalankan oleh CPU ARM Cortex-M3. Program bisa melakukan pembacaan sensor, logika kontrol, pengaturan PWM, komunikasi serial, dan sebagainya.

c). Peripheral & Interrupt

STM32 dilengkapi dengan banyak peripheral (GPIO, ADC, UART, SPI, Timer, dll). Perangkat ini juga mampu merespons kejadian eksternal melalui sistem interrupt, yang dikelola oleh NVIC (Nested Vectored Interrupt Controller).

d). Komunikasi & Kontrol

Dapat berkomunikasi dengan perangkat lain (sensor, modul, motor, dll) melalui GPIO, UART, SPI, I2C, dan mengatur keluaran berupa PWM, sinyal digital, dll.

Pin Pin :


Spesifikasi :




3.Sensor DHT11

Gambar 4. DHT 11

Sensor DHT11 digunakan untuk mengukur suhu dan kelembapan dalam inkubator penetas telur ayam, yang penting untuk proses penetasan yang optimal. Sensor ini dapat digunakan bersama dengan mikrokontroler untuk memantau dan mengontrol suhu serta kelembapan, sehingga menciptakan lingkungan yang sesuai untuk perkembangan embrio. 

Sensor DHT memiliki tiga komponen utama, yaitu NTC thermistor untuk mengukur suhu, sensor kelembaban kapasitif untuk mengukur kelembaban relatif udara, dan IC pengolah sinyal yang mengonversi data analog menjadi sinyal digital yang dapat dibaca mikrokontroler. Prinsip kerjanya dimulai dari pengukuran kelembaban menggunakan sensor kapasitif yang terdiri dari dua pelat dan bahan dielektrik sensitif terhadap kelembaban; perubahan kelembaban menyebabkan perubahan kapasitansi yang kemudian dikonversi oleh IC menjadi data digital. Sementara itu, pengukuran suhu dilakukan dengan thermistor, sebuah resistor yang resistansinya menurun seiring peningkatan suhu; perubahan resistansi ini juga diolah IC menjadi nilai suhu digital.



4.Sensor Gas MQ-2

Gambar 5. Pin MQ-2 Gas Sensor

Gambar 5. Pin MQ-2 Gas Sensor

Sensor MQ2 berfungsi sebagai sensor pendukung untuk mendeteksi gas H2S yang dihasilkan oleh telur.

Sensor gas MQ-2 terdiri dari elemen pemanas, sensor gas berbahan SnO₂ (timah dioksida), dan rangkaian penguat sinyal. Sensor ini bekerja berdasarkan perubahan resistansi konduktor semikonduktor saat terkena gas seperti LPG, propana, hidrogen, asap, dan metana. Saat gas mudah terbakar terdeteksi, konsentrasi gas memengaruhi kadar oksigen di sekitar permukaan sensor, sehingga resistansi SnO₂ berubah. Perubahan resistansi ini diubah menjadi sinyal listrik oleh rangkaian pembanding atau penguat, lalu dikirim sebagai sinyal analog (dan bisa diubah menjadi digital) ke mikrokontroler. Sensor MQ-2 membutuhkan waktu pemanasan awal (preheat) selama beberapa detik hingga menit agar elemen pemanas bekerja optimal dan sensor siap memberikan pembacaan yang akurat.

data sheet

  • Operating Voltage is +5V

  • Can be used to Measure or detect LPG, Alcohol, Propane, Hydrogen, CO and even methane

  • Analog output voltage: 0V to 5V

  • Digital Output Voltage: 0V or 5V (TTL Logic)

  • Preheat duration 20 seconds

  • Can be used as a Digital or analog sensor

  • The Sensitivity of Digital pin can be varied using the potentiometer



                5.Sensor LDR

LDR Module - LM393

Gambar 6. LDR Sensor

Sensor LDR (Light Dependent Resistor) atau fotokonduktor adalah komponen elektronik yang resistansinya berubah tergantung pada intensitas cahaya yang mengenainya. LDR terbuat dari bahan semikonduktor seperti cadmium sulfide (CdS) yang bersifat sensitif terhadap cahaya. Saat cahaya terang menyinari permukaan LDR, energi foton menyebabkan lebih banyak elektron bebas, sehingga resistansi menurun. Sebaliknya, dalam kondisi gelap atau cahaya rendah, jumlah elektron bebas menurun sehingga resistansi meningkat. Mikrokontroler dapat membaca perubahan resistansi ini melalui pembagi tegangan, dan mengubahnya menjadi nilai intensitas cahaya. Prinsip kerja ini banyak digunakan dalam sistem otomatisasi seperti lampu jalan otomatis, sensor cahaya ruangan, atau perangkat hemat energi. Secara internal, LDR tersusun dari bahan semikonduktor fotokonduktif (biasanya cadmium sulfide CdS) yang resistansinya berubah tergantung jumlah foton (cahaya) yang diterima

data sheet:

  • Can be used to sense Light

  • Easy to use on Breadboard or Perf Board

  • Easy to use with Microcontrollers or even with normal Digital/Analog IC

  • Small, cheap and easily available

  • Available in PG5 ,PG5-MP, PG12, PG12-MP, PG20 and PG20-MP series



                    6. LED

Gambar 7. LED

LED (Light Emitting Diode) adalah dioda semikonduktor yang bisa memancarkan cahaya ketika dialiri arus listrik maju (forward bias).Ketika arus listrik mengalir dari anoda ke katoda, elektron dari pita konduksi bertemu dengan hole (lubang elektron) → menghasilkan energi dalam bentuk cahaya (foton).

Ciri utama:
  • Membutuhkan arus maju (DC).

  • Polaritas penting → salah pasang → tidak menyala.

LED terdiri dari dua lapisan bahan semikonduktor, yaitu tipe-P dan tipe-N, yang membentuk sambungan PN. Ketika arus listrik mengalir dari anoda (positif) ke katoda (negatif), elektron dari lapisan N dan hole dari lapisan P bertemu di daerah sambungan. Proses rekombinasi ini menyebabkan elektron melepaskan energi dalam bentuk foton, yang tampak sebagai cahaya. Warna cahaya yang dihasilkan tergantung pada jenis bahan semikonduktor dan energi celah pita (bandgap) yang digunakan. LED memiliki efisiensi tinggi, umur panjang, dan digunakan secara luas pada indikator, pencahayaan, dan tampilan digital. LED harus dilengkapi resistor pembatas arus agar tidak rusak akibat arus berlebih.

Pin LED

Variasi Tegangan LED berdasarkan Warna LED

                    7.Buzzer

Gambar 8. Buzzer

Buzzer adalah komponen elektromekanis atau elektronik yang menghasilkan suara ketika dialiri arus listrik.


Terdapat 2 jenis buzzer:

Jenis Buzzer

Prinsip Kerja

Active Buzzer

                Memiliki osilator internal → langsung berbunyi saat diberi tegangan.

Passive Buzzer

                Tidak memiliki osilator → perlu sinyal frekuensi (PWM) agar berbunyi.

Active Buzzer lebih mudah dipakai untuk bunyi sederhana.
Passive Buzzer cocok untuk suara dengan nada/melodi.

Pin 

Data sheet

  • Buzzer aktif memiliki osilator internal sehingga dapat menghasilkan suara hanya dengan diberi tegangan DC; cukup disambungkan ke sumber daya, dan buzzer langsung berbunyi.

  • Buzzer pasif tidak memiliki osilator, sehingga memerlukan sinyal frekuensi dari mikrokontroler (biasanya PWM) untuk menghasilkan bunyi.

Prinsip kerjanya umumnya menggunakan efek piezoelektrik, di mana sebuah lempeng piezo akan bergetar saat dialiri arus bolak-balik, menghasilkan gelombang suara. Buzzer digunakan pada alarm, timer, penanda status, dan berbagai sistem peringatan dalam perangkat elektronik.

                        8. OLED SSD1306

Gambar 9. OLED SSD1306

OLED SSD1306 adalah modul tampilan kecil yang menggunakan teknologi layar OLED (Organic Light Emitting Diode) dengan chip pengontrol bernama SSD1306. Modul ini sangat populer di dunia mikrokontroler karena konsumsi dayanya yang rendah, kontras yang tinggi, dan kemudahan integrasinya dengan berbagai platform seperti Arduino, STM32, dan Raspberry Pi. Layar ini umumnya memiliki resolusi 128x64 piksel dengan ukuran fisik sekitar 0.96 inci dan hanya menampilkan satu warna (monokrom), seperti putih, biru, atau hijau. Karena menggunakan teknologi OLED, setiap piksel mampu memancarkan cahaya sendiri tanpa memerlukan backlight, sehingga tampilannya tetap jelas meskipun dalam kondisi gelap. Chip SSD1306 berfungsi sebagai pengatur komunikasi antara mikrokontroler dan layar, dengan dukungan antarmuka I2C maupun SPI tergantung jenis modulnya. Modul ini dilengkapi dengan empat pin utama, yaitu VCC, GND, SCL, dan SDA (untuk komunikasi I2C), serta mendukung berbagai fitur seperti scroll otomatis dan pengaturan tingkat kecerahan. Berkat ukurannya yang ringkas dan efisiensi dayanya, OLED SSD1306 banyak digunakan dalam proyek-proyek sistem tertanam untuk menampilkan data sensor, jam digital, antarmuka pengguna mini, dan informasi sistem lainnya.


                            9. Motor Servo

Gambar 10. Servo Motor SG-90 TowePro

Motor servo adalah aktuator berputar yang digunakan untuk mengontrol posisi sudut dengan presisi tinggi. Di dalamnya terdapat motor DC kecil, gearbox, dan rangkaian kontrol elektronik.


TowerPro SG-90 Features

  • Operating Voltage is +5V typically

  • Torque: 2.5kg/cm

  • Operating speed is 0.1s/60°

  • Gear Type: Plastic

  • Rotation : 0°-180°

  • Weight of motor : 9gm

  • Package includes gear horns and screw


Aktuator elektromekanis dapat mengatur posisi sudut secara presisi sesuai sinyal kendali. Komponen utamanya terdiri dari motor DC kecil, gearbox (untuk memperbesar torsi dan menurunkan kecepatan), potensiometer (untuk mendeteksi posisi poros), dan rangkaian kontrol elektronik. Prinsip kerjanya didasarkan pada sistem umpan balik tertutup. Mikrokontroler mengirimkan sinyal PWM (Pulse Width Modulation) ke servo—biasanya dengan lebar pulsa antara 1–2 ms dalam siklus 20 ms—yang menentukan sudut putaran (misalnya 1 ms untuk 0°, 1.5 ms untuk 90°, dan 2 ms untuk 180°). Rangkaian kontrol di dalam servo membandingkan posisi aktual (dari potensiometer) dengan posisi yang diinginkan (berdasarkan sinyal PWM), lalu menggerakkan motor hingga posisi tersebut tercapai. Motor servo banyak digunakan pada robotika, sistem kendali otomatis, lengan robot, dan model pesawat karena kemampuannya mengatur sudut dengan cepat dan presisi.

                    10. Resistor

Gambar 11. Resistor

Resistor adalah komponen elektronika pasif yang berfungsi menghambat arus listrik dalam suatu rangkaian. Nilainya dinyatakan dalam Ohm (Ω), dan ditentukan oleh kode warna atau ditulis langsung (pada jenis SMD).

Prinsip kerjanya sederhana: resistor mengubah sebagian energi listrik menjadi panas saat arus mengalir melaluinya, sehingga arus yang lewat dikendalikan sesuai nilai resistansinya. Nilai resistansi ditentukan oleh bahan penyusunnya (biasanya karbon, logam, atau film) dan bentuk fisiknya. Resistor memiliki banyak fungsi dalam rangkaian, seperti Membatasi arus ke komponen sensitif seperti LED. Membentuk pembagi tegangan untuk memberikan tegangan tertentu ke bagian rangkaian. Menyesuaikan level sinyal, dan  Menentukan waktu bersama kapasitor dalam rangkaian RC (resistor-kapasitor). Nilai resistor biasanya ditandai dengan kode warna atau angka di permukaannya, dan tersedia dalam berbagai ukuran daya (seperti 1/4 watt, 1/2 watt, dll) tergantung besar arus yang bisa ditangani.

  • Secara Seri: Nilai total = R1 + R2 + R3 ...

  • Secara Paralel: Nilai total = 1 / (1/R1 + 1/R2 + ..

                            11. Push Button

Gambar 12. Push Button

Push button (tombol tekan) adalah sakelar (switch) mekanis yang menghubungkan atau memutuskan arus listrik saat ditekan. Umumnya digunakan dalam proyek mikrokontroler (Arduino, Raspberry Pi, dsb) sebagai input digital.


Prinsip Kerja:

Push button memiliki dua atau lebih kaki logam yang terhubung secara mekanis melalui kontak di dalam tombol. Saat ditekan, kontak akan menutup sirkuit, memungkinkan arus mengalir; saat dilepas, kontak terbuka dan arus terputus. Push button biasanya digunakan dalam mode normally open (NO), artinya sirkuit hanya aktif ketika tombol ditekan.

Fungsi dalam Rangkaian:

  • Input sinyal digital untuk mikrokontroler (misalnya Arduino).
  • Kontrol manual untuk menyalakan/mematikan rangkaian.
  • Trigger/reset pada perangkat elektronik.

Agar push button bekerja stabil dan tidak menghasilkan sinyal bergetar (bouncing), biasanya digunakan resistor pull-up atau pull-down dalam rangkaian, sehingga mikrokontroler dapat membaca logika HIGH atau LOW secara konsisten saat tombol ditekan atau dilepas.

                    12.Adaptor

Gambar 13. Adaptor

Adaptor adalah alat yang mengkonversi tegangan/arus ac menjadi dc sebagai Sumber tegangan.

.

Komponen dan Prinsip Kerja:

Adaptor terdiri dari beberapa bagian utama:

  1. Transformator: Menurunkan tegangan AC tinggi dari stopkontak menjadi AC dengan tegangan lebih rendah.
  2. Penyearah (dioda): Mengubah arus AC menjadi arus DC melalui proses penyearahan.
  3. Filter (kapasitor): Menghaluskan sinyal DC agar tidak berdenyut (ripple).
  4. Regulator tegangan (pada adaptor stabil): Menjaga agar tegangan output tetap stabil meskipun beban berubah.

Jenis Adaptor:

  • Adaptor linier: Menggunakan transformator besar dan komponen analog, biasanya lebih berat.
  • Adaptor switching (SMPS): Lebih kecil dan efisien karena bekerja pada frekuensi tinggi.

Adaptor digunakan untuk menyuplai daya ke berbagai perangkat seperti mikrokontroler (Arduino, ESP32), router, speaker aktif, dan peralatan elektronik lainnya yang memerlukan tegangan DC stabil. Beberapa adaptor juga dilengkapi jack DC, USB, atau terminal kabel sesuai jenis penggunaannya.

  • Input AC: 85–265 V AC, 50/60 Hz
  • Output DC: 5 V ±5 %, up to 2 A (~10 W) 
  • Efisiensi: ≥80 %
  • Standby power: <75–100 mW (sesuai level energi) 
  • Frekuensi switching: ~65–130 kHz 
  • Proteksi: over‑current, over‑voltage, short circuit, thermal shutdown

4. Landasan Teori[Kembali]


4.1 General Input Output 

        Input adalah semua data dan perintah yang dimasukkan ke dalam memori untuk diproses lebih lanjut oleh mikroprosesor. Sebuah perangkat input adalah komponen piranti keras yang memungkinkan user atau pengguna memasukkan data ke dalam mikroprosesor. Output adalah data hasil yang telah diproses. Perangkat output adalah semua komponen piranti keras yang menyampaikan informasi kepada orang-orang yang menggunakannya.

        Pada STM32 dan Raspberry Pi Pico pin input/output terdiri dari digital dan analog yang jumlah pin-nya tergantung jenis mikrokontroller yang digunakan. Input digital digunakan untuk mendeteksi perubahan logika biner pada pin tertentu. Adanya input digital memungkinkan mikrokontroler untuk dapat menerjemahkan 0V menjadi logika LOW dan 5V menjadi logika HIGH. Membaca sinyal digital pada mikrokontroller dapat menggunakan sintaks digitalRead(pin);

        Output digital terdiri dari dua buah logika, yaitu kondisi logika HIGH dan kondisi logika LOW. Untuk menghasilkan output kita dapat menggunakan sintaks digitalWrite(pin,nilai); yang sebelumnya pin sudah diset ke mode OUTPUT, lalu parameter kedua adalah set nilai HIGH atau LOW. Apabila pin diset dengan nilai HIGH, maka voltase pin tersebut akan diset ke 5V atau 3.3V dan bila pin diset ke LOW, maka voltase pin tersebut akan diset ke 0V

4.2 PWM

    PWM (Pulse Width Modulation) adalah salah satu teknik modulasi dengan mengubah lebar pulsa (duty cylce) dengan nilai amplitudo dan frekuensi yang tetap. 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 14. Duty Cycle

Duty Cycle = tON / ttotal
Ton = Waktu ON atau Waktu dimana tegangan keluaran berada pada posisi tinggi (high atau 1)
Toff = Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah (low atau 0)
Ttotal = Waktu satu siklus atau penjumlahan antara Ton dengan Toff atau disebut juga dengan “periode satu gelombang”
    PWM pada STM32 dihasilkan menggunakan timer internal yang berfungsi sebagai penghitung waktu dengan berbagai mode operasi. Mikrokontroler ini memiliki empat timer 16-bit (TIM1–TIM4), yang dapat dikonfigurasi untuk menghasilkan sinyal dengan frekuensi dan duty cycle tertentu. Timer bekerja dengan menghitung hingga nilai tertentu berdasarkan frekuensi clock, lalu mengubah status register untuk menghasilkan gelombang persegi.
    STM32 memiliki 15 pin yang mendukung PWM, beberapa di antaranya berasal dari timer tingkat lanjut seperti TIM1, yang memiliki fitur tambahan seperti complementary output. Selain menghasilkan sinyal PWM, timer juga bisa digunakan untuk mengukur sinyal eksternal (input capture), menghasilkan sinyal berbasis waktu (output compare), dan membuat satu pulsa berdasarkan trigger (one pulse mode). PWM sering digunakan untuk mengontrol kecepatan motor, mengatur kecerahan LED, dan berbagai aplikasi berbasis waktu lainnya.
    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.

4.3 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.
    Pada mikrokontroler STM32, terdapat dua ADC (Analog-to-Digital Converter) 12-bit yang masing-masing memiliki hingga 16 kanal eksternal. ADC ini dapat beroperasi dalam mode single-shot atau scan mode. Pada scan mode, konversi dilakukan secara otomatis pada sekelompok input analog yang dipilih. Selain itu, ADC ini memiliki fitur tambahan seperti simultaneous sample and hold, interleaved sample and hold, serta single shunt. ADC juga dapat dihubungkan dengan DMA untuk meningkatkan efisiensi transfer data. Mikrokontroler ini dilengkapi dengan fitur analog watchdog yang memungkinkan pemantauan tegangan hasil konversi dengan akurasi tinggi, serta dapat menghasilkan interupsi jika tegangan berada di luar ambang batas yang telah diprogram. Selain itu, ADC dapat disinkronkan dengan timer internal (TIMx dan TIM1) untuk memulai konversi, pemicu injeksi, serta pemicu DMA, sehingga memungkinkan aplikasi untuk melakukan konversi ADC secara terkoordinasi dengan timer.
    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.

4.4 INTERRUPT
    Interrupt adalah mekanisme yang memungkinkan suatu instruksi atau perangkat I/O untuk menghentikan sementara eksekusi normal prosesor agar dapat diproses lebih dulu seperti memiliki prioritas tertinggi. Misalnya, saat prosesor menjalankan tugas utama, ia juga dapat terus memantau apakah ada kejadian atau sinyal dari sensor yang memicu interrupt. Ketika terjadi interrupt eksternal, prosesor akan menghentikan sementara tugas utamanya untuk menangani interrupt terlebih dahulu, kemudian melanjutkan eksekusi normal setelah selesai menangani interrupt tersebut. Fungsi yang menangani interrupt disebut Interrupt Service Routine (ISR), yang dieksekusi secara otomatis setiap kali interrupt terjadi.
    Pada STM32F103C8, semua pin GPIO dapat digunakan sebagai pin interrupt, berbeda dengan Arduino Uno yang hanya memiliki pin tertentu (misalnya pin 2 dan 3). Untuk mengaktifkan interrupt di STM32 menggunakan Arduino IDE, digunakan fungsi attachInterrupt(digitalPinToInterrupt(pin), ISR, mode). Parameter pin menentukan pin mana yang digunakan untuk interrupt, ISR adalah fungsi yang dijalankan saat interrupt terjadi, dan mode menentukan jenis perubahan sinyal yang memicu interrupt. Mode yang tersedia adalah RISING (dari LOW ke HIGH), FALLING (dari HIGH ke LOW), dan CHANGE (baik dari LOW ke HIGH maupun HIGH ke LOW). Saat menggunakan lebih dari satu interrupt secara bersamaan, terkadang perlu memperhatikan batasan tertentu dalam pemrograman.
    Pada RP2040, setiap inti prosesor dilengkapi dengan ARM Nested Vectored Interrupt Controller (NVIC) yang memiliki 32 jalur interrupt. Namun, hanya 26 jalur pertama yang digunakan, sedangkan jalur IRQ 26 hingga 31 tidak aktif. Setiap NVIC menerima interrupt yang sama, kecuali untuk GPIO, di mana setiap bank GPIO memiliki satu interrupt per inti. Ini berarti, misalnya, core 0 dapat menerima interrupt dari GPIO 0 di bank 0, sementara core 1 menerima interrupt dari GPIO 1 di bank yang sama secara independen. Jika diperlukan, inti prosesor masih bisa dipaksa masuk ke interrupt handler dengan menulis bit 26 hingga 31 pada register NVIC ISPR.

4.5 MILLIS
    Fungsi millis() pada mikrokontroler, seperti pada platform Arduino dan STM32 (dengan HAL), digunakan untuk menghitung waktu dalam milidetik sejak perangkat mulai berjalan. Berbeda dengan delay(), yang menghentikan eksekusi program selama waktu tertentu, millis() memungkinkan sistem untuk menjalankan beberapa tugas secara bersamaan tanpa menghentikan proses lainnya. Hal ini berguna dalam aplikasi yang memerlukan multitasking berbasis waktu, seperti pengendalian sensor, komunikasi serial, atau implementasi sistem real-time. Dalam STM32 dengan HAL, millis() dapat diimplementasikan menggunakan HAL_GetTick(), yang mengandalkan interrupt timer internal untuk mencatat waktu yang terus berjalan sejak mikrokontroler diaktifkan.
    Sementara itu, pada platform seperti 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.6 UART (Universal Asynchronous Receiver Transmitter)

    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.

   

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

4.7 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.


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.8 Raspberry Pi Pico
Raspberry Pi Pico adalah papan rangkaian elektronik yang di dalamnya terdapat komponen utama chip mikrokontroler RP2040, yang dirancang dan diproduksi oleh Raspberry Pi Foundatio. Tidak seperti komputer mini raspberry Pi lainnya yang menjalankan sistem operasi seperti Linux, Pico dirancang untuk tugas-tugas yang lebih sederhana dan langsung (embedded system), seperti membaca sensor, mengontrol perangkat, atau melakukan pengolahan data pada tingkat hardware.
Adapun spesifikasi dari Raspberry Pi Pico adalah sebagai berikut:
Gambar 17. Raspberry Pi Pico

1.RAM (Random Access Memory)
Raspberry Pi Pico dilengkapi dengan 264KB SRAM on-chip. Kapasitas RAM yang lebih besar ini memungkinkan Pico menjalankan aplikasi yang lebih kompleks dan menyimpan data lebih banyak.
2. Memori Flash Eksternal
Raspberry Pi Pico tidak memiliki ROM tradisional. Sebagai gantinya, ia menggunakan memori flash eksternal. Kapasitas memori flash ini dapat bervariasi, umumnya antara 2MB hingga 16MB, tergantung pada konfigurasi. Memori flash ini digunakan untuk menyimpan firmware dan program pengguna. Penggunaan memori flash eksternal pada Pico memberikan fleksibilitas lebih besar dalam hal kapasitas penyimpanan program.
3. Crystal Oscillator
Raspberry Pi Pico menggunakan crystal oscillator untuk menghasilkan sinyal clock yang stabil. Sinyal clock ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.
4. Regulator Tegangan
Untuk memastikan pasokan tegangan yang stabil ke mikrokontroler.
5. Pin GPIO (General Purpose Input/Output):
Untuk menghubungkan Pico ke berbagai perangkat eksternal seperti sensor, motor, dan LED.


4.9 STM32F103C8
    STM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam praktikum ini adalah sebagai berikut:
Gambar 18. STM32F103C8

1. RAM (Random Access Memory)
STM32F103C8 dilengkapi dengan 20KB SRAM on-chip. Kapasitas RAM ini
memungkinkan mikrokontroler menjalankan berbagai aplikasi serta menyimpan data sementara selama eksekusi program.
2. Memori Flash Internal
STM32F103C8 memiliki memori flash internal sebesar 64KB atau 128KB, yang digunakan untuk menyimpan firmware dan program pengguna. Memori ini memungkinkan penyimpanan kode program secara permanen tanpa memerlukan media penyimpanan eksternal.
3. Crystal Oscillator
STM32F103C8 menggunakan crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan PLL untuk meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.
4. Regulator Tegangan
STM32F103C8 memiliki sistem pengaturan tegangan internal yang memastikan pasokan daya stabil ke mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V hingga 3.6V.
5. Pin GPIO (General Purpose Input/Output)
STM32F103C8 memiliki hingga 37 pin GPIO yang dapat digunakan untuk menghubungkan berbagai perangkat eksternal seperti sensor, motor, LED, serta komunikasi dengan antarmuka seperti UART, SPI, dan I²C.

5. Flowchart dan Listing Program[Kembali]


Gambar 19. Flowchart Raspberry Pi Pico



Gambar 20. Flowchart STM32F103C8 


Gambar 21. Flowchart Smart Egg Incubator

Gambar 22. Diagram Blok Smart Egg Incubator


LISTING PROGRAM - RASPBERRY PI PICO (Software: Thonny IDE)

from machine import Pin, ADC, UART, PWM, I2C

from ssd1306 import SSD1306_I2C

import dht

import time

 

# --- OLED via I2C ---

i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=400000)

oled = SSD1306_I2C(128, 64, i2c)

 

# --- Sensor ---

ldr = ADC(Pin(26))                  # LDR on GP26 (ADC0)

dht_sensor = dht.DHT11(Pin(27))     # DHT11 on GP27

led_pwm = PWM(Pin(28))              # LED PWM on GP28

led_pwm.freq(1000)

buzzer = Pin(13, Pin.OUT)           # Buzzer on GP13

 

# --- UART to STM32 ---

uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))

 

# --- Thresholds ---

lux_threshold = 200

uart_connected = False

gas_ppm = 15.0

temp = 0

hum = 0

lux = 0

 

# --- OLED Display helper ---

def show_values_on_oled():

    oled.fill(0)

    oled.text("DATA INCUBATOR", 0, 0)

    oled.text("Gas : {:.1f} ppm".format(gas_ppm), 0, 16)

    oled.text("Temp: {} C".format(temp), 0, 32)

    oled.text("Hum : {} %".format(hum), 0, 40)

    oled.text("Lux : {}".format(lux), 0, 56)

    oled.show()

 

# --- Read DHT11 ---

def read_dht_sensor():

    try:

        dht_sensor.measure()

        t = dht_sensor.temperature()

        h = dht_sensor.humidity()

        return t, h

    except Exception as e:

        print("DHT11 Error:", e)

        return None, None

 

# --- Read LDR ---

def read_lux():

    raw = ldr.read_u16()

    return int((raw / 65535) * 1000)

 

# --- LED brightness controller ---

def control_led(lux_val):

    if lux_val > lux_threshold:

        duty = int((lux_threshold - lux_val) / lux_threshold * 65535)

        led_pwm.duty_u16(duty)

    else:

        led_pwm.duty_u16(0)

 

# --- Startup Display ---

oled.fill(0)

oled.text("HELLO GUYS", 0, 0)

oled.text("SMART EGG", 0, 16)

oled.text("INCUBATOR", 0, 32)

oled.text("STARTING...", 0, 48)

oled.show()

time.sleep(3)

 

# --- Check UART on startup ---

uart.write("PING\n")

t_start = time.ticks_ms()

while time.ticks_diff(time.ticks_ms(), t_start) < 2000:

    if uart.any():

        line = uart.readline()

        if line and b"PONG" in line:

            uart_connected = True

            print("UART connected!")

            break

 

if not uart_connected:

    print("UART not responding")

 

# --- Main Loop ---

while True:

    # 1. LDR

    lux = read_lux()

    control_led(lux)

 

    # 2. DHT

    temp, hum = read_dht_sensor()

    if temp is None or hum is None:

        temp, hum = 0, 0

 

    # 3. Kirim ke STM32

    if uart_connected:

        uart.write("TEMP_HUM:{},{}\n".format(temp, hum))

        uart.write("LUX:{}\n".format(lux))

 

    # 4. Baca dari STM32 (Gas PPM)

    if uart.any():

        try:

            line = uart.readline()

            if line:

                decoded = line.decode().strip()

                print("UART:", decoded)

                if decoded.startswith("GAS_PPM:"):

                    gas_ppm = float(decoded.split(":")[1])

                    if gas_ppm > 0:

                        buzzer.value(1)

                        time.sleep(1)

                        buzzer.value(0)

        except Exception as e:

            print("UART Read Error:", e)

 

    # 5. OLED Update

    show_values_on_oled()

    time.sleep(2)


- STM32F103C8T6 (Software: Arduino IDE)

#include <U8g2lib.h>
#include <Servo.h>

// OLED I2C
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

// Servo
Servo myServo;
const int SERVO_PIN = PA8;

// MQ-2 Gas Sensor
const int MQ2_ANALOG_PIN = PA0;
float calibrationFactorMQ2 = 1.0;
float gasThreshold = 15.0; // ppm

// Tombol kontrol sistem
const int BUTTON_PIN = PA11;
volatile bool systemOn = false;

// UART ke Raspberry Pi Pico
#define serialComm Serial1

// Status data
bool uartConnected = false;
bool gasBahayaAktif = false;
String gasStatus = "Aman";
String tempStatus = "-";
String humStatus  = "-";
String luxStatus  = "-";

// Batas normal sensor
float minTemp = 32.0;
float maxTemp = 39.0;
float minHumidity = 20.0;
float maxHumidity = 80.0;
int luxThreshold = 200;

void setup() {
  Serial.begin(9600);
  serialComm.begin(9600);

  // OLED
  u8g2.begin();
  u8g2.setFont(u8g2_font_ncenB08_tr);

  // Tampilan awal
  u8g2.clearBuffer();
  u8g2.drawStr(0, 10, "HELLO GUYS");
  u8g2.drawStr(0, 25, "SMART EGG");
  u8g2.drawStr(0, 40, "INCUBATOR");
  u8g2.drawStr(0, 55, "STARTING...");
  u8g2.sendBuffer();
  delay(2000);

  // Servo awal
  myServo.attach(SERVO_PIN);
  myServo.write(0);

  // Tombol
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), toggleSystem, FALLING);

  // Tampilkan status awal
  u8g2.clearBuffer();
  u8g2.drawStr(0, 10, "System OFF. Press BTN");
  u8g2.sendBuffer();
}

void loop() {
  // Baca data dari Pi Pico jika ada
  if (serialComm.available()) {
    String received = serialComm.readStringUntil('\n');
    Serial.println("From Pi Pico: " + received);

    if (received.startsWith("TEMP_HUM:")) {
      String data = received.substring(received.indexOf(':') + 1);
      int idx = data.indexOf(',');
      float temp = data.substring(0, idx).toFloat();
      float hum = data.substring(idx + 1).toFloat();

      if (temp < minTemp) tempStatus = "Rendah";
      else if (temp > maxTemp) tempStatus = "Tinggi";
      else tempStatus = "Normal";

      if (hum < minHumidity) humStatus = "Rendah";
      else if (hum > maxHumidity) humStatus = "Tinggi";
      else humStatus = "Normal";
    } else if (received.startsWith("LUX:")) {
      int luxVal = received.substring(received.indexOf(':') + 1).toInt();
      luxStatus = (luxVal < luxThreshold) ? "Rendah" : "Normal";
    }
  }

  if (systemOn) {
    // Baca MQ2
    int analogValue = analogRead(MQ2_ANALOG_PIN);
    float ppm = map(analogValue, 0, 4095, 0, 500) * calibrationFactorMQ2;

    if (ppm > gasThreshold) {
      gasStatus = "Bahaya";
      if (!gasBahayaAktif) {
        myServo.write(90);
        gasBahayaAktif = true;
      }

      String msg = "GAS_PPM:" + String(ppm, 2);
      serialComm.println(msg);
    } else {
      gasStatus = "Aman";
      if (gasBahayaAktif) {
        myServo.write(0);
        gasBahayaAktif = false;
      }
    }

    // Tampilkan ke OLED
    u8g2.clearBuffer();
    u8g2.drawStr(0, 0, "Status Incubator:");
    u8g2.setCursor(0, 12); u8g2.print("Gas       : "); u8g2.print(gasStatus);
    u8g2.setCursor(0, 24); u8g2.print("Suhu      : "); u8g2.print(tempStatus);
    u8g2.setCursor(0, 36); u8g2.print("Kelembapan: "); u8g2.print(humStatus);
    u8g2.setCursor(0, 48); u8g2.print("Kecerahan : "); u8g2.print(luxStatus);
    u8g2.sendBuffer();

  } else {
    // Saat sistem OFF
    u8g2.clearBuffer();
    u8g2.drawStr(0, 10, "System OFF. Press BTN");
    u8g2.sendBuffer();
  }

  delay(500);
}

void toggleSystem() {
  static unsigned long lastPress = 0;
  unsigned long now = millis();
  if (now - lastPress > 200) {
    systemOn = !systemOn;
    Serial.println(systemOn ? "System ON" : "System OFF");

    if (!systemOn) {
      myServo.write(0);
      gasBahayaAktif = false;
    } else {
      // Cek koneksi UART saat nyala
      u8g2.clearBuffer();
      u8g2.drawStr(0, 10, "Cek koneksi UART...");
      u8g2.sendBuffer();

      serialComm.println("UART_TEST");
      uartConnected = false;

      unsigned long startTime = millis();
      while (millis() - startTime < 3000) {
        if (serialComm.available()) {
          String msg = serialComm.readStringUntil('\n');
          if (msg.length() > 0) {
            uartConnected = true;
            break;
          }
        }
      }

      u8g2.clearBuffer();
      if (uartConnected) {
        u8g2.drawStr(0, 10, "UART CONNECTED!");
      } else {
        u8g2.drawStr(0, 10, "UART NOT CONNECTED");
        u8g2.drawStr(0, 30, "Check Wiring!");
      }
      u8g2.sendBuffer();
      delay(2000);
    }

    lastPress = now;
  }
}

6. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Gambar 23. Rangkaian Skematik Smart Egg Incubator




Gambar 24. Rangkaian Fisik Smart Egg Incubator



PRINSIP KERJA:

Pada rangkaian demo project bernama "Smart Egg incubator", dimana akan melakukan monitoring dan kontrol sistem dengan komunikasi UART dari 2 mikrokontroler Raspberry Pi Pico dan STM32F103C8.


- Komponen dan kondisi Node STM32F103C8T6 (Software: Arduino IDE)

1. Gas sensor Mq-2 : Memberi ambang batas nilai ppm di 120ppm, jika melebihi itu, buzzer pada raspberry akan aktif. Pada OLED di STM32 akan memberikan notifikasi "terdapat gas berbahaya". Sementara pada OLED di Raspberry akan memberikan data nilai PPM di baris ketiga-nya. Dan juga memberikan kontrol pada servo motor, dimana melakukan pergeseran lengan nya sebesar

Jadi pada node ini: 

Input Sensor Gas Mq-2,
Output berupa motor servo dan OLED


- Sensor dan Output pada Raspberry Pi pico (software: Thonny IDE)

1. LDR photoresistor sensor: Mengindikasikan bahwa tingkat kecerahan pada incubator terpenuhi (set default = 200lux). Jika tingkat kecerahan incubator kurang, maka memberikan data pada OLED di Raspberry memberikan data nilai LUX nya, lalu pada LED nya akan menambahkan kecerahannya seiring kebutuhan lux.

2. DHT11 Sensor: Mendeteksi tingkatan suhu incubator (32-39 derajat celcius). Lalu untuk kelembapan berada pada 0-20%, jika di luar itu maka akan tampilkan pada OLED STM32 berupa "Suhu terlalu rendah/suhu terlalu tinggi" lalu pada OLED raspberry akan menuunjukkan data berapa suhu dan kelembapan yang terukur. Dan ketika suhu terlalu rendah atau terlalu tinggi maka akan menggerakkan servo agar ventilasi terbuka dengan menggeser lengannya 90 derajat searah jarum jam (dari 0 derajat ke 270 derajat)

Jadi pada node ini terdiri dari: 

Input: Sensor DHT11, Sensor LDR,
Output: Buzzer, LED-Kuning, dann OLED


7. Video Simulasi[Kembali]

Video Simulasi Rangkaian Smart Egg Incubator

Datasheet Raspberry Pi Pico RP2040 [Download]
Datasheet STM32F103C8T6 [Download]
Datasheet Sensor Gas MQ-2 [Download]
Datasheet LDR photoresistor [Download]
Datasheet LED [Download]
Datasheet Buzzer [Download]
Datasheet OLED 1306 [Download]
Datasheet Motor Servo SG90 [Download]
Datasheet Resistor [Download]
Datasheet Push Button [Download]
Datasheet Adaptor [Download]
Download Html [Download]
Download Video [Download]
Download Skematik [Download]
Download Program Raspberry Pi Pico [Download]
Download Program STM32F103C8 [Download]










Tidak ada komentar:

Posting Komentar

LAPORAN AKHIR DEMO PROJECT PRAKTIKUM Up & Uc

[KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Komponen 4. Landasan Teori 5. Flowchart dan ...