Percobaan 2
Led RGB, Buzzer, Touch Sensor, & PIR
- Membuat rangkaian sesuai dengan percobaan 2
- Masukkan input dan output dari rangkaian di software STM32.
- Setelah input output selesai disesuaikan pada software STM32 sesuai pada modul, ubah menjadi code
- Code yang diperoleh dari software STM32 dapat diaplikasikan pada software Proteus untuk diterapkan pada STM32f103C8 di dalam Proteus
- Selesai.
2. Hardware dan Diagram Blok[Kembali]
Hardware:
6. PIR Sensor
7. Buzzer
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Rangkaian Simulasi:
Prinsip Kerja:
Rangkaian ini terdiri dari sensor PIR untuk mendeteksi gerakan, sensor sentuh untuk mengenali sentuhan, mikrokontroler STM32F103C8 sebagai pengendali utama, serta LED RGB sebagai indikator output. Sensor inframerah bekerja dengan mendeteksi keberadaan objek atau pergerakan, lalu mengirimkan sinyal HIGH pada pin keluarannya saat ada gerakan terdeteksi. Sementara itu, sensor sentuh akan memberikan sinyal HIGH ketika permukaannya disentuh. Mikrokontroler membaca status dari kedua sensor ini untuk menentukan respon yang sesuai.
Selanjutnya, konfigurasi dilakukan menggunakan software STM32 CubeIDE dengan membuka proyek uji coba yang telah dibuat sebelumnya. Pada tampilan Pinout & Configuration, dilakukan pengaturan pin mikrokontroler agar sesuai dengan rangkaian yang telah dirancang di Proteus. Kemudian, mode debug diatur ke Serial Wire, dan bagian RCC dikonfigurasi menggunakan Crystal/Ceramic Resonator. Setelah konfigurasi selesai, proyek disimpan, dan halaman pemrograman akan terbuka secara otomatis dengan kode dasar yang dihasilkan dari pengaturan sebelumnya. Pemrograman dimulai dengan menyertakan #include "main.h"
, yang merupakan file utama proyek. Kode tambahan kemudian ditulis dalam fungsi while
menggunakan logika if-else untuk membaca status sensor. Jika sensor PIR mendeteksi objek dan sensor sentuh menerima sentuhan, maka mikrokontroler akan mengaktifkan LED RGB dengan menyalakan warna merah, hijau, dan biru secara bersamaan. Setelah kode selesai dibuat, langkah berikutnya adalah mengompilasi program menjadi file .hex dan melakukan proses build. File .hex yang dihasilkan kemudian diunggah ke mikrokontroler dalam simulasi Proteus untuk menjalankan rangkaian.
Saat rangkaian dijalankan, LED akan menyala dalam warna tertentu sesuai dengan sinyal dari sensor. Jika kedua sensor memberikan sinyal HIGH secara bersamaan, LED RGB akan menyala kuning. Jika hanya sensor PIR yang mendeteksi gerakan, LED akan menyala hijau. Jika hanya sensor sentuh yang aktif, LED akan berwarna merah. Namun, jika tidak ada objek yang terdeteksi oleh kedua sensor, LED juga akan menyala merah.
4. Flowchart dan Listing Program[Kembali]
Flowchart:
Listing Program:
#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin);
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin,
GPIO_PIN_RESET);
if (pir_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
if (touch_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
HAL_Delay(100);
}
}
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;
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
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_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin|BUZZER_Pin,
GPIO_PIN_RESET);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = RED_Pin|GREEN_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(GPIOA, &GPIO_InitStruct);
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);
GPIO_InitStruct.Pin = PIR_Pin|TOUCH_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
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
Tidak ada komentar:
Posting Komentar