1. Prosedur [Kembali]
1. Sediakan alat dan bahan percobaan
2. Rangkailah rangkaian di breadboard
3. Download stlink. dan masukkan listing program ke aplikasi STM32 IDE
4. Hubungkan rangkaian dengan software dengan kabel stlink
5. Jalankan program
2. Hardware dan Diagram Blok [Kembali]
3. Rangkaian Simulasi [Kembali]
a. Rangkaian simulasi
b. Prinsip kerja
Prinsip kerja dimulai dari penerimaan input digital saat sensor mendeteksi perubahan lingkungan. Sensor PIR akan mengeluarkan sinyal digital HIGH (1) jika mendeteksi objek di depannya, sedangkan sensor touch mengeluarkan sinyal HIGH saat disentuh. Sinyal digital ini diterima oleh pin GPIO STM32, yang dikonfigurasi sebagai input mode. Program membaca status ini menggunakan HAL_GPIO_ReadPin(), yang mengembalikan GPIO_PIN_SET jika sensor aktif dan GPIO_PIN_RESET jika tidak.
Berdasarkan hasil pembacaan, STM32 kemudian mengatur output pada pin LED RGB. Dengan menggunakan HAL_GPIO_WritePin(), mikrokontroler mengaktifkan atau menonaktifkan masing-masing warna LED sesuai dengan kondisi sensor. Proses ini berlangsung secara cepat dan berulang karena adanya loop while(1), sehingga sistem dapat merespons perubahan sensor secara real-time dan mengatur LED sesuai dengan kondisi terbaru. Saat PIR berlogika satu dan touch berlogika nol maka outputnya adalah led berwarna biru. Saat PIR berlogika nol dan touch berlogika satu maka outputnya adalah led berwarna hijau. Saat PIR berlogika nol dan touch berlogika nol maka outputnya adalah led berwarna merah. Saat PIR berlogika satu dan touch berlogika satu maka outputnya adalah led berwarna cyan.
4. Flowchart dan Listing Program [Kembali]
a. Flowchart
b. Listing Program
#include "main.h" // Mengimpor file header utama untuk konfigurasi mikrocontroller
void SystemClock_Config(void); // Deklarasi fungsi untuk mengonfigurasi sistem clock
static void MX_GPIO_Init(void); // Deklarasi fungsi untuk inisialisasi GPIO
int main(void)
{
HAL_Init(); // Inisialisasi Hardware Abstraction Layer (HAL)
SystemClock_Config(); // Konfigurasi sistem clock
MX_GPIO_Init(); // Inisialisasi pin GPIO
while (1)
{
uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin); // Membaca status sensor IR (PB10)
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Membaca status Touch Sensor (PB6)
// LED Biru menyala jika IR aktif
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);
// LED Hijau menyala jika Touch aktif
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);
// LED Merah menyala jika tidak ada sensor yang aktif
if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // Nyalakan LED Merah
} else {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Matikan LED Merah
}
HAL_Delay(10); // Delay 10 ms untuk stabilisasi pembacaan sensor
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; // Struktur konfigurasi osilator
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // Struktur konfigurasi clock
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; // Menggunakan osilator internal HSI
RCC_OscInitStruct.HSIState = RCC_HSI_ON; // Menyalakan osilator HSI
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; // Menggunakan kalibrasi default
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Tidak menggunakan PLL
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler(); // Menjalankan error handler jika konfigurasi gagal
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0}; // Struktur konfigurasi GPIO
__HAL_RCC_GPIOD_CLK_ENABLE(); // Mengaktifkan clock untuk port GPIOD
__HAL_RCC_GPIOA_CLK_ENABLE(); // Mengaktifkan clock untuk port GPIOA
__HAL_RCC_GPIOB_CLK_ENABLE(); // Mengaktifkan clock untuk port GPIOB
/* Konfigurasi GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin, GPIO_PIN_RESET); // Matikan LED Merah dan Hijau saat awal
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET); // Matikan LED Biru saat awal
/* Konfigurasi pin GPIO untuk LED */
GPIO_InitStruct.Pin = RED_Pin|GREEN_Pin; // Pin untuk LED Merah dan Hijau
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Mode output push-pull
GPIO_InitStruct.Pull = GPIO_NOPULL; // Tanpa pull-up/pull-down
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Kecepatan rendah
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // Inisialisasi GPIOA
/* Konfigurasi pin GPIO untuk LED Biru */
GPIO_InitStruct.Pin = BLUE_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct); // Inisialisasi GPIO untuk LED Biru
/* Konfigurasi pin GPIO untuk Sensor IR dan Touch */
GPIO_InitStruct.Pin = IR_Pin|TOUCH_Pin; // Pin untuk sensor IR dan Touch
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // Mode input
GPIO_InitStruct.Pull = GPIO_NOPULL; // Tanpa pull-up/pull-down
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // Inisialisasi GPIOB
}
void Error_Handler(void)
{
__disable_irq(); // Menonaktifkan interrupt
while (1)
{
// Loop tanpa henti jika terjadi kesalahan
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
// Fungsi ini akan dipanggil jika terjadi error pada assert
}
#endif /* USE_FULL_ASSERT */
5. Video Demo [Kembali]
6. Kondisi [kembali]
Buatlah Rangkaian seperti gambar percobaan 4 dengan kondisi ketika sensor PIR mendeteksi gerakan dan sensor touch mendeteksi sentuhan maka LED RGB akan menampilkan warna Cyan7. Download File [Kembali]
Tidak ada komentar:
Posting Komentar