- Menyiapkan alat dan bahan.
- Merangkai komponen pada breadboard sesuai dengan gambar rangkaian percobaan.
- Menghubungkan masing masing pin input output.
- Mengunggah program menggunakan ST-LINK ke mikrokontroler.
- Jalankan Rangkaian
2. Hardware dan Diagram Blok[Kembali]
- ST-LINK
- STM32F103C8 (BLUEPILL)
- IR Transmitter
- IR Receiver
- Touch sensor
- Buzzer
- LED
- Resistor 220 OHM
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Rangkaian Alarm Perimeter Pintu bekerja dengan memanfaatkan dua sensor sebagai input, yaitu sensor infrared (IR) dan sensor sentuh (touch), yang kemudian diproses oleh mikrokontroler untuk mengendalikan keluaran berupa LED dan buzzer. Sensor infrared digunakan untuk mendeteksi keberadaan objek di depan pintu. Apabila tidak ada objek yang terdeteksi, maka sensor IR akan memberikan sinyal logika rendah (LOW). Sementara itu, sensor touch akan memberikan sinyal logika tinggi (HIGH) ketika terjadi sentuhan.
Mikrokontroler secara terus-menerus membaca kondisi dari kedua sensor tersebut. Ketika sensor IR dalam kondisi tidak mendeteksi objek (LOW) dan pada saat yang sama sensor touch mendeteksi adanya sentuhan (HIGH), maka mikrokontroler akan mengaktifkan output. Akibatnya, LED akan menyala sebagai indikator visual, dan buzzer akan berbunyi sebagai tanda peringatan atau alarm.
Dengan demikian, prinsip kerja rangkaian ini adalah mengombinasikan dua kondisi, yaitu tidak adanya objek di depan sensor infrared dan adanya sentuhan pada sensor touch, untuk mengaktifkan sistem alarm. Jika salah satu kondisi tidak terpenuhi, maka LED dan buzzer tidak akan aktif.
4. Flowchart dan Listing Program[Kembali]
Flowchart :
Listing Program :
#include "main.h"
void SystemClock_Config(void);
void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{GPIO_PinState flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN);
GPIO_PinState float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN);
/* ===== LOGIKA ALARM (FLAME SENSOR) ===== */
// Jika api terdeteksi, LED dan Buzzer menyala
if (flame_state == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
}
else
{
// Sebaliknya: Api tidak ada, LED dan Buzzer mati
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
}
/* ===== LOGIKA POMPA (FLOAT SENSOR) ===== */
// Jika float terdeteksi (tangki penuh), pompa MATI
if (float_state == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
}
else
{
// Sebaliknya: Float tidak terdeteksi (tangki kosong), pompa HIDUP
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
}
HAL_Delay(100);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* Voltage scaling */
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
/* HSI Oscillator */
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;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Clock configuration */
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;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/* INPUT: Flame & Float sensor */
GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* OUTPUT: LED, Buzzer, Relay */
GPIO_InitStruct.Pin = LED_PIN | BUZZER_PIN | RELAY_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* Relay default ON (pompa hidup) */
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
HAL_GPIO_TogglePin(LED_PORT, LED_PIN);
HAL_Delay(200);
}
}
-
Buatlah rangkaian seperti pada gambar percobaan 3 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan sensor Touch mendeteksi sentuhan, maka LED akan menyala
- Download File Rangkaian (klik disini)
- Download Datasheet Touch Sensor (klik disini)
- Download Datasheet Infrared Sensor (klik disini)
- Download Datasheet Resistor (klik disini)
- Download Datasheet LED (klik disini)
- Download Datasheet Buzzer (klik disini)
Tidak ada komentar:
Posting Komentar