Laporan Akhir 1



1. Prosedur[Kembali]

  • Membuat Project dan Menambahkan Komponen
    Buka aplikasi Proteus, buat project baru, lalu tambahkan komponen: STM32F103C6, touch sensor, sensor IR, LED, resistor 220Ω & 10kΩ, buzzer, dan push button ke workspace.
  • Merancang Rangkaian
    Hubungkan komponen sesuai skematik:
    • Sensor → pin input (PA0 dan PA1)
    • LED & buzzer → pin output (PB0 dan PB1)
    • Pastikan VCC/VDDA dan GND/VSSA terhubung dengan benar
  • Kompilasi Program
    Compile program menggunakan Arduino IDE atau STM32CubeIDE hingga menghasilkan file .hex atau .elf.
  • Memasukkan Program ke Proteus
    Klik dua kali STM32 di Proteus, lalu masukkan file hasil compile pada bagian “Program File”.
  • Menjalankan Simulasi
    Tekan tombol Play/Run Simulation untuk mulai menjalankan rangkaian.
  • Pengujian Sistem
    Ubah kondisi input sensor (0 ↔ 1), lalu amati respons LED dan buzzer sebagai output.
  • 2. Hardware dan Diagram Blok[Kembali]

        


    STM32F103C8


    Touch Sensor


    Infrared Sensor


    LED


    Buzzer

    Resistor
    Breadboard
    Hardware

    Diagram Blok

    3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

    Rangkaian Simulasi Percobaan 3 kondisi 1

    Prinsip Kerja Sistem

    1. Kondisi Awal
    Saat rangkaian pertama kali dinyalakan, mikrokontroler STM32 akan melakukan proses inisialisasi sistem, meliputi:

    • HAL_Init() untuk menginisialisasi library HAL
    • SystemClock_Config() untuk mengatur clock menggunakan internal HSI
    • MX_GPIO_Init() untuk mengonfigurasi pin GPIO

    Adapun konfigurasi pin yang digunakan yaitu:

    • PA0 sebagai input dari sensor IR dengan mode pull-down
    • PA1 sebagai input dari sensor sentuh dengan mode pull-down
    • PB0 dan PB1 sebagai output untuk LED

    Pada kondisi awal, kedua LED berada dalam keadaan mati (RESET).

    2. Pembacaan Sensor (Loop Utama)
    Di dalam loop utama while(1), mikrokontroler secara terus-menerus membaca kondisi kedua sensor melalui perintah:

    • ir_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
    • touch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);

    Dengan interpretasi logika sebagai berikut:

    • Sensor IR bernilai LOW (0) menandakan adanya objek terdeteksi
    • Sensor sentuh bernilai LOW (0) menandakan tidak ada sentuhan

    3. Logika Kondisi Sistem
    LED akan menyala apabila kedua kondisi berikut terpenuhi secara bersamaan:

    • Sensor IR mendeteksi objek (LOW)
    • Sensor sentuh tidak mendeteksi sentuhan (LOW)

    4. Output Sistem (LED)
    Jika kondisi terpenuhi, maka mikrokontroler akan memberikan sinyal output:

    • PB0 dan PB1 di-set HIGH (GPIO_PIN_SET) sehingga LED menyala stabil (tidak berkedip)

    Sebaliknya, jika salah satu atau kedua kondisi tidak terpenuhi, maka:

    • PB0 dan PB1 di-set LOW (GPIO_PIN_RESET) sehingga LED dalam keadaan mati

    4. Flowchart dan Listing Program[Kembali]


    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]

    Download Rangkaian Simulasi dan Program (klik disini)

    Download Video Simulasi (klik disini)

    Download HTML (klik disini)

    Download Datasheet IR Sensor (klik disini)

    Download Datasheet Touch Sensor (klik disini)

    Download Datasheet STM32F103C8 (klik disini)

    Download Datasheet Resistor (klik disini)

    Download Datasheet LED (klik disini)

    Download Datasheet Buzzer (klik disini)

    Soal Analisa




     

    Tidak ada komentar:

    Posting Komentar

      BAHAN PRESENTASI UNTUK MATA KULIAH ELEKTRONIKA 2024 OLEH: Hafiz Fadli Al Anshor 2310951034 Dosen Pengampu: Darwison, M.T Referensi:  1. Da...