Tugas Pendahuluan 1


MODUL 1 PERCOBAAN 3 KONDISI 1


1. Prosedur[Kembali]

  1. Pahami terlebih dahulu kondisi yang akan digunakan
  2. Buka software Proteus 8.17
  3. Persiapkan alat dan bahan
  4. Buat rangkaian sesuai dengan kondisi dan modul
  5. Buka software STM32Cube IDE 
  6. Setelah membuka software, pilih perangkat STM32F103C8T6 
  7. Sesuaikan konfigurasi pin sesuai dengan rangkaian proteus 
  8. Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi 
  9. Konfigurasi kan program dengan software Proteus
  10. Jalankan simulasi rangkaian.  
  11. Proses selesai

2. Hardware dan Diagram Blok[Kembali]

    Hardware

    


STM32F103C8


Touch Sensor


Infrared Sensor


LED


Buzzer

Resistor

    Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi
Prinsip Kerja

1. Kondisi Awal

    Saat rangkaian dinyalakan:

  • Mikrokontroler STM32 menjalankan:
    • HAL_Init() → inisialisasi HAL library
    • SystemClock_Config() → menggunakan clock internal HSI
    • MX_GPIO_Init() → konfigurasi pin GPIO
  • Konfigurasi pin:
    • PA0 → Input (IR Sensor) dengan pull-down
    • PA1 → Input (Touch Sensor) dengan pull-down
    • PB0 & PB1 → Output (LED)
  • Kondisi awal:
    • LED dalam keadaan mati (RESET)
2. Pembacaan Sensor (Loop Utama)
    Di dalam while(1):
  • STM32 membaca kedua sensor secara terus-menerus:
    ir_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
    touch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
  • Interpretasi logika:
    • IR Sensor = LOW (0) → objek terdeteksi
    • Touch Sensor = LOW (0) → tidak disentuh 

3. Logika Pada Kondisi
    Sistem akan menyalakan LED jika kondisi berikut terpenuhi secara bersamaan:
    IR = LOW  (objek terdeteksi) dan Touch = LOW (tidak disentuh)

4.Output Sistem LED
    Jika kondisi benar:
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

  • LED pada PB0 dan PB1 → MENYALA (ON)
  • LED menyala stabil (tidak berkedip)
  •     Jika salah satu kondisi tidak terpenuhi:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); 
        LED mati

    4. Flowchart dan Listing Program[Kembali]

    Flowchart Rangkaian
    Listing Program

    >#include "main.h"

     

    // ===== PROTOTYPE =====

    void SystemClock_Config(void);

    static void MX_GPIO_Init(void);

    void Error_Handler(void);

     

    int main(void)

    {

        HAL_Init();

        SystemClock_Config();

        MX_GPIO_Init();

     

        while (1)

        {

            uint8_t ir_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

            uint8_t touch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);

     

            // Kondisi:

            // IR DETEKSI (LOW) dan TOUCH TIDAK DISENTUH (LOW)

            if (ir_state == GPIO_PIN_RESET && touch_state == GPIO_PIN_RESET)

            {

                // LED ON (PB0 & PB1)

                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

            }

            else

            {

                // LED OFF

                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

            }

     

            HAL_Delay(10);

        }

    }

     

    // ===== CLOCK CONFIG =====

    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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

        RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

        RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

     

        if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

        {

            Error_Handler();

        }

    }

     

    // ===== GPIO CONFIG =====

    static void MX_GPIO_Init(void)

    {

        GPIO_InitTypeDef GPIO_InitStruct = {0};

     

        // Enable clock

        __HAL_RCC_GPIOA_CLK_ENABLE();

        __HAL_RCC_GPIOB_CLK_ENABLE();

     

        // ===== INPUT (PA0 = IR, PA1 = TOUCH) =====

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

     

        // ===== OUTPUT (PB0 & PB1 = LED) =====

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

     

        // Default LED OFF

        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);

    }

     

    // ===== ERROR HANDLER =====

    void Error_Handler(void)

    {

        __disable_irq();

        while (1)

        {

        }

    5. Video Demo[Kembali]

    6. Kondisi[Kembali]
    Buatlah rangkaian seperti pada gambar percobaan 3 dengan kondisi ketika Infrared sensor mendeteksi benda dan sensor Touch tidak mendeteksi sentuhan, maka LED menyala

    8. Download File[Kembali]

    Rangkaian dan Program Proteus (Klik Disini)

    Video Simulasi (Klik Disini)

    HTML (Klik Disini)

    Tidak ada komentar:

    Posting Komentar