Percobaan1 Kondisi 6
Mikrokontroler STM32 diprogram menggunakan software STM32CubeIDE. Langkah awal dimulai dengan membuat project baru sesuai tipe STM32 yang digunakan pada rangkaian. Setelah itu, dilakukan pengaturan pin pada menu Pinout, di mana pin yang terhubung ke sensor Touch dan sensor PIR diset sebagai input, sedangkan pin yang terhubung ke LED diset sebagai output.
Setelah konfigurasi pin selesai, program ditulis pada bagian main.c. Di dalam program, STM32 dibuat untuk terus membaca kondisi dari sensor Touch dan PIR. Ketika sensor Touch dalam keadaan aktif (disentuh), sistem mulai memperhatikan sensor PIR. Jika pada saat itu PIR mendeteksi adanya gerakan, maka STM32 akan memberikan sinyal ke LED sehingga LED menyala berkedip. Kedipan LED ini dihasilkan dari perintah ON dan OFF yang diberikan secara berulang dengan jeda waktu tertentu menggunakan fungsi delay.
Jika tidak ada gerakan yang terdeteksi oleh PIR, maka LED akan dimatikan. Begitu juga jika sensor Touch tidak aktif, maka sistem tidak akan merespon PIR dan LED tetap mati. Jadi, LED hanya akan berkedip jika kedua kondisi terpenuhi, yaitu Touch aktif dan PIR mendeteksi gerakan.
Setelah program selesai dibuat, dilakukan proses build untuk menghasilkan file program. File ini kemudian dimasukkan ke dalam mikrokontroler pada Proteus melalui bagian program file. Saat simulasi dijalankan, rangkaian akan bekerja sesuai dengan program yang sudah dibuat di STM32CubeIDE.
Dengan cara ini, STM32CubeIDE digunakan untuk membuat logika programnya, sedangkan Proteus digunakan untuk melihat bagaimana rangkaian bekerja secara keseluruhan.
2. Hardware dan Diagram Blok[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Prinsip kerja rangkaian pada gambar tersebut adalah sistem kontrol yang menggunakan sensor sentuh (Touch) dan sensor gerak (PIR) sebagai masukan, serta mikrokontroler STM32 sebagai pengolah utama untuk mengendalikan LED sebagai keluaran, tanpa melibatkan buzzer sebagai bagian aktif dari sistem.
Pada kondisi awal, sistem berada dalam keadaan siaga, di mana mikrokontroler terus membaca kondisi dari sensor Touch dan sensor PIR. Pada حالت ini LED dalam keadaan mati. Ketika sensor Touch disentuh, sensor akan memberikan sinyal logika HIGH ke mikrokontroler, yang menandakan bahwa sistem diaktifkan dan siap untuk mendeteksi gerakan. Jika sensor Touch tidak aktif, maka sistem tetap berada dalam kondisi standby dan tidak akan merespon sinyal dari PIR.
Setelah sensor Touch aktif, mikrokontroler mulai memperhatikan sinyal dari sensor PIR. Ketika PIR mendeteksi adanya gerakan, sensor akan mengirimkan sinyal HIGH ke mikrokontroler. Dengan terpenuhinya kedua kondisi tersebut, yaitu Touch aktif dan PIR mendeteksi gerakan, mikrokontroler akan mengeksekusi perintah untuk menghidupkan LED dalam kondisi berkedip.
Proses LED berkedip terjadi karena mikrokontroler memberikan sinyal logika HIGH dan LOW secara bergantian dengan jeda waktu tertentu, sehingga LED tampak menyala dan mati secara periodik. Kondisi berkedip ini akan terus berlangsung selama sensor PIR masih mendeteksi gerakan dan sensor Touch tetap dalam keadaan aktif.
Apabila tidak ada lagi gerakan yang terdeteksi oleh PIR, maka mikrokontroler akan menghentikan proses kedip dan mematikan LED. Begitu juga jika sensor Touch dinonaktifkan, sistem akan kembali ke kondisi awal dan LED akan tetap mati meskipun PIR mendeteksi gerakan.
Dengan demikian, buzzer pada rangkaian ini tidak berfungsi atau tidak diaktifkan, sehingga seluruh respon sistem hanya ditunjukkan melalui LED yang berkedip. Sistem bekerja berdasarkan logika bahwa LED hanya akan aktif jika sensor Touch aktif dan PIR mendeteksi gerakan secara bersamaan
4. Flowchart dan Listing Program[Kembali]
#include "main.h"
/* Function Prototype */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// Baca sensor
GPIO_PinState touch = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // Touch
GPIO_PinState pir = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); // PIR
// Jika Touch DAN PIR aktif
if (touch == GPIO_PIN_SET && pir == GPIO_PIN_SET)
{
// LED berkedip
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
HAL_Delay(500);
}
else
{
// LED mati
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
}
/* ================= CLOCK CONFIG ================= */
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_Osc = {0};
RCC_ClkInitTypeDef RCC_Clk = {0};
RCC_Osc.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_Osc.HSIState = RCC_HSI_ON;
RCC_Osc.PLL.PLLState = RCC_PLL_NONE;
HAL_RCC_OscConfig(&RCC_Osc);
RCC_Clk.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK;
RCC_Clk.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_Clk.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_Clk.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_Clk.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_Clk, FLASH_LATENCY_0);
}
/* ================= GPIO CONFIG ================= */
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Output LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// Input Sensor
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi sensor Touch aktif dan PIR mendeteksi gerakan serta LED hidup berkedip
Komentar
Posting Komentar