Tugas Pendahuluan 2




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

1. STM32 NUCLEO-G474RE


2. Float Switch

4. LED


5. Buzzer


6. Resistor




7. Relay

Diagram blok:


c) Rangkaian Simulasi dan Prinsip Kerja


Prinsip kerja:

Prinsip kerja rangkaian ini menggunakan dua input berupa pushbutton yang berperan sebagai pengganti sensor infrared dan sebuah switch sebagai pengendali utama. Mikrokontroler secara terus-menerus membaca kondisi kedua input tersebut. Pushbutton diasumsikan sebagai simulasi sensor infrared, di mana saat pushbutton tidak ditekan dianggap sebagai kondisi tidak mendeteksi benda. Dalam kondisi ini, pushbutton berada pada logika tidak aktif.

Ketika switch dalam keadaan ON (aktif/ditekan), mikrokontroler akan menerima sinyal aktif dari switch. Jika pada saat yang sama pushbutton tidak ditekan (yang berarti tidak ada objek terdeteksi), maka kedua kondisi yang diinginkan terpenuhi. Mikrokontroler kemudian memproses logika tersebut dan memberikan sinyal keluaran ke LED. Akibatnya, arus listrik mengalir dari sumber tegangan melalui LED menuju ground, sehingga LED menyala dengan warna kuning sebagai indikator bahwa sistem berada dalam kondisi tidak ada objek dan switch aktif.

Sebaliknya, jika pushbutton ditekan (menandakan ada objek terdeteksi) atau switch dalam keadaan OFF, maka salah satu kondisi tidak terpenuhi. Mikrokontroler tidak akan mengaktifkan LED sehingga tidak ada arus yang mengalir dan LED tetap mati. Dengan demikian, rangkaian ini bekerja berdasarkan logika sederhana di mana LED hanya menyala ketika pushbutton tidak ditekan dan switch berada dalam kondisi ON.


d) Flowchart


Listing Program:
main.h
#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_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.c
#include "main.h"

// Prototype
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

// ================= MAIN =================
int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();

    while (1)
    {
        // Baca input
        GPIO_PinState switch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
        GPIO_PinState ir_state     = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);

        // 1. Switch OFF → semua LED mati
        if (switch_state == GPIO_PIN_RESET)
        {
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
        }

        // 2. Switch ON
        else
        {
            //  IR TIDAK mendeteksi → LED KUNING
            if (ir_state == GPIO_PIN_RESET)
            {
                // Kuning = Merah + Hijau
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);   // Hijau
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   // Merah
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); // Biru mati
            }

            //  IR mendeteksi → LED MERAH
            else
            {
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   // Merah
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
            }
        }

        HAL_Delay(50);
    }
}

// ================= CLOCK CONFIG =================
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();
    }
}

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

    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();

    // INPUT
    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 LED
    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);
}

// ================= ERROR =================
void Error_Handler(void)
{
    __disable_irq();
    while (1)
    {
    }
}


e) Video Demo


f) Kondisi

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

g) Video Simulasi


Video Penjelasan Percobaan 2 Kondisi 2


h) Download File

Komentar

Postingan populer dari blog ini

Figure 7.21

Figure 8.17

Figure 12.19