MODUL 4 PROJECT
MODUL 4 PROJECT
Rice Fields Irrigation Flood Detection and Automatic Gate Control System using STM32
1. Pendahuluan [kembali]
Untuk mengatasi permasalahan tersebut, dirancang sebuah sistem Rice Field Irrigation Flood Detection and Automatic Gate Control System Using STM32 yang mampu memantau kondisi sawah secara otomatis dan mengendalikan pintu air berdasarkan kondisi lingkungan yang terdeteksi. Sistem ini menggunakan STM32F103C8T6 Blue Pill sebagai pusat pengendali, dengan tiga sensor utama yaitu Sensor Ultrasonik HC-SR04 untuk mengukur ketinggian permukaan air, Rain Sensor HL-83 untuk mendeteksi curah hujan, dan Soil Moisture Sensor untuk mengukur tingkat kelembapan tanah.
Data dari ketiga sensor akan diproses oleh STM32 untuk menentukan kondisi lahan dan kebutuhan pengaturan irigasi. Hasil pemantauan ditampilkan pada LCD 16×2, sedangkan motor servo MG996R digunakan sebagai aktuator untuk mengontrol buka-tutup pintu air secara otomatis. Selain itu, buzzer berfungsi sebagai alarm peringatan apabila terdeteksi kondisi yang berpotensi menyebabkan banjir. Dengan adanya sistem ini, pengelolaan irigasi dapat dilakukan secara lebih efektif, efisien, dan real-time sehingga dapat membantu petani dalam menjaga kondisi lahan pertanian tetap optimal.
- Merancang sistem pendeteksi banjir dan pengendali pintu air otomatis berbasis STM32F103C8T6 Blue Pill pada area persawahan.
- Mengimplementasikan sensor Ultrasonik HC-SR04, Rain Sensor HL-83, dan Soil Moisture Sensor untuk memantau kondisi ketinggian air, curah hujan, dan kelembapan tanah secara real-time.
- Mengendalikan motor servo MG996R secara otomatis sebagai mekanisme buka-tutup pintu air berdasarkan data yang diperoleh dari sensor.
- Menampilkan informasi kondisi sawah melalui LCD 16×2 serta memberikan peringatan dini menggunakan buzzer ketika terdeteksi potensi banjir atau kondisi yang memerlukan perhatian pengguna.
3. Alat dan Bahan [kembali]
2. Breadboard
- Bahan
4. Dasar Teori [kembali]
a. STM32F103C8T6
STM32F103C8T6 adalah mikrokontroler 32-bit dari keluarga STM32F1 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini menggunakan inti ARM Cortex-M3 dengan kecepatan hingga 72 MHz, memori Flash 64 KB, dan SRAM 20 KB. STM32F103C8T6 banyak digunakan pada sistem embedded, IoT, robotika, otomasi, dan berbagai proyek elektronika karena memiliki performa tinggi serta konsumsi daya yang rendah
b. Rain Sensor HL-83
Rain Sensor HL-83 (sering juga disebut YL-83 atau FC-37) adalah sensor yang digunakan untuk mendeteksi adanya air hujan atau tetesan air pada permukaan sensor. Sensor ini bekerja berdasarkan perubahan nilai hambatan (resistansi) ketika air mengenai jalur konduktor pada pelat sensor. Nilai tersebut kemudian dikirim ke mikrokontroler untuk diproses
berikut contoh grafik respon Rain Sensor HL-83 yang menunjukkan hubungan antara intensitas hujan (%) dan nilai ADC yang dibaca oleh STM32. Pada sensor hujan tipe resistif seperti HL-83, semakin banyak air yang mengenai permukaan sensor, maka resistansi menurun sehingga nilai ADC cenderung menurun.
Grafik Respon Rain Sensor HL-83
Interpretasi grafik:
- 0–20% → tidak hujan atau hanya beberapa tetes air, nilai ADC tinggi.
- 30–60% → hujan ringan hingga sedang, nilai ADC mulai turun.
- 70–100% → hujan lebat, permukaan sensor banyak tertutup air, nilai ADC sangat rendah
c. Motor Servo
d. HC-SR04 (SONAR1)
HC-SR04 adalah sensor ultrasonik yang digunakan untuk mengukur jarak suatu objek tanpa kontak langsung. Sensor ini bekerja dengan prinsip SONAR (Sound Navigation and Ranging), yaitu memancarkan gelombang ultrasonik 40 kHz dan mengukur waktu pantul (echo) dari objek untuk menentukan jarak. Sensor ini banyak digunakan pada robotika, sistem otomatisasi, pengukur ketinggian air, dan sistem deteksi banjir.
Prinsip Kerja
- Mikrokontroler mengirim pulsa 10 μs ke pin TRIG.
- HC-SR04 memancarkan 8 gelombang ultrasonik dengan frekuensi 40 kHz.
- Gelombang dipantulkan oleh objek dan diterima kembali oleh sensor.
- Pin ECHO menghasilkan pulsa dengan durasi sesuai waktu tempuh gelombang.
- Jarak dihitung berdasarkan waktu pantul gelombang suara.
e.Soil Moisture Sensor (SOIL) 1
Soil Moisture Sensor adalah sensor yang digunakan untuk mengukur tingkat kelembapan tanah berdasarkan konduktivitas listrik antara dua probe yang ditancapkan ke dalam tanah. Sensor ini banyak digunakan pada sistem irigasi otomatis, pertanian cerdas (smart farming), dan pemantauan kondisi tanah.
Prinsip Kerja
- Saat tanah kering, hambatan listrik tinggi sehingga nilai keluaran sensor menunjukkan kelembapan rendah.
- Saat tanah basah, kandungan air meningkatkan konduktivitas listrik sehingga sensor mendeteksi kelembapan yang lebih tinggi.
- Data kelembapan kemudian dikirim ke mikrokontroler, seperti STM32F103C8T6, untuk diproses.
Berikut contoh grafik respon Soil Moisture Sensor (SOIL2) yang menunjukkan hubungan antara kelembaban tanah (%) dan nilai ADC yang dibaca STM32. Pada sensor kelembaban tanah resistif, nilai ADC biasanya menurun saat tanah semakin basah dan meningkat saat tanah semakin kering.
Grafik Respon Soil Moisture Sensor (SOIL2)
f. LCD 16x2 LM016L
LCD 16x2 LM016L adalah modul Liquid Crystal Display (LCD) yang mampu menampilkan 16 karakter pada 2 baris, sehingga total dapat menampilkan 32 karakter. LCD ini sering digunakan pada sistem mikrokontroler seperti STM32, Arduino, dan ESP32 untuk menampilkan data sensor, status sistem, menu, atau informasi lainnya.
Prinsip Kerja
LCD LM016L menerima data dari mikrokontroler melalui pin data dan pin kontrol. Data yang diterima kemudian ditampilkan dalam bentuk karakter, angka, atau simbol pada layar LCD.
g. Buzzer (BUZ1)
Buzzer adalah komponen elektronika yang berfungsi sebagai alat keluaran (output) suara untuk menghasilkan bunyi atau alarm. Buzzer sering digunakan sebagai indikator peringatan, notifikasi, atau penanda kondisi tertentu pada suatu sistem elektronik yang dikendalikan oleh mikrokontroler seperti STM32, Arduino, dan ESP32.
Prinsip Kerja
Buzzer bekerja dengan mengubah energi listrik menjadi energi suara. Ketika mikrokontroler memberikan tegangan atau sinyal PWM ke buzzer, diafragma di dalam buzzer akan bergetar dan menghasilkan bunyi.
Jenis Buzzer
- Active Buzzer
- Memiliki osilator internal.
- Cukup diberi tegangan untuk menghasilkan bunyi.
- Lebih mudah digunakan.
- Passive Buzzer
- Tidak memiliki osilator internal.
- Memerlukan sinyal PWM dari mikrokontroler untuk menghasilkan bunyi.
- Dapat menghasilkan berbagai nada atau frekuensi.
- Memiliki osilator internal.
- Cukup diberi tegangan untuk menghasilkan bunyi.
- Lebih mudah digunakan.
- Tidak memiliki osilator internal.
- Memerlukan sinyal PWM dari mikrokontroler untuk menghasilkan bunyi.
- Dapat menghasilkan berbagai nada atau frekuensi.
Spesifikasi Singkat
- Tegangan kerja: 3,3 V – 5 V
- Konsumsi arus rendah
- Menghasilkan suara pada frekuensi tertentu
- Mudah dihubungkan ke pin digital mikrokontroler
h. Adaptor 5V
Adaptor 5V adalah perangkat eksternal yang berfungsi sebagai Catu Daya (Power Supply). Tugas utamanya adalah mengubah tegangan listrik AC (arus bolak-balik) dari stopkontak dinding menjadi tegangan DC (arus searah) yang stabil, biasanya sebesar 5 Volt, untuk mengoperasikan perangkat elektronik.
i. Resistor
Resistor adalah salah satu komponen pasif paling mendasar dan umum dalam rangkaian elektronik. Komponen ini dirancang untuk menghambat atau membatasi aliran arus listrik (current) dan sekaligus menurunkan tegangan listrik.
5. Percobaan [kembali]
a) Prosedur [kembali]
- Buka Proteus
- Siapkan semua komponen rangkaian yang diperlukan
- Rangkai komponen sehingga menjadi sebuah rangkaian
- Lakukan simulasi rangkaian pada proteus
listing program :
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Sistem Monitoring Irigasi Sawah dengan LCD I2C
******************************************************************************
*/
/* USER CODE END Header */
#include "main.h"
#include "gpio.h"
#include "tim.h"
#include "adc.h"
#include "i2c.h"
#include <stdio.h>
#include <string.h>
/* ===================== PIN SENSOR ===================== */
#define RAIN_PORT GPIOA
#define RAIN_PIN GPIO_PIN_0
#define TRIG_PORT GPIOA
#define TRIG_PIN GPIO_PIN_1
#define ECHO_PORT GPIOA
#define ECHO_PIN GPIO_PIN_2
/* Soil moisture A0 masuk ke PA3 / ADC1_IN3 */
/* ===================== PIN OUTPUT ===================== */
#define BUZZER_PORT GPIOB
#define BUZZER_PIN GPIO_PIN_0
/* ===================== SETTING LCD I2C ===================== */
/*
Alamat umum LCD I2C:
0x27 atau 0x3F.
Kalau LCD tidak tampil, ganti 0x27 menjadi 0x3F.
*/
#define LCD_I2C_ADDR (0x27 << 1)
#define LCD_BACKLIGHT 0x08
#define LCD_ENABLE 0x04
#define LCD_RS 0x01
/* ===================== SETTING SISTEM ===================== */
/*
Batas ultrasonik untuk prototype pendek:
Jarak <= 5 cm = air tinggi / bahaya
Jarak > 5 cm = air rendah / aman
*/
#define WATER_LIMIT_CM 5
#define MIN_DISTANCE_CM 2
#define MAX_DISTANCE_CM 400
/*
Batas kelembapan tanah.
Karena sensor soil analog biasanya:
- Nilai besar = kering
- Nilai kecil = basah
Maka soil aktif jika nilai persen <= 60%.
*/
#define SOIL_LIMIT_PERCENT 85
/* Servo */
#define SERVO_OPEN_US 1000
#define SERVO_CLOSE_US 2000
/* Logic rain sensor */
#define RAIN_ACTIVE_STATE GPIO_PIN_RESET
/*
0 = nilai persen kecil dianggap basah.
1 = nilai persen besar dianggap basah.
Untuk hardware soil moisture analog, biasanya pakai 0.
*/
#define SOIL_WET_WHEN_PERCENT_GREATER 1
/*
1 = buzzer aktif saat PB0 HIGH.
Kalau buzzer aktif saat LOW, ubah menjadi 0.
*/
#define BUZZER_ACTIVE_HIGH 1
/* ===================== PROTOTYPE ===================== */
void SystemClock_Config(void);
void delay_us(uint16_t us);
uint32_t HCSR04_ReadDistanceCM(void);
uint32_t Soil_ReadADC(void);
uint8_t Soil_ADC_ToPercent(uint32_t adc_value);
void Servo_WriteUs(uint16_t pulse_us);
void Buzzer_On(void);
void Buzzer_Off(void);
/* LCD I2C */
void LCD_I2C_ExpanderWrite(uint8_t data);
void LCD_I2C_PulseEnable(uint8_t data);
void LCD_I2C_Send4Bit(uint8_t data);
void LCD_I2C_SendCmd(uint8_t cmd);
void LCD_I2C_SendData(uint8_t data);
void LCD_I2C_Init(void);
void LCD_I2C_Clear(void);
void LCD_I2C_SetCursor(uint8_t row, uint8_t col);
void LCD_I2C_PrintLine(uint8_t row, char *text);
/* ===================== MAIN PROGRAM ===================== */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_TIM3_Init();
MX_ADC1_Init();
MX_I2C1_Init();
HAL_TIM_Base_Start(&htim2);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
HAL_ADCEx_Calibration_Start(&hadc1);
Buzzer_Off();
Servo_WriteUs(SERVO_OPEN_US);
LCD_I2C_Init();
LCD_I2C_Clear();
LCD_I2C_PrintLine(0, "SISTEM IRIGASI");
LCD_I2C_PrintLine(1, "START...");
HAL_Delay(1000);
LCD_I2C_Clear();
while (1)
{
uint8_t rain_active = 0;
uint8_t ultrasonic_active = 0;
uint8_t soil_active = 0;
uint8_t status_bahaya = 0;
uint32_t distance_cm = 0;
uint32_t soil_adc = 0;
uint8_t soil_percent = 0;
char line1[17];
char line2[17];
/* ===================== BACA SENSOR ===================== */
rain_active = (HAL_GPIO_ReadPin(RAIN_PORT, RAIN_PIN) == RAIN_ACTIVE_STATE);
distance_cm = HCSR04_ReadDistanceCM();
soil_adc = Soil_ReadADC();
soil_percent = Soil_ADC_ToPercent(soil_adc);
/* ===================== VALIDASI JARAK ===================== */
if (distance_cm > MAX_DISTANCE_CM)
{
distance_cm = 999;
}
/* ===================== LOGIKA ULTRASONIK ===================== */
/*
Jarak makin kecil = air makin tinggi.
Jika jarak 2 cm sampai 5 cm, maka ultrasonik aktif.
Error 999 dianggap aman supaya LCD tidak stuck BAHAYA.
*/
if ((distance_cm != 999) &&
(distance_cm >= MIN_DISTANCE_CM) &&
(distance_cm <= WATER_LIMIT_CM))
{
ultrasonic_active = 1;
}
else
{
ultrasonic_active = 0;
}
/* ===================== LOGIKA SOIL MOISTURE ===================== */
#if SOIL_WET_WHEN_PERCENT_GREATER
if (soil_percent >= SOIL_LIMIT_PERCENT)
{
soil_active = 1;
}
else
{
soil_active = 0;
}
#else
if (soil_percent <= SOIL_LIMIT_PERCENT)
{
soil_active = 1;
}
else
{
soil_active = 0;
}
#endif
/* ===================== STATUS SISTEM ===================== */
if (ultrasonic_active || soil_active)
{
status_bahaya = 1;
}
else
{
status_bahaya = 0;
}
/* ===================== OUTPUT BUZZER ===================== */
/*
Buzzer hanya ON jika ultrasonik membaca air tinggi.
Jadi soil aktif tidak membuat buzzer bunyi.
*/
if (ultrasonic_active)
{
Buzzer_On();
}
else
{
Buzzer_Off();
}
/* ===================== OUTPUT SERVO ===================== */
/*
Servo menutup jika tanah terlalu basah.
*/
if (soil_active)
{
Servo_WriteUs(SERVO_CLOSE_US);
}
else
{
Servo_WriteUs(SERVO_OPEN_US);
}
/* ===================== TAMPILAN LCD ===================== */
if (status_bahaya)
{
snprintf(line1, sizeof(line1), "STATUS: BAHAYA");
}
else if (rain_active)
{
snprintf(line1, sizeof(line1), "STATUS: SIAGA");
}
else
{
snprintf(line1, sizeof(line1), "STATUS: AMAN");
}
if (distance_cm == 999)
{
snprintf(line2, sizeof(line2), "A:ERRcm K:%3d%%", soil_percent);
}
else
{
snprintf(line2, sizeof(line2), "A:%03lucm K:%3d%%", distance_cm, soil_percent);
}
LCD_I2C_PrintLine(0, line1);
LCD_I2C_PrintLine(1, line2);
HAL_Delay(200);
}
}
/* ===================== DELAY MICROSECOND ===================== */
void delay_us(uint16_t us)
{
__HAL_TIM_SET_COUNTER(&htim2, 0);
while (__HAL_TIM_GET_COUNTER(&htim2) < us);
}
/* ===================== BACA JARAK ULTRASONIK ===================== */
uint32_t HCSR04_ReadDistanceCM(void)
{
uint32_t time_us;
uint32_t timeout;
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);
delay_us(2);
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);
delay_us(10);
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);
timeout = HAL_GetTick();
while (HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_RESET)
{
if ((HAL_GetTick() - timeout) > 60)
{
return 999;
}
}
__HAL_TIM_SET_COUNTER(&htim2, 0);
timeout = HAL_GetTick();
while (HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_SET)
{
if ((HAL_GetTick() - timeout) > 60)
{
return 999;
}
}
time_us = __HAL_TIM_GET_COUNTER(&htim2);
if (time_us < 100)
{
return 999;
}
return time_us / 58;
}
/* ===================== BACA ADC SOIL MOISTURE ===================== */
uint32_t Soil_ReadADC(void)
{
uint32_t value = 0;
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
value = HAL_ADC_GetValue(&hadc1);
}
HAL_ADC_Stop(&hadc1);
return value;
}
/* ===================== KONVERSI ADC KE PERSEN ===================== */
uint8_t Soil_ADC_ToPercent(uint32_t adc_value)
{
uint32_t percent;
if (adc_value > 4095)
{
adc_value = 4095;
}
percent = (adc_value * 100) / 4095;
return (uint8_t)percent;
}
/* ===================== SERVO ===================== */
void Servo_WriteUs(uint16_t pulse_us)
{
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pulse_us);
}
/* ===================== BUZZER ===================== */
void Buzzer_On(void)
{
#if BUZZER_ACTIVE_HIGH
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
#else
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
#endif
}
void Buzzer_Off(void)
{
#if BUZZER_ACTIVE_HIGH
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
#else
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
#endif
}
/* ===================== LCD I2C 16x2 ===================== */
void LCD_I2C_ExpanderWrite(uint8_t data)
{
uint8_t data_send = data | LCD_BACKLIGHT;
HAL_I2C_Master_Transmit(&hi2c1, LCD_I2C_ADDR, &data_send, 1, 100);
}
void LCD_I2C_PulseEnable(uint8_t data)
{
LCD_I2C_ExpanderWrite(data | LCD_ENABLE);
delay_us(1);
LCD_I2C_ExpanderWrite(data & ~LCD_ENABLE);
delay_us(50);
}
void LCD_I2C_Send4Bit(uint8_t data)
{
LCD_I2C_ExpanderWrite(data);
LCD_I2C_PulseEnable(data);
}
void LCD_I2C_SendCmd(uint8_t cmd)
{
uint8_t high_nibble;
uint8_t low_nibble;
high_nibble = cmd & 0xF0;
low_nibble = (cmd << 4) & 0xF0;
LCD_I2C_Send4Bit(high_nibble);
LCD_I2C_Send4Bit(low_nibble);
HAL_Delay(2);
}
void LCD_I2C_SendData(uint8_t data)
{
uint8_t high_nibble;
uint8_t low_nibble;
high_nibble = (data & 0xF0) | LCD_RS;
low_nibble = ((data << 4) & 0xF0) | LCD_RS;
LCD_I2C_Send4Bit(high_nibble);
LCD_I2C_Send4Bit(low_nibble);
HAL_Delay(1);
}
void LCD_I2C_Init(void)
{
HAL_Delay(50);
LCD_I2C_Send4Bit(0x30);
HAL_Delay(5);
LCD_I2C_Send4Bit(0x30);
HAL_Delay(5);
LCD_I2C_Send4Bit(0x30);
HAL_Delay(1);
LCD_I2C_Send4Bit(0x20);
HAL_Delay(1);
LCD_I2C_SendCmd(0x28);
LCD_I2C_SendCmd(0x0C);
LCD_I2C_SendCmd(0x06);
LCD_I2C_SendCmd(0x01);
HAL_Delay(2);
}
void LCD_I2C_Clear(void)
{
LCD_I2C_SendCmd(0x01);
HAL_Delay(2);
}
void LCD_I2C_SetCursor(uint8_t row, uint8_t col)
{
uint8_t address;
if (row == 0)
{
address = 0x80 + col;
}
else
{
address = 0xC0 + col;
}
LCD_I2C_SendCmd(address);
}
void LCD_I2C_PrintLine(uint8_t row, char *text)
{
uint8_t i;
LCD_I2C_SetCursor(row, 0);
for (i = 0; i < 16; i++)
{
if (text[i] != '\0')
{
LCD_I2C_SendData((uint8_t)text[i]);
}
else
{
LCD_I2C_SendData(' ');
}
}
}
/* ===================== CLOCK 64 MHz ===================== */
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
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();
}
}
/* ===================== ERROR HANDLER ===================== */
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif
b) Rangkaian simulasi dan Prinsip Kerja [kembali]
Prinsip kerja :
d) Flowchart [kembali]
e) Video [kembali]
f) Kesimpulan [kembali]
Berdasarkan hasil perancangan dan pengujian sistem monitoring irigasi sawah berbasis STM32, dapat disimpulkan bahwa sistem mampu bekerja sesuai dengan fungsi yang direncanakan. Sistem berhasil mengintegrasikan sensor hujan, sensor ultrasonik HC-SR04, dan sensor soil moisture untuk melakukan monitoring kondisi lingkungan sawah secara otomatis.
Sensor ultrasonik mampu mendeteksi ketinggian air dengan membaca jarak permukaan air terhadap sensor. Ketika jarak air berada pada batas bahaya, buzzer dapat aktif sebagai alarm peringatan. Sensor soil moisture juga mampu membaca tingkat kelembapan tanah dan mengontrol pergerakan servo untuk membuka maupun menutup saluran irigasi secara otomatis berdasarkan kondisi tanah.
Selain itu, LCD I2C dapat menampilkan informasi status sistem, jarak air, dan persentase kelembapan tanah secara real-time sehingga memudahkan pengguna dalam melakukan pemantauan. Dengan adanya sistem ini, proses pengairan sawah menjadi lebih efektif, efisien, dan dapat mengurangi risiko kelebihan air maupun kekurangan air pada lahan pertanian.
Secara keseluruhan, sistem monitoring irigasi sawah berbasis STM32 ini dapat dijadikan sebagai solusi otomatisasi sederhana untuk membantu pengelolaan irigasi pada area persawahan.
Berdasarkan hasil perancangan dan pengujian sistem monitoring irigasi sawah berbasis STM32, dapat disimpulkan bahwa sistem mampu bekerja sesuai dengan fungsi yang direncanakan. Sistem berhasil mengintegrasikan sensor hujan, sensor ultrasonik HC-SR04, dan sensor soil moisture untuk melakukan monitoring kondisi lingkungan sawah secara otomatis.
Sensor ultrasonik mampu mendeteksi ketinggian air dengan membaca jarak permukaan air terhadap sensor. Ketika jarak air berada pada batas bahaya, buzzer dapat aktif sebagai alarm peringatan. Sensor soil moisture juga mampu membaca tingkat kelembapan tanah dan mengontrol pergerakan servo untuk membuka maupun menutup saluran irigasi secara otomatis berdasarkan kondisi tanah.
Selain itu, LCD I2C dapat menampilkan informasi status sistem, jarak air, dan persentase kelembapan tanah secara real-time sehingga memudahkan pengguna dalam melakukan pemantauan. Dengan adanya sistem ini, proses pengairan sawah menjadi lebih efektif, efisien, dan dapat mengurangi risiko kelebihan air maupun kekurangan air pada lahan pertanian.
Secara keseluruhan, sistem monitoring irigasi sawah berbasis STM32 ini dapat dijadikan sebagai solusi otomatisasi sederhana untuk membantu pengelolaan irigasi pada area persawahan.
- Sebaiknya Pemilihan Ide project lebih dipahami oleh keseluruhan anggota
- Sebaiknya penyampaian materi kepada mitra disampaikan dengan jelas dan lugas
- Sebaiknya anggota mengerti dan memahami prinsip kerja dari project modul 4
f) Download File [kembali]
f) Download File [kembali]



Komentar
Posting Komentar