PROJECT M4

1. Judul Rancangan [Kembali]

SMART EARLY WARNING SYSTEM KONDISI LINGKUNGAN KANDANG AYAM AKIBAT CUACA EKSTREM BERBASIS STM32 BLUEPILL

2. Tujuan Rancangan [Kembali]

1. Merancang dan mengimplementasikan Smart Early Warning System berbasis mikrokontroler STM32F103C8T6 BluePill untuk memantau kondisi lingkungan kandang ayam secara real-time sebagai upaya mitigasi dampak cuaca ekstrem terhadap kesehatan dan produktivitas ternak.

2. Mengintegrasikan beberapa sensor lingkungan yang terdiri dari Rain Sensor YL-83 untuk mendeteksi kondisi hujan, Sensor DS18B20 untuk mengukur suhu lingkungan kandang, dan Sensor MQ-135 untuk memantau kualitas udara serta konsentrasi gas yang berpotensi membahayakan ayam ke dalam satu sistem pemantauan terpadu.

3. Menerapkan sistem pengolahan data sensor pada STM32 BluePill untuk menganalisis perubahan parameter lingkungan kandang dan menentukan tingkat kondisi lingkungan berdasarkan kategori aman, waspada, dan bahaya akibat pengaruh cuaca ekstrem.

4. Menampilkan informasi kondisi lingkungan kandang secara langsung melalui LCD 16×2 dengan modul I2C sehingga peternak dapat memantau nilai suhu, kualitas udara, dan status cuaca secara mudah dan cepat.

5. Memberikan peringatan dini yang responsif melalui layar Indicator sebagai penanda tingkat kondisi lingkungan serta Buzzer 5V sebagai alarm ketika parameter lingkungan melebihi batas aman yang telah ditentukan.

6. Meningkatkan efektivitas pemantauan kondisi kandang ayam dan mempercepat tindakan penanganan oleh peternak melalui sistem peringatan dini otomatis guna mengurangi risiko stres, gangguan kesehatan, dan kematian ayam akibat perubahan cuaca ekstrem.

3. Daftar Alat & Komponen [Kembali]

1.STM32F103C8T6




2.Rain Sensor YL-83



3.Sensor MQ-135





4.Sensor DS18B20


5.LCD 16x2 dengan Modul I2C

6.Buzzer 5V



7.Software Pendukung(STM32CubeIDE)


8. Voltage Regulator LM2596

9. ST-LINK V2

10. Relay

4. Landasan Teori + Grafik Respon Sensor [Kembali]

4.1 Sistem Peringatan Dini (Early Warning System)

Early Warning System (EWS) merupakan suatu sistem yang dirancang untuk mendeteksi kondisi berbahaya secara dini dan memberikan informasi atau peringatan kepada pengguna agar tindakan pencegahan dapat segera dilakukan. Sistem ini umumnya memanfaatkan sensor untuk memantau parameter tertentu secara real-time, kemudian mengolah data tersebut untuk menghasilkan notifikasi apabila terjadi kondisi yang melebihi batas aman.

Dalam bidang peternakan, sistem peringatan dini berperan penting dalam menjaga kondisi lingkungan kandang agar tetap berada pada kondisi optimal. Dengan adanya sistem ini, peternak dapat mengetahui perubahan suhu, kelembaban, curah hujan, maupun kualitas udara secara cepat sehingga risiko kerugian akibat kematian ternak dapat diminimalkan.

4.2 Cuaca Hidrometeorologi dan Dampaknya terhadap Peternakan Ayam

Cuaca hidrometeorologi merupakan kondisi cuaca yang berkaitan dengan unsur meteorologi dan hidrologi seperti hujan, kelembaban udara, suhu, serta angin. Fenomena cuaca ekstrem seperti hujan lebat dan peningkatan kelembaban udara dapat memberikan dampak negatif terhadap kesehatan ayam.

Suhu lingkungan yang terlalu tinggi dapat menyebabkan heat stress yang mengakibatkan penurunan konsumsi pakan, gangguan pertumbuhan, serta penurunan produktivitas ayam. Selain itu, kelembaban yang tinggi dapat meningkatkan pertumbuhan mikroorganisme penyebab penyakit dan mempercepat pembentukan gas amonia dari kotoran ayam. Oleh karena itu, pemantauan kondisi lingkungan kandang secara terus-menerus menjadi sangat penting untuk menjaga kesehatan ternak.

4.3 Mikrokontroler STM32F103C8T6 (Blue Pill)

STM32F103C8T6 atau yang dikenal sebagai Blue Pill merupakan mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini memiliki kecepatan hingga 72 MHz, memori Flash sebesar 64 KB, serta berbagai fitur komunikasi seperti UART, SPI, I2C, PWM, dan ADC.

STM32 Blue Pill dipilih sebagai pusat kendali sistem karena memiliki kemampuan pemrosesan yang baik, konsumsi daya yang rendah, serta mendukung integrasi berbagai sensor dan aktuator. Dalam sistem ini, STM32 bertugas membaca data sensor, mengolah data, menentukan status kondisi kandang, serta mengendalikan LCD, LED, dan buzzer.

4.4 Sensor DS18B20

Sensor DS18B20 adalah sensor suhu digital yang digunakan untuk mengukur temperatur lingkungan secara akurat dan mengubah hasil pengukurannya menjadi data digital. Sensor ini memiliki rentang pengukuran suhu dari -55°C hingga 125°C dengan tingkat akurasi sekitar ±0,5°C pada rentang suhu tertentu. DS18B20 menggunakan protokol komunikasi One-Wire sehingga hanya memerlukan satu jalur data untuk berkomunikasi dengan mikrokontroler, termasuk STM32 Blue Pill. Karena kemudahan penggunaan, ketahanan terhadap gangguan sinyal, dan kemampuan memberikan data suhu secara langsung dalam bentuk digital, sensor ini banyak digunakan pada sistem monitoring dan pengendalian suhu, termasuk pada sistem Early Warning System (EWS) kandang ayam.

Pada sistem Early Warning System (EWS) kandang ayam berbasis STM32 Blue Pill, sensor DS18B20 bekerja dengan mendeteksi suhu udara di dalam kandang secara terus-menerus. Perubahan suhu yang terdeteksi akan diproses oleh rangkaian internal sensor dan dikonversi menjadi data digital. Selanjutnya, data suhu tersebut dikirimkan ke mikrokontroler STM32 Blue Pill melalui komunikasi One-Wire untuk diolah dan dibandingkan dengan nilai batas suhu yang telah ditentukan. Apabila suhu kandang masih berada dalam rentang normal, sistem hanya melakukan pemantauan secara berkala. Namun, jika suhu meningkat atau menurun secara signifikan akibat cuaca ekstrem, STM32 akan mengaktifkan sistem peringatan, seperti buzzer, tampilan informasi pada LCD, atau pengiriman notifikasi ke pengguna. Dengan demikian, sensor DS18B20 berperan penting dalam menyediakan informasi suhu yang akurat sebagai dasar pengambilan keputusan pada sistem peringatan dini kondisi lingkungan kandang ayam.


Grafik ini menunjukkan seberapa besar penyimpangan (error) pembacaan sensor dibandingkan dengan suhu aslinya di dunia nyata.

  • Sumbu X (Bawah): Menunjukkan rentang suhu aktual dari 0°C hingga 70°C.

  • Sumbu Y (Kiri): Menunjukkan tingkat kesalahan pembacaan dalam derajat Celcius (-0.5°C hingga +0.5°C).

  • Kurva MEAN ERROR: Ini adalah rata-rata kesalahan pembacaan sensor. Terlihat bahwa secara umum, sensor membaca sedikit lebih rendah dari suhu aslinya (berada di area minus, sekitar -0.15°C hingga -0.2°C).

  • Kurva +3s dan -3s ERROR: Ini adalah rentang standar deviasi yang menunjukkan batas toleransi maksimal. Artinya, 99,7% sensor yang diproduksi pabrik akan memiliki nilai error yang tidak akan keluar dari batas garis atas (+3s) dan garis bawah (-3s) ini.

Analisis Kurva untuk EWS Kandang Ayam

Fokus utama EWS Anda berada pada suhu kritis batas bawah (< 18°C) dan batas atas (> 30°C). Mari kita lihat area tersebut pada grafik:

  • Pada rentang suhu 10°C hingga 40°C (yang mencakup suhu operasional kandang ayam Anda), garis error sangat stabil dan datar.

  • Penyimpangan maksimal pembacaan pada suhu 30°C hanya berkisar antara +0.05°C hingga -0.4°C.

  • Kesimpulannya: Sensor ini sangat akurat pada suhu operasional peternakan unggas. Kesalahan pembacaan kurang dari setengah derajat Celcius tidak akan memberikan dampak negatif yang signifikan pada algoritma mitigasi heat stress Anda.

4.5 Sensor Hujan (Rain Sensor)

Rain Sensor merupakan sensor yang digunakan untuk mendeteksi keberadaan air hujan pada permukaannya. Sensor ini bekerja berdasarkan perubahan resistansi atau konduktivitas listrik akibat adanya tetesan air.

Dalam sistem yang dirancang, Rain Sensor berfungsi untuk mendeteksi intensitas hujan di sekitar kandang ayam. Informasi ini digunakan sebagai indikator awal potensi peningkatan kelembaban lingkungan, genangan air, maupun risiko banjir yang dapat mengganggu kenyamanan dan kesehatan ternak.

4.6 Sensor Gas MQ-135

MQ-135 merupakan sensor gas yang mampu mendeteksi berbagai jenis gas seperti amonia (NH₃), karbon dioksida (CO₂), benzena, dan beberapa senyawa organik lainnya. Sensor ini menghasilkan sinyal analog yang dapat dibaca oleh ADC pada mikrokontroler.

Dalam kandang ayam, gas amonia berasal dari proses penguraian kotoran ayam. Konsentrasi amonia yang tinggi dapat menyebabkan iritasi saluran pernapasan, menurunkan produktivitas, serta meningkatkan risiko penyakit pada ayam. Oleh karena itu, pemantauan kadar amonia menjadi salah satu parameter penting dalam menjaga kualitas udara kandang.

 Typical Sensitivity Curve (Kurva Sensitivitas)

Pada Gambar 3 (Typical Sensitivity Curve) ditunjukkan hubungan antara konsentrasi gas (ppm) dengan rasio resistansi sensor terhadap resistansi referensi (Rs/Ro).

Keterangan:

  • Rs = resistansi sensor saat mendeteksi gas.
  • Ro = resistansi sensor pada kondisi referensi.

Grafik menunjukkan bahwa semakin tinggi konsentrasi gas, nilai Rs/Ro semakin kecil.

Untuk gas amonia (NH₃), kurva memiliki kecenderungan menurun yang berarti:

  • Konsentrasi NH₃ meningkat
  • Resistansi sensor menurun
  • Tegangan output meningkat
  • Nilai ADC meningkat

Karakteristik ini menunjukkan bahwa MQ-135 memiliki sensitivitas yang baik terhadap perubahan konsentrasi amonia dalam rentang puluhan hingga ribuan ppm.

Interpretasi untuk Proyek

Pada kandang ayam:

  • Kotoran ayam menghasilkan gas NH₃.
  • Semakin banyak akumulasi kotoran dan kelembaban tinggi, kadar NH₃ meningkat.
  • Sensor akan menghasilkan perubahan tegangan yang dapat digunakan sebagai indikator kualitas udara.
Typical Temperature and Humidity Characteristics

Pada Gambar diperlihatkan pengaruh suhu dan kelembaban terhadap nilai Rs/Ro.

Terdapat tiga kondisi kelembaban:

  • 30% RH
  • 60% RH
  • 85% RH

Grafik menunjukkan bahwa:

  • Ketika suhu meningkat, nilai Rs/Ro cenderung menurun.
  • Pada kelembaban yang lebih tinggi, respons sensor menjadi lebih besar.

Artinya, pembacaan MQ-135 dipengaruhi oleh kondisi lingkungan.

Interpretasi

Pada kandang ayam:

  • Saat hujan, kelembaban meningkat.
  • Nilai pembacaan sensor dapat berubah meskipun konsentrasi NH₃ tetap.
  • Oleh karena itu, data MQ-135 sebaiknya dianalisis bersamaan dengan kondisi suhu dan cuaca.
Sensitivity Curve (Output Voltage vs Concentration)

Pada Gambar 5 ditunjukkan hubungan antara konsentrasi gas dan tegangan keluaran sensor.

Grafik memperlihatkan bahwa:

  • Pada konsentrasi rendah, kenaikan tegangan berlangsung cepat.
  • Pada konsentrasi tinggi, kenaikan tegangan mulai melandai.

Karakteristik ini menunjukkan hubungan non-linear antara konsentrasi gas dan tegangan keluaran.

Analisis

Semakin tinggi kadar amonia:

  • Tegangan output meningkat.
  • Nilai ADC meningkat.
  • Namun kenaikannya tidak berbentuk garis lurus.

Karena itu diperlukan proses kalibrasi apabila ingin mengonversi ADC menjadi satuan ppm secara akurat.

Response and Resume Characteristics

Pada Gambar 6 diperlihatkan respons sensor ketika dimasukkan ke lingkungan yang mengandung gas target dan ketika gas tersebut dihilangkan.

Grafik menunjukkan:

Fase Respons

Ketika sensor terkena gas:

  • Tegangan keluaran meningkat dengan cepat.
  • Sensor mendeteksi keberadaan gas dalam beberapa detik.
Fase Recovery (Resume)

Ketika gas dihilangkan:

  • Tegangan keluaran kembali turun secara bertahap.
  • Sensor membutuhkan waktu tertentu untuk kembali ke kondisi awal.

Karakteristik ini menunjukkan bahwa MQ-135 memiliki kemampuan mendeteksi perubahan kualitas udara secara real-time.

Interpretasi

Dalam sistem kandang ayam:

  • Ketika kadar amonia meningkat, sensor segera memberikan respons.
  • Setelah ventilasi membaik dan kadar amonia turun, pembacaan sensor juga kembali normal.
Long-Term Stability

Grafik menunjukkan bahwa tegangan keluaran sensor relatif stabil selama periode pengujian yang panjang dengan fluktuasi yang kecil.

Hal ini menunjukkan bahwa:

  • Sensor memiliki kestabilan yang baik.
  • Dapat digunakan untuk monitoring kontinu.
  • Tidak mengalami perubahan karakteristik yang signifikan dalam jangka panjang.

4.7 LCD I2C 16×2

LCD I2C 16×2 merupakan perangkat keluaran (output device) yang digunakan untuk menampilkan informasi dalam bentuk karakter. Modul I2C memungkinkan komunikasi hanya menggunakan dua jalur data yaitu SDA (Serial Data) dan SCL (Serial Clock), sehingga penggunaan pin mikrokontroler menjadi lebih efisien.

Pada sistem ini, LCD digunakan untuk menampilkan data suhu, kelembaban, status hujan, kadar gas amonia, serta tingkat bahaya yang terdeteksi secara real-time.

4.8 Buzzer

Buzzer merupakan komponen elektronika yang berfungsi menghasilkan suara sebagai indikator peringatan. Buzzer sering digunakan pada sistem alarm karena mampu memberikan notifikasi secara langsung kepada pengguna.

Dalam sistem ini, buzzer akan aktif ketika kondisi lingkungan kandang berada pada kategori waspada atau bahaya sehingga peternak dapat segera melakukan tindakan penanganan.

4.9 Relay

Relay merupakan komponen elektromekanis yang berfungsi sebagai sakelar yang dikendalikan oleh sinyal listrik. Relay terdiri atas kumparan (coil), inti besi, dan kontak sakelar yang dapat berubah posisi ketika kumparan dialiri arus listrik. Komponen ini memungkinkan mikrokontroler mengendalikan beban dengan tegangan atau arus yang lebih besar tanpa terhubung langsung ke beban tersebut. Pada sistem Early Warning System (EWS) kandang ayam berbasis STM32 Blue Pill, relay digunakan untuk mengaktifkan atau menonaktifkan perangkat seperti kipas, alarm, maupun lampu secara otomatis berdasarkan kondisi lingkungan yang terdeteksi oleh sensor.

Relay bekerja ketika mikrokontroler STM32 Blue Pill mengirimkan sinyal ke kumparan relay. Arus yang mengalir pada kumparan akan menghasilkan medan magnet yang menarik kontak sakelar sehingga posisi kontak berubah dari terbuka menjadi tertutup atau sebaliknya. Perubahan kontak ini akan menghubungkan atau memutus aliran listrik ke perangkat yang dikendalikan sesuai kondisi yang telah diprogram pada sistem EWS.

4.10 Voltage Regulator LM2596

IC LM2596 adalah sirkuit terpadu (Integrated Circuit) penurun tegangan searah (DC) berjenis switching regulator. Secara teoretis, komponen ini mengadopsi topologi Buck Converter yang memanfaatkan hukum kekekalan energi serta sifat reaktif dari induktor dan kapasitor. Berbeda dengan regulator linear tradisional yang membuang sisa kelebihan tegangan menjadi energi panas yang sia-sia, LM2596 beroperasi jauh lebih efisien. Teori utamanya bertumpu pada penggunaan saklar elektronik berkecepatan tinggi untuk mencacah arus listrik menjadi pulsa-pulsa diskrit, sehingga proses konversi daya terhindar dari kehilangan energi termal yang besar dan sangat aman untuk menyuplai perangkat mikrokontroler.

Prinsip kerja internal cip ini mengandalkan teknik Pulse Width Modulation (PWM) dan sistem umpan balik tertutup (closed-loop feedback). Sebuah transistor di dalam IC bertindak sebagai saklar yang membuka dan menutup aliran listrik secara konstan dengan frekuensi 150 kHz. Saat saklar menyala (ON), induktor eksternal menyerap energi listrik menjadi medan magnet, dan saat mati (OFF), medan magnet tersebut runtuh untuk mendorong arus ke sirkuit keluaran yang kemudian diratakan oleh kapasitor. Untuk memastikan tegangan selalu stabil (misalnya 5V), jalur feedback pada IC terus memantau tegangan akhir. Jika tegangan menurun karena beban alat bertambah, IC akan otomatis memperlama durasi ON (memperlebar pulsa PWM) untuk menambah daya. Sebaliknya, jika tegangan melonjak, durasi ON dipersingkat, sehingga suplai listrik selalu konstan setiap saat.

Grafik Load Transient Response (seperti yang terdapat pada dokumen datasheet LM2596 ) pada dasarnya menjelaskan bagaimana kestabilan tegangan keluaran (output voltage) perangkat saat menerima perubahan beban arus listrik secara mendadak.

Berikut adalah penjelasan mengenai komponen grafik tersebut:

  • Respons Tegangan (Output Voltage): Ini adalah kurva yang menunjukkan reaksi tegangan saat beban berubah. Ketika terjadi lonjakan atau penurunan beban secara tiba-tiba (transient), tegangan keluaran akan mengalami sedikit penyimpangan (overshoot atau undershoot), namun sistem feedback pada LM2596 akan bekerja cepat untuk mengembalikan tegangan ke level normal yang stabil.

  • Perubahan Beban (Load Pulse): Grafik ini biasanya memetakan lonjakan arus, misalnya dari 500 mA ke 2A. Garis ini menunjukkan "kejutan" yang diberikan kepada regulator untuk menguji seberapa cepat cip bereaksi terhadap perubahan kebutuhan daya.

  • Tujuan Grafik: Penjelasan utama dari grafik ini adalah untuk menunjukkan kualitas regulasi beban (load regulation). Semakin cepat tegangan kembali stabil (waktu pemulihan singkat) dan semakin kecil penyimpangan tegangannya, maka semakin baik performa regulator tersebut dalam menjaga kestabilan daya bagi komponen elektronik sensitif seperti mikrokontroler.

Singkatnya, grafik tersebut membuktikan bahwa meskipun ada perubahan beban yang drastis, LM2596 mampu melakukan koreksi otomatis dengan cepat untuk menjaga tegangan keluaran tetap solid.

4.11 ST-LINK V2

ST-Link V2 adalah perangkat pemrograman dan debugging yang dirancang untuk mikrokontroler STM32. Perangkat ini berfungsi sebagai penghubung antara komputer dan mikrokontroler melalui antarmuka Serial Wire Debug (SWD). ST-Link V2 memungkinkan proses pengunduhan program ke dalam memori mikrokontroler serta mendukung proses debugging untuk memantau dan menganalisis jalannya program secara langsung. Dalam pengembangan sistem EWS kandang ayam berbasis STM32 Blue Pill, ST-Link V2 digunakan untuk mengunggah program yang mengatur pembacaan sensor, pengolahan data, dan pengendalian perangkat keluaran sehingga sistem dapat beroperasi sesuai rancangan.

ST-Link V2 bekerja dengan menghubungkan komputer ke STM32 Blue Pill melalui antarmuka SWD (Serial Wire Debug). Program yang dibuat menggunakan perangkat lunak pengembangan akan dikirim dari komputer ke memori mikrokontroler melalui ST-Link V2. Selain itu, perangkat ini juga memungkinkan proses debugging sehingga kesalahan pada program dapat dideteksi dan diperbaiki dengan lebih mudah sebelum sistem EWS dioperasikan.

5. Flowchart Sistem [Kembali]



6. Listing Program [Kembali]
#include "main.h"

#include <stdio.h>              // Untuk fungsi sprintf


/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include "liquidcrystal_i2c.h"   // Library LCD I2C

#include "ds18b20.h"             // Library Sensor Suhu DS18B20

/* USER CODE END Includes */


/* Private variables ---------------------------------------------------------*/

ADC_HandleTypeDef hadc1;

I2C_HandleTypeDef hi2c1;


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_ADC1_Init(void);

static void MX_I2C1_Init(void);


/* USER CODE BEGIN PFP */

uint16_t Baca_ADC_Channel(uint32_t channel);

/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

uint16_t adc_hujan = 0;

uint16_t adc_gas   = 0;


uint32_t intensitas_persen = 0;

uint32_t intensitas_koma   = 0;


uint32_t gas_persen = 0;

uint32_t gas_koma   = 0;


float suhu = 0.0f;  // Dibaca dari DS18B20


char buffer_lcd[16];


uint32_t timestamp_lcd  = 0;

uint32_t timestamp_suhu = 0;  // Timer khusus untuk pembacaan DS18B20


/*

 * mode_tampilan:

 * 0 = Gas

 * 1 = Hujan

 * 2 = Suhu

 */

uint8_t mode_tampilan = 0;

/* USER CODE END 0 */


/**

  * @brief  The application entry point.

  * @retval int

  */

int main(void)

{

  HAL_Init();

  SystemClock_Config();


  MX_GPIO_Init();

  MX_ADC1_Init();

  MX_I2C1_Init();


  /* USER CODE BEGIN 2 */

  // 1. Kalibrasi ADC internal

  HAL_ADCEx_Calibration_Start(&hadc1);


  // 2. Inisialisasi LCD I2C (16x2)

  HD44780_Init(2);

  HD44780_Clear();


  // Tampilkan pesan pembuka

  HD44780_SetCursor(0, 0);

  HD44780_PrintStr("  SYSTEM READY  ");

  HAL_Delay(1000);

  HD44780_Clear();


  // 3. Baca suhu pertama kali sebelum loop

  //    (DS18B20_GetTemp() sudah include delay konversi ~800ms di dalamnya)

  suhu = DS18B20_GetTemp();


  // Inisialisasi timer

  timestamp_lcd  = HAL_GetTick();

  timestamp_suhu = HAL_GetTick();

  /* USER CODE END 2 */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

      // ==========================

      // BACA HUJAN (PA0 / CH0)

      // ==========================

      adc_hujan = Baca_ADC_Channel(ADC_CHANNEL_0);


      uint32_t balik = 4095 - adc_hujan;

      uint32_t hasil = (balik * 1000) / 4095;


      intensitas_persen = hasil / 10;

      intensitas_koma   = hasil % 10;



      // ==========================

      // BACA GAS (PA2 / CH2)

      // ==========================

      adc_gas = Baca_ADC_Channel(ADC_CHANNEL_2);


      hasil       = (adc_gas * 1000) / 4095;

      gas_persen  = hasil / 10;

      gas_koma    = hasil % 10;



      // ==========================

      // BACA DS18B20 (PA4 / 1-Wire)

      // Hanya setiap 2000ms agar tidak memblokir loop terlalu lama

      // DS18B20_GetTemp() membutuhkan ~800ms konversi di dalamnya

      // ==========================

      if (HAL_GetTick() - timestamp_suhu >= 2000)

      {

          timestamp_suhu = HAL_GetTick();

          suhu = DS18B20_GetTemp();

      }



      // ==========================

      // OUTPUT PB9

      // (Alarm gas/hujan)

      // ==========================

      if (intensitas_persen > 30 || gas_persen > 50)

      {

          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);

      }

      else

      {

          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);

      }



      // ==========================

      // OUTPUT PB1

      // (Alarm suhu)

      // ==========================

      if (suhu > 30.0f)

      {

          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

      }

      else

      {

          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

      }


      // ==========================

      // OUTPUT PB12

      // (Relay aktif jika suhu < 18°C)

      // ==========================

      if (suhu < 18.0f)

      {

          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);

      }

      else

      {

          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);

      }


      // ==========================

      // GANTI TAMPILAN (setiap 5 detik)

      // ==========================

      if (HAL_GetTick() - timestamp_lcd > 5000)

      {

          timestamp_lcd = HAL_GetTick();

          mode_tampilan++;


          if (mode_tampilan > 2)

          {

              mode_tampilan = 0;

          }

          HD44780_Clear();

      }


      // ==========================

      // MODE GAS (mode_tampilan == 0)

      // ==========================

      if (mode_tampilan == 0)

      {

          HD44780_SetCursor(0, 0);

          sprintf(buffer_lcd, "Gas:%lu.%lu%%", gas_persen, gas_koma);

          HD44780_PrintStr(buffer_lcd);


          HD44780_SetCursor(0, 1);

          if (gas_persen > 50)

          {

              HD44780_PrintStr("Kond:GAS   ");

          }

          else

          {

              HD44780_PrintStr("Kond:SEGAR ");

          }

      }


      // ==========================

      // MODE HUJAN (mode_tampilan == 1)

      // ==========================

      else if (mode_tampilan == 1)

      {

          HD44780_SetCursor(0, 0);

          sprintf(buffer_lcd, "Hjn:%lu.%lu%%", intensitas_persen, intensitas_koma);

          HD44780_PrintStr(buffer_lcd);


          HD44780_SetCursor(0, 1);

          if (intensitas_persen > 50)

          {

              HD44780_PrintStr("Kond:BAHAYA");

          }

          else

          {

              HD44780_PrintStr("Kond:AMAN  ");

          }

      }


      // ==========================

      // MODE SUHU (mode_tampilan == 2)

      // ==========================

      else

      {

          uint32_t suhu_utama = (uint32_t)suhu;

          uint32_t suhu_koma  = ((uint32_t)(suhu * 10)) % 10;


          HD44780_SetCursor(0, 0);

          sprintf(buffer_lcd, "Suhu:%lu.%luC  ", suhu_utama, suhu_koma);

          HD44780_PrintStr(buffer_lcd);


          HD44780_SetCursor(0, 1);

          if (suhu > 30.0f)

          {

              HD44780_PrintStr("Kond:PANAS  ");

          }

          else if (suhu < 18.0f)

          {

              HD44780_PrintStr("Kond:DINGIN ");

          }

          else

          {

              HD44780_PrintStr("Kond:NORMAL ");

          }

      }


      HAL_Delay(300);

  }

  /* USER CODE END 3 */

}


/* USER CODE BEGIN 4 */

/**

  * @brief Membaca ADC secara dinamis berdasarkan channel yang dipilih.

  *        Channel yang digunakan: CH0 (hujan/PA0), CH2 (gas/PA2)

  *        PA4 TIDAK lagi digunakan sebagai ADC — sudah dipakai DS18B20 (1-Wire)

  */

uint16_t Baca_ADC_Channel(uint32_t channel)

{

    ADC_ChannelConfTypeDef sConfig = {0};

    uint16_t nilai_raw = 0;


    sConfig.Channel      = channel;

    sConfig.Rank         = ADC_REGULAR_RANK_1;

    sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;


    if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)

    {

        Error_Handler();

    }


    HAL_ADC_Start(&hadc1);


    if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)

    {

        nilai_raw = HAL_ADC_GetValue(&hadc1);

    }


    HAL_ADC_Stop(&hadc1);


    return nilai_raw;

}

/* USER CODE END 4 */


/**

  * @brief ADC1 Initialization Function

  *        Hanya CH0 dan CH2 yang digunakan (PA4 sudah dipakai DS18B20)

  */

static void MX_ADC1_Init(void)

{

    hadc1.Instance                   = ADC1;

    hadc1.Init.ScanConvMode          = ADC_SCAN_DISABLE;   // Channel dipilih saat runtime

    hadc1.Init.ContinuousConvMode    = DISABLE;

    hadc1.Init.DiscontinuousConvMode = DISABLE;

    hadc1.Init.ExternalTrigConv      = ADC_SOFTWARE_START;

    hadc1.Init.DataAlign             = ADC_DATAALIGN_RIGHT;

    hadc1.Init.NbrOfConversion       = 1;


    if (HAL_ADC_Init(&hadc1) != HAL_OK)

    {

        Error_Handler();

    }

    // Tidak perlu konfigurasi channel di sini karena Baca_ADC_Channel() menanganinya

}


/**

  * @brief I2C1 Initialization Function

  */

static void MX_I2C1_Init(void)

{

    hi2c1.Instance             = I2C1;

    hi2c1.Init.ClockSpeed      = 100000;

    hi2c1.Init.DutyCycle       = I2C_DUTYCYCLE_2;

    hi2c1.Init.OwnAddress1     = 0;

    hi2c1.Init.AddressingMode  = I2C_ADDRESSINGMODE_7BIT;

    hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;

    hi2c1.Init.OwnAddress2     = 0;

    hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;

    hi2c1.Init.NoStretchMode   = I2C_NOSTRETCH_DISABLE;


    if (HAL_I2C_Init(&hi2c1) != HAL_OK)

    {

        Error_Handler();

    }

}


/**

  * @brief GPIO Initialization Function

  *

  *  PA0  → ADC CH0 (Sensor Hujan FC-37)      [Analog, diinit HAL_ADC_MspInit]

  *  PA2  → ADC CH2 (Sensor Gas MQ)           [Analog, diinit HAL_ADC_MspInit]

  *  PA4  → DS18B20 1-Wire                    [Output Open-Drain, diinit library DS18B20]

  *  PB1  → Output alarm suhu (suhu > 30°C)

  *  PB9  → Output alarm gas/hujan

  *  PB12 → Relay aktif jika suhu < 18°C

  *  PB6  → I2C1_SCL

  *  PB7  → I2C1_SDA

  */

static void MX_GPIO_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStruct = {0};


    __HAL_RCC_GPIOD_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();


    // Set kondisi awal output ke LOW

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9 | GPIO_PIN_1 | GPIO_PIN_12, GPIO_PIN_RESET);


    // PB9, PB1, dan PB12 sebagai Output Push-Pull

    GPIO_InitStruct.Pin   = GPIO_PIN_9 | GPIO_PIN_1 | GPIO_PIN_12;

    GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;

    GPIO_InitStruct.Pull  = GPIO_NOPULL;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


    // PA4 → DS18B20 1-Wire (Output Open-Drain)

    // Library DS18B20 akan mengatur mode ini secara dinamis (output/input)

    // Inisialisasi awal sebagai Open-Drain, HIGH (idle state 1-Wire)

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);


    GPIO_InitStruct.Pin   = GPIO_PIN_4;

    GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_OD;

    GPIO_InitStruct.Pull  = GPIO_NOPULL;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


/**

  * @brief System Clock Configuration

  */

void SystemClock_Config(void)

{

    RCC_OscInitTypeDef RCC_OscInitStruct = {0};

    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};


    RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSE;

    RCC_OscInitStruct.HSEState            = RCC_HSE_ON;

    RCC_OscInitStruct.HSEPredivValue      = RCC_HSE_PREDIV_DIV1;

    RCC_OscInitStruct.HSIState            = RCC_HSI_ON;

    RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;

    RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSE;

    RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLL_MUL9;

    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

    {

        Error_Handler();

    }


    RCC_ClkInitStruct.ClockType      = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK

                                     | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;

    RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK;

    RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;

    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;

    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)

    {

        Error_Handler();

    }


    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;

    PeriphClkInit.AdcClockSelection    = RCC_ADCPCLK2_DIV6;

    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

    {

        Error_Handler();

    }

}


void Error_Handler(void)

{

    __disable_irq();

    while (1) {}

}

 7. Screenshot Rangkaian Simulasi Sistem [Kembali]



8. Foto Rangkaian Prototype [Kembali]


9. Video Penjelasan Prinsip Kerja Rangkaian Sistem (Masing-masing Praktikan) [Kembali]




Smart Early Warning System Kondisi Lingkungan Kandang Ayam berbasis STM32 Bluepill bekerja dengan memanfaatkan beberapa sensor untuk memantau kondisi lingkungan kandang secara otomatis dan real-time. Sensor LM35 digunakan untuk mengukur suhu udara di dalam kandang, Rain Sensor digunakan untuk mendeteksi intensitas hujan di sekitar kandang, sedangkan sensor MQ-135 digunakan untuk mendeteksi kadar gas amonia yang dihasilkan dari kotoran ayam. Seluruh data sensor akan dibaca dan diproses oleh mikrokontroler STM32F103C8 Bluepill sebagai pusat pengendali sistem.

Ketika sistem diaktifkan, STM32 akan melakukan inisialisasi seluruh komponen yang terhubung, kemudian membaca data dari setiap sensor secara berkala. Sensor LM35 menghasilkan sinyal analog yang merepresentasikan suhu lingkungan, sedangkan Rain Sensor dan MQ-135 menghasilkan data yang digunakan untuk mengetahui kondisi hujan dan kadar gas amonia di dalam kandang. Data yang diperoleh selanjutnya diolah oleh mikrokontroler untuk menentukan kondisi lingkungan kandang berdasarkan batas parameter yang telah ditetapkan.

Hasil pengukuran sensor ditampilkan pada LCD 16×2 sehingga peternak dapat memantau kondisi kandang secara langsung. Pada kondisi suhu rendah, yaitu kurang dari 18°C, sistem akan mengaktifkan lampu DC sebagai sumber pemanas untuk membantu menjaga suhu kandang tetap berada pada rentang yang sesuai bagi ayam. Sebaliknya, apabila suhu kandang melebihi 30°C, STM32 akan mengaktifkan kipas DC melalui relay untuk meningkatkan sirkulasi udara dan membantu menurunkan suhu di dalam kandang.

Selain memantau suhu, sistem juga melakukan pengawasan terhadap kualitas udara menggunakan sensor MQ-135. Apabila kadar gas amonia yang terdeteksi melebihi 40%, maka kondisi kandang dikategorikan dalam keadaan berbahaya. Pada kondisi tersebut, buzzer akan diaktifkan sebagai alarm peringatan agar peternak segera melakukan tindakan penanganan untuk mengurangi konsentrasi gas amonia dan menjaga kesehatan ternak.

Rain Sensor digunakan untuk mendeteksi intensitas hujan yang berpotensi memengaruhi kondisi lingkungan kandang. Jika nilai pembacaan sensor hujan melebihi 40%, sistem akan menganggap bahwa hujan yang terjadi cukup tinggi dan berpotensi meningkatkan kelembaban lingkungan kandang. Oleh karena itu, buzzer akan diaktifkan sebagai peringatan dini kepada peternak agar dapat melakukan langkah antisipasi yang diperlukan.

Secara keseluruhan, sistem bekerja dengan membaca data suhu, hujan, dan kadar gas amonia secara terus-menerus, kemudian memproses data tersebut menggunakan STM32 Bluepill untuk mengendalikan lampu DC, kipas DC, dan buzzer sesuai kondisi yang terdeteksi. Dengan adanya sistem ini, peternak dapat memperoleh informasi kondisi kandang secara real-time serta menerima peringatan dini ketika terjadi kondisi yang berpotensi membahayakan kesehatan dan produktivitas ayam.


10. Kesimpulan dan Saran [Kembali]

Kesimpulan

  1. Pemantauan Lingkungan Terintegrasi: Smart Early Warning System berbasis STM32 Blue Pill ini mampu memantau kondisi kandang ayam secara otomatis dan real-time dengan memanfaatkan tiga sensor utama: DS18B20 untuk suhu, sensor hujan (rain sensor), dan sensor gas amonia (MQ-135).

  2. Akurasi Data: Integrasi ketiga sensor tersebut memberikan data lingkungan yang presisi, yang menjadi landasan utama dalam mendeteksi kondisi kandang yang berpotensi membahayakan kesehatan serta produktivitas ayam.

  3. Pusat Pengolahan Data: Mikrokontroler STM32F103C8 (Blue Pill) berperan sebagai otak sistem yang memproses seluruh input sensor dan mengendalikan perangkat keluaran secara terkoordinasi dan responsif.

  4. Media Informasi dan Peringatan: Sistem menggunakan LCD I2C 16×2 sebagai media informasi visual untuk menampilkan data kondisi kandang, serta menggunakan buzzer sebagai penanda peringatan suara saat terdeteksi kondisi lingkungan yang tidak normal.

  5. Klasifikasi Kondisi: Sistem memiliki kapabilitas untuk mengklasifikasikan kondisi lingkungan ke dalam tiga kategori (normal, waspada, dan bahaya) berdasarkan parameter suhu, intensitas hujan, serta kadar amonia yang telah ditetapkan.

  6. Mitigasi Risiko: Implementasi sistem ini membantu peternak dalam melakukan tindakan pencegahan atau mitigasi lebih cepat, sehingga dapat meminimalisir risiko stres, penyakit, penurunan produktivitas, hingga kematian ayam yang disebabkan oleh perubahan cuaca ekstrem maupun penurunan kualitas udara dalam kandang.

Saran

  1. Menambahkan modul komunikasi berbasis IoT seperti ESP8266, ESP32, atau LoRa agar data kondisi kandang dapat dipantau dari jarak jauh melalui smartphone maupun komputer.
  2. Menambahkan sensor pendukung lainnya, seperti sensor ketinggian air, sensor kecepatan angin, atau sensor intensitas cahaya untuk meningkatkan kemampuan monitoring lingkungan kandang.
  3. Mengembangkan sistem dengan fitur penyimpanan data (data logging) sehingga riwayat kondisi lingkungan kandang dapat dianalisis untuk mendukung pengambilan keputusan peternakan.
  4. Menambahkan aktuator otomatis, seperti kipas ventilasi, exhaust fan, atau sistem penyemprot air (mist system) yang dapat bekerja secara otomatis ketika kondisi kandang berada pada status waspada atau bahaya.
  5. Melakukan kalibrasi sensor secara berkala untuk menjaga akurasi pengukuran suhu, kelembaban, curah hujan, dan kadar gas amonia.
  6. Melakukan pengujian sistem pada kondisi kandang yang sebenarnya dalam jangka waktu yang lebih panjang agar dapat diketahui tingkat keandalan dan efektivitas sistem dalam menghadapi berbagai kondisi cuaca hidrometeorologi.
  7. Mengintegrasikan sistem dengan platform cloud sehingga data dapat diakses secara lebih luas serta mendukung penerapan konsep smart farming pada sektor peternakan ayam.

11. Download File (File Proteus, Datasheet, dan Library Komponen) [Kembali]

  1. Datasheet STM 32F103C8T6 [klik disini]
  2. Datasheet Rain Sensor YL-83 [klik disini]
  3. Datasheet LCD 16x2 dengan Modul I2C [klik disini]
  4. Datasheet Buzzer [klik disini]
  5. Datasheet Sensor DS18B20 [klik disini]
  6. Datasheet Sensor MQ-135 [klik disini]
  7. Datasheet Voltage Regulator LM2596 [klik disini]
  8. Datasheet Relay [klik disini]







Tidak ada komentar:

Posting Komentar

                                            BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA 2024   Nama : Muhammad Fadhil Dwi Kesuma NIM : 2...