Laporan Akhir 1






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.

2. Hardware dan Diagram Blok [kembali]



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

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. Kondisi [kembali]

Kondisi ketika PIR dan Touch sensor mendeteksi LED RGB akan menampilkan warna merah dan buzzer berbunyi, ketika Touch mendeteksi sentuhan maka LED RGB akan menampilkan warna hijau dan buzzer berbunyi,

6. Video Simulasi [kembali]




7. Download file [kembali]

Rangkaian Simulasi Klik Disini

Video Demo Klik Disini


Komentar

Postingan populer dari blog ini

Tugas Besar Line Follower

Approximation Hybrid Equivalent Circuit