Tugas Pendahuluan 2 (Wokwi)




a) Prosedur

1. Buka web WOKWI.COM dan cari STM 32 NUCLEO C031C6

2. Rangkai komponen sesuai dengan gambar rangkaian di modul

3. Klik pada Library Manager untuk membuat file baru yang bernama main.h dan main.c

4. Masukan program yang telah di buat sesuai kondisi pada kedua file tersebut

5. simulasikan


b) Hardware

  • Hardware

 1. STM32 NUCLEO-C031C6





2. Float Switch



3. Infrared Sensor


4. Resistor


5. Buzzer



6. LED 

7. Push Button


  • Diagram Blog


c) Rangkaian Simulasi dan Prinsip Kerja

  • Rangkaian Simulasi
  • Prinsip kerja
-Sistem Nonaktif (Switch OFF): Jika Anda menggeser Slide Switch ke posisi OFF (pin membaca sinyal LOW), mikrokontroler akan mengabaikan sensor. Semua lampu (RGB LED) dan Buzzer akan dipaksa MATI.
-Sistem Aktif & Standby (Switch ON, Button dilepas): Jika Slide Switch digeser ke ON, sistem mulai bekerja. Karena tidak ada benda yang dideteksi (Push Button tidak ditekan), mikrokontroler akan menyalakan LED warna Kuning sebagai tanda bahwa alat standby dan siap mendeteksi.
-Sistem Mendeteksi Objek (Switch ON, Button ditekan): Saat benda lewat di depan sensor (Anda menekan dan menahan Push Button), mikrokontroler langsung merespons. LED Kuning akan mati, lalu LED warna Hijau akan menyala sebagai tanda bahwa objek berhasil dideteksi. Saat tombol dilepas, lampu kembali kuning.

d) Flowchart

  • Flowchart

  • Listing Program
#include "main.h"

// Deklarasi fungsi
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void)
{
  // Inisialisasi HAL Library
  HAL_Init();

  // Konfigurasi sistem clock
  SystemClock_Config();

  // Inisialisasi GPIO (Input dan Output)
  MX_GPIO_Init();

  // Loop utama
  while (1)
  {
    // 1. Cek apakah Switch dalam kondisi ON
    if (HAL_GPIO_ReadPin(BUTTON_REVERSE_GPIO_Port, BUTTON_REVERSE_Pin) == GPIO_PIN_SET)
    {
      // 2. Cek apakah Touch / Push Button DITEKAN
      // (Menggunakan pin PA1 yang di main.h berlabel IR_SENSOR_Pin)
      if (HAL_GPIO_ReadPin(IR_SENSOR_GPIO_Port, IR_SENSOR_Pin) == GPIO_PIN_SET)
      {
        // KONDISI TERCAPAI: Switch ON & Touch ditekan -> LED HIJAU NYALA
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET);
       
        // Memastikan LED Merah dan Buzzer mati
        HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
      }
      else
      {
        // KONDISI: Switch ON, tapi Touch TIDAK ditekan -> Semua mati
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
      }
    }
    else
    {
      // KONDISI: Switch OFF -> Semua Dimatikan
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
    }

    // Delay 50ms untuk debounce agar pembacaan lebih stabil
    HAL_Delay(50);
  }
}

// ==========================================
// FUNGSI KONFIGURASI SYSTEM CLOCK
// ==========================================
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();
  }
}

// ==========================================
// FUNGSI INISIALISASI GPIO PIN
// ==========================================
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  // Aktifkan Clock untuk GPIOA dan GPIOB
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  // Konfigurasi Pin INPUT (PA0 Switch & PA1 Touch)
  GPIO_InitStruct.Pin = BUTTON_REVERSE_Pin | IR_SENSOR_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // Konfigurasi Pin OUTPUT (PB0 Hijau, PB1 Merah, PB2 Buzzer)
  GPIO_InitStruct.Pin = LED_BLUE_Pin | LED_RED_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);

  // Kondisi awal (saat program pertama jalan): Matikan semua output
  HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
}

// ==========================================
// FUNGSI ERROR HANDLER
// ==========================================
void Error_Handler(void)
{
  // Nonaktifkan semua interrupt
  __disable_irq();
  while (1)
  {
    // Jika terjadi error sistem, program akan berhenti di sini
  }
}

#ifndef __MAIN_H
#define __MAIN_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#include "stm32c0xx_hal.h"
 
void Error_Handler(void);
 
#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
#define LED_BLUE_Pin            GPIO_PIN_0
#define LED_BLUE_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

e) Video Demo

-

f) Kondisi

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

g) Video Simulasi




h) Download File

File TP/Link Wokwi [klik disini]


Komentar

Postingan populer dari blog ini