Laporan Akhir 1_M1

[menuju akhir]

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.

2. Hardware dan Diagram Blok [kembali]

Hardware
    

STM32F103C8 

 
STM32 NUCLEO-G474RE   


Touch Sensor

PIR Sensor

LED

Buzzer

Resistor


Diagram Blok 


3. Rangkaian Simulasi dan Prinsip Kerja[kembali]

Rangkaian Simulasi 

 

Prinsip Kerja

1. Kondisi Awal

Saat rangkaian dinyalakan, STM32 melakukan inisialisasi HAL, konfigurasi clock HSI, dan inisialisasi GPIO. Pin Touch dan PIR dikonfigurasi sebagai input, sedangkan pin LED dan Buzzer dikonfigurasi sebagai output.

2. Pembacaan Sensor oleh Mikrokontroller

STM32 terus-menerus membaca status kedua sensor secara bersamaan :
a. Touch Sensor → membaca apakah permukaan sensor disentuh

b. IR Sensor → membaca apakah ada gerakan yang terdeteksi

3. Logika Kondisi

Jika touch sensor ditekan, status sistem berubah (enable ↔ disable)

4. Output

Jika sistem enable:
a. Mikrokontroler membaca sensor IR
b. Jika IR mendeteksi objek:
  • LED menyala
  • Buzzer berbunyi (alarm aktif)
c. Jika tidak ada objek:
  • LED mati
  • Buzzer mati
Jika sistem disable:
  • Semua output dimatikan (LED dan buzzer OFF, Proses berulang terus (looping)
  •  

    4. Flowchart dan Listing Program [kembali]

    a. Flowchart

    b. Listing Program

    #include "main.h" 
    uint8_t system_enable = 1; 
    uint8_t touch_last = 0; 
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void); 
     
    int main(void) 

      HAL_Init(); 
      SystemClock_Config(); 
      MX_GPIO_Init(); 
     
      while (1) 
      { 
        uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); 
     
        if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET) 
        { 
          system_enable = !system_enable; 
          HAL_Delay(200); 
        } 
        touch_last = touch_now; 
     
        if (system_enable) 
        { 
          if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) 
          { 
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); 
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); 
          } 
          else 
          { 
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); 
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); 
          } 
        } 
        else 
        { 
          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); 
          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); 
        } 
      } 

     
    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(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET); 
     
      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); 
     
      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); 

     
    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]


    7. Link Download [kembali]

    [menuju awal]







    No comments:

    Post a Comment

     BAHAN PRESENTASI MATA KULIAH ELEKTRONIKA OLEH ZIKRI AHMAD SYAIFULLAH 2310952062 DOSEN PENGAMPU DR.DARWISON,M.T Referensi 1. Darwison, 2010...