LAPORAN AKHIR 2

 [KEMBALI KE MENU SEBELUMNYA]

a. Prosedur

1. Buka software proteus lalu rangkai komponen sesuai dengan gambar yang ada di modul

2. Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output

3. Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex

4. Masukan file .hex ke dalam file library STM32F103C8 pada proteus

5. Simulasikan rangkaian

b. Hardware dan Diagram Blok

  • Hardware :


1. STM32F103C8



2. IR Sensor



3. Buzzer


4. Power Supply

 
5. RGB LED
Jual LED RGB 4 PIN WARNA MERAH HIJAU BIRU 5mm ( ARDUINO ) - Common Cathode  - Jakarta Barat - Ardushop-id | Tokopedia

6. Resistor 1k Ohm



7. Floating Switch

8. Adaptor



9. Breadboard


10. Touch Sensor




c. Rangkaian Simulasi dan Prinsip Kerja

  • Rangkaian Simulasi

  • Prinsip Kerja

Saat sistem pertama kali dijalankan, tahap awal yang dilakukan adalah inisialisasi untuk menyiapkan jalur komunikasi dengan Sensor Inframerah (IR) dan Touch Sensor agar siap membaca data. Setelah persiapan selesai, sistem akan langsung mengecek status utama dari Touch Sensor.

Jika Touch Sensor dibaca dalam keadaan mati (off), maka sistem tidak akan memedulikan lingkungan sekitar dan langsung memastikan komponen indikator dalam keadaan tidak aktif, yaitu LED dan Buzzer mati.

Namun, jika Touch Sensor dalam keadaan aktif (on), sistem akan memberikan izin untuk lanjut ke tahap pengecekan kedua, yaitu membaca lingkungan sekitar menggunakan Sensor IR



d. Flowchart dan Listing Program

  • Flowchart

  • 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

g. Download File

File Analisa [Klik disini]

Video Demo [Klik disini]

Download Datasheet Touch Sensor (klik disini)

Download Datasheet Pir Sensor (klik disini)

Download Datasheet Resistor (klik disini)

Download Datasheet LED (klik disini)

Download Datasheet Buzzer (klik disini)

Comments

Popular posts from this blog

Tugas Besar - Kontrol Wastafel

MODUL 1 - General Input dan Output

LPF-40