Laporan Akhir 1

 




PERCOBAAN 1
Led RGB, Buzzer, Touch Sensor, & PIR 

1. Prosedur[Kembali]

    1. Buat rangkaian dipapan rangkaian sesuai dengan percobaan yang dilakukan pada modul.
    2. Buat program di STM32Cube.
    3. Connect STM32 dengan laptop
    4. Jalankan program
    5. Selesai.

2. Hardware dan Diagram Blok[Kembali]

Hardware :

  • STM32
  • Sensor PIR




  • LED RGB



  • Resistor

  • Buzzer


  • Touch sensor



Diagram Blok





3. Rangkaian Simulasi[Kembali]






Prinsip kerjanya ialah:

Sensor PIR sebagai input pertama akan memberikan masukan berupa sinyal digital antara 1 dan 0. Saat mendeteksi gerakan dari objek yang memancarkan cahaya inframerah, maka sinyal yang dikirim adalah 1, jika tidak ada gerakan tersebut, maka sinyal yang dikirim adalah 0. Sinyal ini akan diterima oleh STM32, lalu digunakan untuk membuat pengkondisian sesuai perintah program. Sesuai kondisi target, jika sinyal yang diterima adalah 1 (oleh sensor PIR saja), maka LED dengan warna merah dan buzzer akan aktif. Sensor touch sebagai input kedua akan memberikan sinyal digital pula, sinyal 1 jika disentuh atau didekati oleh kulit manusia. Ini akan membuat LED berwarna hijau dan buzzer aktif (jika hanya touch sensor saja yang mengirimkan sinyal 1). Jika kedua input memberikan sinyal 1, maka LED berwarna jingga dan buzzer akan aktif. Selain kondisi yan telah disebutkan di ats, maka semua LED dan buzzer akan nonaktif. LED menyala dengan menerima tegangan antara pin GPIO dan GND, resistor berguna membatasi arus yang mengalir.

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;

    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(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

5. Video Simulasi[Kembali]



6. Analisa[Kembali]



7. Download File[Kembali]

Listing Program [Download]
Video Simulasi [Download]  
















Tidak ada komentar:

Posting Komentar