LA1 M1



Percobaan 8
  Led RGB, Buzzer, Touch Sensor, & PIR

1. Prosedur[Kembali]

  1.  Rangkailah sistem percobaan sesuai dengan diagram yang ada, dengan input berupa sensor PIR dan sensor sentuh, serta output berupa LED RGB dan buzzer. Sambungkan LED, sensor sentuh, dan sensor PIR menggunakan kabel jumper ke pin yang sesuai dengan pengaturan program.
  2. Buatlah program dengan konfigurasi pin input dan output berdasarkan pin GP STM32 yang telah dirangkai. Selanjutnya, buatlah program untuk mengendalikan output LED RGB sesuai dengan kondisi yang telah ditentukan.
  3. Setelah program selesai, unggah ke STM32 dan amati perubahan yang terjadi ketika sensor PIR mendeteksi gerakan dan ketika sensor sentuh diberikan sentuhan.

A. Hardware





B. Blok Diagram





3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

A. Rangkaian Simulasi



B. Prinsip Kerja

Rangkaian ini menggunakan sensor PIR dan sensor sentuh sebagai input, serta LED RGB sebagai output. Pertama, saat sensor PIR mendeteksi gerakan dan sensor sentuh mendeteksi sentuhan, LED RGB akan menyala dengan warna biru dan cyan, aktif selama 3 detik, lalu mati selama 3 detik secara berulang. Kedua, ketika sensor sentuh mendeteksi sentuhan, LED RGB akan menyala dengan warna hijau, aktif selama 3 detik, lalu mati selama 3 detik secara berulang.

Ketiga, ketika sensor sentuh mendeteksi sentuhan, LED RGB akan menyala dengan warna merah dan Buzzer akan berbunyi dan saat Touch sensor mendeteksi sentuhan LED RGB akan berwarna hijau dan buzzer berbunyi. 

4. Flowchart dan Listing Program[Kembali]





#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);

        // Turn off all output signals initially
        HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);

        // PIR sensor detected motion
        if (pir_status == GPIO_PIN_SET)
        {
            HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
            HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
        }

        // Touch sensor activated
        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); // Small delay to debounce sensor readings
    }
}

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_GPIOD_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();

    // Initialize output pins
    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;
    HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct);

    // Initialize input pins
    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


5. Video Demo[Kembali]





6. Analisa[Kembali]

1. Analisa bagaimana pengaruh penggunaan/pemilihan GPIO pada STM32 dan Raspberry Pi Pico

    Jawab : Pemilihan GPIO pada STM32 memiliki banyak pilihan karena STM32 memiliki PIN                             GPIO yang bervariasi. Pada STM32 pemilihan memerlukan konfigurasi agar terhindar                             dari kesalahan di mana konfigurasi ini dapat menentukan fungsi dari pin-pin tersebut                             yang mana dapat dijadikan sebagai input, output PWM ADC dan lain-lainnya. Dengan                             adanya konfigurasi pin ini dapat memberikan efisiensi dalam penggunaan pin GPIO nya.                         GPIO pada STM32 memberikan keuntungan fleksibilitas dan kinerja yang baiik.

2. Analisa bagaimana STM32 dan Raspberry Pi Pico menerima inputan dan menghasilkan output

    Jawab : STM32 inputan dapat diterima melalui GPIO yang dikonfigurasi sebagai input mode.                             pengguna dapat membaca status pin menggunakan HAL_GPIO_Readpin() dan                                         melakukan konfigurasi pada STM32cube di mana pin-pin Di inisialisasikan sebagai                                 inputan. STM32 mendukung interupt melalui EXTI yang memungkinkan sistem                                     menangani input dengan respon cepat tanpa harus menggunakan polling terus-menerus                             untuk output dapat dihasilkan dengan mengatur GPIO pada STM32cube sebagai output                         dan melalui library HAL yakni HAL_GPIO_Writepin(). STM32 juga mendukung PWM                         untuk mengendalikan perangkat

3. Analisa bagaimana program deklarasi pin I/O pada STM32 dan Raspberry Pi Pico

    Jawab : STM32 memerlukan STM32cube untuk melakukan konfigurasinya. Untuk                                               mengaktifkan PIN pada STM32 diperlukan pengaktifan clock GPIO dimana setelah                               PIN aktif maka PIN tersebut dapat  deklarasikan melalui program hal liberi sebagai                               input output maupun PW

4. Analisa bagaimana program dalam analisa metode pendeteksian input pada STM32 dan Raspberry Pi Pico

    Jawab : Metode yang digunakan dalam program pendeteksi input pada STM32 yaitu polling                                 yang mana program membaca status input secara terus-menerus dalam loop while yang                         digunakan untuk membaca status sensor pir dan touch sensor. Pada metode polling                                 program membaca status sensor yang nanti akan menjalankan program sesuai status                                 input di mana pada percobaan yang dilakukan pada pir akan menghidupkan LED merah                         dan bazar dan saat presenter aktif akan menghidupkan LED hijau dan bazar program                             dilanjutkan dengan adanya delay 100 ms sebelum kembali membaca status input secara                         loop

5. Analisa Fungsi HAL_Delay(100) pada STM32 dan utime.sleep_ms(1) pada Raspberry Pi Pico

    Jawab : HAL_Delay(100) memiliki fungsi untuk melakukan penundaan eksekusi program                                 selama 100 ms di mana saat mengalami delay program akan berada dalam Loop                                     blocking yang mana CPU tidak dapat melakukan tugas lain sampai delay selesai



7. Download File[Kembali]

Rangkaian Simulasi Klik Disini

Video Demo Klik Disini

DataSheet STM32 Klik Disini 

DataSheet Sensor PIR Klik Disini 

DataSheet Sensor Touch Klik Disini 

DataSheet LED RGB Klik disini

DataSheet Resistor Klik disini

Library Sensor PIR Klik Disini

Library Sensor Touch Klik Disini