LA 2 M2

[menuju akhir]





PERCOBAAN 2 : Led RGB, Touch Sensor, & Sensor Infrared

1. Prosedur[Kembali]

1. Sediakan alat dan bahan percobaan

2. Rangkailah rangkaian di breadboard

3. Buka STM32 IDE dan masukkan listing program ke aplikasi STM32 IDE

4. Hubungkan rangkaian dengan software dengan kabel stlink 

5. Jalankan program


2. Hardware dan Diagram Blok[Kembali]
STM32 NUCLEO-G474RE 


● Push Button 




● LDR Sensor 




● PIR Sensor 

● Breadboard 


● Adaptor 

b.Diagram Blok


n yaencegah malfungsi elektrikal atau pemborosan sumber daya saat terjadi situasi darurat kebakaran.


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]



Prinsip Kerja:
Sistem kontrol pompa air otomatis berbasis Nucleo-C031C6 ini bekerja dengan mengintegrasikan input dari sensor api (Flame Sensor) dan sensor tingkat ketinggian air (Float Sensor) untuk mengatur aktivasi beban berupa pompa melalui Relay. Pada kondisi operasional normal, mikrokontroler secara kontinu memantau status Float Sensor; jika sensor mendeteksi bahwa tangki belum penuh, mikrokontroler akan mengirimkan sinyal untuk mengaktifkan Relay sehingga pompa menyala, dan sebaliknya akan mematikan pompa saat tangki mencapai kapasitas maksimal.
Namun, sistem ini memiliki algoritma proteksi prioritas tinggi di mana jika Flame Sensor mendeteksi keberadaan api, mikrokontroler akan segera memutus aliran arus pada Relay (mematikan pompa) terlepas dari kondisi ketinggian air, sekaligus mengaktifkan Buzzer dan LED Merah sebagai indikator bahaya. Dengan demikian, perangkat ini tidak hanya berfungsi untuk otomasi pengisian air, tetapi juga berperan sebagai sistem keamana


4. Flowchart dan Listing Program[Kembali]

a.Flowchart




b.Listing Program

#include "main.h"
#include <stdio.h>

/* Handle */
ADC_HandleTypeDef hadc1;

/* Variabel */
uint16_t ldrValue = 0;
uint8_t  pirState = 0;
uint32_t lampuStartTime = 0;
uint8_t  lampuSedangNyala = 0;

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

    printf("Sistem Lampu Jalan Otomatis - Kondisi 6\r\n");

    LED_Off();

    while (1)
    {
        /* Baca LDR dan PIR */
        HAL_ADC_Start(&hadc1);
        HAL_ADC_PollForConversion(&hadc1, 100);
        ldrValue = HAL_ADC_GetValue(&hadc1);

        pirState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);

        /* Logika Kondisi 6 */
        if (lampuSedangNyala == 0)
        {
            if (ldrValue > 920 && pirState == GPIO_PIN_SET)   // Gelap + Gerakan
            {
                printf("Gerakan terdeteksi di kondisi gelap\r\n");
                LED_On();
                lampuStartTime = HAL_GetTick();
                lampuSedangNyala = 1;
            }
        }
        else
        {
            /* Matikan setelah 5 detik */
            if ((HAL_GetTick() - lampuStartTime) >= 5000)
            {
                LED_Off();
                lampuSedangNyala = 0;
            }
        }

        HAL_Delay(120);
    }
}

/* LED Control */
void LED_On(void)  
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
}

void LED_Off(void)
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
}

/* 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.HSIDiv = RCC_HSI_DIV1;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);

    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;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}

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

    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();

    /* PA6 = LED */
    GPIO_InitStruct.Pin   = GPIO_PIN_6;
    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);

    /* PA1 = PIR */
    GPIO_InitStruct.Pin   = GPIO_PIN_1;
    GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull  = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* PB1 = Button */
    GPIO_InitStruct.Pin   = GPIO_PIN_1;
    GPIO_InitStruct.Mode  = GPIO_MODE_IT_FALLING;
    GPIO_InitStruct.Pull  = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    HAL_NVIC_SetPriority(EXTI0_1_IRQn, 2, 0);
    HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
}

void MX_ADC1_Init(void)
{
    ADC_ChannelConfTypeDef sConfig = {0};

    hadc1.Instance = ADC1;
    hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
    hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
    hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
    hadc1.Init.ContinuousConvMode = DISABLE;
    hadc1.Init.NbrOfConversion = 1;
    HAL_ADC_Init(&hadc1);

    sConfig.Channel = ADC_CHANNEL_0;
    sConfig.Rank = ADC_REGULAR_RANK_1;
    sConfig.SamplingTime = ADC_SAMPLETIME_79CYCLES_5;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

void HAL_GPIO_EXTICallback(uint16_t GPIO_Pin)
{
    if (GPIO_Pin == GPIO_PIN_1)
    {
        printf("Tombol ditekan\r\n");
    }
}

void Error_Handler(void)
{
    while (1) {}
}


5. Video Demo[Kembali]





6. Analisa[Kembali] 

 



 

7. Download File[Kembali]

Download HTML klik disini
Download File Analisa klik disini
Download Video Demo klik disini
Download Datashett STM32 klik disini
Download Datasheet IR sensor klik disini
Download Datasheet Touch sensor klik disini
Download Datasheet  RGB-LED klik disini
Download Datasheet Resistor klik disini

Tidak ada komentar:

Posting Komentar

LA 2 M2

[menuju akhir] [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Prosedur 2. Hardware dan Diagram Blok 3. Rangkaian Simul...