- Pahami terlebih dahulu kondisi yang akan digunakan
- Buka web Wokwi
- Persiapkan alat dan bahan
- Buat rangkaian sesuai dengan kondisi dan modul
- Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi
- Jalankan simulasi rangkaian.
- Proses selesai
2. Hardware dan Diagram Blok[Kembali]
1. STM32 NUCLEO-G474RE
STM32 NUCLEO-G474RE adalah papan pengembangan (development board) berbasis mikrokontroler STM32 yang dirancang oleh STMicroelectronics untuk memudahkan proses pembelajaran, prototyping, dan pengembangan sistem embedded.
Secara spesifik, board ini menggunakan mikrokontroler STM32G474RE, yang termasuk dalam keluarga STM32 seri G4. Mikrokontroler ini berbasis inti ARM Cortex-M4 dengan kemampuan pemrosesan yang cukup tinggi serta dilengkapi dengan fitur DSP (Digital Signal Processing) dan FPU (Floating Point Unit), sehingga sangat cocok untuk aplikasi yang membutuhkan perhitungan matematis cepat seperti kontrol motor, sistem tenaga, dan pengolahan sinyal.
Float switch adalah sensor level cairan yang digunakan untuk mendeteksi ketinggian permukaan cairan (seperti air, minyak, atau bahan cair lainnya) di dalam suatu tangki atau wadah.
Secara prinsip kerja, float switch menggunakan pelampung (float) yang akan naik dan turun mengikuti permukaan cairan. Ketika cairan naik, pelampung ikut naik hingga mencapai titik tertentu dan akan mengaktifkan saklar di dalamnya (biasanya berupa reed switch atau mekanisme kontak). Sebaliknya, ketika cairan turun, pelampung juga turun dan saklar akan kembali ke kondisi semula. Perubahan posisi ini menghasilkan sinyal listrik berupa kondisi ON (HIGH) atau OFF (LOW) yang dapat dibaca oleh mikrokontroler.
Flame sensor adalah sensor yang digunakan untuk mendeteksi adanya nyala api (flame) berdasarkan radiasi cahaya yang dipancarkan oleh api, terutama pada spektrum inframerah (infrared) dan sebagian cahaya tampak.
Secara prinsip kerja, flame sensor memiliki komponen utama berupa fotodioda atau fototransistor yang peka terhadap panjang gelombang tertentu (biasanya sekitar 760–1100 nm). Ketika tidak ada api, sensor akan menghasilkan sinyal rendah (LOW). Namun, ketika terdapat nyala api di dekatnya, radiasi cahaya dari api akan diterima oleh sensor sehingga menghasilkan sinyal tinggi (HIGH). Perubahan sinyal ini kemudian dapat dibaca oleh mikrokontroler untuk menentukan apakah ada kondisi kebakaran atau tidak.
4. Relay
Relay adalah komponen elektromekanik yang berfungsi sebagai saklar (switch) yang dikendalikan secara listrik, sehingga memungkinkan suatu rangkaian dengan tegangan atau arus kecil untuk mengontrol rangkaian lain yang memiliki tegangan atau arus lebih besar.
Secara prinsip kerja, relay terdiri dari kumparan (coil), inti besi, dan kontak saklar (NO/NC). Ketika arus listrik dialirkan ke kumparan, akan terbentuk medan magnet yang menarik kontak saklar sehingga terjadi perubahan posisi. Kontak yang awalnya terbuka (Normally Open/NO) akan menjadi tertutup, sedangkan kontak yang awalnya tertutup (Normally Closed/NC) akan terbuka. Ketika arus pada kumparan dihentikan, medan magnet hilang dan kontak kembali ke posisi semula.
Push button adalah komponen input berupa saklar mekanis yang bekerja ketika ditekan (push) oleh pengguna untuk menghubungkan atau memutuskan aliran listrik dalam suatu rangkaian.
Secara prinsip kerja, push button memiliki dua kondisi utama, yaitu Normally Open (NO) dan Normally Closed (NC). Pada tipe Normally Open, dalam kondisi tidak ditekan rangkaian berada dalam keadaan terbuka (tidak mengalirkan arus), dan ketika tombol ditekan, rangkaian menjadi tertutup sehingga arus dapat mengalir. Sebaliknya, pada tipe Normally Closed, rangkaian dalam kondisi normal tertutup dan akan terbuka saat tombol ditekan.
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Prinsip Kerja :
4. Flowchart dan Listing Program[Kembali]
#include "main.h"
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
#define TOUCH_PIN GPIO_PIN_1
#define PIR_PIN GPIO_PIN_2
#define LED_PIN GPIO_PIN_0
#define BUZZER_PIN GPIO_PIN_1
#define TOUCH_PORT GPIOA
#define PIR_PORT GPIOA
#define LED_PORT GPIOB
#define BUZZER_PORT GPIOB
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* Baca status sensor PIR dan Touch */
uint8_t pirState = HAL_GPIO_ReadPin(PIR_PORT, PIR_PIN);
uint8_t touchState = HAL_GPIO_ReadPin(TOUCH_PORT, TOUCH_PIN);
/* Logika: jika kedua sensor tidak aktif (LOW), LED & Buzzer mati */
if (pirState == GPIO_PIN_RESET && touchState == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET); // LED mati
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET); // Buzzer mati
}
else
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET); // LED nyala
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET); // Buzzer bunyi
}
/* Debounce sederhana (optional) */
HAL_Delay(50);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* Configure HSI (Internal 8MHz) as system clock */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
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_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* Enable GPIO clocks */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* --- Konfigurasi LED (PB0) dan Buzzer (PB1) sebagai Output --- */
GPIO_InitStruct.Pin = LED_PIN | BUZZER_PIN;
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);
/* --- Konfigurasi Touch Sensor (PA1) sebagai Input --- */
GPIO_InitStruct.Pin = TOUCH_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Pull-down agar stabil saat tidak ada sinyal
HAL_GPIO_Init(TOUCH_PORT, &GPIO_InitStruct);
/* --- Konfigurasi PIR (PA2) sebagai Input --- */
GPIO_InitStruct.Pin = PIR_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Pull-down agar stabil
HAL_GPIO_Init(PIR_PORT, &GPIO_InitStruct);
/* Set initial state: LED mati, Buzzer mati */
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
}
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* User can add his own implementation to report the error */
while(1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
/* User can add his own implementation */
}
#endif
Buatlah rangkaian seperti pada gambar percobaan 4 dengan kondisi ketika tangki penuh terdeteksi oleh float switch tanpa adanya api, maka pompa mati dan LED indikator tetap mati.
Download Rangkaian Simulasi [Klik Disini]
No comments:
Post a Comment