MODUL 1 PERCOBAAN 3 KONDISI 3


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]


Rangkaian Alarm Perimeter Pintu bekerja dengan memanfaatkan dua sensor sebagai input, yaitu sensor infrared (IR) dan sensor sentuh (touch), yang kemudian diproses oleh mikrokontroler untuk mengendalikan keluaran berupa LED dan buzzer. Sensor infrared digunakan untuk mendeteksi keberadaan objek di depan pintu. Apabila tidak ada objek yang terdeteksi, maka sensor IR akan memberikan sinyal logika rendah (LOW). Sementara itu, sensor touch akan memberikan sinyal logika tinggi (HIGH) ketika terjadi sentuhan.

Mikrokontroler secara terus-menerus membaca kondisi dari kedua sensor tersebut. Ketika sensor IR dalam kondisi tidak mendeteksi objek (LOW) dan pada saat yang sama sensor touch mendeteksi adanya sentuhan (HIGH), maka mikrokontroler akan mengaktifkan output. Akibatnya, LED akan menyala sebagai indikator visual, dan buzzer akan berbunyi sebagai tanda peringatan atau alarm.

Dengan demikian, prinsip kerja rangkaian ini adalah mengombinasikan dua kondisi, yaitu tidak adanya objek di depan sensor infrared dan adanya sentuhan pada sensor touch, untuk mengaktifkan sistem alarm. Jika salah satu kondisi tidak terpenuhi, maka LED dan buzzer tidak akan aktif.


4. Flowchart dan Listing Program[Kembali]

Flowchart :



Listing Program :

#include "main.h"


void SystemClock_Config(void);

void MX_GPIO_Init(void);


int main(void)

{

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();


  while (1)

  {GPIO_PinState flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN);

  GPIO_PinState float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN);


  /* ===== LOGIKA ALARM (FLAME SENSOR) ===== */

  // Jika api terdeteksi, LED dan Buzzer menyala

  if (flame_state == GPIO_PIN_RESET)

  {

    HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);

    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);

  }

  else

  {

    // Sebaliknya: Api tidak ada, LED dan Buzzer mati

    HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);

  }


  /* ===== LOGIKA POMPA (FLOAT SENSOR) ===== */

  // Jika float terdeteksi (tangki penuh), pompa MATI

  if (float_state == GPIO_PIN_SET)

  {

    HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);

  }

  else

  {

    // Sebaliknya: Float tidak terdeteksi (tangki kosong), pompa HIDUP

    HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);

  }


  HAL_Delay(100);

}

}

void SystemClock_Config(void)

{

  RCC_OscInitTypeDef RCC_OscInitStruct = {0};

  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


  /* Voltage scaling */

  HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);


  /* HSI Oscillator */

  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;

  HAL_RCC_OscConfig(&RCC_OscInitStruct);


  /* Clock configuration */

  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;

  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

}


void MX_GPIO_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOA_CLK_ENABLE();


  /* INPUT: Flame & Float sensor */

  GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_PULLDOWN;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


  /* OUTPUT: LED, Buzzer, Relay */

  GPIO_InitStruct.Pin = LED_PIN | BUZZER_PIN | RELAY_PIN;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


  /* Relay default ON (pompa hidup) */

  HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);

}


void Error_Handler(void)

{

  __disable_irq();

  while (1)

  {

    HAL_GPIO_TogglePin(LED_PORT, LED_PIN);

    HAL_Delay(200);

  }

}


5. Video Demo[Kembali]

-

6. Kondisi[Kembali]

Buatlah rangkaian seperti pada gambar percobaan 3 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan sensor Touch  mendeteksi sentuhan, maka LED akan menyala

8. Download File[Kembali]

Tidak ada komentar:

Posting Komentar

   BAHAN PRESENTASI UNTUK MATA KULIAH ELEKTRONIKA 2024 Oleh  : MUHAMMAD RHAKA AULIA (2310953009) Dosen Pengampu  : Dr. Darwison, MT Referens...