Tugas Pendahuluan 1 M1

 [KEMBALI KE MENU SEBELUMNYA]


Tugas Pendahuluan 1 Modul 1
(Percobaan 2 Kondisi 8)

1. Prosedur

1. Rangkai rangkaian di wokwi sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32 NUCLEO-G474RE di software STM32 CubeIDE.
3. Salin program main.c dan main.h dari stm32cubeide ke wokwi
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada wokwi.
5. Selesai.


Hardware :

a) Mikrokontroler STM32 NUCLEO-G474RE








2. Infrared Sensor

Infrared Sensor Module



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. Switch



8. Adaptor



9. Breadboard



Diagram Blok  :







Rangkaian Simulasi Sebelum dirunning:






Rangkaian Simulasi Setelah dirunning:
 




Prinsip Kerja : 

Sistem ini bekerja dengan memanfaatkan satu input digital dari sensor infrared yang terhubung pada pin PA0 dan dibaca secara terus-menerus oleh mikrokontroler STM32 dalam sebuah loop tak hingga. Sensor digunakan untuk mendeteksi perubahan kondisi dari tidak mendeteksi menjadi mendeteksi objek. Mikrokontroler membaca sinyal menggunakan fungsi HAL_GPIO_ReadPin() lalu membandingkan kondisi saat ini dengan kondisi sebelumnya untuk mendeteksi adanya perubahan (rising edge). Setiap perubahan yang terjadi akan dicatat waktunya menggunakan fungsi HAL_GetTick(), kemudian dibandingkan dengan waktu perubahan sebelumnya yang disimpan dalam variabel lastTime.

Jika selisih waktu antara dua perubahan tersebut kurang dari 500 ms, maka sistem menganggap kondisi tersebut sebagai situasi darurat dan mengaktifkan variabel emergency. Dalam mode darurat, LED merah (PB1) dan LED biru (PB3) akan berkedip cepat menggunakan metode toggle dengan delay 50 ms, sedangkan buzzer pada pin PB2 akan menghasilkan bunyi bernada tinggi melalui proses ON-OFF cepat dengan delay 1 ms. Sistem akan terus berada dalam kondisi ini karena tidak terdapat mekanisme reset, sehingga selama program berjalan, mode darurat tetap aktif dan output akan terus memberikan peringatan.


Flowchart :




Listing Program :
a. main.c
/* USER CODE BEGIN Header */
// Header awal
/**

---

* @file           : main.c
* @brief          : Main program body

---

*/
// Header akhir
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h" // Library utama

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void); // Konfigurasi clock
static void MX_GPIO_Init(void); // Inisialisasi GPIO

int main(void)
{
HAL_Init(); // Inisialisasi HAL
SystemClock_Config(); // Set clock
MX_GPIO_Init(); // Inisialisasi GPIO

while (1) // Loop utama
{
static uint32_t lastTime = 0;
// Menyimpan waktu terakhir trigger

  static uint8_t lastState = 0;
  // Menyimpan kondisi sebelumnya

  static uint8_t emergency = 0;
  // Status mode darurat

  uint8_t currentState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
  // Membaca sensor infrared di PA0

  // Deteksi perubahan LOW -> HIGH
  if (lastState == 0 && currentState == 1)
  {
      uint32_t now = HAL_GetTick();
      // Ambil waktu sekarang (ms)

      // Jika perubahan terjadi cepat (<500ms)
      if ((now - lastTime) < 500)
      {
          emergency = 1;
          // Aktifkan mode darurat
      }

      lastTime = now;
      // Simpan waktu terakhir
  }

  lastState = currentState;
  // Update kondisi sebelumnya

  // Jika mode darurat aktif
  if (emergency)
  {
      // LED merah & biru berkedip cepat
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
      // LED merah

      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
      // LED biru

      HAL_Delay(50);
      // Delay cepat (kedip cepat)

      // Buzzer nada tinggi (frekuensi tinggi)
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
      // ON

      HAL_Delay(1);
      // Delay sangat kecil

      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
      // OFF

      HAL_Delay(1);
      // Delay sangat kecil → menghasilkan nada tinggi
  }

}
}

/**

* @brief System Clock Configuration
  */
  // Fungsi konfigurasi clock
  void SystemClock_Config(void)
  {
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  // Struktur oscillator

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// Struktur clock

__HAL_FLASH_SET_LATENCY(FLASH_LATENCY_1);
// Set latency flash

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
// Pakai oscillator internal

RCC_OscInitStruct.HSIState = RCC_HSI_ON;
// Aktifkan HSI

RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;
// Divider

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
// Kalibrasi default

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
// Jika gagal
}

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
// Jenis clock

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
// Sumber clock

RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
// Divider

RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
// Divider AHB

RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
// Divider APB1

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
Error_Handler();
}
}

/**

* @brief GPIO Initialization
  */
  // Inisialisasi GPIO
  static void MX_GPIO_Init(void)
  {
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  // Struktur GPIO

__HAL_RCC_GPIOA_CLK_ENABLE();
// Aktifkan GPIOA

__HAL_RCC_GPIOB_CLK_ENABLE();
// Aktifkan GPIOB

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_RESET);
// Set awal LOW

// PA0 sebagai input (sensor)
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// PB1, PB2, PB3 sebagai output (LED & buzzer)
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
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);
}

/**

* @brief Error Handler
  */
  // Fungsi error
  void Error_Handler(void)
  {
  __disable_irq();
  // Matikan interrupt

while (1)
{
// Loop terus jika error
}
}


b. main.h
/* USER CODE BEGIN Header */
// Penanda awal header user

/**

---

* @file           : main.h
  // Nama file header utama

* @brief          : Header for main.c file.
  // File header untuk main.c

* ```
                This file contains the common defines of the application.
  ```

// Berisi definisi umum yang dipakai di program

---

* @attention
  // Informasi perhatian

* Copyright (c) 2026 STMicroelectronics.
  // Hak cipta

* All rights reserved.
  // Semua hak dilindungi

* This software is licensed under terms that can be found in the LICENSE file
  // Informasi lisensi

* If no LICENSE file comes with this software, it is provided AS-IS.
  // Jika tidak ada lisensi, digunakan apa adanya

---

*/
// Penutup komentar header
/* USER CODE END Header */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
// Jika MAIN_H belum didefinisikan

#define __MAIN_H
// Definisikan MAIN_H agar tidak include berulang

#ifdef __cplusplus
// Jika menggunakan C++

extern "C" {
// Agar kompatibel dengan C
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32c0xx_hal.h"
// Memanggil library HAL STM32

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
// Tempat tambahan library user
/* USER CODE END Includes */

/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */
// Tempat deklarasi tipe data (struct, enum)
/* USER CODE END ET */

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
// Tempat konstanta global
/* USER CODE END EC */

/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
// Tempat macro (#define)
/* USER CODE END EM */

/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);
// Deklarasi fungsi error handler

/* USER CODE BEGIN EFP */
// Tambahan prototype fungsi user
/* USER CODE END EFP */

/* Private defines -----------------------------------------------------------*/
// Bagian definisi privat

/* USER CODE BEGIN Private defines */
// Tempat define pin atau konstanta tambahan
/* USER CODE END Private defines */

#ifdef __cplusplus
}
#endif
// Penutup kompatibilitas C++

#endif /* __MAIN_H */
// Penutup guard agar tidak include berulang


Percobaan 2 Kondisi 8
ketika infrared sensor jika kondisi sensor tidak mendeteksi ke mendeteksi dalam waktu kurang dari 500ms, sistem mengaktifkan mode darurat, maka LED RGB berkedip Merah & Biru secara cepat dan Buzzer berbunyi nada tinggi terus-menerus.






Download HTML [Download]
Download File Rangkaian  [wokwi link]
Download Video Simulasi [Download]
Datasheet Mikrokontroler STM32 NUCLEO-G474RE [Download]
Datasheet Sensor Infrared [Download]
Datasheet RGB LED [Download]
Datasheet Buzzer [Download]

Komentar

Postingan populer dari blog ini