Percobaan 1 Kondisi 4



1. Prosedur [kembali]

1.     Jalankan software Proteus, kemudian susun rangkaian komponen sesuai dengan diagram yang terdapat pada modul.

2.     Buka STM32CubeIDE, lalu lakukan pengaturan pin pada mikrokontroler untuk menentukan fungsi sebagai GPIO input maupun GPIO output.

3.     Masukkan kode program ke dalam STM32CubeIDE, kemudian lakukan proses build untuk menghasilkan file berekstensi .hex.

4.     Impor file .hex tersebut ke dalam library mikrokontroler STM32F103C8 yang digunakan pada Proteus.

5.     Jalankan simulasi rangkaian untuk melihat hasil dari program yang telah dibuat.

2. Hardware dan Diagram Blok [kembali]

A. Hardware

 

a) STM32F103C8

b) Touch Sensor

 

c) PIR Sensor

 

d) LED

 

e) Buzzer



f) Resistor 1k ohm


g) Adaptor

h) Breadboard

B. Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

Rangkaian Simulasi Percobaan 1 Kondisi 4

Prinsip Kerja

Sistem ini menggunakan sensor PIR untuk mendeteksi gerakan dan sensor touch sebagai pengontrol aktif atau tidaknya sistem. Ketika sensor touch tidak disentuh, sistem berada dalam kondisi aktif. Jika PIR mendeteksi gerakan, maka waktu deteksi terakhir akan diperbarui dan LED akan menyala.

LED akan tetap menyala selama selisih waktu antara deteksi terakhir dan waktu sekarang masih dalam batas waktu tunda (1 detik). Setiap gerakan baru akan mengulang waktu tunda tersebut. Oleh karena itu, jika gerakan terdeteksi secara berulang sebelum waktu tunda habis, LED akan tetap menyala. Sebaliknya, jika tidak ada gerakan dalam waktu tertentu atau sensor touch disentuh, maka LED akan mati.

4. Flowchart dan Listing Program [kembali]

Flowchart:

Listing Program:

#include "main.h"

 

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

 

/* USER CODE BEGIN PV */

static uint32_t last_trigger_time = 0;

uint32_t delay_time = 1000;

/* USER CODE END PV */

 

int main(void)

{

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

 

  while (1)

  {

    /* USER CODE BEGIN 3 */

 

    uint8_t pir = HAL_GPIO_ReadPin(PIR_SENSOR_GPIO_Port, PIR_SENSOR_Pin);

    uint8_t touch = HAL_GPIO_ReadPin(TOUCH_SENSOR_GPIO_Port, TOUCH_SENSOR_Pin);

 

    if (touch == GPIO_PIN_RESET)

    {

        if (pir == GPIO_PIN_SET)

        {

            last_trigger_time = HAL_GetTick();

        }

 

        if ((HAL_GetTick() - last_trigger_time) < delay_time)

        {

            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);

        }

        else

        {

            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);

        }

    }

    else

    {

        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);

    }

 

    /* USER CODE END 3 */

  }

}

 

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, LED_Pin | BUZZER_Pin, GPIO_PIN_RESET);

 

  GPIO_InitStruct.Pin = PIR_SENSOR_Pin | TOUCH_SENSOR_Pin;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

 

  GPIO_InitStruct.Pin = LED_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(GPIOB, &GPIO_InitStruct);

}

 

void Error_Handler(void)

{

  __disable_irq();

  while (1)

  {

  }

}


5. Video Demo [kembali]

6. Kondisi [kembali]

Percobaan 1 Kondisi 4 (Kontrol Lampu Lorong)

Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi PIR mendeteksi gerakan berulang sebelum waktu tunda habis dan sensor Touch tidak disentuh, maka LED tetap menyala.

7. Video Simulasi [kembali]


8. Download File [kembali]

Rangkaian Proteus [Download]

Program [Download]

Vidio [Download]

Datasheet STM32F103C8  [Download]

Datasheet Touch Sensor [Download]

Datasheet PIR Sensor [Download]

Datasheet LED [Download]

HTML [Download]









Comments

Popular posts from this blog