Tugas Pendahuluan 2




PERCOBAAN 8 KONDISI 1

1. Prosedur[Kembali]

  1. Rangkai semua komponen di Proteus sesuai dengan percobaan pada modul 
  2. Buat program untuk STM32 di STM32CubeIDE, sesuaikan konfigurasinya dengan rangkaian pada proteus dan kondisi yang dipakai
  3. Masukkan Program ke STM32 di rangkaian proteus
  4. Simulasikan rangkaian

2. Hardware dan Diagram Blok[Kembali]

1. STM32F103C8


2. LED

3. Resistor



4. PIR Sensor


5. Touch Sensor




3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian: 


Prinsip Kerja:

Rangkaian ini menggunakan mikrokontroler STM32F103C8T6 sebagai unit pemrosesan utama yang menerima input dari sensor PIR dan sensor sentuh, kemudian mengontrol LED RGB serta buzzer sebagai output. Sensor PIR berfungsi untuk mendeteksi pergerakan berdasarkan perubahan radiasi inframerah. Jika sensor ini mendeteksi gerakan, maka mikrokontroler akan menyalakan LED merah sebagai indikator. Sementara itu, sensor sentuh digunakan untuk mendeteksi sentuhan atau tekanan pada permukaannya. Jika sensor sentuh aktif, maka sistem akan menyalakan LED biru dan mengaktifkan buzzer sebagai peringatan suara.

Ketika kedua sensor mendeteksi sesuatu secara bersamaan, baik sensor PIR maupun sensor sentuh aktif, maka LED merah dan LED biru akan menyala bersamaan, sementara buzzer berbunyi sebagai peringatan lebih lanjut. Mikrokontroler membaca status sensor melalui port GPIOB, kemudian mengontrol LED RGB dan buzzer melalui port GPIOA dan GPIOB. Sebelum mengevaluasi kondisi sensor, sistem terlebih dahulu mematikan semua output untuk menghindari kesalahan pembacaan. Setelah itu, berdasarkan kondisi sensor yang terbaca, sistem menyalakan output yang sesuai. Untuk menghindari pembacaan berulang yang tidak diinginkan, diberikan jeda waktu sekitar 100 milidetik setiap siklus pemrosesan.

4. Flowchart dan Listing Program[Kembali] 


Flowchart:






Listing Program:
#include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

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

    while (1) {
        uint8_t pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin);
        uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);

        // Matikan semua LED dan buzzer terlebih dahulu
        HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin | BUZZER_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_RESET);

        if (pir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_RESET) {
            HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // LED merah menyala
            HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_RESET); // Buzzer mati
        } else if (touch_status == GPIO_PIN_SET && pir_status == GPIO_PIN_RESET) {
            HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_SET); // LED biru menyala
            HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); // Buzzer aktif
        } else if (pir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_SET) {
            HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // LED merah menyala
            HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_SET); // LED biru menyala
            HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); // Buzzer aktif
        }

        HAL_Delay(100);
    }
}

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;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        Error_Handler();
    }

    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;

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

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

    __HAL_RCC_GPIOD_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();

    HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin | BUZZER_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_RESET);

    // Konfigurasi output untuk LED merah, hijau, dan buzzer di GPIOA
    GPIO_InitStruct.Pin = RED_Pin | GREEN_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(GPIOA, &GPIO_InitStruct);

    // Konfigurasi output untuk LED biru di GPIOB
    GPIO_InitStruct.Pin = BLUE_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);

    // Konfigurasi input untuk sensor PIR dan touch di GPIOB
    GPIO_InitStruct.Pin = PIR_Pin | TOUCH_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

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

#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line) {
}
#endif

5. Kondisi[Kembali]
Percobaan 8 Kondisi 1
Buatlah rangkaian seperti gambar pada percobaan 8 dengan kondisi ketika PIR mendeteksi gerakan maka LED RGB menampilkan warna merah serta buzzer mati dan ketika Touch mendeteksi sentuhan LED RGB akan menampilkan warna biru serta buzzer aktif


6. Video Simulasi[Kembali]






7. Download File[Kembali]

Rangkaian [download]
Video simulasi [download]
Datasheet Resistor [Download]
Datasheet LED [Download]
Datasheet STM32F1038 [download]



Posting Komentar

Lebih baru Lebih lama