Percobaan 3
1. Prosedur[Kembali]
1. Buat rangkaian dipapan rangkaian sesuai dengan percobaan yang dilakukan pada modul.
2. Buat program STM 32 IDE CLUB
3. Connect Rangkaian STM32 dengan ST LINK ke laptop
4. Jalankan program
5. Selesai2. Hardware dan Diagram Blok[Kembali]
Hardware :
- IR Transmitter dan IR Receiver
3. Rangkaian Simulasi[Kembali]
Percobaan ini bertujuan untuk membuat sistem alarm perimeter pintu berbasis mikrokontroler STM32F103C8 yang memanfaatkan sensor inframerah sebagai pendeteksi objek dan touch sensor sebagai pengontrol sistem. Sistem bekerja dengan memanfaatkan prinsip input–proses–output.
Pada kondisi awal, sistem dapat diaktifkan atau dinonaktifkan menggunakan touch sensor. Setiap kali touch sensor disentuh, mikrokontroler akan membaca perubahan logika dari LOW ke HIGH sebagai perintah untuk mengubah status sistem (enable atau disable). Mekanisme ini menggunakan deteksi perubahan kondisi (state change) sehingga sistem hanya merespon satu kali untuk setiap sentuhan.
Ketika sistem dalam keadaan aktif, IR transmitter akan memancarkan sinyal inframerah yang diterima oleh IR receiver. Selama tidak ada penghalang di antara keduanya, sinyal akan diterima secara normal sehingga mikrokontroler membaca kondisi input sebagai logika tertentu (misalnya LOW). Namun, ketika terdapat objek yang menghalangi jalur inframerah (misalnya pintu terbuka atau ada orang lewat), sinyal tidak sampai ke receiver sehingga terjadi perubahan logika pada input.
Perubahan kondisi tersebut akan diproses oleh mikrokontroler dan digunakan sebagai trigger untuk mengaktifkan output. Output berupa LED dan buzzer akan menyala sebagai tanda bahwa terjadi gangguan pada area yang dipantau. Sebaliknya, jika tidak ada gangguan dan sistem aktif, maka LED dan buzzer tetap dalam kondisi mati.
Jika sistem dinonaktifkan melalui touch sensor, maka meskipun terjadi gangguan pada sensor inframerah, mikrokontroler tidak akan mengaktifkan LED maupun buzzer. Dengan demikian, sistem ini dapat berfungsi sebagai alarm sederhana yang dapat dikontrol secara manual dan mampu mendeteksi keberadaan objek yang melewati area tertentu.
4. Flowchart dan Listing Program[Kembali]
#include "main.h"
uint8_t system_enable = 1;
uint8_t touch_last = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
HAL_Delay(200);
}
touch_last = touch_now;
if (system_enable)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {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_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();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
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_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
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);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif
5. Video Demo[Kembali]
Komentar
Posting Komentar