TUGAS PENDAHULUAN 2



1. Prosedur [kembali]

  1. Menyiapkan alat dan bahan.
  2. Merangkai komponen pada breadboard sesuai dengan gambar rangkaian percobaan.
  3. Menghubungkan masing masing pin input output.
  4. Mengunggah program menggunakan ST-LINK ke mikrokontroler.
  5. Jalankan Rangkaian

2. Hardware dan Diagram Blok [kembali]

  • ST-LINK 
  • STM32F103C8 (BLUEPILL)  
  • IR Transmitter  
  • IR Receiver  
  • Touch sensor  
  • Buzzer  
  • LED 
  • Resistor 220 OHM 

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


Wokwi

Prinsip Kerja:

Rangkaian pada simulasi Wokwi tersebut bekerja sebagai sistem kontrol otomatis berbasis mikrokontroler STM32 yang memanfaatkan dua buah sensor, yaitu flame sensor sebagai pendeteksi api dan float sensor sebagai pendeteksi ketinggian air. Kedua sensor ini memberikan sinyal input ke mikrokontroler, yang kemudian diproses menggunakan logika prioritas. Prinsip utama sistem adalah menjadikan kondisi kebakaran sebagai prioritas tertinggi. Ketika flame sensor mendeteksi adanya api (logika HIGH), mikrokontroler akan segera mengaktifkan LED sebagai indikator visual dan buzzer sebagai alarm suara, serta secara bersamaan mematikan pompa air melalui relay untuk menghindari pengoperasian yang tidak diperlukan saat kondisi darurat. Sebaliknya, ketika tidak terdeteksi api, sistem akan beralih ke fungsi pengendalian level air, di mana float sensor digunakan untuk menentukan kondisi tangki. Jika tangki dalam keadaan penuh, pompa akan dimatikan, sedangkan jika tangki belum penuh, pompa akan diaktifkan untuk mengisi air. Proses ini berlangsung secara terus-menerus dalam loop dengan jeda waktu yang singkat sehingga sistem mampu merespons perubahan kondisi secara real-time. Dengan demikian, rangkaian ini merupakan kombinasi sistem proteksi kebakaran dan sistem kontrol level air otomatis yang sederhana namun efektif.


4. Flowchart dan Listing Program [kembali]

 
Flowchart

Listing Program:
a. main.c
    
#include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

while (1)
{
  if (
      HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET &&   // switch ON
      HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET      // IR tidak deteksi (push TIDAK ditekan)
     )
  {
    // HIJAU
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
  }
  else
  {
    // MERAH + BUZZER
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
  }

  HAL_Delay(50);
}
}

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;

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

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  // INPUT: PA0 (Switch), PA1 (IR)
  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 (LED Hijau), PB1 (LED Merah), PB2 (Buzzer)
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
  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)
  {
  }
}

b. main.h
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32c0xx_hal.h"

// Function
void Error_Handler(void);

// ===== INPUT =====
#define BUTTON_REVERSE_Pin       GPIO_PIN_0
#define BUTTON_REVERSE_GPIO_Port GPIOA

#define IR_SENSOR_Pin            GPIO_PIN_1
#define IR_SENSOR_GPIO_Port      GPIOA

// ===== OUTPUT =====
#define LED_GREEN_Pin            GPIO_PIN_0
#define LED_GREEN_GPIO_Port      GPIOB

#define LED_RED_Pin              GPIO_PIN_1
#define LED_RED_GPIO_Port        GPIOB

#define BUZZER_Pin               GPIO_PIN_2
#define BUZZER_GPIO_Port         GPIOB

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

5. Video Demo [kembali]

6. Kondisi [kembali]

    Percobaan 2 Kondisi 4

Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan switch on, maka LED menyala hijau

7. Video Simulasi [kembali]



Percobaan 4

8. Download File [kembali]










Comments

Popular posts from this blog

Tugas Besar - Kontrol Wastafel

LPF-40

UTS ELEKTRONIKA